From d3c93668a6839d0a10a24a08f94cb937d1da868f Mon Sep 17 00:00:00 2001 From: MM Date: Thu, 23 Apr 2015 14:52:19 +0300 Subject: [PATCH 1/9] BPI 46 - Add methods and classes documentation. --- Bpi/Sdk/Authorization.php | 6 ++++++ Bpi/Sdk/Bpi.php | 7 ++++++- Bpi/Sdk/Document.php | 5 +++++ Bpi/Sdk/Exception/EmptyList.php | 5 +++++ Bpi/Sdk/Exception/HTTP/ClientError.php | 6 ++++++ Bpi/Sdk/Exception/HTTP/Error.php | 6 ++++++ Bpi/Sdk/Exception/HTTP/ServerError.php | 6 ++++++ Bpi/Sdk/Exception/InvalidQueryParameter.php | 6 ++++++ Bpi/Sdk/Exception/SDKException.php | 6 ++++++ Bpi/Sdk/Exception/UndefinedHypermedia.php | 6 ++++++ Bpi/Sdk/Item/BaseItem.php | 5 +++++ Bpi/Sdk/Link.php | 6 ++++++ Bpi/Sdk/NodeList.php | 6 ++++++ Bpi/Sdk/Query.php | 6 ++++++ Bpi/Sdk/ResponseStatus.php | 7 ++++++- Bpi/Sdk/Template.php | 5 +++++ Bpi/Sdk/Template/Field.php | 5 +++++ 17 files changed, 97 insertions(+), 2 deletions(-) diff --git a/Bpi/Sdk/Authorization.php b/Bpi/Sdk/Authorization.php index 7a81912..e815344 100644 --- a/Bpi/Sdk/Authorization.php +++ b/Bpi/Sdk/Authorization.php @@ -1,6 +1,12 @@ Date: Fri, 24 Apr 2015 17:12:53 +0300 Subject: [PATCH 2/9] BPI 44 - Unpin goutte from 1.0.1 version, remove doctrine/common. --- composer.json | 3 +- composer.lock | 278 ++-- vendor/autoload.php | 2 +- vendor/composer/ClassLoader.php | 257 +++- vendor/composer/autoload_classmap.php | 2 +- vendor/composer/autoload_namespaces.php | 23 +- vendor/composer/autoload_psr4.php | 9 + vendor/composer/autoload_real.php | 17 +- vendor/composer/installed.json | 355 +++-- vendor/doctrine/common/.gitignore | 4 - vendor/doctrine/common/.gitmodules | 3 - vendor/doctrine/common/.travis.yml | 10 - vendor/doctrine/common/LICENSE | 19 - vendor/doctrine/common/README.md | 12 - vendor/doctrine/common/UPGRADE_TO_2_1 | 39 - vendor/doctrine/common/UPGRADE_TO_2_2 | 61 - vendor/doctrine/common/bin/travis-setup.php | 141 -- vendor/doctrine/common/build.properties | 6 - vendor/doctrine/common/build.xml | 59 - vendor/doctrine/common/composer.json | 26 - .../Common/Annotations/Annotation.php | 79 -- .../Annotations/Annotation/Attribute.php | 47 - .../Annotations/Annotation/Attributes.php | 37 - .../Annotation/IgnoreAnnotation.php | 54 - .../Annotations/Annotation/Required.php | 33 - .../Common/Annotations/Annotation/Target.php | 107 -- .../Annotations/AnnotationException.php | 127 -- .../Common/Annotations/AnnotationReader.php | 310 ----- .../Common/Annotations/AnnotationRegistry.php | 139 -- .../Common/Annotations/CachedReader.php | 250 ---- .../Doctrine/Common/Annotations/DocLexer.php | 132 -- .../Doctrine/Common/Annotations/DocParser.php | 988 -------------- .../Common/Annotations/FileCacheReader.php | 258 ---- .../Common/Annotations/IndexedReader.php | 141 -- .../Doctrine/Common/Annotations/PhpParser.php | 80 -- .../Doctrine/Common/Annotations/Reader.php | 67 - .../Annotations/SimpleAnnotationReader.php | 157 --- .../Common/Annotations/TokenParser.php | 175 --- .../lib/Doctrine/Common/Cache/ApcCache.php | 93 -- .../lib/Doctrine/Common/Cache/ArrayCache.php | 96 -- .../lib/Doctrine/Common/Cache/Cache.php | 102 -- .../Doctrine/Common/Cache/CacheProvider.php | 231 ---- .../lib/Doctrine/Common/Cache/FileCache.php | 132 -- .../Doctrine/Common/Cache/FilesystemCache.php | 114 -- .../Doctrine/Common/Cache/MemcacheCache.php | 121 -- .../Doctrine/Common/Cache/MemcachedCache.php | 124 -- .../Doctrine/Common/Cache/PhpFileCache.php | 108 -- .../lib/Doctrine/Common/Cache/RedisCache.php | 119 -- .../Doctrine/Common/Cache/WinCacheCache.php | 93 -- .../lib/Doctrine/Common/Cache/XcacheCache.php | 110 -- .../Doctrine/Common/Cache/ZendDataCache.php | 84 -- .../lib/Doctrine/Common/ClassLoader.php | 263 ---- .../Common/Collections/ArrayCollection.php | 500 ------- .../Common/Collections/Collection.php | 243 ---- .../Doctrine/Common/Collections/Criteria.php | 240 ---- .../Expr/ClosureExpressionVisitor.php | 195 --- .../Common/Collections/Expr/Comparison.php | 75 - .../Collections/Expr/CompositeExpression.php | 72 - .../Common/Collections/Expr/Expression.php | 31 - .../Collections/Expr/ExpressionVisitor.php | 81 -- .../Common/Collections/Expr/Value.php | 41 - .../Common/Collections/ExpressionBuilder.php | 149 -- .../Common/Collections/Selectable.php | 48 - .../lib/Doctrine/Common/CommonException.php | 28 - .../common/lib/Doctrine/Common/Comparable.php | 49 - .../common/lib/Doctrine/Common/EventArgs.php | 67 - .../lib/Doctrine/Common/EventManager.php | 147 -- .../lib/Doctrine/Common/EventSubscriber.php | 45 - .../common/lib/Doctrine/Common/Lexer.php | 266 ---- .../Doctrine/Common/NotifyPropertyChanged.php | 45 - .../Persistence/AbstractManagerRegistry.php | 259 ---- .../Common/Persistence/ConnectionRegistry.php | 63 - .../Persistence/Event/LifecycleEventArgs.php | 77 -- .../Event/LoadClassMetadataEventArgs.php | 76 -- .../Persistence/Event/ManagerEventArgs.php | 59 - .../Persistence/Event/OnClearEventArgs.php | 84 -- .../Persistence/Event/PreUpdateEventArgs.php | 133 -- .../Common/Persistence/ManagerRegistry.php | 112 -- .../Mapping/AbstractClassMetadataFactory.php | 383 ------ .../Persistence/Mapping/ClassMetadata.php | 165 --- .../Mapping/ClassMetadataFactory.php | 74 - .../Mapping/Driver/AnnotationDriver.php | 214 --- .../Mapping/Driver/DefaultFileLocator.php | 170 --- .../Persistence/Mapping/Driver/FileDriver.php | 214 --- .../Mapping/Driver/FileLocator.php | 71 - .../Mapping/Driver/MappingDriver.php | 56 - .../Mapping/Driver/MappingDriverChain.php | 168 --- .../Persistence/Mapping/Driver/PHPDriver.php | 72 - .../Mapping/Driver/StaticPHPDriver.php | 141 -- .../Mapping/Driver/SymfonyFileLocator.php | 214 --- .../Persistence/Mapping/MappingException.php | 86 -- .../Persistence/Mapping/ReflectionService.php | 80 -- .../Mapping/RuntimeReflectionService.php | 102 -- .../Mapping/StaticReflectionService.php | 107 -- .../Common/Persistence/ObjectManager.php | 152 --- .../Common/Persistence/ObjectManagerAware.php | 49 - .../Common/Persistence/ObjectRepository.php | 78 -- .../Common/Persistence/PersistentObject.php | 244 ---- .../lib/Doctrine/Common/Persistence/Proxy.php | 60 - .../Common/PropertyChangedListener.php | 48 - .../Reflection/ClassFinderInterface.php | 38 - .../Common/Reflection/Psr0FindFile.php | 83 -- .../ReflectionProviderInterface.php | 45 - .../Reflection/StaticReflectionClass.php | 112 -- .../Reflection/StaticReflectionMethod.php | 103 -- .../Reflection/StaticReflectionParser.php | 282 ---- .../Reflection/StaticReflectionProperty.php | 77 -- .../lib/Doctrine/Common/Util/ClassUtils.php | 103 -- .../common/lib/Doctrine/Common/Util/Debug.php | 135 -- .../lib/Doctrine/Common/Util/Inflector.php | 72 - .../common/lib/Doctrine/Common/Version.php | 55 - vendor/doctrine/common/phpunit.xml.dist | 31 - vendor/doctrine/common/tests/.gitignore | 3 - .../Common/Annotations/AbstractReaderTest.php | 517 ------- .../Annotations/AnnotationReaderTest.php | 13 - .../Common/Annotations/CachedReaderTest.php | 56 - .../Tests/Common/Annotations/DocLexerTest.php | 137 -- .../Common/Annotations/DocParserTest.php | 1208 ----------------- .../Tests/Common/Annotations/DummyClass.php | 48 - .../Annotations/FileCacheReaderTest.php | 40 - .../Annotation/AnnotWithDefaultValue.php | 10 - .../Fixtures/Annotation/Autoload.php | 10 - .../Annotations/Fixtures/Annotation/Route.php | 11 - .../Fixtures/Annotation/Secure.php | 18 - .../Fixtures/Annotation/Template.php | 14 - .../Fixtures/Annotation/Version.php | 11 - .../Fixtures/AnnotationTargetAll.php | 14 - .../Fixtures/AnnotationTargetAnnotation.php | 14 - .../Fixtures/AnnotationTargetClass.php | 15 - .../Fixtures/AnnotationTargetMethod.php | 15 - .../AnnotationTargetPropertyMethod.php | 14 - .../Fixtures/AnnotationWithAttributes.php | 119 -- .../Fixtures/AnnotationWithConstants.php | 20 - .../AnnotationWithRequiredAttributes.php | 50 - ...ithRequiredAttributesWithoutContructor.php | 24 - .../AnnotationWithTargetSyntaxError.php | 11 - .../Fixtures/AnnotationWithVarType.php | 62 - .../Annotations/Fixtures/ClassDDC1660.php | 30 - ...assWithAnnotationWithTargetSyntaxError.php | 21 - .../ClassWithAnnotationWithVarType.php | 31 - .../Annotations/Fixtures/ClassWithClosure.php | 52 - .../Fixtures/ClassWithConstants.php | 10 - .../ClassWithFullyQualifiedUseStatements.php | 11 - ...lassWithInvalidAnnotationTargetAtClass.php | 17 - ...assWithInvalidAnnotationTargetAtMethod.php | 20 - ...sWithInvalidAnnotationTargetAtProperty.php | 24 - .../ClassWithValidAnnotationTarget.php | 41 - .../Annotations/Fixtures/Controller.php | 300 ---- ...erentNamespacesPerFileWithClassAsFirst.php | 15 - ...ferentNamespacesPerFileWithClassAsLast.php | 15 - ...EqualNamespacesPerFileWithClassAsFirst.php | 13 - .../EqualNamespacesPerFileWithClassAsLast.php | 12 - ...lobalNamespacesPerFileWithClassAsFirst.php | 12 - ...GlobalNamespacesPerFileWithClassAsLast.php | 12 - .../Fixtures/IntefaceWithConstants.php | 10 - .../InvalidAnnotationUsageButIgnoredClass.php | 14 - .../Fixtures/InvalidAnnotationUsageClass.php | 10 - .../Fixtures/MultipleClassesInFile.php | 9 - .../MultipleImportsInUseStatement.php | 10 - .../NamespaceAndClassCommentedOut.php | 20 - .../NamespaceWithClosureDeclaration.php | 15 - .../Fixtures/NamespacedSingleClassLOC1000.php | 1009 -------------- .../Annotations/Fixtures/NoAnnotation.php | 5 - .../Fixtures/NonNamespacedClass.php | 10 - .../Fixtures/SingleClassLOC1000.php | 1006 -------------- .../Annotations/Fixtures/TestInterface.php | 13 - .../Common/Annotations/PerformanceTest.php | 194 --- .../Common/Annotations/PhpParserTest.php | 194 --- .../SimpleAnnotationReaderTest.php | 97 -- .../Common/Annotations/Ticket/DCOM55Test.php | 65 - .../Annotations/Ticket/DCOM58Entity.php | 8 - .../Common/Annotations/Ticket/DCOM58Test.php | 112 -- .../Common/Annotations/TopLevelAnnotation.php | 8 - .../Tests/Common/Cache/ApcCacheTest.php | 20 - .../Tests/Common/Cache/ArrayCacheTest.php | 21 - .../Doctrine/Tests/Common/Cache/CacheTest.php | 91 -- .../Common/Cache/FilesystemCacheTest.php | 97 -- .../Tests/Common/Cache/MemcacheCacheTest.php | 45 - .../Tests/Common/Cache/MemcachedCacheTest.php | 48 - .../Tests/Common/Cache/PhpFileCacheTest.php | 149 -- .../Tests/Common/Cache/RedisCacheTest.php | 30 - .../Tests/Common/Cache/WinCacheCacheTest.php | 20 - .../Tests/Common/Cache/XcacheCacheTest.php | 20 - .../Tests/Common/Cache/ZendDataCacheTest.php | 28 - .../Doctrine/Tests/Common/ClassLoaderTest.php | 45 - .../Common/ClassLoaderTest/ClassA.class.php | 6 - .../Common/ClassLoaderTest/ClassB.class.php | 6 - .../Common/ClassLoaderTest/ClassC.class.php | 6 - .../Tests/Common/ClassLoaderTest/ClassD.php | 5 - .../ClosureExpressionVisitorTest.php | 198 --- .../Common/Collections/CollectionTest.php | 251 ---- .../Tests/Common/Collections/CriteriaTest.php | 82 -- .../Collections/ExpressionBuilderTest.php | 114 -- .../Tests/Common/EventManagerTest.php | 88 -- .../Persistence/Mapping/ChainDriverTest.php | 130 -- .../Mapping/ClassMetadataFactoryTest.php | 139 -- .../Mapping/DefaultFileLocatorTest.php | 90 -- .../Persistence/Mapping/FileDriverTest.php | 142 -- .../Persistence/Mapping/PHPDriverTest.php | 18 - .../Mapping/RuntimeReflectionServiceTest.php | 70 - .../Mapping/StaticPHPDriverTest.php | 35 - .../Mapping/StaticReflectionServiceTest.php | 70 - .../Mapping/SymfonyFileLocatorTest.php | 88 -- .../Persistence/Mapping/_files/TestEntity.php | 3 - .../Persistence/Mapping/_files/global.yml | 1 - .../Persistence/Mapping/_files/stdClass.yml | 1 - .../Persistence/PersistentObjectTest.php | 247 ---- .../Reflection/DeeperNamespaceParent.php | 7 - .../Common/Reflection/Dummies/NoParent.php | 8 - .../Reflection/FullyClassifiedParent.php | 7 - .../Tests/Common/Reflection/NoParent.php | 8 - .../Common/Reflection/SameNamespaceParent.php | 7 - .../Reflection/StaticReflectionParserTest.php | 45 - .../Tests/Common/Reflection/UseParent.php | 9 - .../Tests/Common/Util/ClassUtilsTest.php | 100 -- .../Doctrine/Tests/Common/Util/DebugTest.php | 27 - .../tests/Doctrine/Tests/DoctrineTestCase.php | 10 - .../common/tests/Doctrine/Tests/TestInit.php | 31 - .../common/tests/NativePhpunitTask.php | 246 ---- vendor/doctrine/common/tests/README.markdown | 27 - vendor/fabpot/goutte/.gitignore | 2 +- vendor/fabpot/goutte/.travis.yml | 18 +- vendor/fabpot/goutte/CHANGELOG | 7 - vendor/fabpot/goutte/Goutte/Client.php | 24 +- vendor/fabpot/goutte/Goutte/Compiler.php | 93 -- .../goutte/Goutte/Resources/phar-stub.php | 14 + .../fabpot/goutte/Goutte/Tests/ClientTest.php | 42 +- vendor/fabpot/goutte/README.md | 83 -- vendor/fabpot/goutte/README.rst | 105 ++ vendor/fabpot/goutte/box.json | 21 + vendor/fabpot/goutte/compile | 9 - vendor/fabpot/goutte/composer.json | 6 +- vendor/fabpot/goutte/composer.lock | 418 ------ vendor/fabpot/goutte/goutte.phar | Bin 3625499 -> 0 bytes .../Symfony/Component/BrowserKit/.gitignore | 1 - .../Symfony/Component/BrowserKit/CHANGELOG.md | 10 + .../Symfony/Component/BrowserKit/Client.php | 235 +++- .../Symfony/Component/BrowserKit/Cookie.php | 73 +- .../Component/BrowserKit/CookieJar.php | 66 +- .../Symfony/Component/BrowserKit/History.php | 10 +- .../Symfony/Component/BrowserKit/LICENSE | 2 +- .../Symfony/Component/BrowserKit/README.md | 2 +- .../Symfony/Component/BrowserKit/Response.php | 17 +- .../Component/BrowserKit/Tests/ClientTest.php | 254 +++- .../BrowserKit/Tests/CookieJarTest.php | 33 + .../Component/BrowserKit/Tests/CookieTest.php | 26 +- .../BrowserKit/Tests/ResponseTest.php | 10 +- .../Component/BrowserKit/composer.json | 11 +- .../Component/BrowserKit/phpunit.xml.dist | 14 +- .../Symfony/Component/CssSelector/.gitignore | 1 - .../Component/CssSelector/CssSelector.php | 324 +---- .../Exception/ExceptionInterface.php | 24 + .../Exception/ExpressionErrorException.php | 24 + .../Exception/InternalErrorException.php | 24 + .../CssSelector/Exception/ParseException.php | 6 +- .../Exception/SyntaxErrorException.php | 73 + .../Symfony/Component/CssSelector/LICENSE | 2 +- .../CssSelector/Node/AbstractNode.php | 40 + .../Component/CssSelector/Node/AttribNode.php | 131 -- .../CssSelector/Node/AttributeNode.php | 124 ++ .../Component/CssSelector/Node/ClassNode.php | 62 +- .../CssSelector/Node/CombinedSelectorNode.php | 126 +- .../CssSelector/Node/ElementNode.php | 68 +- .../CssSelector/Node/FunctionNode.php | 268 +--- .../Component/CssSelector/Node/HashNode.php | 60 +- .../CssSelector/Node/NegationNode.php | 75 + .../CssSelector/Node/NodeInterface.php | 27 +- .../Component/CssSelector/Node/OrNode.php | 61 - .../Component/CssSelector/Node/PseudoNode.php | 208 +-- .../CssSelector/Node/SelectorNode.php | 75 + .../CssSelector/Node/Specificity.php | 103 ++ .../Parser/Handler/CommentHandler.php | 46 + .../Parser/Handler/HandlerInterface.php | 34 + .../Parser/Handler/HashHandler.php | 67 + .../Parser/Handler/IdentifierHandler.php | 67 + .../Parser/Handler/NumberHandler.php | 58 + .../Parser/Handler/StringHandler.php | 86 ++ .../Parser/Handler/WhitespaceHandler.php | 44 + .../Component/CssSelector/Parser/Parser.php | 399 ++++++ .../CssSelector/Parser/ParserInterface.php | 34 + .../Component/CssSelector/Parser/Reader.php | 125 ++ .../Parser/Shortcut/ClassParser.php | 50 + .../Parser/Shortcut/ElementParser.php | 46 + .../Parser/Shortcut/EmptyStringParser.php | 44 + .../Parser/Shortcut/HashParser.php | 50 + .../Component/CssSelector/Parser/Token.php | 160 +++ .../CssSelector/Parser/TokenStream.php | 182 +++ .../Parser/Tokenizer/Tokenizer.php | 78 ++ .../Parser/Tokenizer/TokenizerEscaping.php | 82 ++ .../Parser/Tokenizer/TokenizerPatterns.php | 160 +++ .../Symfony/Component/CssSelector/README.md | 36 +- .../CssSelector/Tests/CssSelectorTest.php | 51 +- .../Tests/Node/AbstractNodeTest.php | 32 + .../CssSelector/Tests/Node/AttribNodeTest.php | 43 - .../Tests/Node/AttributeNodeTest.php | 37 + .../CssSelector/Tests/Node/ClassNodeTest.php | 18 +- .../Tests/Node/CombinedSelectorNodeTest.php | 27 +- .../Tests/Node/ElementNodeTest.php | 25 +- .../Tests/Node/FunctionNodeTest.php | 103 +- .../CssSelector/Tests/Node/HashNodeTest.php | 18 +- .../Tests/Node/NegationNodeTest.php | 33 + .../CssSelector/Tests/Node/OrNodeTest.php | 43 - .../CssSelector/Tests/Node/PseudoNodeTest.php | 47 +- .../Tests/Node/SelectorNodeTest.php | 34 + .../Tests/Node/SpecificityTest.php | 62 + .../Parser/Handler/AbstractHandlerTest.php | 67 + .../Parser/Handler/CommentHandlerTest.php | 55 + .../Tests/Parser/Handler/HashHandlerTest.php | 49 + .../Parser/Handler/IdentifierHandlerTest.php | 49 + .../Parser/Handler/NumberHandlerTest.php | 50 + .../Parser/Handler/StringHandlerTest.php | 50 + .../Parser/Handler/WhitespaceHandlerTest.php | 44 + .../CssSelector/Tests/Parser/ParserTest.php | 248 ++++ .../CssSelector/Tests/Parser/ReaderTest.php | 101 ++ .../Tests/Parser/Shortcut/ClassParserTest.php | 44 + .../Parser/Shortcut/ElementParserTest.php | 43 + .../Parser/Shortcut/EmptyStringParserTest.php | 35 + .../Tests/Parser/Shortcut/HashParserTest.php | 44 + .../Tests/Parser/TokenStreamTest.php | 95 ++ .../CssSelector/Tests/TokenizerTest.php | 72 - .../CssSelector/Tests/XPath/Fixtures/ids.html | 48 + .../CssSelector/Tests/XPath/Fixtures/lang.xml | 11 + .../Tests/XPath/Fixtures/shakespear.html | 308 +++++ .../Tests/XPath/TranslatorTest.php | 324 +++++ .../CssSelector/Tests/XPathExprTest.php | 35 - .../Symfony/Component/CssSelector/Token.php | 73 - .../Component/CssSelector/TokenStream.php | 105 -- .../Component/CssSelector/Tokenizer.php | 201 --- .../XPath/Extension/AbstractExtension.php | 63 + .../Extension/AttributeMatchingExtension.php | 173 +++ .../XPath/Extension/CombinationExtension.php | 93 ++ .../XPath/Extension/ExtensionInterface.php | 67 + .../XPath/Extension/FunctionExtension.php | 209 +++ .../XPath/Extension/HtmlExtension.php | 238 ++++ .../XPath/Extension/NodeExtension.php | 271 ++++ .../XPath/Extension/PseudoClassExtension.php | 162 +++ .../CssSelector/XPath/Translator.php | 299 ++++ .../CssSelector/XPath/TranslatorInterface.php | 45 + .../Component/CssSelector/XPath/XPathExpr.php | 140 ++ .../Component/CssSelector/XPathExpr.php | 254 ---- .../Component/CssSelector/XPathExprOr.php | 54 - .../Component/CssSelector/composer.json | 9 +- .../Component/CssSelector/phpunit.xml.dist | 14 +- .../Symfony/Component/DomCrawler/.gitignore | 1 - .../Symfony/Component/DomCrawler/CHANGELOG.md | 27 + .../Symfony/Component/DomCrawler/Crawler.php | 470 +++++-- .../DomCrawler/Field/ChoiceFormField.php | 78 +- .../DomCrawler/Field/FileFormField.php | 8 +- .../Component/DomCrawler/Field/FormField.php | 22 +- .../DomCrawler/Field/InputFormField.php | 6 +- .../DomCrawler/Field/TextareaFormField.php | 6 +- .../Symfony/Component/DomCrawler/Form.php | 191 ++- .../DomCrawler/FormFieldRegistry.php | 32 +- .../Symfony/Component/DomCrawler/LICENSE | 2 +- .../Symfony/Component/DomCrawler/Link.php | 102 +- .../Symfony/Component/DomCrawler/README.md | 22 +- .../DomCrawler/Tests/CrawlerTest.php | 486 ++++++- .../Tests/Field/ChoiceFormFieldTest.php | 71 +- .../Tests/Field/FileFormFieldTest.php | 1 - .../Tests/Field/TextareaFormFieldTest.php | 13 + .../Component/DomCrawler/Tests/FormTest.php | 300 +++- .../Component/DomCrawler/Tests/LinkTest.php | 37 + .../Component/DomCrawler/composer.json | 7 +- .../Component/DomCrawler/phpunit.xml.dist | 15 +- .../Component/EventDispatcher/.gitignore | 1 - .../Component/EventDispatcher/CHANGELOG.md | 7 + .../ContainerAwareEventDispatcher.php | 58 +- .../Debug/TraceableEventDispatcher.php | 320 +++++ .../TraceableEventDispatcherInterface.php | 4 +- .../EventDispatcher/Debug/WrappedListener.php | 71 + .../RegisterListenersPass.php | 110 ++ .../Component/EventDispatcher/Event.php | 27 +- .../EventDispatcher/EventDispatcher.php | 40 +- .../EventDispatcherInterface.php | 10 +- .../EventSubscriberInterface.php | 8 +- .../EventDispatcher/GenericEvent.php | 8 +- .../ImmutableEventDispatcher.php | 1 + .../Symfony/Component/EventDispatcher/LICENSE | 2 +- .../Component/EventDispatcher/README.md | 22 +- .../Tests/AbstractEventDispatcherTest.php | 369 +++++ .../ContainerAwareEventDispatcherTest.php | 18 +- .../Debug/TraceableEventDispatcherTest.php | 185 +++ .../RegisterListenersPassTest.php | 200 +++ .../Tests/EventDispatcherTest.php | 304 +---- .../EventDispatcher/Tests/EventTest.php | 28 +- .../Tests/GenericEventTest.php | 7 +- .../Tests/ImmutableEventDispatcherTest.php | 1 - .../Component/EventDispatcher/composer.json | 13 +- .../EventDispatcher/phpunit.xml.dist | 14 +- .../Symfony/Component/Finder/.gitignore | 1 - .../Finder/Adapter/AbstractAdapter.php | 43 +- .../Finder/Adapter/AbstractFindAdapter.php | 42 +- .../Finder/Adapter/AdapterInterface.php | 15 +- .../Finder/Adapter/BsdFindAdapter.php | 2 +- .../Finder/Adapter/GnuFindAdapter.php | 4 +- .../Component/Finder/Adapter/PhpAdapter.php | 2 +- .../Symfony/Component/Finder/CHANGELOG.md | 10 + .../Finder/Comparator/Comparator.php | 2 +- .../Finder/Comparator/DateComparator.php | 1 - .../Finder/Comparator/NumberComparator.php | 7 +- .../Exception/AccessDeniedException.php | 19 + .../Finder/Exception/ExceptionInterface.php | 9 + .../Finder/Expression/Expression.php | 4 +- .../Component/Finder/Expression/Regex.php | 18 +- .../Symfony/Component/Finder/Finder.php | 135 +- .../finder/Symfony/Component/Finder/Glob.php | 6 +- .../Finder/Iterator/CustomFilterIterator.php | 2 +- .../Iterator/DateRangeFilterIterator.php | 6 +- .../Iterator/DepthRangeFilterIterator.php | 8 +- .../ExcludeDirectoryFilterIterator.php | 5 +- .../Finder/Iterator/FilePathsIterator.php | 2 +- .../Iterator/FileTypeFilterIterator.php | 6 +- .../Iterator/FilecontentFilterIterator.php | 2 +- .../Iterator/FilenameFilterIterator.php | 3 +- .../Finder/Iterator/FilterIterator.php | 9 +- .../Iterator/MultiplePcreFilterIterator.php | 8 +- .../Finder/Iterator/PathFilterIterator.php | 7 +- .../Iterator/RecursiveDirectoryIterator.php | 91 +- .../Iterator/SizeRangeFilterIterator.php | 2 +- .../Finder/Iterator/SortableIterator.php | 12 +- .../finder/Symfony/Component/Finder/LICENSE | 2 +- .../finder/Symfony/Component/Finder/README.md | 50 +- .../Component/Finder/Shell/Command.php | 60 +- .../Symfony/Component/Finder/Shell/Shell.php | 22 +- .../Symfony/Component/Finder/SplFileInfo.php | 12 +- .../Tests/Comparator/DateComparatorTest.php | 1 - .../Tests/Comparator/NumberComparatorTest.php | 8 +- .../Tests/Expression/ExpressionTest.php | 2 +- .../Finder/Tests/Expression/GlobTest.php | 2 +- .../Finder/Tests/Expression/RegexTest.php | 6 +- .../Component/Finder/Tests/FinderTest.php | 147 +- .../Component/Finder/Tests/Fixtures/one/a} | 0 .../Finder/Tests/Fixtures/one/b/c.neon | 0 .../Finder/Tests/Fixtures/one/b/d.neon | 0 .../Fixtures/r+e.gex[c]a(r)s/dir/bar.dat | 0 .../Iterator/DateRangeFilterIteratorTest.php | 8 +- .../Iterator/DepthRangeFilterIteratorTest.php | 1 - .../ExcludeDirectoryFilterIteratorTest.php | 5 +- .../Tests/Iterator/FilePathsIteratorTest.php | 17 +- .../Iterator/FileTypeFilterIteratorTest.php | 2 +- .../FilecontentFilterIteratorTest.php | 27 +- .../Finder/Tests/Iterator/Iterator.php | 3 +- .../Tests/Iterator/IteratorTestCase.php | 62 + .../Tests/Iterator/MockFileListIterator.php | 2 +- .../Finder/Tests/Iterator/MockSplFileInfo.php | 28 +- .../Tests/Iterator/PathFilterIteratorTest.php | 26 +- .../Tests/Iterator/RealIteratorTestCase.php | 17 +- .../RecursiveDirectoryIteratorTest.php | 83 ++ .../Iterator/SizeRangeFilterIteratorTest.php | 2 +- .../Tests/Iterator/SortableIteratorTest.php | 82 +- .../Symfony/Component/Finder/composer.json | 5 +- .../Symfony/Component/Finder/phpunit.xml.dist | 14 +- .../Symfony/Component/Process/.gitignore | 1 - .../Symfony/Component/Process/CHANGELOG.md | 22 + .../Exception/ProcessFailedException.php | 18 +- .../Exception/ProcessTimedOutException.php | 69 + .../Component/Process/ExecutableFinder.php | 9 +- .../process/Symfony/Component/Process/LICENSE | 2 +- .../Component/Process/PhpExecutableFinder.php | 30 +- .../Symfony/Component/Process/PhpProcess.php | 24 +- .../Component/Process/Pipes/AbstractPipes.php | 74 + .../Process/Pipes/PipesInterface.php | 60 + .../Component/Process/Pipes/UnixPipes.php | 214 +++ .../Component/Process/Pipes/WindowsPipes.php | 254 ++++ .../Symfony/Component/Process/Process.php | 1068 ++++++++++----- .../Component/Process/ProcessBuilder.php | 169 ++- .../Component/Process/ProcessUtils.php | 111 ++ .../Symfony/Component/Process/README.md | 42 +- .../Process/Tests/AbstractProcessTest.php | 914 ++++++++++++- .../Process/Tests/ExecutableFinderTest.php | 149 ++ .../Process/Tests/NonStopableProcess.php | 36 + .../Process/Tests/PhpExecutableFinderTest.php | 47 +- .../Process/Tests/PhpProcessTest.php | 30 +- ...> PipeStdinInStdoutStdErrStreamSelect.php} | 28 +- .../Process/Tests/ProcessBuilderTest.php | 211 ++- .../Tests/ProcessFailedExceptionTest.php | 76 +- .../Process/Tests/ProcessUtilsTest.php | 48 + .../Tests/SigchildDisabledProcessTest.php | 166 ++- .../Tests/SigchildEnabledProcessTest.php | 86 +- .../Process/Tests/SignalListener.php | 16 + .../Process/Tests/SimpleProcessTest.php | 150 +- .../Symfony/Component/Process/composer.json | 5 +- .../Component/Process/phpunit.xml.dist | 14 +- 483 files changed, 15227 insertions(+), 26396 deletions(-) create mode 100644 vendor/composer/autoload_psr4.php delete mode 100644 vendor/doctrine/common/.gitignore delete mode 100644 vendor/doctrine/common/.gitmodules delete mode 100644 vendor/doctrine/common/.travis.yml delete mode 100644 vendor/doctrine/common/LICENSE delete mode 100644 vendor/doctrine/common/README.md delete mode 100644 vendor/doctrine/common/UPGRADE_TO_2_1 delete mode 100644 vendor/doctrine/common/UPGRADE_TO_2_2 delete mode 100644 vendor/doctrine/common/bin/travis-setup.php delete mode 100644 vendor/doctrine/common/build.properties delete mode 100644 vendor/doctrine/common/build.xml delete mode 100644 vendor/doctrine/common/composer.json delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation/Attribute.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation/Attributes.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation/Required.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation/Target.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Annotations/AnnotationException.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Annotations/AnnotationReader.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Annotations/AnnotationRegistry.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Annotations/CachedReader.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Annotations/DocLexer.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Annotations/DocParser.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Annotations/FileCacheReader.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Annotations/IndexedReader.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Annotations/PhpParser.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Annotations/Reader.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Annotations/TokenParser.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Cache/ApcCache.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Cache/ArrayCache.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Cache/Cache.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Cache/CacheProvider.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Cache/FileCache.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Cache/FilesystemCache.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Cache/MemcacheCache.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Cache/MemcachedCache.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Cache/PhpFileCache.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Cache/RedisCache.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Cache/WinCacheCache.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Cache/XcacheCache.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Cache/ZendDataCache.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/ClassLoader.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Collections/ArrayCollection.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Collections/Collection.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Collections/Criteria.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/ClosureExpressionVisitor.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/Comparison.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/CompositeExpression.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/Expression.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/ExpressionVisitor.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/Value.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Collections/ExpressionBuilder.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Collections/Selectable.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/CommonException.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Comparable.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/EventArgs.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/EventManager.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/EventSubscriber.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Lexer.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/NotifyPropertyChanged.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/AbstractManagerRegistry.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/ConnectionRegistry.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Event/LifecycleEventArgs.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Event/LoadClassMetadataEventArgs.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Event/ManagerEventArgs.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Event/OnClearEventArgs.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Event/PreUpdateEventArgs.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/ManagerRegistry.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/ClassMetadata.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/ClassMetadataFactory.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/AnnotationDriver.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/DefaultFileLocator.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/FileDriver.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/FileLocator.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/MappingDriver.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/MappingDriverChain.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/PHPDriver.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/StaticPHPDriver.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/SymfonyFileLocator.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/MappingException.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/ReflectionService.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/RuntimeReflectionService.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/StaticReflectionService.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/ObjectManager.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/ObjectManagerAware.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/ObjectRepository.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/PersistentObject.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Persistence/Proxy.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/PropertyChangedListener.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Reflection/ClassFinderInterface.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Reflection/Psr0FindFile.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Reflection/ReflectionProviderInterface.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Reflection/StaticReflectionClass.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Reflection/StaticReflectionMethod.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Reflection/StaticReflectionParser.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Reflection/StaticReflectionProperty.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Util/ClassUtils.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Util/Debug.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Util/Inflector.php delete mode 100644 vendor/doctrine/common/lib/Doctrine/Common/Version.php delete mode 100644 vendor/doctrine/common/phpunit.xml.dist delete mode 100644 vendor/doctrine/common/tests/.gitignore delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/AbstractReaderTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/AnnotationReaderTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/CachedReaderTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/DocLexerTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/DocParserTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/DummyClass.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/FileCacheReaderTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/Annotation/AnnotWithDefaultValue.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/Annotation/Autoload.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/Annotation/Route.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/Annotation/Secure.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/Annotation/Template.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/Annotation/Version.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/AnnotationTargetAll.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/AnnotationTargetAnnotation.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/AnnotationTargetClass.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/AnnotationTargetMethod.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/AnnotationTargetPropertyMethod.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/AnnotationWithAttributes.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/AnnotationWithConstants.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/AnnotationWithRequiredAttributes.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/AnnotationWithRequiredAttributesWithoutContructor.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/AnnotationWithTargetSyntaxError.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/AnnotationWithVarType.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/ClassDDC1660.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/ClassWithAnnotationWithTargetSyntaxError.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/ClassWithAnnotationWithVarType.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/ClassWithClosure.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/ClassWithConstants.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/ClassWithFullyQualifiedUseStatements.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/ClassWithInvalidAnnotationTargetAtClass.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/ClassWithInvalidAnnotationTargetAtMethod.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/ClassWithInvalidAnnotationTargetAtProperty.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/ClassWithValidAnnotationTarget.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/Controller.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/DifferentNamespacesPerFileWithClassAsFirst.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/DifferentNamespacesPerFileWithClassAsLast.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/EqualNamespacesPerFileWithClassAsFirst.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/EqualNamespacesPerFileWithClassAsLast.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/GlobalNamespacesPerFileWithClassAsFirst.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/GlobalNamespacesPerFileWithClassAsLast.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/IntefaceWithConstants.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/InvalidAnnotationUsageButIgnoredClass.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/InvalidAnnotationUsageClass.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/MultipleClassesInFile.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/MultipleImportsInUseStatement.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/NamespaceAndClassCommentedOut.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/NamespaceWithClosureDeclaration.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/NamespacedSingleClassLOC1000.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/NoAnnotation.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/NonNamespacedClass.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/SingleClassLOC1000.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/TestInterface.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/PerformanceTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/PhpParserTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/SimpleAnnotationReaderTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Ticket/DCOM55Test.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Ticket/DCOM58Entity.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Ticket/DCOM58Test.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/TopLevelAnnotation.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/ApcCacheTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/ArrayCacheTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/CacheTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/FilesystemCacheTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/MemcacheCacheTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/MemcachedCacheTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/PhpFileCacheTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/RedisCacheTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/WinCacheCacheTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/XcacheCacheTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/ZendDataCacheTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/ClassLoaderTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/ClassLoaderTest/ClassA.class.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/ClassLoaderTest/ClassB.class.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/ClassLoaderTest/ClassC.class.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/ClassLoaderTest/ClassD.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Collections/ClosureExpressionVisitorTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Collections/CollectionTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Collections/CriteriaTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Collections/ExpressionBuilderTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/EventManagerTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/ChainDriverTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/ClassMetadataFactoryTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/DefaultFileLocatorTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/FileDriverTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/PHPDriverTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/RuntimeReflectionServiceTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/StaticPHPDriverTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/StaticReflectionServiceTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/SymfonyFileLocatorTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/_files/TestEntity.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/_files/global.yml delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/_files/stdClass.yml delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/PersistentObjectTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Reflection/DeeperNamespaceParent.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Reflection/Dummies/NoParent.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Reflection/FullyClassifiedParent.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Reflection/NoParent.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Reflection/SameNamespaceParent.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Reflection/StaticReflectionParserTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Reflection/UseParent.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Util/ClassUtilsTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/Common/Util/DebugTest.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/DoctrineTestCase.php delete mode 100644 vendor/doctrine/common/tests/Doctrine/Tests/TestInit.php delete mode 100644 vendor/doctrine/common/tests/NativePhpunitTask.php delete mode 100644 vendor/doctrine/common/tests/README.markdown delete mode 100644 vendor/fabpot/goutte/CHANGELOG delete mode 100644 vendor/fabpot/goutte/Goutte/Compiler.php create mode 100644 vendor/fabpot/goutte/Goutte/Resources/phar-stub.php delete mode 100644 vendor/fabpot/goutte/README.md create mode 100644 vendor/fabpot/goutte/README.rst create mode 100644 vendor/fabpot/goutte/box.json delete mode 100755 vendor/fabpot/goutte/compile delete mode 100644 vendor/fabpot/goutte/composer.lock delete mode 100644 vendor/fabpot/goutte/goutte.phar create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/ExceptionInterface.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/ExpressionErrorException.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/InternalErrorException.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Exception/SyntaxErrorException.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/AbstractNode.php delete mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/AttribNode.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/AttributeNode.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/NegationNode.php delete mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/OrNode.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/SelectorNode.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/Specificity.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/CommentHandler.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/HandlerInterface.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/HashHandler.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/IdentifierHandler.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/NumberHandler.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/StringHandler.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Handler/WhitespaceHandler.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Parser.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/ParserInterface.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Reader.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Shortcut/ClassParser.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Shortcut/ElementParser.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Shortcut/EmptyStringParser.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Shortcut/HashParser.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Token.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/TokenStream.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Tokenizer/Tokenizer.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Tokenizer/TokenizerEscaping.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Tokenizer/TokenizerPatterns.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/AbstractNodeTest.php delete mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/AttribNodeTest.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/AttributeNodeTest.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/NegationNodeTest.php delete mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/OrNodeTest.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/SelectorNodeTest.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/SpecificityTest.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/AbstractHandlerTest.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/CommentHandlerTest.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/HashHandlerTest.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/IdentifierHandlerTest.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/NumberHandlerTest.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/StringHandlerTest.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Handler/WhitespaceHandlerTest.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/ParserTest.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/ReaderTest.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Shortcut/ClassParserTest.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Shortcut/ElementParserTest.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Shortcut/EmptyStringParserTest.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/Shortcut/HashParserTest.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Parser/TokenStreamTest.php delete mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/TokenizerTest.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/XPath/Fixtures/ids.html create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/XPath/Fixtures/lang.xml create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/XPath/Fixtures/shakespear.html create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/XPath/TranslatorTest.php delete mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/XPathExprTest.php delete mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Token.php delete mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/TokenStream.php delete mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/Tokenizer.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/AbstractExtension.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/AttributeMatchingExtension.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/CombinationExtension.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/ExtensionInterface.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/FunctionExtension.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/HtmlExtension.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/NodeExtension.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/PseudoClassExtension.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Translator.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/TranslatorInterface.php create mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/XPathExpr.php delete mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/XPathExpr.php delete mode 100644 vendor/symfony/css-selector/Symfony/Component/CssSelector/XPathExprOr.php create mode 100644 vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcher.php create mode 100644 vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Debug/WrappedListener.php create mode 100644 vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/DependencyInjection/RegisterListenersPass.php create mode 100644 vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/AbstractEventDispatcherTest.php create mode 100644 vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/Debug/TraceableEventDispatcherTest.php create mode 100644 vendor/symfony/event-dispatcher/Symfony/Component/EventDispatcher/Tests/DependencyInjection/RegisterListenersPassTest.php create mode 100644 vendor/symfony/finder/Symfony/Component/Finder/Exception/AccessDeniedException.php rename vendor/{doctrine/common/tests/Doctrine/Tests/Common/DoctrineExceptionTest.php => symfony/finder/Symfony/Component/Finder/Tests/Fixtures/one/a} (100%) create mode 100644 vendor/symfony/finder/Symfony/Component/Finder/Tests/Fixtures/one/b/c.neon create mode 100644 vendor/symfony/finder/Symfony/Component/Finder/Tests/Fixtures/one/b/d.neon create mode 100644 vendor/symfony/finder/Symfony/Component/Finder/Tests/Fixtures/r+e.gex[c]a(r)s/dir/bar.dat create mode 100644 vendor/symfony/finder/Symfony/Component/Finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php create mode 100644 vendor/symfony/process/Symfony/Component/Process/Exception/ProcessTimedOutException.php create mode 100644 vendor/symfony/process/Symfony/Component/Process/Pipes/AbstractPipes.php create mode 100644 vendor/symfony/process/Symfony/Component/Process/Pipes/PipesInterface.php create mode 100644 vendor/symfony/process/Symfony/Component/Process/Pipes/UnixPipes.php create mode 100644 vendor/symfony/process/Symfony/Component/Process/Pipes/WindowsPipes.php create mode 100644 vendor/symfony/process/Symfony/Component/Process/ProcessUtils.php create mode 100644 vendor/symfony/process/Symfony/Component/Process/Tests/ExecutableFinderTest.php create mode 100644 vendor/symfony/process/Symfony/Component/Process/Tests/NonStopableProcess.php rename vendor/symfony/process/Symfony/Component/Process/Tests/{ProcessTestHelper.php => PipeStdinInStdoutStdErrStreamSelect.php} (66%) create mode 100644 vendor/symfony/process/Symfony/Component/Process/Tests/ProcessUtilsTest.php create mode 100644 vendor/symfony/process/Symfony/Component/Process/Tests/SignalListener.php diff --git a/composer.json b/composer.json index c6b4aa7..7c948a7 100644 --- a/composer.json +++ b/composer.json @@ -16,8 +16,7 @@ ], "require": { "php": ">=5.3.3", - "doctrine/common": "2.3.0", - "fabpot/goutte": "v1.0.1" + "fabpot/goutte": "~1.0" }, "autoload": { "psr-0": { "Bpi\\Sdk": "." } diff --git a/composer.lock b/composer.lock index 9cb2ff3..647dc15 100644 --- a/composer.lock +++ b/composer.lock @@ -1,102 +1,38 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file" + "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" ], - "hash": "77929a51afeb1f8effeaa7bb2599d390", + "hash": "db7248ebf602bb17915c700c79f719ec", "packages": [ - { - "name": "doctrine/common", - "version": "2.3.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/common", - "reference": "2.3.0" - }, - "dist": { - "type": "zip", - "url": "https://github.com/doctrine/common/zipball/2.3.0", - "reference": "2.3.0", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Common": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" - } - ], - "description": "Common Library for Doctrine projects", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "annotations", - "collections", - "eventmanager", - "persistence", - "spl" - ], - "time": "2012-09-19 22:55:18" - }, { "name": "fabpot/goutte", - "version": "v1.0.1", + "version": "v1.0.7", "source": { "type": "git", - "url": "https://github.com/fabpot/Goutte.git", - "reference": "v1.0.1" + "url": "https://github.com/FriendsOfPHP/Goutte.git", + "reference": "794b196e76bdd37b5155cdecbad311f0a3b07625" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fabpot/Goutte/zipball/v1.0.1", - "reference": "v1.0.1", + "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/794b196e76bdd37b5155cdecbad311f0a3b07625", + "reference": "794b196e76bdd37b5155cdecbad311f0a3b07625", "shasum": "" }, "require": { "ext-curl": "*", - "guzzle/guzzle": ">=3.0, <3.4", + "guzzle/http": "~3.1", "php": ">=5.3.0", - "symfony/browser-kit": ">=2.1,<3.0", - "symfony/css-selector": ">=2.1,<3.0", - "symfony/dom-crawler": ">=2.1,<3.0", - "symfony/finder": ">=2.1,<3.0", - "symfony/process": ">=2.1,<3.0" + "symfony/browser-kit": "~2.1", + "symfony/css-selector": "~2.1", + "symfony/dom-crawler": "~2.1", + "symfony/finder": "~2.1", + "symfony/process": "~2.1" + }, + "require-dev": { + "guzzle/plugin-history": "~3.1", + "guzzle/plugin-mock": "~3.1" }, "type": "application", "extra": { @@ -124,7 +60,7 @@ "keywords": [ "scraper" ], - "time": "2013-03-08 08:00:58" + "time": "2014-10-09 15:52:51" }, { "name": "guzzle/guzzle", @@ -221,34 +157,35 @@ }, { "name": "symfony/browser-kit", - "version": "v2.2.1", + "version": "v2.6.6", "target-dir": "Symfony/Component/BrowserKit", "source": { "type": "git", "url": "https://github.com/symfony/BrowserKit.git", - "reference": "v2.2.1" + "reference": "f21189b0eccbe56528515858ca1d5089a741692f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/v2.2.1", - "reference": "v2.2.1", + "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/f21189b0eccbe56528515858ca1d5089a741692f", + "reference": "f21189b0eccbe56528515858ca1d5089a741692f", "shasum": "" }, "require": { "php": ">=5.3.3", - "symfony/dom-crawler": ">=2.0,<3.0" + "symfony/dom-crawler": "~2.0,>=2.0.5" }, "require-dev": { - "symfony/css-selector": ">=2.0,<3.0", - "symfony/process": ">=2.0,<3.0" + "symfony/css-selector": "~2.0,>=2.0.5", + "symfony/phpunit-bridge": "~2.7", + "symfony/process": "~2.0,>=2.0.5" }, "suggest": { - "symfony/process": "2.2.*" + "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-master": "2.6-dev" } }, "autoload": { @@ -261,41 +198,44 @@ "MIT" ], "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, { "name": "Symfony Community", "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" } ], "description": "Symfony BrowserKit Component", "homepage": "http://symfony.com", - "time": "2013-03-15 10:14:31" + "time": "2015-03-30 15:54:10" }, { "name": "symfony/css-selector", - "version": "v2.2.1", + "version": "v2.6.6", "target-dir": "Symfony/Component/CssSelector", "source": { "type": "git", "url": "https://github.com/symfony/CssSelector.git", - "reference": "v2.2.1" + "reference": "db2c48df9658423a8c168d89f7b971b73d3d74a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/CssSelector/zipball/v2.2.1", - "reference": "v2.2.1", + "url": "https://api.github.com/repos/symfony/CssSelector/zipball/db2c48df9658423a8c168d89f7b971b73d3d74a4", + "reference": "db2c48df9658423a8c168d89f7b971b73d3d74a4", "shasum": "" }, "require": { "php": ">=5.3.3" }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" + }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-master": "2.6-dev" } }, "autoload": { @@ -308,47 +248,52 @@ "MIT" ], "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, { "name": "Symfony Community", "homepage": "http://symfony.com/contributors" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" } ], "description": "Symfony CssSelector Component", "homepage": "http://symfony.com", - "time": "2013-01-17 15:25:59" + "time": "2015-03-22 16:55:57" }, { "name": "symfony/dom-crawler", - "version": "v2.2.1", + "version": "v2.6.6", "target-dir": "Symfony/Component/DomCrawler", "source": { "type": "git", "url": "https://github.com/symfony/DomCrawler.git", - "reference": "v2.2.1" + "reference": "8897ebf39c7dfb752a5494fa301845a3fbb9e53d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/v2.2.1", - "reference": "v2.2.1", + "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/8897ebf39c7dfb752a5494fa301845a3fbb9e53d", + "reference": "8897ebf39c7dfb752a5494fa301845a3fbb9e53d", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "symfony/css-selector": ">=2.0,<3.0" + "symfony/css-selector": "~2.3", + "symfony/phpunit-bridge": "~2.7" }, "suggest": { - "symfony/css-selector": "2.2.*" + "symfony/css-selector": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-master": "2.6-dev" } }, "autoload": { @@ -361,48 +306,53 @@ "MIT" ], "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, { "name": "Symfony Community", "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" } ], "description": "Symfony DomCrawler Component", "homepage": "http://symfony.com", - "time": "2013-04-01 08:05:23" + "time": "2015-03-30 15:54:10" }, { "name": "symfony/event-dispatcher", - "version": "v2.2.1", + "version": "v2.6.6", "target-dir": "Symfony/Component/EventDispatcher", "source": { "type": "git", "url": "https://github.com/symfony/EventDispatcher.git", - "reference": "v2.2.1" + "reference": "70f7c8478739ad21e3deef0d977b38c77f1fb284" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/v2.2.1", - "reference": "v2.2.1", + "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/70f7c8478739ad21e3deef0d977b38c77f1fb284", + "reference": "70f7c8478739ad21e3deef0d977b38c77f1fb284", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "symfony/dependency-injection": ">=2.0,<3.0" + "psr/log": "~1.0", + "symfony/config": "~2.0,>=2.0.5", + "symfony/dependency-injection": "~2.6", + "symfony/expression-language": "~2.6", + "symfony/phpunit-bridge": "~2.7", + "symfony/stopwatch": "~2.3" }, "suggest": { - "symfony/dependency-injection": "2.2.*", - "symfony/http-kernel": "2.2.*" + "symfony/dependency-injection": "", + "symfony/http-kernel": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-master": "2.6-dev" } }, "autoload": { @@ -415,41 +365,44 @@ "MIT" ], "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, { "name": "Symfony Community", "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" } ], "description": "Symfony EventDispatcher Component", "homepage": "http://symfony.com", - "time": "2013-02-11 11:26:43" + "time": "2015-03-13 17:37:22" }, { "name": "symfony/finder", - "version": "v2.2.1", + "version": "v2.6.6", "target-dir": "Symfony/Component/Finder", "source": { "type": "git", "url": "https://github.com/symfony/Finder.git", - "reference": "v2.2.1" + "reference": "5dbe2e73a580618f5b4880fda93406eed25de251" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Finder/zipball/v2.2.1", - "reference": "v2.2.1", + "url": "https://api.github.com/repos/symfony/Finder/zipball/5dbe2e73a580618f5b4880fda93406eed25de251", + "reference": "5dbe2e73a580618f5b4880fda93406eed25de251", "shasum": "" }, "require": { "php": ">=5.3.3" }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" + }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-master": "2.6-dev" } }, "autoload": { @@ -462,41 +415,44 @@ "MIT" ], "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, { "name": "Symfony Community", "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" } ], "description": "Symfony Finder Component", "homepage": "http://symfony.com", - "time": "2013-04-01 07:51:50" + "time": "2015-03-30 15:54:10" }, { "name": "symfony/process", - "version": "v2.2.1", + "version": "v2.6.6", "target-dir": "Symfony/Component/Process", "source": { "type": "git", "url": "https://github.com/symfony/Process.git", - "reference": "v2.2.1" + "reference": "a8bebaec1a9dc6cde53e0250e32917579b0be552" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Process/zipball/v2.2.1", - "reference": "v2.2.1", + "url": "https://api.github.com/repos/symfony/Process/zipball/a8bebaec1a9dc6cde53e0250e32917579b0be552", + "reference": "a8bebaec1a9dc6cde53e0250e32917579b0be552", "shasum": "" }, "require": { "php": ">=5.3.3" }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" + }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-master": "2.6-dev" } }, "autoload": { @@ -509,34 +465,28 @@ "MIT" ], "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, { "name": "Symfony Community", "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" } ], "description": "Symfony Process Component", "homepage": "http://symfony.com", - "time": "2013-03-23 07:49:54" + "time": "2015-03-30 15:54:10" } ], - "packages-dev": [ - - ], - "aliases": [ - - ], + "packages-dev": [], + "aliases": [], "minimum-stability": "stable", - "stability-flags": [ - - ], + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, "platform": { "php": ">=5.3.3" }, - "platform-dev": [ - - ] + "platform-dev": [] } diff --git a/vendor/autoload.php b/vendor/autoload.php index 00359ee..e22d07f 100644 --- a/vendor/autoload.php +++ b/vendor/autoload.php @@ -1,6 +1,6 @@ prefixes; + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', $this->prefixesPsr0); + } + + return array(); + } + + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; } public function getFallbackDirs() { - return $this->fallbackDirs; + return $this->fallbackDirsPsr0; + } + + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; } public function getClassMap() @@ -75,61 +98,135 @@ public function addClassMap(array $classMap) } /** - * Registers a set of classes, merging with any others previously set. + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. * - * @param string $prefix The classes prefix - * @param array|string $paths The location(s) of the classes - * @param bool $prepend Prepend the location(s) + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories */ public function add($prefix, $paths, $prepend = false) { if (!$prefix) { if ($prepend) { - $this->fallbackDirs = array_merge( + $this->fallbackDirsPsr0 = array_merge( (array) $paths, - $this->fallbackDirs + $this->fallbackDirsPsr0 ); } else { - $this->fallbackDirs = array_merge( - $this->fallbackDirs, + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, (array) $paths ); } return; } - if (!isset($this->prefixes[$prefix])) { - $this->prefixes[$prefix] = (array) $paths; + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; return; } if ($prepend) { - $this->prefixes[$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix] = array_merge( (array) $paths, - $this->prefixes[$prefix] + $this->prefixesPsr0[$first][$prefix] ); } else { - $this->prefixes[$prefix] = array_merge( - $this->prefixes[$prefix], + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], (array) $paths ); } } /** - * Registers a set of classes, replacing any others previously set. + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-0 base directories + * @param bool $prepend Whether to prepend the directories * - * @param string $prefix The classes prefix - * @param array|string $paths The location(s) of the classes + * @throws \InvalidArgumentException + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 base directories */ public function set($prefix, $paths) { if (!$prefix) { - $this->fallbackDirs = (array) $paths; + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } - return; + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; } - $this->prefixes[$prefix] = (array) $paths; } /** @@ -153,6 +250,27 @@ public function getUseIncludePath() return $this->useIncludePath; } + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + /** * Registers this instance as an autoloader. * @@ -180,7 +298,7 @@ public function unregister() public function loadClass($class) { if ($file = $this->findFile($class)) { - include $file; + includeFile($file); return true; } @@ -195,46 +313,101 @@ public function loadClass($class) */ public function findFile($class) { + // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731 if ('\\' == $class[0]) { $class = substr($class, 1); } + // class map lookup if (isset($this->classMap[$class])) { return $this->classMap[$class]; } + if ($this->classMapAuthoritative) { + return false; + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if ($file === null && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if ($file === null) { + // Remember that this class does not exist. + return $this->classMap[$class] = false; + } + + return $file; + } + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) { + if (0 === strpos($class, $prefix)) { + foreach ($this->prefixDirsPsr4[$prefix] as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup if (false !== $pos = strrpos($class, '\\')) { // namespaced class name - $classPath = str_replace('\\', DIRECTORY_SEPARATOR, substr($class, 0, $pos)) . DIRECTORY_SEPARATOR; - $className = substr($class, $pos + 1); + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); } else { // PEAR-like class name - $classPath = null; - $className = $class; + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; } - $classPath .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; - - foreach ($this->prefixes as $prefix => $dirs) { - if (0 === strpos($class, $prefix)) { - foreach ($dirs as $dir) { - if (file_exists($dir . DIRECTORY_SEPARATOR . $classPath)) { - return $dir . DIRECTORY_SEPARATOR . $classPath; + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } } } } } - foreach ($this->fallbackDirs as $dir) { - if (file_exists($dir . DIRECTORY_SEPARATOR . $classPath)) { - return $dir . DIRECTORY_SEPARATOR . $classPath; + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; } } - if ($this->useIncludePath && $file = stream_resolve_include_path($classPath)) { + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { return $file; } - - return $this->classMap[$class] = false; } } + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + */ +function includeFile($file) +{ + include $file; +} diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index af4ad58..7a91153 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -1,6 +1,6 @@ $vendorDir . '/symfony/process', - 'Symfony\\Component\\Finder\\' => $vendorDir . '/symfony/finder', - 'Symfony\\Component\\EventDispatcher\\' => $vendorDir . '/symfony/event-dispatcher', - 'Symfony\\Component\\DomCrawler\\' => $vendorDir . '/symfony/dom-crawler', - 'Symfony\\Component\\CssSelector\\' => $vendorDir . '/symfony/css-selector', - 'Symfony\\Component\\BrowserKit\\' => $vendorDir . '/symfony/browser-kit', - 'Guzzle\\Tests' => $vendorDir . '/guzzle/guzzle/tests', - 'Guzzle' => $vendorDir . '/guzzle/guzzle/src', - 'Goutte' => $vendorDir . '/fabpot/goutte', - 'Doctrine\\Common' => $vendorDir . '/doctrine/common/lib', - 'Bpi\\Sdk' => $baseDir . '/', + 'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'), + 'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'), + 'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'), + 'Symfony\\Component\\DomCrawler\\' => array($vendorDir . '/symfony/dom-crawler'), + 'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'), + 'Symfony\\Component\\BrowserKit\\' => array($vendorDir . '/symfony/browser-kit'), + 'Guzzle\\Tests' => array($vendorDir . '/guzzle/guzzle/tests'), + 'Guzzle' => array($vendorDir . '/guzzle/guzzle/src'), + 'Goutte' => array($vendorDir . '/fabpot/goutte'), + 'Bpi\\Sdk' => array($baseDir . '/'), ); diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php new file mode 100644 index 0000000..b265c64 --- /dev/null +++ b/vendor/composer/autoload_psr4.php @@ -0,0 +1,9 @@ + $path) { - $loader->add($namespace, $path); + $loader->set($namespace, $path); + } + + $map = require __DIR__ . '/autoload_psr4.php'; + foreach ($map as $namespace => $path) { + $loader->setPsr4($namespace, $path); } $classMap = require __DIR__ . '/autoload_classmap.php'; @@ -41,3 +43,8 @@ public static function getLoader() return $loader; } } + +function composerRequire1c5719d25ed4cf7c2fdb9c3eb1362f0b($file) +{ + require $file; +} diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index d025891..0153da5 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -1,131 +1,4 @@ [ - { - "name": "doctrine/common", - "version": "2.3.0", - "version_normalized": "2.3.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/common", - "reference": "2.3.0" - }, - "dist": { - "type": "zip", - "url": "https://github.com/doctrine/common/zipball/2.3.0", - "reference": "2.3.0", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "time": "2012-09-19 22:55:18", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Doctrine\\Common": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com", - "homepage": "http://www.jwage.com/" - }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com", - "homepage": "http://www.instaclick.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh", - "role": "Developer of wrapped JMSSerializerBundle" - } - ], - "description": "Common Library for Doctrine projects", - "homepage": "http://www.doctrine-project.org", - "keywords": [ - "annotations", - "collections", - "eventmanager", - "persistence", - "spl" - ] - }, - { - "name": "symfony/event-dispatcher", - "version": "v2.2.1", - "version_normalized": "2.2.1.0", - "target-dir": "Symfony/Component/EventDispatcher", - "source": { - "type": "git", - "url": "https://github.com/symfony/EventDispatcher.git", - "reference": "v2.2.1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/v2.2.1", - "reference": "v2.2.1", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "symfony/dependency-injection": ">=2.0,<3.0" - }, - "suggest": { - "symfony/dependency-injection": "2.2.*", - "symfony/http-kernel": "2.2.*" - }, - "time": "2013-02-11 11:26:43", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-0": { - "Symfony\\Component\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony EventDispatcher Component", - "homepage": "http://symfony.com" - }, { "name": "guzzle/guzzle", "version": "v3.3.1", @@ -221,30 +94,94 @@ "web service" ] }, + { + "name": "symfony/event-dispatcher", + "version": "v2.6.6", + "version_normalized": "2.6.6.0", + "target-dir": "Symfony/Component/EventDispatcher", + "source": { + "type": "git", + "url": "https://github.com/symfony/EventDispatcher.git", + "reference": "70f7c8478739ad21e3deef0d977b38c77f1fb284" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/70f7c8478739ad21e3deef0d977b38c77f1fb284", + "reference": "70f7c8478739ad21e3deef0d977b38c77f1fb284", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.0,>=2.0.5", + "symfony/dependency-injection": "~2.6", + "symfony/expression-language": "~2.6", + "symfony/phpunit-bridge": "~2.7", + "symfony/stopwatch": "~2.3" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "time": "2015-03-13 17:37:22", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.6-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Symfony\\Component\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "http://symfony.com" + }, { "name": "symfony/process", - "version": "v2.2.1", - "version_normalized": "2.2.1.0", + "version": "v2.6.6", + "version_normalized": "2.6.6.0", "target-dir": "Symfony/Component/Process", "source": { "type": "git", "url": "https://github.com/symfony/Process.git", - "reference": "v2.2.1" + "reference": "a8bebaec1a9dc6cde53e0250e32917579b0be552" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Process/zipball/v2.2.1", - "reference": "v2.2.1", + "url": "https://api.github.com/repos/symfony/Process/zipball/a8bebaec1a9dc6cde53e0250e32917579b0be552", + "reference": "a8bebaec1a9dc6cde53e0250e32917579b0be552", "shasum": "" }, "require": { "php": ">=5.3.3" }, - "time": "2013-03-23 07:49:54", + "require-dev": { + "symfony/phpunit-bridge": "~2.7" + }, + "time": "2015-03-30 15:54:10", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-master": "2.6-dev" } }, "installation-source": "dist", @@ -258,13 +195,13 @@ "MIT" ], "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, { "name": "Symfony Community", "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" } ], "description": "Symfony Process Component", @@ -272,28 +209,31 @@ }, { "name": "symfony/finder", - "version": "v2.2.1", - "version_normalized": "2.2.1.0", + "version": "v2.6.6", + "version_normalized": "2.6.6.0", "target-dir": "Symfony/Component/Finder", "source": { "type": "git", "url": "https://github.com/symfony/Finder.git", - "reference": "v2.2.1" + "reference": "5dbe2e73a580618f5b4880fda93406eed25de251" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Finder/zipball/v2.2.1", - "reference": "v2.2.1", + "url": "https://api.github.com/repos/symfony/Finder/zipball/5dbe2e73a580618f5b4880fda93406eed25de251", + "reference": "5dbe2e73a580618f5b4880fda93406eed25de251", "shasum": "" }, "require": { "php": ">=5.3.3" }, - "time": "2013-04-01 07:51:50", + "require-dev": { + "symfony/phpunit-bridge": "~2.7" + }, + "time": "2015-03-30 15:54:10", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-master": "2.6-dev" } }, "installation-source": "dist", @@ -307,13 +247,13 @@ "MIT" ], "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, { "name": "Symfony Community", "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" } ], "description": "Symfony Finder Component", @@ -321,34 +261,35 @@ }, { "name": "symfony/dom-crawler", - "version": "v2.2.1", - "version_normalized": "2.2.1.0", + "version": "v2.6.6", + "version_normalized": "2.6.6.0", "target-dir": "Symfony/Component/DomCrawler", "source": { "type": "git", "url": "https://github.com/symfony/DomCrawler.git", - "reference": "v2.2.1" + "reference": "8897ebf39c7dfb752a5494fa301845a3fbb9e53d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/v2.2.1", - "reference": "v2.2.1", + "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/8897ebf39c7dfb752a5494fa301845a3fbb9e53d", + "reference": "8897ebf39c7dfb752a5494fa301845a3fbb9e53d", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "symfony/css-selector": ">=2.0,<3.0" + "symfony/css-selector": "~2.3", + "symfony/phpunit-bridge": "~2.7" }, "suggest": { - "symfony/css-selector": "2.2.*" + "symfony/css-selector": "" }, - "time": "2013-04-01 08:05:23", + "time": "2015-03-30 15:54:10", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-master": "2.6-dev" } }, "installation-source": "dist", @@ -362,13 +303,13 @@ "MIT" ], "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, { "name": "Symfony Community", "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" } ], "description": "Symfony DomCrawler Component", @@ -376,28 +317,31 @@ }, { "name": "symfony/css-selector", - "version": "v2.2.1", - "version_normalized": "2.2.1.0", + "version": "v2.6.6", + "version_normalized": "2.6.6.0", "target-dir": "Symfony/Component/CssSelector", "source": { "type": "git", "url": "https://github.com/symfony/CssSelector.git", - "reference": "v2.2.1" + "reference": "db2c48df9658423a8c168d89f7b971b73d3d74a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/CssSelector/zipball/v2.2.1", - "reference": "v2.2.1", + "url": "https://api.github.com/repos/symfony/CssSelector/zipball/db2c48df9658423a8c168d89f7b971b73d3d74a4", + "reference": "db2c48df9658423a8c168d89f7b971b73d3d74a4", "shasum": "" }, "require": { "php": ">=5.3.3" }, - "time": "2013-01-17 15:25:59", + "require-dev": { + "symfony/phpunit-bridge": "~2.7" + }, + "time": "2015-03-22 16:55:57", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-master": "2.6-dev" } }, "installation-source": "dist", @@ -411,13 +355,17 @@ "MIT" ], "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, { "name": "Symfony Community", "homepage": "http://symfony.com/contributors" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" } ], "description": "Symfony CssSelector Component", @@ -425,36 +373,37 @@ }, { "name": "symfony/browser-kit", - "version": "v2.2.1", - "version_normalized": "2.2.1.0", + "version": "v2.6.6", + "version_normalized": "2.6.6.0", "target-dir": "Symfony/Component/BrowserKit", "source": { "type": "git", "url": "https://github.com/symfony/BrowserKit.git", - "reference": "v2.2.1" + "reference": "f21189b0eccbe56528515858ca1d5089a741692f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/v2.2.1", - "reference": "v2.2.1", + "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/f21189b0eccbe56528515858ca1d5089a741692f", + "reference": "f21189b0eccbe56528515858ca1d5089a741692f", "shasum": "" }, "require": { "php": ">=5.3.3", - "symfony/dom-crawler": ">=2.0,<3.0" + "symfony/dom-crawler": "~2.0,>=2.0.5" }, "require-dev": { - "symfony/css-selector": ">=2.0,<3.0", - "symfony/process": ">=2.0,<3.0" + "symfony/css-selector": "~2.0,>=2.0.5", + "symfony/phpunit-bridge": "~2.7", + "symfony/process": "~2.0,>=2.0.5" }, "suggest": { - "symfony/process": "2.2.*" + "symfony/process": "" }, - "time": "2013-03-15 10:14:31", + "time": "2015-03-30 15:54:10", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" + "dev-master": "2.6-dev" } }, "installation-source": "dist", @@ -468,13 +417,13 @@ "MIT" ], "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, { "name": "Symfony Community", "homepage": "http://symfony.com/contributors" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" } ], "description": "Symfony BrowserKit Component", @@ -482,30 +431,34 @@ }, { "name": "fabpot/goutte", - "version": "v1.0.1", - "version_normalized": "1.0.1.0", + "version": "v1.0.7", + "version_normalized": "1.0.7.0", "source": { "type": "git", - "url": "https://github.com/fabpot/Goutte.git", - "reference": "v1.0.1" + "url": "https://github.com/FriendsOfPHP/Goutte.git", + "reference": "794b196e76bdd37b5155cdecbad311f0a3b07625" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fabpot/Goutte/zipball/v1.0.1", - "reference": "v1.0.1", + "url": "https://api.github.com/repos/FriendsOfPHP/Goutte/zipball/794b196e76bdd37b5155cdecbad311f0a3b07625", + "reference": "794b196e76bdd37b5155cdecbad311f0a3b07625", "shasum": "" }, "require": { "ext-curl": "*", - "guzzle/guzzle": ">=3.0, <3.4", + "guzzle/http": "~3.1", "php": ">=5.3.0", - "symfony/browser-kit": ">=2.1,<3.0", - "symfony/css-selector": ">=2.1,<3.0", - "symfony/dom-crawler": ">=2.1,<3.0", - "symfony/finder": ">=2.1,<3.0", - "symfony/process": ">=2.1,<3.0" + "symfony/browser-kit": "~2.1", + "symfony/css-selector": "~2.1", + "symfony/dom-crawler": "~2.1", + "symfony/finder": "~2.1", + "symfony/process": "~2.1" + }, + "require-dev": { + "guzzle/plugin-history": "~3.1", + "guzzle/plugin-mock": "~3.1" }, - "time": "2013-03-08 08:00:58", + "time": "2014-10-09 15:52:51", "type": "application", "extra": { "branch-alias": { diff --git a/vendor/doctrine/common/.gitignore b/vendor/doctrine/common/.gitignore deleted file mode 100644 index fb5e79d..0000000 --- a/vendor/doctrine/common/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -build/ -logs/ -reports/ -dist/ diff --git a/vendor/doctrine/common/.gitmodules b/vendor/doctrine/common/.gitmodules deleted file mode 100644 index 51f0843..0000000 --- a/vendor/doctrine/common/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "lib/vendor/doctrine-build-common"] - path = lib/vendor/doctrine-build-common - url = git://github.com/doctrine/doctrine-build-common.git diff --git a/vendor/doctrine/common/.travis.yml b/vendor/doctrine/common/.travis.yml deleted file mode 100644 index fc05056..0000000 --- a/vendor/doctrine/common/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -language: php - -env: - - OPCODE_CACHE=apc - -php: - - 5.3 - - 5.4 - -before_script: php ./bin/travis-setup.php $OPCODE_CACHE \ No newline at end of file diff --git a/vendor/doctrine/common/LICENSE b/vendor/doctrine/common/LICENSE deleted file mode 100644 index 4a91f0b..0000000 --- a/vendor/doctrine/common/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2006-2012 Doctrine Project - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/vendor/doctrine/common/README.md b/vendor/doctrine/common/README.md deleted file mode 100644 index c63f762..0000000 --- a/vendor/doctrine/common/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Doctrine Common - -[![Build Status](https://secure.travis-ci.org/doctrine/common.png)](http://travis-ci.org/doctrine/common) - -The Doctrine Common project is a library that provides extensions to core PHP functionality. - -## More resources: - -* [Website](http://www.doctrine-project.org) -* [Documentation](http://www.doctrine-project.org/projects/common/current/docs/en) -* [Issue Tracker](http://www.doctrine-project.org/jira/browse/DCOM) -* [Downloads](http://github.com/doctrine/common/downloads) diff --git a/vendor/doctrine/common/UPGRADE_TO_2_1 b/vendor/doctrine/common/UPGRADE_TO_2_1 deleted file mode 100644 index 891a2e5..0000000 --- a/vendor/doctrine/common/UPGRADE_TO_2_1 +++ /dev/null @@ -1,39 +0,0 @@ -This document details all the possible changes that you should investigate when updating -your project from Doctrine Common 2.0.x to 2.1 - -## AnnotationReader changes - -The annotation reader was heavily refactored between 2.0 and 2.1-RC1. In theory the operation of the new reader should be backwards compatible, but it has to be setup differently to work that way: - - $reader = new \Doctrine\Common\Annotations\AnnotationReader(); - $reader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\'); - // new code necessary starting here - $reader->setIgnoreNotImportedAnnotations(true); - $reader->setEnableParsePhpImports(false); - $reader = new \Doctrine\Common\Annotations\CachedReader( - new \Doctrine\Common\Annotations\IndexedReader($reader), new ArrayCache() - ); - -## Annotation Base class or @Annotation - -Beginning after 2.1-RC2 you have to either extend ``Doctrine\Common\Annotations\Annotation`` or add @Annotation to your annotations class-level docblock, otherwise the class will simply be ignored. - -## Removed methods on AnnotationReader - -* AnnotationReader::setAutoloadAnnotations() -* AnnotationReader::getAutoloadAnnotations() -* AnnotationReader::isAutoloadAnnotations() - -## AnnotationRegistry - -Autoloading through the PHP autoloader is removed from the 2.1 AnnotationReader. Instead you have to use the global AnnotationRegistry for loading purposes: - - \Doctrine\Common\Annotations\AnnotationRegistry::registerFile($fileWithAnnotations); - \Doctrine\Common\Annotations\AnnotationRegistry::registerAutoloadNamespace($namespace, $dirs = null); - \Doctrine\Common\Annotations\AnnotationRegistry::registerAutoloadNamespaces($namespaces); - \Doctrine\Common\Annotations\AnnotationRegistry::registerLoader($callable); - -The $callable for registering a loader accepts a class as first and only parameter and must try to silently autoload it. On success true has to be returned. -The registerAutoloadNamespace function registers a PSR-0 compatible silent autoloader for all classes with the given namespace in the given directories. -If null is passed as directory the include path will be used. - diff --git a/vendor/doctrine/common/UPGRADE_TO_2_2 b/vendor/doctrine/common/UPGRADE_TO_2_2 deleted file mode 100644 index 1d93a13..0000000 --- a/vendor/doctrine/common/UPGRADE_TO_2_2 +++ /dev/null @@ -1,61 +0,0 @@ -This document details all the possible changes that you should investigate when -updating your project from Doctrine Common 2.1 to 2.2: - -## Annotation Changes - -- AnnotationReader::setIgnoreNotImportedAnnotations has been removed, you need to - add ignore annotation names which are supposed to be ignored via - AnnotationReader::addGlobalIgnoredName - -- AnnotationReader::setAutoloadAnnotations was deprecated by the AnnotationRegistry - in 2.1 and has been removed in 2.2 - -- AnnotationReader::setEnableParsePhpImports was added to ease transition to the new - annotation mechanism in 2.1 and is removed in 2.2 - -- AnnotationReader::isParsePhpImportsEnabled is removed (see above) - -- AnnotationReader::setDefaultAnnotationNamespace was deprecated in favor of explicit - configuration in 2.1 and will be removed in 2.2 (for isolated projects where you - have full-control over _all_ available annotations, we offer a dedicated reader - class ``SimpleAnnotationReader``) - -- AnnotationReader::setAnnotationCreationFunction was deprecated in 2.1 and will be - removed in 2.2. We only offer two creation mechanisms which cannot be changed - anymore to allow the same reader instance to work with all annotations regardless - of which library they are coming from. - -- AnnotationReader::setAnnotationNamespaceAlias was deprecated in 2.1 and will be - removed in 2.2 (see setDefaultAnnotationNamespace) - -- If you use a class as annotation which has not the @Annotation marker in it's - class block, we will now throw an exception instead of silently ignoring it. You - can however still achieve the previous behavior using the @IgnoreAnnotation, or - AnnotationReader::addGlobalIgnoredName (the exception message will contain detailed - instructions when you run into this problem). - -## Cache Changes - -- Renamed old AbstractCache to CacheProvider - -- Dropped the support to the following functions of all cache providers: - - - CacheProvider::deleteByWildcard - - - CacheProvider::deleteByRegEx - - - CacheProvider::deleteByPrefix - - - CacheProvider::deleteBySuffix - -- CacheProvider::deleteAll will not remove ALL entries, it will only mark them as invalid - -- CacheProvider::flushAll will remove ALL entries, namespaced or not - -- Added support to MemcachedCache - -- Added support to WincacheCache - -## ClassLoader Changes - -- ClassLoader::fileExistsInIncludePath() no longer exists. Use the native stream_resolve_include_path() PHP function \ No newline at end of file diff --git a/vendor/doctrine/common/bin/travis-setup.php b/vendor/doctrine/common/bin/travis-setup.php deleted file mode 100644 index e9c355a..0000000 --- a/vendor/doctrine/common/bin/travis-setup.php +++ /dev/null @@ -1,141 +0,0 @@ -. - */ - -/** - * Install PHP extensions required for testing by Travis CI. - * - * @author Victor Berchet - * @since 2.2 - */ -$installer = new PhpExtensions(); - -if (isset($argv[1]) && 'APC' === strtoupper($argv[1])) { - $installer->install('apc'); -} else { - $installer->install('xcache'); -} - -$installer->install('memcache'); -$installer->install('memcached'); - -class PhpExtensions -{ - protected $extensions; - protected $phpVersion; - protected $iniPath; - - public function __construct() - { - $this->phpVersion = phpversion(); - $this->iniPath = php_ini_loaded_file(); - $this->extensions = array( - 'memcache' => array( - 'url' => 'http://pecl.php.net/get/memcache-2.2.6.tgz', - 'php_version' => array(), - 'cfg' => array('--enable-memcache'), - 'ini' => array('extension=memcache.so'), - ), - 'memcached' => array( - 'url' => 'http://pecl.php.net/get/memcached-1.0.2.tgz', - 'php_version' => array( - // memcached 1.0.2 does not build on PHP 5.4 - array('<', '5.4'), - ), - 'cfg' => array(), - 'ini' => array('extension=memcached.so'), - ), - 'apc' => array( - 'url' => 'http://pecl.php.net/get/APC-3.1.9.tgz', - 'php_version' => array( - // apc 3.1.9 causes a segfault on PHP 5.4 - array('<', '5.4'), - ), - 'cfg' => array(), - 'ini' => array( - 'extension=apc.so', - 'apc.enabled=1', - 'apc.enable_cli=1' - ), - ), - 'xcache' => array( - 'url' => 'http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz', - 'php_version' => array( - // xcache does not build with Travis CI (as of 2012-01-09) - array('<', '5'), - ), - 'cfg' => array('--enable-xcache'), - 'ini' => array( - 'extension=xcache.so', - 'xcache.cacher=false', - 'xcache.admin.enable_auth=0', - 'xcache.var_size=1M', - ), - ), - ); - } - - public function install($name) - { - if (array_key_exists($name, $this->extensions)) { - $extension = $this->extensions[$name]; - - - echo "== extension: $name ==\n"; - - foreach ($extension['php_version'] as $version) { - if (!version_compare($this->phpVersion, $version[1], $version[0])) { - printf( - "=> not installed, requires a PHP version %s %s (%s installed)\n", - $version[0], - $version[1], - $this->phpVersion - ); - - return; - } - } - - $this->system(sprintf("wget %s > /dev/null 2>&1", $extension['url'])); - $file = basename($extension['url']); - $this->system(sprintf("tar -xzf %s > /dev/null 2>&1", $file)); - $folder = basename($file, ".tgz"); - $folder = basename($folder, ".tar.gz"); - $this->system(sprintf( - 'sh -c "cd %s && phpize && ./configure %s && make && sudo make install" > /dev/null 2>&1', - $folder, - implode(' ', $extension['cfg']) - )); - foreach ($extension['ini'] as $ini) { - $this->system(sprintf("echo %s >> %s", $ini, $this->iniPath)); - } - printf("=> installed (%s)\n", $folder); - } - } - - private function system($cmd) - { - $ret = 0; - system($cmd, $ret); - if (0 !== $ret) { - printf("=> Command '%s' failed !", $cmd); - - exit($ret); - } - } -} diff --git a/vendor/doctrine/common/build.properties b/vendor/doctrine/common/build.properties deleted file mode 100644 index ff311a4..0000000 --- a/vendor/doctrine/common/build.properties +++ /dev/null @@ -1,6 +0,0 @@ -# Project Name -project.name=DoctrineCommon - -# Version class and file -project.version_class = Doctrine\Common\Version -project.version_file = lib/Doctrine/Common/Version.php diff --git a/vendor/doctrine/common/build.xml b/vendor/doctrine/common/build.xml deleted file mode 100644 index 71a9a50..0000000 --- a/vendor/doctrine/common/build.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DoctrineCommon - Doctrine Common PHP Extensions - pear.doctrine-project.org - The Doctrine Common package contains shared code between the other packages. - - - - - LGPL - - - - - - - - - - - diff --git a/vendor/doctrine/common/composer.json b/vendor/doctrine/common/composer.json deleted file mode 100644 index c87258d..0000000 --- a/vendor/doctrine/common/composer.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "doctrine/common", - "type": "library", - "description": "Common Library for Doctrine projects", - "keywords": ["collections", "spl", "eventmanager", "annotations", "persistence"], - "homepage": "http://www.doctrine-project.org", - "license": "MIT", - "authors": [ - {"name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com"}, - {"name": "Roman Borschel", "email": "roman@code-factory.org"}, - {"name": "Benjamin Eberlei", "email": "kontakt@beberlei.de"}, - {"name": "Jonathan Wage", "email": "jonwage@gmail.com"}, - {"name": "Johannes Schmitt", "email": "schmittjoh@gmail.com"} - ], - "require": { - "php": ">=5.3.2" - }, - "autoload": { - "psr-0": { "Doctrine\\Common": "lib/" } - }, - "extra": { - "branch-alias": { - "dev-master": "2.3.x-dev" - } - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation.php b/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation.php deleted file mode 100644 index 6a1390a..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation.php +++ /dev/null @@ -1,79 +0,0 @@ -. - */ - -namespace Doctrine\Common\Annotations; - -/** - * Annotations class - * - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - */ -class Annotation -{ - /** - * Value property. Common among all derived classes. - * - * @var string - */ - public $value; - - /** - * Constructor - * - * @param array $data Key-value for properties to be defined in this class - */ - public final function __construct(array $data) - { - foreach ($data as $key => $value) { - $this->$key = $value; - } - } - - /** - * Error handler for unknown property accessor in Annotation class. - * - * @param string $name Unknown property name - * - * @throws \BadMethodCallException - */ - public function __get($name) - { - throw new \BadMethodCallException( - sprintf("Unknown property '%s' on annotation '%s'.", $name, get_class($this)) - ); - } - - /** - * Error handler for unknown property mutator in Annotation class. - * - * @param string $name Unkown property name - * @param mixed $value Property value - * - * @throws \BadMethodCallException - */ - public function __set($name, $value) - { - throw new \BadMethodCallException( - sprintf("Unknown property '%s' on annotation '%s'.", $name, get_class($this)) - ); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation/Attribute.php b/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation/Attribute.php deleted file mode 100644 index dbef6df..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation/Attribute.php +++ /dev/null @@ -1,47 +0,0 @@ -. - */ - -namespace Doctrine\Common\Annotations\Annotation; - -/** - * Annotation that can be used to signal to the parser - * to check the attribute type during the parsing process. - * - * @author Fabio B. Silva - * - * @Annotation - */ -final class Attribute -{ - /** - * @var string - */ - public $name; - - /** - * @var string - */ - public $type; - - /** - * @var boolean - */ - public $required = false; -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation/Attributes.php b/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation/Attributes.php deleted file mode 100644 index 53134e3..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation/Attributes.php +++ /dev/null @@ -1,37 +0,0 @@ -. - */ - -namespace Doctrine\Common\Annotations\Annotation; - -/** - * Annotation that can be used to signal to the parser - * to check the types of all declared attributes during the parsing process. - * - * @author Fabio B. Silva - * - * @Annotation - */ -final class Attributes -{ - /** - * @var array - */ - public $value; -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php b/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php deleted file mode 100644 index a84a4f5..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation/IgnoreAnnotation.php +++ /dev/null @@ -1,54 +0,0 @@ -. - */ - -namespace Doctrine\Common\Annotations\Annotation; - -/** - * Annotation that can be used to signal to the parser to ignore specific - * annotations during the parsing process. - * - * @Annotation - * @author Johannes M. Schmitt - */ -final class IgnoreAnnotation -{ - /** - * @var array - */ - public $names; - - /** - * Constructor - * - * @param array $values - * - * @throws \RuntimeException - */ - public function __construct(array $values) - { - if (is_string($values['value'])) { - $values['value'] = array($values['value']); - } - if (!is_array($values['value'])) { - throw new \RuntimeException(sprintf('@IgnoreAnnotation expects either a string name, or an array of strings, but got %s.', json_encode($values['value']))); - } - - $this->names = $values['value']; - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation/Required.php b/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation/Required.php deleted file mode 100644 index d67f960..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation/Required.php +++ /dev/null @@ -1,33 +0,0 @@ -. - */ - -namespace Doctrine\Common\Annotations\Annotation; - -/** - * Annotation that can be used to signal to the parser - * to check if that attribute is required during the parsing process. - * - * @author Fabio B. Silva - * - * @Annotation - */ -final class Required -{ -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation/Target.php b/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation/Target.php deleted file mode 100644 index 64655ef..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Annotation/Target.php +++ /dev/null @@ -1,107 +0,0 @@ -. - */ - -namespace Doctrine\Common\Annotations\Annotation; - -/** - * Annotation that can be used to signal to the parser - * to check the annotation target during the parsing process. - * - * @author Fabio B. Silva - * - * @Annotation - */ -final class Target -{ - const TARGET_CLASS = 1; - const TARGET_METHOD = 2; - const TARGET_PROPERTY = 4; - const TARGET_ANNOTATION = 8; - const TARGET_ALL = 15; - - /** - * @var array - */ - private static $map = array( - 'ALL' => self::TARGET_ALL, - 'CLASS' => self::TARGET_CLASS, - 'METHOD' => self::TARGET_METHOD, - 'PROPERTY' => self::TARGET_PROPERTY, - 'ANNOTATION' => self::TARGET_ANNOTATION, - ); - - /** - * @var array - */ - public $value; - - /** - * Targets as bitmask. - * - * @var integer - */ - public $targets; - - /** - * Literal target declaration. - * - * @var integer - */ - public $literal; - - /** - * Annotation construct - * - * @param array $values - * - * @throws \InvalidArgumentException - */ - public function __construct(array $values) - { - if (!isset($values['value'])){ - $values['value'] = null; - } - if (is_string($values['value'])){ - $values['value'] = array($values['value']); - } - if (!is_array($values['value'])){ - throw new \InvalidArgumentException( - sprintf('@Target expects either a string value, or an array of strings, "%s" given.', - is_object($values['value']) ? get_class($values['value']) : gettype($values['value']) - ) - ); - } - - $bitmask = 0; - foreach ($values['value'] as $literal) { - if(!isset(self::$map[$literal])){ - throw new \InvalidArgumentException( - sprintf('Invalid Target "%s". Available targets: [%s]', - $literal, implode(', ', array_keys(self::$map))) - ); - } - $bitmask += self::$map[$literal]; - } - - $this->targets = $bitmask; - $this->value = $values['value']; - $this->literal = implode(', ', $this->value); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/AnnotationException.php b/vendor/doctrine/common/lib/Doctrine/Common/Annotations/AnnotationException.php deleted file mode 100644 index 109beeb..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/AnnotationException.php +++ /dev/null @@ -1,127 +0,0 @@ -. - */ - -namespace Doctrine\Common\Annotations; - -/** - * Description of AnnotationException - * - * @since 2.0 - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - */ -class AnnotationException extends \Exception -{ - /** - * Creates a new AnnotationException describing a Syntax error. - * - * @param string $message Exception message - * @return AnnotationException - */ - public static function syntaxError($message) - { - return new self('[Syntax Error] ' . $message); - } - - /** - * Creates a new AnnotationException describing a Semantical error. - * - * @param string $message Exception message - * @return AnnotationException - */ - public static function semanticalError($message) - { - return new self('[Semantical Error] ' . $message); - } - - /** - * Creates a new AnnotationException describing a constant semantical error. - * - * @since 2.3 - * @param string $identifier - * @param string $context - * @return AnnotationException - */ - public static function semanticalErrorConstants($identifier, $context = null) - { - return self::semanticalError(sprintf( - "Couldn't find constant %s%s", $identifier, - $context ? ", $context." : "." - )); - } - - /** - * Creates a new AnnotationException describing an error which occurred during - * the creation of the annotation. - * - * @since 2.2 - * @param string $message - * @return AnnotationException - */ - public static function creationError($message) - { - return new self('[Creation Error] ' . $message); - } - - /** - * Creates a new AnnotationException describing an type error of an attribute. - * - * @since 2.2 - * @param string $attributeName - * @param string $annotationName - * @param string $context - * @param string $expected - * @param mixed $actual - * @return AnnotationException - */ - public static function typeError($attributeName, $annotationName, $context, $expected, $actual) - { - return new self(sprintf( - '[Type Error] Attribute "%s" of @%s declared on %s expects %s, but got %s.', - $attributeName, - $annotationName, - $context, - $expected, - is_object($actual) ? 'an instance of '.get_class($actual) : gettype($actual) - )); - } - - /** - * Creates a new AnnotationException describing an required error of an attribute. - * - * @since 2.2 - * @param string $attributeName - * @param string $annotationName - * @param string $context - * @param string $expected - * @return AnnotationException - */ - public static function requiredError($attributeName, $annotationName, $context, $expected) - { - return new self(sprintf( - '[Type Error] Attribute "%s" of @%s declared on %s expects %s. This value should not be null.', - $attributeName, - $annotationName, - $context, - $expected - )); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/AnnotationReader.php b/vendor/doctrine/common/lib/Doctrine/Common/Annotations/AnnotationReader.php deleted file mode 100644 index 286e7d0..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/AnnotationReader.php +++ /dev/null @@ -1,310 +0,0 @@ -. - */ - -namespace Doctrine\Common\Annotations; - -use Doctrine\Common\Annotations\Annotation\IgnoreAnnotation; -use Doctrine\Common\Annotations\Annotation\Target; -use Closure; -use ReflectionClass; -use ReflectionMethod; -use ReflectionProperty; - -/** - * A reader for docblock annotations. - * - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - * @author Johannes M. Schmitt - */ -class AnnotationReader implements Reader -{ - /** - * Global map for imports. - * - * @var array - */ - private static $globalImports = array( - 'ignoreannotation' => 'Doctrine\Common\Annotations\Annotation\IgnoreAnnotation', - ); - - /** - * A list with annotations that are not causing exceptions when not resolved to an annotation class. - * - * The names are case sensitive. - * - * @var array - */ - private static $globalIgnoredNames = array( - 'access'=> true, 'author'=> true, 'copyright'=> true, 'deprecated'=> true, - 'example'=> true, 'ignore'=> true, 'internal'=> true, 'link'=> true, 'see'=> true, - 'since'=> true, 'tutorial'=> true, 'version'=> true, 'package'=> true, - 'subpackage'=> true, 'name'=> true, 'global'=> true, 'param'=> true, - 'return'=> true, 'staticvar'=> true, 'category'=> true, 'staticVar'=> true, - 'static'=> true, 'var'=> true, 'throws'=> true, 'inheritdoc'=> true, - 'inheritDoc'=> true, 'license'=> true, 'todo'=> true, - 'deprec'=> true, 'property' => true, 'method' => true, - 'abstract'=> true, 'exception'=> true, 'magic' => true, 'api' => true, - 'final'=> true, 'filesource'=> true, 'throw' => true, 'uses' => true, - 'usedby'=> true, 'private' => true, 'Annotation' => true, 'override' => true, - 'codeCoverageIgnore' => true, 'codeCoverageIgnoreStart' => true, 'codeCoverageIgnoreEnd' => true, - 'Required' => true, 'Attribute' => true, 'Attributes' => true, - 'Target' => true, 'SuppressWarnings' => true, - 'ingroup' => true, 'code' => true, 'endcode' => true, - 'package_version' => true, - ); - - /** - * Add a new annotation to the globally ignored annotation names with regard to exception handling. - * - * @param string $name - */ - static public function addGlobalIgnoredName($name) - { - self::$globalIgnoredNames[$name] = true; - } - - /** - * Annotations Parser - * - * @var \Doctrine\Common\Annotations\DocParser - */ - private $parser; - - /** - * Annotations Parser used to collect parsing metadata - * - * @var \Doctrine\Common\Annotations\DocParser - */ - private $preParser; - - /** - * PHP Parser used to collect imports. - * - * @var \Doctrine\Common\Annotations\PhpParser - */ - private $phpParser; - - /** - * In-memory cache mechanism to store imported annotations per class. - * - * @var array - */ - private $imports = array(); - - /** - * In-memory cache mechanism to store ignored annotations per class. - * - * @var array - */ - private $ignoredAnnotationNames = array(); - - /** - * Constructor. - * - * Initializes a new AnnotationReader. - */ - public function __construct() - { - AnnotationRegistry::registerFile(__DIR__ . '/Annotation/IgnoreAnnotation.php'); - - $this->parser = new DocParser; - - $this->preParser = new DocParser; - $this->preParser->setImports(self::$globalImports); - $this->preParser->setIgnoreNotImportedAnnotations(true); - - $this->phpParser = new PhpParser; - } - - /** - * Gets the annotations applied to a class. - * - * @param ReflectionClass $class The ReflectionClass of the class from which - * the class annotations should be read. - * @return array An array of Annotations. - */ - public function getClassAnnotations(ReflectionClass $class) - { - $this->parser->setTarget(Target::TARGET_CLASS); - $this->parser->setImports($this->getImports($class)); - $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); - - return $this->parser->parse($class->getDocComment(), 'class ' . $class->getName()); - } - - /** - * Gets a class annotation. - * - * @param ReflectionClass $class The ReflectionClass of the class from which - * the class annotations should be read. - * @param string $annotationName The name of the annotation. - * @return mixed The Annotation or NULL, if the requested annotation does not exist. - */ - public function getClassAnnotation(ReflectionClass $class, $annotationName) - { - $annotations = $this->getClassAnnotations($class); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * Gets the annotations applied to a property. - * - * @param ReflectionProperty $property The ReflectionProperty of the property - * from which the annotations should be read. - * @return array An array of Annotations. - */ - public function getPropertyAnnotations(ReflectionProperty $property) - { - $class = $property->getDeclaringClass(); - $context = 'property ' . $class->getName() . "::\$" . $property->getName(); - $this->parser->setTarget(Target::TARGET_PROPERTY); - $this->parser->setImports($this->getImports($class)); - $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); - - return $this->parser->parse($property->getDocComment(), $context); - } - - /** - * Gets a property annotation. - * - * @param ReflectionProperty $property - * @param string $annotationName The name of the annotation. - * @return mixed The Annotation or NULL, if the requested annotation does not exist. - */ - public function getPropertyAnnotation(ReflectionProperty $property, $annotationName) - { - $annotations = $this->getPropertyAnnotations($property); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * Gets the annotations applied to a method. - * - * @param \ReflectionMethod $method The ReflectionMethod of the method from which - * the annotations should be read. - * - * @return array An array of Annotations. - */ - public function getMethodAnnotations(ReflectionMethod $method) - { - $class = $method->getDeclaringClass(); - $context = 'method ' . $class->getName() . '::' . $method->getName() . '()'; - $this->parser->setTarget(Target::TARGET_METHOD); - $this->parser->setImports($this->getImports($class)); - $this->parser->setIgnoredAnnotationNames($this->getIgnoredAnnotationNames($class)); - - return $this->parser->parse($method->getDocComment(), $context); - } - - /** - * Gets a method annotation. - * - * @param ReflectionMethod $method - * @param string $annotationName The name of the annotation. - * @return mixed The Annotation or NULL, if the requested annotation does not exist. - */ - public function getMethodAnnotation(ReflectionMethod $method, $annotationName) - { - $annotations = $this->getMethodAnnotations($method); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * Returns the ignored annotations for the given class. - * - * @param ReflectionClass $class - * @return array - */ - private function getIgnoredAnnotationNames(ReflectionClass $class) - { - if (isset($this->ignoredAnnotationNames[$name = $class->getName()])) { - return $this->ignoredAnnotationNames[$name]; - } - $this->collectParsingMetadata($class); - - return $this->ignoredAnnotationNames[$name]; - } - - /** - * Retrieve imports - * - * @param \ReflectionClass $class - * @return array - */ - private function getImports(ReflectionClass $class) - { - if (isset($this->imports[$name = $class->getName()])) { - return $this->imports[$name]; - } - $this->collectParsingMetadata($class); - - return $this->imports[$name]; - } - - /** - * Collects parsing metadata for a given class - * - * @param ReflectionClass $class - */ - private function collectParsingMetadata(ReflectionClass $class) - { - $ignoredAnnotationNames = self::$globalIgnoredNames; - - $annotations = $this->preParser->parse($class->getDocComment(), 'class '.$class->name); - foreach ($annotations as $annotation) { - if ($annotation instanceof IgnoreAnnotation) { - foreach ($annotation->names AS $annot) { - $ignoredAnnotationNames[$annot] = true; - } - } - } - - $name = $class->getName(); - $this->imports[$name] = array_merge( - self::$globalImports, - $this->phpParser->parseClass($class), - array('__NAMESPACE__' => $class->getNamespaceName()) - ); - $this->ignoredAnnotationNames[$name] = $ignoredAnnotationNames; - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/AnnotationRegistry.php b/vendor/doctrine/common/lib/Doctrine/Common/Annotations/AnnotationRegistry.php deleted file mode 100644 index dfa846a..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/AnnotationRegistry.php +++ /dev/null @@ -1,139 +0,0 @@ -. - */ - -namespace Doctrine\Common\Annotations; - -/** - * AnnotationRegistry - */ -final class AnnotationRegistry -{ - /** - * A map of namespaces to use for autoloading purposes based on a PSR-0 convention. - * - * Contains the namespace as key and an array of directories as value. If the value is NULL - * the include path is used for checking for the corresponding file. - * - * This autoloading mechanism does not utilize the PHP autoloading but implements autoloading on its own. - * - * @var array - */ - static private $autoloadNamespaces = array(); - - /** - * A map of autoloader callables. - * - * @var array - */ - static private $loaders = array(); - - static public function reset() - { - self::$autoloadNamespaces = array(); - self::$loaders = array(); - } - - /** - * Register file - * - * @param string $file - */ - static public function registerFile($file) - { - require_once $file; - } - - /** - * Add a namespace with one or many directories to look for files or null for the include path. - * - * Loading of this namespaces will be done with a PSR-0 namespace loading algorithm. - * - * @param string $namespace - * @param string|array|null $dirs - */ - static public function registerAutoloadNamespace($namespace, $dirs = null) - { - self::$autoloadNamespaces[$namespace] = $dirs; - } - - /** - * Register multiple namespaces - * - * Loading of this namespaces will be done with a PSR-0 namespace loading algorithm. - * - * @param array $namespaces - */ - static public function registerAutoloadNamespaces(array $namespaces) - { - self::$autoloadNamespaces = array_merge(self::$autoloadNamespaces, $namespaces); - } - - /** - * Register an autoloading callable for annotations, much like spl_autoload_register(). - * - * NOTE: These class loaders HAVE to be silent when a class was not found! - * IMPORTANT: Loaders have to return true if they loaded a class that could contain the searched annotation class. - * - * @param callable $callable - * - * @throws \InvalidArgumentException - */ - static public function registerLoader($callable) - { - if (!is_callable($callable)) { - throw new \InvalidArgumentException("A callable is expected in AnnotationRegistry::registerLoader()."); - } - self::$loaders[] = $callable; - } - - /** - * Autoload an annotation class silently. - * - * @param string $class - * @return boolean - */ - static public function loadAnnotationClass($class) - { - foreach (self::$autoloadNamespaces AS $namespace => $dirs) { - if (strpos($class, $namespace) === 0) { - $file = str_replace("\\", DIRECTORY_SEPARATOR, $class) . ".php"; - if ($dirs === null) { - if ($path = stream_resolve_include_path($file)) { - require $path; - return true; - } - } else { - foreach((array)$dirs AS $dir) { - if (file_exists($dir . DIRECTORY_SEPARATOR . $file)) { - require $dir . DIRECTORY_SEPARATOR . $file; - return true; - } - } - } - } - } - - foreach (self::$loaders AS $loader) { - if (call_user_func($loader, $class) === true) { - return true; - } - } - return false; - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/CachedReader.php b/vendor/doctrine/common/lib/Doctrine/Common/Annotations/CachedReader.php deleted file mode 100644 index e377e3b..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/CachedReader.php +++ /dev/null @@ -1,250 +0,0 @@ -. - */ - -namespace Doctrine\Common\Annotations; - -use Doctrine\Common\Cache\Cache; - -/** - * A cache aware annotation reader. - * - * @author Johannes M. Schmitt - * @author Benjamin Eberlei - */ -final class CachedReader implements Reader -{ - /** - * @var string - */ - private static $CACHE_SALT = '@[Annot]'; - - /** - * @var Reader - */ - private $delegate; - - /** - * @var Cache - */ - private $cache; - - /** - * @var boolean - */ - private $debug; - - /** - * @var array - */ - private $loadedAnnotations; - - /** - * Constructor - * - * @param Reader $reader - * @param Cache $cache - * @param bool $debug - */ - public function __construct(Reader $reader, Cache $cache, $debug = false) - { - $this->delegate = $reader; - $this->cache = $cache; - $this->debug = (Boolean) $debug; - } - - /** - * Get annotations for class - * - * @param \ReflectionClass $class - * @return array - */ - public function getClassAnnotations(\ReflectionClass $class) - { - $cacheKey = $class->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - if (false === ($annots = $this->fetchFromCache($cacheKey, $class))) { - $annots = $this->delegate->getClassAnnotations($class); - $this->saveToCache($cacheKey, $annots); - } - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * Get selected annotation for class - * - * @param \ReflectionClass $class - * @param string $annotationName - * @return null - */ - public function getClassAnnotation(\ReflectionClass $class, $annotationName) - { - foreach ($this->getClassAnnotations($class) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * Get annotations for property - * - * @param \ReflectionProperty $property - * @return array - */ - public function getPropertyAnnotations(\ReflectionProperty $property) - { - $class = $property->getDeclaringClass(); - $cacheKey = $class->getName().'$'.$property->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - if (false === ($annots = $this->fetchFromCache($cacheKey, $class))) { - $annots = $this->delegate->getPropertyAnnotations($property); - $this->saveToCache($cacheKey, $annots); - } - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * Get selected annotation for property - * - * @param \ReflectionProperty $property - * @param string $annotationName - * @return null - */ - public function getPropertyAnnotation(\ReflectionProperty $property, $annotationName) - { - foreach ($this->getPropertyAnnotations($property) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * Get method annotations - * - * @param \ReflectionMethod $method - * @return array - */ - public function getMethodAnnotations(\ReflectionMethod $method) - { - $class = $method->getDeclaringClass(); - $cacheKey = $class->getName().'#'.$method->getName(); - - if (isset($this->loadedAnnotations[$cacheKey])) { - return $this->loadedAnnotations[$cacheKey]; - } - - if (false === ($annots = $this->fetchFromCache($cacheKey, $class))) { - $annots = $this->delegate->getMethodAnnotations($method); - $this->saveToCache($cacheKey, $annots); - } - - return $this->loadedAnnotations[$cacheKey] = $annots; - } - - /** - * Get selected method annotation - * - * @param \ReflectionMethod $method - * @param string $annotationName - * @return null - */ - public function getMethodAnnotation(\ReflectionMethod $method, $annotationName) - { - foreach ($this->getMethodAnnotations($method) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * Clear loaded annotations - */ - public function clearLoadedAnnotations() - { - $this->loadedAnnotations = array(); - } - - /** - * Fetches a value from the cache. - * - * @param string $rawCacheKey The cache key. - * @param \ReflectionClass $class The related class. - * @return mixed|boolean The cached value or false when the value is not in cache. - */ - private function fetchFromCache($rawCacheKey, \ReflectionClass $class) - { - $cacheKey = $rawCacheKey . self::$CACHE_SALT; - if (($data = $this->cache->fetch($cacheKey)) !== false) { - if (!$this->debug || $this->isCacheFresh($cacheKey, $class)) { - return $data; - } - } - - return false; - } - - /** - * Saves a value to the cache - * - * @param string $rawCacheKey The cache key. - * @param mixed $value The value. - */ - private function saveToCache($rawCacheKey, $value) - { - $cacheKey = $rawCacheKey . self::$CACHE_SALT; - $this->cache->save($cacheKey, $value); - if ($this->debug) { - $this->cache->save('[C]'.$cacheKey, time()); - } - } - - /** - * Check if cache is fresh - * - * @param string $cacheKey - * @param \ReflectionClass $class - * @return bool - */ - private function isCacheFresh($cacheKey, \ReflectionClass $class) - { - if (false === $filename = $class->getFilename()) { - return true; - } - - return $this->cache->fetch('[C]'.$cacheKey) >= filemtime($filename); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/DocLexer.php b/vendor/doctrine/common/lib/Doctrine/Common/Annotations/DocLexer.php deleted file mode 100644 index c9a6f7a..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/DocLexer.php +++ /dev/null @@ -1,132 +0,0 @@ -. - */ - -namespace Doctrine\Common\Annotations; - -use Doctrine\Common\Lexer; - -/** - * Simple lexer for docblock annotations. - * - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - * @author Johannes M. Schmitt - */ -final class DocLexer extends Lexer -{ - const T_NONE = 1; - const T_INTEGER = 2; - const T_STRING = 3; - const T_FLOAT = 4; - - // All tokens that are also identifiers should be >= 100 - const T_IDENTIFIER = 100; - const T_AT = 101; - const T_CLOSE_CURLY_BRACES = 102; - const T_CLOSE_PARENTHESIS = 103; - const T_COMMA = 104; - const T_EQUALS = 105; - const T_FALSE = 106; - const T_NAMESPACE_SEPARATOR = 107; - const T_OPEN_CURLY_BRACES = 108; - const T_OPEN_PARENTHESIS = 109; - const T_TRUE = 110; - const T_NULL = 111; - const T_COLON = 112; - - protected $noCase = array( - '@' => self::T_AT, - ',' => self::T_COMMA, - '(' => self::T_OPEN_PARENTHESIS, - ')' => self::T_CLOSE_PARENTHESIS, - '{' => self::T_OPEN_CURLY_BRACES, - '}' => self::T_CLOSE_CURLY_BRACES, - '=' => self::T_EQUALS, - ':' => self::T_COLON, - '\\' => self::T_NAMESPACE_SEPARATOR - ); - - protected $withCase = array( - 'true' => self::T_TRUE, - 'false' => self::T_FALSE, - 'null' => self::T_NULL - ); - - /** - * {@inheritdoc} - */ - protected function getCatchablePatterns() - { - return array( - '[a-z_\\\][a-z0-9_\:\\\]*[a-z]{1}', - '(?:[+-]?[0-9]+(?:[\.][0-9]+)*)(?:[eE][+-]?[0-9]+)?', - '"(?:[^"]|"")*"', - ); - } - - /** - * {@inheritdoc} - */ - protected function getNonCatchablePatterns() - { - return array('\s+', '\*+', '(.)'); - } - - /** - * {@inheritdoc} - * - * @param string $value - * - * @return int - */ - protected function getType(&$value) - { - $type = self::T_NONE; - - if ($value[0] === '"') { - $value = str_replace('""', '"', substr($value, 1, strlen($value) - 2)); - - return self::T_STRING; - } - - if (isset($this->noCase[$value])) { - return $this->noCase[$value]; - } - - if ($value[0] === '_' || $value[0] === '\\' || ctype_alpha($value[0])) { - return self::T_IDENTIFIER; - } - - $lowerValue = strtolower($value); - - if (isset($this->withCase[$lowerValue])) { - return $this->withCase[$lowerValue]; - } - - // Checking numeric value - if (is_numeric($value)) { - return (strpos($value, '.') !== false || stripos($value, 'e') !== false) - ? self::T_FLOAT : self::T_INTEGER; - } - - return $type; - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/DocParser.php b/vendor/doctrine/common/lib/Doctrine/Common/Annotations/DocParser.php deleted file mode 100644 index de31e0b..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/DocParser.php +++ /dev/null @@ -1,988 +0,0 @@ -. - */ - -namespace Doctrine\Common\Annotations; - -use Closure; -use ReflectionClass; -use Doctrine\Common\Annotations\Annotation\Target; -use Doctrine\Common\Annotations\Annotation\Attribute; -use Doctrine\Common\Annotations\Annotation\Attributes; - -/** - * A parser for docblock annotations. - * - * It is strongly discouraged to change the default annotation parsing process. - * - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - * @author Johannes M. Schmitt - * @author Fabio B. Silva - */ -final class DocParser -{ - /** - * An array of all valid tokens for a class name. - * - * @var array - */ - private static $classIdentifiers = array(DocLexer::T_IDENTIFIER, DocLexer::T_TRUE, DocLexer::T_FALSE, DocLexer::T_NULL); - - /** - * The lexer. - * - * @var \Doctrine\Common\Annotations\DocLexer - */ - private $lexer; - - /** - * Current target context - * - * @var string - */ - private $target; - - /** - * Doc Parser used to collect annotation target - * - * @var \Doctrine\Common\Annotations\DocParser - */ - private static $metadataParser; - - /** - * Flag to control if the current annotation is nested or not. - * - * @var boolean - */ - private $isNestedAnnotation = false; - - /** - * Hashmap containing all use-statements that are to be used when parsing - * the given doc block. - * - * @var array - */ - private $imports = array(); - - /** - * This hashmap is used internally to cache results of class_exists() - * look-ups. - * - * @var array - */ - private $classExists = array(); - - /** - * Whether annotations that have not been imported should be ignored. - * - * @var boolean - */ - private $ignoreNotImportedAnnotations = false; - - /** - * An array of default namespaces if operating in simple mode. - * - * @var array - */ - private $namespaces = array(); - - /** - * A list with annotations that are not causing exceptions when not resolved to an annotation class. - * - * The names must be the raw names as used in the class, not the fully qualified - * class names. - * - * @var array - */ - private $ignoredAnnotationNames = array(); - - /** - * @var string - */ - private $context = ''; - - /** - * Hash-map for caching annotation metadata - * @var array - */ - private static $annotationMetadata = array( - 'Doctrine\Common\Annotations\Annotation\Target' => array( - 'is_annotation' => true, - 'has_constructor' => true, - 'properties' => array(), - 'targets_literal' => 'ANNOTATION_CLASS', - 'targets' => Target::TARGET_CLASS, - 'default_property' => 'value', - 'attribute_types' => array( - 'value' => array( - 'required' => false, - 'type' =>'array', - 'array_type'=>'string', - 'value' =>'array' - ) - ), - ), - 'Doctrine\Common\Annotations\Annotation\Attribute' => array( - 'is_annotation' => true, - 'has_constructor' => false, - 'targets_literal' => 'ANNOTATION_ANNOTATION', - 'targets' => Target::TARGET_ANNOTATION, - 'default_property' => 'name', - 'properties' => array( - 'name' => 'name', - 'type' => 'type', - 'required' => 'required' - ), - 'attribute_types' => array( - 'value' => array( - 'required' => true, - 'type' =>'string', - 'value' =>'string' - ), - 'type' => array( - 'required' =>true, - 'type' =>'string', - 'value' =>'string' - ), - 'required' => array( - 'required' =>false, - 'type' =>'boolean', - 'value' =>'boolean' - ) - ), - ), - 'Doctrine\Common\Annotations\Annotation\Attributes' => array( - 'is_annotation' => true, - 'has_constructor' => false, - 'targets_literal' => 'ANNOTATION_CLASS', - 'targets' => Target::TARGET_CLASS, - 'default_property' => 'value', - 'properties' => array( - 'value' => 'value' - ), - 'attribute_types' => array( - 'value' => array( - 'type' =>'array', - 'required' =>true, - 'array_type'=>'Doctrine\Common\Annotations\Annotation\Attribute', - 'value' =>'array' - ) - ), - ), - ); - - /** - * Hash-map for handle types declaration - * - * @var array - */ - private static $typeMap = array( - 'float' => 'double', - 'bool' => 'boolean', - // allow uppercase Boolean in honor of George Boole - 'Boolean' => 'boolean', - 'int' => 'integer', - ); - - /** - * Constructs a new DocParser. - */ - public function __construct() - { - $this->lexer = new DocLexer; - } - - /** - * Sets the annotation names that are ignored during the parsing process. - * - * The names are supposed to be the raw names as used in the class, not the - * fully qualified class names. - * - * @param array $names - */ - public function setIgnoredAnnotationNames(array $names) - { - $this->ignoredAnnotationNames = $names; - } - - /** - * Sets ignore on not-imported annotations - * - * @param $bool - */ - public function setIgnoreNotImportedAnnotations($bool) - { - $this->ignoreNotImportedAnnotations = (Boolean) $bool; - } - - /** - * Sets the default namespaces. - * - * @param array $namespace - * - * @throws \RuntimeException - */ - public function addNamespace($namespace) - { - if ($this->imports) { - throw new \RuntimeException('You must either use addNamespace(), or setImports(), but not both.'); - } - $this->namespaces[] = $namespace; - } - - /** - * Sets the imports - * - * @param array $imports - * @throws \RuntimeException - */ - public function setImports(array $imports) - { - if ($this->namespaces) { - throw new \RuntimeException('You must either use addNamespace(), or setImports(), but not both.'); - } - $this->imports = $imports; - } - - /** - * Sets current target context as bitmask. - * - * @param integer $target - */ - public function setTarget($target) - { - $this->target = $target; - } - - /** - * Parses the given docblock string for annotations. - * - * @param string $input The docblock string to parse. - * @param string $context The parsing context. - * @return array Array of annotations. If no annotations are found, an empty array is returned. - */ - public function parse($input, $context = '') - { - if (false === $pos = strpos($input, '@')) { - return array(); - } - - // also parse whatever character is before the @ - if ($pos > 0) { - $pos -= 1; - } - - $this->context = $context; - $this->lexer->setInput(trim(substr($input, $pos), '* /')); - $this->lexer->moveNext(); - - return $this->Annotations(); - } - - /** - * Attempts to match the given token with the current lookahead token. - * If they match, updates the lookahead token; otherwise raises a syntax error. - * - * @param int $token type of Token. - * @return bool True if tokens match; false otherwise. - */ - private function match($token) - { - if ( ! $this->lexer->isNextToken($token) ) { - $this->syntaxError($this->lexer->getLiteral($token)); - } - - return $this->lexer->moveNext(); - } - - /** - * Attempts to match the current lookahead token with any of the given tokens. - * - * If any of them matches, this method updates the lookahead token; otherwise - * a syntax error is raised. - * - * @param array $tokens - * @return bool - */ - private function matchAny(array $tokens) - { - if ( ! $this->lexer->isNextTokenAny($tokens)) { - $this->syntaxError(implode(' or ', array_map(array($this->lexer, 'getLiteral'), $tokens))); - } - - return $this->lexer->moveNext(); - } - - /** - * Generates a new syntax error. - * - * @param string $expected Expected string. - * @param array $token Optional token. - * - * @throws AnnotationException - */ - private function syntaxError($expected, $token = null) - { - if ($token === null) { - $token = $this->lexer->lookahead; - } - - $message = "Expected {$expected}, got "; - - if ($this->lexer->lookahead === null) { - $message .= 'end of string'; - } else { - $message .= "'{$token['value']}' at position {$token['position']}"; - } - - if (strlen($this->context)) { - $message .= ' in ' . $this->context; - } - - $message .= '.'; - - throw AnnotationException::syntaxError($message); - } - - /** - * Attempt to check if a class exists or not. This never goes through the PHP autoloading mechanism - * but uses the {@link AnnotationRegistry} to load classes. - * - * @param string $fqcn - * @return boolean - */ - private function classExists($fqcn) - { - if (isset($this->classExists[$fqcn])) { - return $this->classExists[$fqcn]; - } - - // first check if the class already exists, maybe loaded through another AnnotationReader - if (class_exists($fqcn, false)) { - return $this->classExists[$fqcn] = true; - } - - // final check, does this class exist? - return $this->classExists[$fqcn] = AnnotationRegistry::loadAnnotationClass($fqcn); - } - - /** - * Collects parsing metadata for a given annotation class - * - * @param string $name The annotation name - */ - private function collectAnnotationMetadata($name) - { - if (self::$metadataParser == null){ - self::$metadataParser = new self(); - self::$metadataParser->setTarget(Target::TARGET_CLASS); - self::$metadataParser->setIgnoreNotImportedAnnotations(true); - self::$metadataParser->setImports(array( - 'target' => 'Doctrine\Common\Annotations\Annotation\Target', - 'attribute' => 'Doctrine\Common\Annotations\Annotation\Attribute', - 'attributes' => 'Doctrine\Common\Annotations\Annotation\Attributes' - )); - AnnotationRegistry::registerFile(__DIR__ . '/Annotation/Target.php'); - AnnotationRegistry::registerFile(__DIR__ . '/Annotation/Attribute.php'); - AnnotationRegistry::registerFile(__DIR__ . '/Annotation/Attributes.php'); - } - - $class = new \ReflectionClass($name); - $docComment = $class->getDocComment(); - - // Sets default values for annotation metadata - $metadata = array( - 'default_property' => null, - 'has_constructor' => (null !== $constructor = $class->getConstructor()) && $constructor->getNumberOfParameters() > 0, - 'properties' => array(), - 'property_types' => array(), - 'attribute_types' => array(), - 'targets_literal' => null, - 'targets' => Target::TARGET_ALL, - 'is_annotation' => false !== strpos($docComment, '@Annotation'), - ); - - // verify that the class is really meant to be an annotation - if ($metadata['is_annotation']) { - foreach (self::$metadataParser->parse($docComment, 'class @' . $name) as $annotation) { - if ($annotation instanceof Target) { - $metadata['targets'] = $annotation->targets; - $metadata['targets_literal'] = $annotation->literal; - - } elseif ($annotation instanceof Attributes) { - foreach ($annotation->value as $attrib) { - // handle internal type declaration - $type = isset(self::$typeMap[$attrib->type]) ? self::$typeMap[$attrib->type] : $attrib->type; - - // handle the case if the property type is mixed - if ('mixed' !== $type) { - // Checks if the property has array - if (false !== $pos = strpos($type, '<')) { - $arrayType = substr($type, $pos+1, -1); - $type = 'array'; - - if (isset(self::$typeMap[$arrayType])) { - $arrayType = self::$typeMap[$arrayType]; - } - - $metadata['attribute_types'][$attrib->name]['array_type'] = $arrayType; - } - - $metadata['attribute_types'][$attrib->name]['type'] = $type; - $metadata['attribute_types'][$attrib->name]['value'] = $attrib->type; - $metadata['attribute_types'][$attrib->name]['required'] = $attrib->required; - } - } - } - } - - // if not has a constructor will inject values into public properties - if (false === $metadata['has_constructor']) { - // collect all public properties - foreach ($class->getProperties(\ReflectionProperty::IS_PUBLIC) as $property) { - $metadata['properties'][$property->name] = $property->name; - - // checks if the property has @var annotation - if ((false !== $propertyComment = $property->getDocComment()) - && false !== strpos($propertyComment, '@var') - && preg_match('/@var\s+([^\s]+)/',$propertyComment, $matches)) { - // literal type declaration - $value = $matches[1]; - - // handle internal type declaration - $type = isset(self::$typeMap[$value]) ? self::$typeMap[$value] : $value; - - // handle the case if the property type is mixed - if ('mixed' !== $type) { - // Checks if the property has @var array annotation - if (false !== $pos = strpos($type, '<')) { - $arrayType = substr($type, $pos+1, -1); - $type = 'array'; - - if (isset(self::$typeMap[$arrayType])) { - $arrayType = self::$typeMap[$arrayType]; - } - - $metadata['attribute_types'][$property->name]['array_type'] = $arrayType; - } - - $metadata['attribute_types'][$property->name]['type'] = $type; - $metadata['attribute_types'][$property->name]['value'] = $value; - $metadata['attribute_types'][$property->name]['required'] = false !== strpos($propertyComment, '@Required'); - } - } - } - - // choose the first property as default property - $metadata['default_property'] = reset($metadata['properties']); - } - } - - self::$annotationMetadata[$name] = $metadata; - } - - /** - * Annotations ::= Annotation {[ "*" ]* [Annotation]}* - * - * @return array - */ - private function Annotations() - { - $annotations = array(); - - while (null !== $this->lexer->lookahead) { - if (DocLexer::T_AT !== $this->lexer->lookahead['type']) { - $this->lexer->moveNext(); - continue; - } - - // make sure the @ is preceded by non-catchable pattern - if (null !== $this->lexer->token && $this->lexer->lookahead['position'] === $this->lexer->token['position'] + strlen($this->lexer->token['value'])) { - $this->lexer->moveNext(); - continue; - } - - // make sure the @ is followed by either a namespace separator, or - // an identifier token - if ((null === $peek = $this->lexer->glimpse()) - || (DocLexer::T_NAMESPACE_SEPARATOR !== $peek['type'] && !in_array($peek['type'], self::$classIdentifiers, true)) - || $peek['position'] !== $this->lexer->lookahead['position'] + 1) { - $this->lexer->moveNext(); - continue; - } - - $this->isNestedAnnotation = false; - if (false !== $annot = $this->Annotation()) { - $annotations[] = $annot; - } - } - - return $annotations; - } - - /** - * Annotation ::= "@" AnnotationName ["(" [Values] ")"] - * AnnotationName ::= QualifiedName | SimpleName - * QualifiedName ::= NameSpacePart "\" {NameSpacePart "\"}* SimpleName - * NameSpacePart ::= identifier | null | false | true - * SimpleName ::= identifier | null | false | true - * - * @throws AnnotationException - * @return mixed False if it is not a valid annotation. - */ - private function Annotation() - { - $this->match(DocLexer::T_AT); - - // check if we have an annotation - $name = $this->Identifier(); - - // only process names which are not fully qualified, yet - // fully qualified names must start with a \ - $originalName = $name; - if ('\\' !== $name[0]) { - $alias = (false === $pos = strpos($name, '\\'))? $name : substr($name, 0, $pos); - - $found = false; - if ($this->namespaces) { - foreach ($this->namespaces as $namespace) { - if ($this->classExists($namespace.'\\'.$name)) { - $name = $namespace.'\\'.$name; - $found = true; - break; - } - } - } elseif (isset($this->imports[$loweredAlias = strtolower($alias)])) { - if (false !== $pos) { - $name = $this->imports[$loweredAlias].substr($name, $pos); - } else { - $name = $this->imports[$loweredAlias]; - } - $found = true; - } elseif (isset($this->imports['__NAMESPACE__']) && $this->classExists($this->imports['__NAMESPACE__'].'\\'.$name)) { - $name = $this->imports['__NAMESPACE__'].'\\'.$name; - $found = true; - } elseif ($this->classExists($name)) { - $found = true; - } - - if (!$found) { - if ($this->ignoreNotImportedAnnotations || isset($this->ignoredAnnotationNames[$name])) { - return false; - } - - throw AnnotationException::semanticalError(sprintf('The annotation "@%s" in %s was never imported. Did you maybe forget to add a "use" statement for this annotation?', $name, $this->context)); - } - } - - if (!$this->classExists($name)) { - throw AnnotationException::semanticalError(sprintf('The annotation "@%s" in %s does not exist, or could not be auto-loaded.', $name, $this->context)); - } - - // at this point, $name contains the fully qualified class name of the - // annotation, and it is also guaranteed that this class exists, and - // that it is loaded - - - // collects the metadata annotation only if there is not yet - if (!isset(self::$annotationMetadata[$name])) { - $this->collectAnnotationMetadata($name); - } - - // verify that the class is really meant to be an annotation and not just any ordinary class - if (self::$annotationMetadata[$name]['is_annotation'] === false) { - if (isset($this->ignoredAnnotationNames[$originalName])) { - return false; - } - - throw AnnotationException::semanticalError(sprintf('The class "%s" is not annotated with @Annotation. Are you sure this class can be used as annotation? If so, then you need to add @Annotation to the _class_ doc comment of "%s". If it is indeed no annotation, then you need to add @IgnoreAnnotation("%s") to the _class_ doc comment of %s.', $name, $name, $originalName, $this->context)); - } - - //if target is nested annotation - $target = $this->isNestedAnnotation ? Target::TARGET_ANNOTATION : $this->target; - - // Next will be nested - $this->isNestedAnnotation = true; - - //if annotation does not support current target - if (0 === (self::$annotationMetadata[$name]['targets'] & $target) && $target) { - throw AnnotationException::semanticalError( - sprintf('Annotation @%s is not allowed to be declared on %s. You may only use this annotation on these code elements: %s.', - $originalName, $this->context, self::$annotationMetadata[$name]['targets_literal']) - ); - } - - $values = array(); - if ($this->lexer->isNextToken(DocLexer::T_OPEN_PARENTHESIS)) { - $this->match(DocLexer::T_OPEN_PARENTHESIS); - - if ( ! $this->lexer->isNextToken(DocLexer::T_CLOSE_PARENTHESIS)) { - $values = $this->Values(); - } - - $this->match(DocLexer::T_CLOSE_PARENTHESIS); - } - - // checks all declared attributes - foreach (self::$annotationMetadata[$name]['attribute_types'] as $property => $type) { - if ($property === self::$annotationMetadata[$name]['default_property'] - && !isset($values[$property]) && isset($values['value'])) { - $property = 'value'; - } - - // handle a not given attribute or null value - if (!isset($values[$property])) { - if ($type['required']) { - throw AnnotationException::requiredError($property, $originalName, $this->context, 'a(n) '.$type['value']); - } - - continue; - } - - if ($type['type'] === 'array') { - // handle the case of a single value - if (!is_array($values[$property])) { - $values[$property] = array($values[$property]); - } - - // checks if the attribute has array type declaration, such as "array" - if (isset($type['array_type'])) { - foreach ($values[$property] as $item) { - if (gettype($item) !== $type['array_type'] && !$item instanceof $type['array_type']) { - throw AnnotationException::typeError($property, $originalName, $this->context, 'either a(n) '.$type['array_type'].', or an array of '.$type['array_type'].'s', $item); - } - } - } - } elseif (gettype($values[$property]) !== $type['type'] && !$values[$property] instanceof $type['type']) { - throw AnnotationException::typeError($property, $originalName, $this->context, 'a(n) '.$type['value'], $values[$property]); - } - } - - // check if the annotation expects values via the constructor, - // or directly injected into public properties - if (self::$annotationMetadata[$name]['has_constructor'] === true) { - return new $name($values); - } - - $instance = new $name(); - foreach ($values as $property => $value) { - if (!isset(self::$annotationMetadata[$name]['properties'][$property])) { - if ('value' !== $property) { - throw AnnotationException::creationError(sprintf('The annotation @%s declared on %s does not have a property named "%s". Available properties: %s', $originalName, $this->context, $property, implode(', ', self::$annotationMetadata[$name]['properties']))); - } - - // handle the case if the property has no annotations - if (!$property = self::$annotationMetadata[$name]['default_property']) { - throw AnnotationException::creationError(sprintf('The annotation @%s declared on %s does not accept any values, but got %s.', $originalName, $this->context, json_encode($values))); - } - } - - $instance->{$property} = $value; - } - - return $instance; - } - - /** - * Values ::= Array | Value {"," Value}* - * - * @return array - */ - private function Values() - { - $values = array(); - - // Handle the case of a single array as value, i.e. @Foo({....}) - if ($this->lexer->isNextToken(DocLexer::T_OPEN_CURLY_BRACES)) { - $values['value'] = $this->Value(); - return $values; - } - - $values[] = $this->Value(); - - while ($this->lexer->isNextToken(DocLexer::T_COMMA)) { - $this->match(DocLexer::T_COMMA); - $token = $this->lexer->lookahead; - $value = $this->Value(); - - if ( ! is_object($value) && ! is_array($value)) { - $this->syntaxError('Value', $token); - } - - $values[] = $value; - } - - foreach ($values as $k => $value) { - if (is_object($value) && $value instanceof \stdClass) { - $values[$value->name] = $value->value; - } else if ( ! isset($values['value'])){ - $values['value'] = $value; - } else { - if ( ! is_array($values['value'])) { - $values['value'] = array($values['value']); - } - - $values['value'][] = $value; - } - - unset($values[$k]); - } - - return $values; - } - - /** - * Constant ::= integer | string | float | boolean - * - * @throws AnnotationException - * @return mixed - */ - private function Constant() - { - $identifier = $this->Identifier(); - - if (!defined($identifier) && false !== strpos($identifier, '::') && '\\' !== $identifier[0]) { - - list($className, $const) = explode('::', $identifier); - $alias = (false === $pos = strpos($className, '\\'))? $className : substr($className, 0, $pos); - - $found = false; - switch (true) { - case !empty ($this->namespaces): - foreach ($this->namespaces as $ns) { - if (class_exists($ns.'\\'.$className) || interface_exists($ns.'\\'.$className)) { - $className = $ns.'\\'.$className; - $found = true; - break; - } - } - break; - - case isset($this->imports[$loweredAlias = strtolower($alias)]): - $found = true; - if (false !== $pos) { - $className = $this->imports[$loweredAlias].substr($className, $pos); - } else { - $className = $this->imports[$loweredAlias]; - } - break; - - default: - if(isset($this->imports['__NAMESPACE__'])) { - $ns = $this->imports['__NAMESPACE__']; - if (class_exists($ns.'\\'.$className) || interface_exists($ns.'\\'.$className)) { - $className = $ns.'\\'.$className; - $found = true; - } - } - break; - } - - if ($found) { - $identifier = $className . '::' . $const; - } - } - - if (!defined($identifier)) { - throw AnnotationException::semanticalErrorConstants($identifier, $this->context); - } - - return constant($identifier); - } - - /** - * Identifier ::= string - * - * @return string - */ - private function Identifier() - { - // check if we have an annotation - if ($this->lexer->isNextTokenAny(self::$classIdentifiers)) { - $this->lexer->moveNext(); - $className = $this->lexer->token['value']; - } else { - $this->syntaxError('namespace separator or identifier'); - } - - while ($this->lexer->lookahead['position'] === ($this->lexer->token['position'] + strlen($this->lexer->token['value'])) - && $this->lexer->isNextToken(DocLexer::T_NAMESPACE_SEPARATOR)) { - - $this->match(DocLexer::T_NAMESPACE_SEPARATOR); - $this->matchAny(self::$classIdentifiers); - $className .= '\\' . $this->lexer->token['value']; - } - - return $className; - } - - /** - * Value ::= PlainValue | FieldAssignment - * - * @return mixed - */ - private function Value() - { - $peek = $this->lexer->glimpse(); - - if (DocLexer::T_EQUALS === $peek['type']) { - return $this->FieldAssignment(); - } - - return $this->PlainValue(); - } - - /** - * PlainValue ::= integer | string | float | boolean | Array | Annotation - * - * @return mixed - */ - private function PlainValue() - { - if ($this->lexer->isNextToken(DocLexer::T_OPEN_CURLY_BRACES)) { - return $this->Arrayx(); - } - - if ($this->lexer->isNextToken(DocLexer::T_AT)) { - return $this->Annotation(); - } - - if ($this->lexer->isNextToken(DocLexer::T_IDENTIFIER)) { - return $this->Constant(); - } - - switch ($this->lexer->lookahead['type']) { - case DocLexer::T_STRING: - $this->match(DocLexer::T_STRING); - return $this->lexer->token['value']; - - case DocLexer::T_INTEGER: - $this->match(DocLexer::T_INTEGER); - return (int)$this->lexer->token['value']; - - case DocLexer::T_FLOAT: - $this->match(DocLexer::T_FLOAT); - return (float)$this->lexer->token['value']; - - case DocLexer::T_TRUE: - $this->match(DocLexer::T_TRUE); - return true; - - case DocLexer::T_FALSE: - $this->match(DocLexer::T_FALSE); - return false; - - case DocLexer::T_NULL: - $this->match(DocLexer::T_NULL); - return null; - - default: - $this->syntaxError('PlainValue'); - } - } - - /** - * FieldAssignment ::= FieldName "=" PlainValue - * FieldName ::= identifier - * - * @return array - */ - private function FieldAssignment() - { - $this->match(DocLexer::T_IDENTIFIER); - $fieldName = $this->lexer->token['value']; - - $this->match(DocLexer::T_EQUALS); - - $item = new \stdClass(); - $item->name = $fieldName; - $item->value = $this->PlainValue(); - - return $item; - } - - /** - * Array ::= "{" ArrayEntry {"," ArrayEntry}* [","] "}" - * - * @return array - */ - private function Arrayx() - { - $array = $values = array(); - - $this->match(DocLexer::T_OPEN_CURLY_BRACES); - $values[] = $this->ArrayEntry(); - - while ($this->lexer->isNextToken(DocLexer::T_COMMA)) { - $this->match(DocLexer::T_COMMA); - - // optional trailing comma - if ($this->lexer->isNextToken(DocLexer::T_CLOSE_CURLY_BRACES)) { - break; - } - - $values[] = $this->ArrayEntry(); - } - - $this->match(DocLexer::T_CLOSE_CURLY_BRACES); - - foreach ($values as $value) { - list ($key, $val) = $value; - - if ($key !== null) { - $array[$key] = $val; - } else { - $array[] = $val; - } - } - - return $array; - } - - /** - * ArrayEntry ::= Value | KeyValuePair - * KeyValuePair ::= Key ("=" | ":") PlainValue | Constant - * Key ::= string | integer | Constant - * - * @return array - */ - private function ArrayEntry() - { - $peek = $this->lexer->glimpse(); - - if (DocLexer::T_EQUALS === $peek['type'] - || DocLexer::T_COLON === $peek['type']) { - - if ($this->lexer->isNextToken(DocLexer::T_IDENTIFIER)) { - $key = $this->Constant(); - } else { - $this->matchAny(array(DocLexer::T_INTEGER, DocLexer::T_STRING)); - $key = $this->lexer->token['value']; - } - - $this->matchAny(array(DocLexer::T_EQUALS, DocLexer::T_COLON)); - - return array($key, $this->PlainValue()); - } - - return array(null, $this->Value()); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/FileCacheReader.php b/vendor/doctrine/common/lib/Doctrine/Common/Annotations/FileCacheReader.php deleted file mode 100644 index 3934861..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/FileCacheReader.php +++ /dev/null @@ -1,258 +0,0 @@ -. - */ - -namespace Doctrine\Common\Annotations; - - -/** - * File cache reader for annotations. - * - * @author Johannes M. Schmitt - * @author Benjamin Eberlei - */ -class FileCacheReader implements Reader -{ - /** - * @var Reader - */ - private $reader; - - /** - * @var string - */ - private $dir; - - /** - * @var bool - */ - private $debug; - - /** - * @var array - */ - private $loadedAnnotations = array(); - - /** - * Constructor - * - * @param Reader $reader - * @param string $cacheDir - * @param bool $debug - * - * @throws \InvalidArgumentException - */ - public function __construct(Reader $reader, $cacheDir, $debug = false) - { - $this->reader = $reader; - if (!is_dir($cacheDir) && !@mkdir($cacheDir, 0777, true)) { - throw new \InvalidArgumentException(sprintf('The directory "%s" does not exist and could not be created.', $cacheDir)); - } - if (!is_writable($cacheDir)) { - throw new \InvalidArgumentException(sprintf('The directory "%s" is not writable. Both, the webserver and the console user need access. You can manage access rights for multiple users with "chmod +a". If your system does not support this, check out the acl package.', $cacheDir)); - } - - $this->dir = rtrim($cacheDir, '\\/'); - $this->debug = $debug; - } - - /** - * Retrieve annotations for class - * - * @param \ReflectionClass $class - * @return array - */ - public function getClassAnnotations(\ReflectionClass $class) - { - $key = $class->getName(); - - if (isset($this->loadedAnnotations[$key])) { - return $this->loadedAnnotations[$key]; - } - - $path = $this->dir.'/'.strtr($key, '\\', '-').'.cache.php'; - if (!file_exists($path)) { - $annot = $this->reader->getClassAnnotations($class); - $this->saveCacheFile($path, $annot); - return $this->loadedAnnotations[$key] = $annot; - } - - if ($this->debug - && (false !== $filename = $class->getFilename()) - && filemtime($path) < filemtime($filename)) { - @unlink($path); - - $annot = $this->reader->getClassAnnotations($class); - $this->saveCacheFile($path, $annot); - return $this->loadedAnnotations[$key] = $annot; - } - - return $this->loadedAnnotations[$key] = include $path; - } - - /** - * Get annotations for property - * - * @param \ReflectionProperty $property - * @return array - */ - public function getPropertyAnnotations(\ReflectionProperty $property) - { - $class = $property->getDeclaringClass(); - $key = $class->getName().'$'.$property->getName(); - - if (isset($this->loadedAnnotations[$key])) { - return $this->loadedAnnotations[$key]; - } - - $path = $this->dir.'/'.strtr($key, '\\', '-').'.cache.php'; - if (!file_exists($path)) { - $annot = $this->reader->getPropertyAnnotations($property); - $this->saveCacheFile($path, $annot); - return $this->loadedAnnotations[$key] = $annot; - } - - if ($this->debug - && (false !== $filename = $class->getFilename()) - && filemtime($path) < filemtime($filename)) { - unlink($path); - - $annot = $this->reader->getPropertyAnnotations($property); - $this->saveCacheFile($path, $annot); - return $this->loadedAnnotations[$key] = $annot; - } - - return $this->loadedAnnotations[$key] = include $path; - } - - /** - * Retrieve annotations for method - * - * @param \ReflectionMethod $method - * @return array - */ - public function getMethodAnnotations(\ReflectionMethod $method) - { - $class = $method->getDeclaringClass(); - $key = $class->getName().'#'.$method->getName(); - - if (isset($this->loadedAnnotations[$key])) { - return $this->loadedAnnotations[$key]; - } - - $path = $this->dir.'/'.strtr($key, '\\', '-').'.cache.php'; - if (!file_exists($path)) { - $annot = $this->reader->getMethodAnnotations($method); - $this->saveCacheFile($path, $annot); - return $this->loadedAnnotations[$key] = $annot; - } - - if ($this->debug - && (false !== $filename = $class->getFilename()) - && filemtime($path) < filemtime($filename)) { - unlink($path); - - $annot = $this->reader->getMethodAnnotations($method); - $this->saveCacheFile($path, $annot); - return $this->loadedAnnotations[$key] = $annot; - } - - return $this->loadedAnnotations[$key] = include $path; - } - - /** - * Save cache file - * - * @param string $path - * @param mixed $data - */ - private function saveCacheFile($path, $data) - { - file_put_contents($path, 'getClassAnnotations($class); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * Gets a method annotation. - * - * @param \ReflectionMethod $method - * @param string $annotationName The name of the annotation. - * @return mixed The Annotation or NULL, if the requested annotation does not exist. - */ - public function getMethodAnnotation(\ReflectionMethod $method, $annotationName) - { - $annotations = $this->getMethodAnnotations($method); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * Gets a property annotation. - * - * @param \ReflectionProperty $property - * @param string $annotationName The name of the annotation. - * @return mixed The Annotation or NULL, if the requested annotation does not exist. - */ - public function getPropertyAnnotation(\ReflectionProperty $property, $annotationName) - { - $annotations = $this->getPropertyAnnotations($property); - - foreach ($annotations as $annotation) { - if ($annotation instanceof $annotationName) { - return $annotation; - } - } - - return null; - } - - /** - * Clear stores annotations - */ - public function clearLoadedAnnotations() - { - $this->loadedAnnotations = array(); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/IndexedReader.php b/vendor/doctrine/common/lib/Doctrine/Common/Annotations/IndexedReader.php deleted file mode 100644 index 2dfdd4d..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/IndexedReader.php +++ /dev/null @@ -1,141 +0,0 @@ -. - */ - -namespace Doctrine\Common\Annotations; - -use Doctrine\Common\Annotations\Reader; - -/** - * Allows the reader to be used in-place of Doctrine's reader. - * - * @author Johannes M. Schmitt - */ -class IndexedReader implements Reader -{ - /** - * @var Reader - */ - private $delegate; - - /** - * Constructor - * - * @param Reader $reader - */ - public function __construct(Reader $reader) - { - $this->delegate = $reader; - } - - /** - * Get Annotations for class - * - * @param \ReflectionClass $class - * @return array - */ - public function getClassAnnotations(\ReflectionClass $class) - { - $annotations = array(); - foreach ($this->delegate->getClassAnnotations($class) as $annot) { - $annotations[get_class($annot)] = $annot; - } - - return $annotations; - } - - /** - * Get selected annotation for class - * - * @param \ReflectionClass $class - * @param string $annotation - * @return mixed - */ - public function getClassAnnotation(\ReflectionClass $class, $annotation) - { - return $this->delegate->getClassAnnotation($class, $annotation); - } - - /** - * Get Annotations for method - * - * @param \ReflectionMethod $method - * @return array - */ - public function getMethodAnnotations(\ReflectionMethod $method) - { - $annotations = array(); - foreach ($this->delegate->getMethodAnnotations($method) as $annot) { - $annotations[get_class($annot)] = $annot; - } - - return $annotations; - } - - /** - * Get selected annotation for method - * - * @param \ReflectionMethod $method - * @param string $annotation - * @return mixed - */ - public function getMethodAnnotation(\ReflectionMethod $method, $annotation) - { - return $this->delegate->getMethodAnnotation($method, $annotation); - } - - /** - * Get annotations for property - * - * @param \ReflectionProperty $property - * @return array - */ - public function getPropertyAnnotations(\ReflectionProperty $property) - { - $annotations = array(); - foreach ($this->delegate->getPropertyAnnotations($property) as $annot) { - $annotations[get_class($annot)] = $annot; - } - - return $annotations; - } - - /** - * Get selected annotation for property - * - * @param \ReflectionProperty $property - * @param string $annotation - * @return mixed - */ - public function getPropertyAnnotation(\ReflectionProperty $property, $annotation) - { - return $this->delegate->getPropertyAnnotation($property, $annotation); - } - - /** - * Proxy all methods to the delegate. - * - * @param string $method - * @param array $args - * @return mixed - */ - public function __call($method, $args) - { - return call_user_func_array(array($this->delegate, $method), $args); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/PhpParser.php b/vendor/doctrine/common/lib/Doctrine/Common/Annotations/PhpParser.php deleted file mode 100644 index c09dd51..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/PhpParser.php +++ /dev/null @@ -1,80 +0,0 @@ -. - */ - -namespace Doctrine\Common\Annotations; - -use SplFileObject; - -/** - * Parses a file for namespaces/use/class declarations. - * - * @author Fabien Potencier - * @author Christian Kaps - */ -final class PhpParser -{ - /** - * Parses a class. - * - * @param \ReflectionClass $class A ReflectionClass object. - * @return array A list with use statements in the form (Alias => FQN). - */ - public function parseClass(\ReflectionClass $class) - { - if (method_exists($class, 'getUseStatements')) { - return $class->getUseStatements(); - } - - if (false === $filename = $class->getFilename()) { - return array(); - } - - $content = $this->getFileContent($filename, $class->getStartLine()); - $namespace = str_replace('\\', '\\\\', $class->getNamespaceName()); - $content = preg_replace('/^.*?(\bnamespace\s+' . $namespace . '\s*[;{].*)$/s', '\\1', $content); - $tokenizer = new TokenParser('parseUseStatements($class->getNamespaceName()); - - return $statements; - } - - /** - * Get the content of the file right up to the given line number. - * - * @param string $filename The name of the file to load. - * @param int $lineNumber The number of lines to read from file. - * @return string The content of the file. - */ - private function getFileContent($filename, $lineNumber) - { - $content = ''; - $lineCnt = 0; - $file = new SplFileObject($filename); - while (!$file->eof()) { - if ($lineCnt++ == $lineNumber) { - break; - } - - $content .= $file->fgets(); - } - - return $content; - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Reader.php b/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Reader.php deleted file mode 100644 index 6a01cb4..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/Reader.php +++ /dev/null @@ -1,67 +0,0 @@ -. - */ - -namespace Doctrine\Common\Annotations; - -/** - * Interface for annotation readers. - * - * @author Johannes M. Schmitt - */ -interface Reader -{ - /** - * @param \ReflectionClass $class - * @return mixed - */ - function getClassAnnotations(\ReflectionClass $class); - - /** - * @param \ReflectionClass $class - * @param string $annotationName - * @return mixed - */ - function getClassAnnotation(\ReflectionClass $class, $annotationName); - - /** - * @param \ReflectionMethod $method - * @return mixed - */ - function getMethodAnnotations(\ReflectionMethod $method); - - /** - * @param \ReflectionMethod $method - * @param string $annotationName - * @return mixed - */ - function getMethodAnnotation(\ReflectionMethod $method, $annotationName); - - /** - * @param \ReflectionProperty $property - * @return mixed - */ - function getPropertyAnnotations(\ReflectionProperty $property); - - /** - * @param \ReflectionProperty $property - * @param string $annotationName - * @return mixed - */ - function getPropertyAnnotation(\ReflectionProperty $property, $annotationName); -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php b/vendor/doctrine/common/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php deleted file mode 100644 index 4210d90..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/SimpleAnnotationReader.php +++ /dev/null @@ -1,157 +0,0 @@ -. - */ - -namespace Doctrine\Common\Annotations; - -use Doctrine\Common\Annotations\Annotation\Target; - -/** - * Simple Annotation Reader. - * - * This annotation reader is intended to be used in projects where you have - * full-control over all annotations that are available. - * - * @since 2.2 - * @author Johannes M. Schmitt - * @author Fabio B. Silva - */ -class SimpleAnnotationReader implements Reader -{ - /** - * @var DocParser - */ - private $parser; - - /** - * Constructor. - * - * Initializes a new SimpleAnnotationReader. - */ - public function __construct() - { - $this->parser = new DocParser(); - $this->parser->setIgnoreNotImportedAnnotations(true); - } - - /** - * Adds a namespace in which we will look for annotations. - * - * @param string $namespace - */ - public function addNamespace($namespace) - { - $this->parser->addNamespace($namespace); - } - - /** - * Gets the annotations applied to a class. - * - * @param \ReflectionClass $class The ReflectionClass of the class from which - * the class annotations should be read. - * - * @return array An array of Annotations. - */ - public function getClassAnnotations(\ReflectionClass $class) - { - return $this->parser->parse($class->getDocComment(), 'class '.$class->getName()); - } - - /** - * Gets the annotations applied to a method. - * - * @param \ReflectionMethod $method The ReflectionMethod of the method from which - * the annotations should be read. - * - * @return array An array of Annotations. - */ - public function getMethodAnnotations(\ReflectionMethod $method) - { - return $this->parser->parse($method->getDocComment(), 'method '.$method->getDeclaringClass()->name.'::'.$method->getName().'()'); - } - - /** - * Gets the annotations applied to a property. - * - * @param \ReflectionProperty $property The ReflectionProperty of the property - * from which the annotations should be read. - * - * @return array An array of Annotations. - */ - public function getPropertyAnnotations(\ReflectionProperty $property) - { - return $this->parser->parse($property->getDocComment(), 'property '.$property->getDeclaringClass()->name.'::$'.$property->getName()); - } - - /** - * Gets a class annotation. - * - * @param \ReflectionClass $class The ReflectionClass of the class from which - * the class annotations should be read. - * @param string $annotationName The name of the annotation. - * - * @return mixed The Annotation or NULL, if the requested annotation does not exist. - */ - public function getClassAnnotation(\ReflectionClass $class, $annotationName) - { - foreach ($this->getClassAnnotations($class) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * Gets a method annotation. - * - * @param \ReflectionMethod $method - * @param string $annotationName The name of the annotation. - * - * @return mixed The Annotation or NULL, if the requested annotation does not exist. - */ - public function getMethodAnnotation(\ReflectionMethod $method, $annotationName) - { - foreach ($this->getMethodAnnotations($method) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } - - /** - * Gets a property annotation. - * - * @param \ReflectionProperty $property - * @param string $annotationName The name of the annotation. - * @return mixed The Annotation or NULL, if the requested annotation does not exist. - */ - public function getPropertyAnnotation(\ReflectionProperty $property, $annotationName) - { - foreach ($this->getPropertyAnnotations($property) as $annot) { - if ($annot instanceof $annotationName) { - return $annot; - } - } - - return null; - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/TokenParser.php b/vendor/doctrine/common/lib/Doctrine/Common/Annotations/TokenParser.php deleted file mode 100644 index a1ef115..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Annotations/TokenParser.php +++ /dev/null @@ -1,175 +0,0 @@ -. - */ - -namespace Doctrine\Common\Annotations; - -/** - * Parses a file for namespaces/use/class declarations. - * - * @author Fabien Potencier - * @author Christian Kaps - */ -class TokenParser -{ - /** - * The token list. - * - * @var array - */ - private $tokens; - - /** - * The number of tokens. - * - * @var int - */ - private $numTokens = 0; - - /** - * The current array pointer. - * - * @var int - */ - private $pointer = 0; - - public function __construct($contents) - { - $this->tokens = token_get_all($contents); - $this->numTokens = count($this->tokens); - $this->pointer = 0; - } - - /** - * Gets the next non whitespace and non comment token. - * - * @param $docCommentIsComment - * If TRUE then a doc comment is considered a comment and skipped. - * If FALSE then only whitespace and normal comments are skipped. - * - * @return array The token if exists, null otherwise. - */ - public function next($docCommentIsComment = TRUE) - { - for ($i = $this->pointer; $i < $this->numTokens; $i++) { - $this->pointer++; - if ($this->tokens[$i][0] === T_WHITESPACE || - $this->tokens[$i][0] === T_COMMENT || - ($docCommentIsComment && $this->tokens[$i][0] === T_DOC_COMMENT)) { - - continue; - } - - return $this->tokens[$i]; - } - - return null; - } - - /** - * Parse a single use statement. - * - * @return array A list with all found class names for a use statement. - */ - public function parseUseStatement() - { - $class = ''; - $alias = ''; - $statements = array(); - $explicitAlias = false; - while (($token = $this->next())) { - $isNameToken = $token[0] === T_STRING || $token[0] === T_NS_SEPARATOR; - if (!$explicitAlias && $isNameToken) { - $class .= $token[1]; - $alias = $token[1]; - } else if ($explicitAlias && $isNameToken) { - $alias .= $token[1]; - } else if ($token[0] === T_AS) { - $explicitAlias = true; - $alias = ''; - } else if ($token === ',') { - $statements[strtolower($alias)] = $class; - $class = ''; - $alias = ''; - $explicitAlias = false; - } else if ($token === ';') { - $statements[strtolower($alias)] = $class; - break; - } else { - break; - } - } - - return $statements; - } - - /** - * Get all use statements. - * - * @param string $namespaceName The namespace name of the reflected class. - * @return array A list with all found use statements. - */ - public function parseUseStatements($namespaceName) - { - $statements = array(); - while (($token = $this->next())) { - if ($token[0] === T_USE) { - $statements = array_merge($statements, $this->parseUseStatement()); - continue; - } - if ($token[0] !== T_NAMESPACE || $this->parseNamespace() != $namespaceName) { - continue; - } - - // Get fresh array for new namespace. This is to prevent the parser to collect the use statements - // for a previous namespace with the same name. This is the case if a namespace is defined twice - // or if a namespace with the same name is commented out. - $statements = array(); - } - - return $statements; - } - - /** - * Get the namespace. - * - * @return string The found namespace. - */ - public function parseNamespace() - { - $name = ''; - while (($token = $this->next()) && ($token[0] === T_STRING || $token[0] === T_NS_SEPARATOR)) { - $name .= $token[1]; - } - - return $name; - } - - /** - * Get the class name. - * - * @return string The foundclass name. - */ - public function parseClass() - { - // Namespaces and class names are tokenized the same: T_STRINGs - // separated by T_NS_SEPARATOR so we can use one function to provide - // both. - return $this->parseNamespace(); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Cache/ApcCache.php b/vendor/doctrine/common/lib/Doctrine/Common/Cache/ApcCache.php deleted file mode 100644 index 2d0cd23..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Cache/ApcCache.php +++ /dev/null @@ -1,93 +0,0 @@ -. - */ - -namespace Doctrine\Common\Cache; - -/** - * APC cache provider. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.0 - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - * @author David Abdemoulaie - */ -class ApcCache extends CacheProvider -{ - /** - * {@inheritdoc} - */ - protected function doFetch($id) - { - return apc_fetch($id); - } - - /** - * {@inheritdoc} - */ - protected function doContains($id) - { - return apc_exists($id); - } - - /** - * {@inheritdoc} - */ - protected function doSave($id, $data, $lifeTime = 0) - { - return (bool) apc_store($id, $data, (int) $lifeTime); - } - - /** - * {@inheritdoc} - */ - protected function doDelete($id) - { - return apc_delete($id); - } - - /** - * {@inheritdoc} - */ - protected function doFlush() - { - return apc_clear_cache() && apc_clear_cache('user'); - } - - /** - * {@inheritdoc} - */ - protected function doGetStats() - { - $info = apc_cache_info(); - $sma = apc_sma_info(); - - return array( - Cache::STATS_HITS => $info['num_hits'], - Cache::STATS_MISSES => $info['num_misses'], - Cache::STATS_UPTIME => $info['start_time'], - Cache::STATS_MEMORY_USAGE => $info['mem_size'], - Cache::STATS_MEMORY_AVAILIABLE => $sma['avail_mem'], - ); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Cache/ArrayCache.php b/vendor/doctrine/common/lib/Doctrine/Common/Cache/ArrayCache.php deleted file mode 100644 index a7a70aa..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Cache/ArrayCache.php +++ /dev/null @@ -1,96 +0,0 @@ -. - */ - -namespace Doctrine\Common\Cache; - -/** - * Array cache driver. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.0 - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - * @author David Abdemoulaie - */ -class ArrayCache extends CacheProvider -{ - /** - * @var array $data - */ - private $data = array(); - - /** - * {@inheritdoc} - */ - protected function doFetch($id) - { - return (isset($this->data[$id])) ? $this->data[$id] : false; - } - - /** - * {@inheritdoc} - */ - protected function doContains($id) - { - return isset($this->data[$id]); - } - - /** - * {@inheritdoc} - */ - protected function doSave($id, $data, $lifeTime = 0) - { - $this->data[$id] = $data; - - return true; - } - - /** - * {@inheritdoc} - */ - protected function doDelete($id) - { - unset($this->data[$id]); - - return true; - } - - /** - * {@inheritdoc} - */ - protected function doFlush() - { - $this->data = array(); - - return true; - } - - /** - * {@inheritdoc} - */ - protected function doGetStats() - { - return null; - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Cache/Cache.php b/vendor/doctrine/common/lib/Doctrine/Common/Cache/Cache.php deleted file mode 100644 index 5493562..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Cache/Cache.php +++ /dev/null @@ -1,102 +0,0 @@ -. - */ - -namespace Doctrine\Common\Cache; - -/** - * Interface for cache drivers. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.0 - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - * @author Fabio B. Silva - */ -interface Cache -{ - const STATS_HITS = 'hits'; - const STATS_MISSES = 'misses'; - const STATS_UPTIME = 'uptime'; - const STATS_MEMORY_USAGE = 'memory_usage'; - const STATS_MEMORY_AVAILIABLE = 'memory_available'; - - /** - * Fetches an entry from the cache. - * - * @param string $id cache id The id of the cache entry to fetch. - * @return mixed The cached data or FALSE, if no cache entry exists for the given id. - */ - function fetch($id); - - /** - * Test if an entry exists in the cache. - * - * @param string $id cache id The cache id of the entry to check for. - * @return boolean TRUE if a cache entry exists for the given cache id, FALSE otherwise. - */ - function contains($id); - - /** - * Puts data into the cache. - * - * @param string $id The cache id. - * @param mixed $data The cache entry/data. - * @param int $lifeTime The lifetime. If != 0, sets a specific lifetime for this cache entry (0 => infinite lifeTime). - * @return boolean TRUE if the entry was successfully stored in the cache, FALSE otherwise. - */ - function save($id, $data, $lifeTime = 0); - - /** - * Deletes a cache entry. - * - * @param string $id cache id - * @return boolean TRUE if the cache entry was successfully deleted, FALSE otherwise. - */ - function delete($id); - - /** - * Retrieves cached information from data store - * - * The server's statistics array has the following values: - * - * - hits - * Number of keys that have been requested and found present. - * - * - misses - * Number of items that have been requested and not found. - * - * - uptime - * Time that the server is running. - * - * - memory_usage - * Memory used by this server to store items. - * - * - memory_available - * Memory allowed to use for storage. - * - * @since 2.2 - * @var array Associative array with server's statistics if available, NULL otherwise. - */ - function getStats(); -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Cache/CacheProvider.php b/vendor/doctrine/common/lib/Doctrine/Common/Cache/CacheProvider.php deleted file mode 100644 index 4221a62..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Cache/CacheProvider.php +++ /dev/null @@ -1,231 +0,0 @@ -. - */ - -namespace Doctrine\Common\Cache; - -/** - * Base class for cache provider implementations. - * - * @since 2.2 - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - * @author Fabio B. Silva - */ -abstract class CacheProvider implements Cache -{ - const DOCTRINE_NAMESPACE_CACHEKEY = 'DoctrineNamespaceCacheKey[%s]'; - - /** - * @var string The namespace to prefix all cache ids with - */ - private $namespace = ''; - - /** - * @var string The namespace version - */ - private $namespaceVersion; - - /** - * Set the namespace to prefix all cache ids with. - * - * @param string $namespace - * @return void - */ - public function setNamespace($namespace) - { - $this->namespace = (string) $namespace; - } - - /** - * Retrieve the namespace that prefixes all cache ids. - * - * @return string - */ - public function getNamespace() - { - return $this->namespace; - } - - /** - * {@inheritdoc} - */ - public function fetch($id) - { - return $this->doFetch($this->getNamespacedId($id)); - } - - /** - * {@inheritdoc} - */ - public function contains($id) - { - return $this->doContains($this->getNamespacedId($id)); - } - - /** - * {@inheritdoc} - */ - public function save($id, $data, $lifeTime = 0) - { - return $this->doSave($this->getNamespacedId($id), $data, $lifeTime); - } - - /** - * {@inheritdoc} - */ - public function delete($id) - { - return $this->doDelete($this->getNamespacedId($id)); - } - - /** - * {@inheritdoc} - */ - public function getStats() - { - return $this->doGetStats(); - } - - /** - * Deletes all cache entries. - * - * @return boolean TRUE if the cache entries were successfully flushed, FALSE otherwise. - */ - public function flushAll() - { - return $this->doFlush(); - } - - /** - * Delete all cache entries. - * - * @return boolean TRUE if the cache entries were successfully deleted, FALSE otherwise. - */ - public function deleteAll() - { - $namespaceCacheKey = $this->getNamespaceCacheKey(); - $namespaceVersion = $this->getNamespaceVersion() + 1; - - $this->namespaceVersion = $namespaceVersion; - - return $this->doSave($namespaceCacheKey, $namespaceVersion); - } - - /** - * Prefix the passed id with the configured namespace value - * - * @param string $id The id to namespace - * @return string $id The namespaced id - */ - private function getNamespacedId($id) - { - $namespaceVersion = $this->getNamespaceVersion(); - - return sprintf('%s[%s][%s]', $this->namespace, $id, $namespaceVersion); - } - - /** - * Namespace cache key - * - * @return string $namespaceCacheKey - */ - private function getNamespaceCacheKey() - { - return sprintf(self::DOCTRINE_NAMESPACE_CACHEKEY, $this->namespace); - } - - /** - * Namespace version - * - * @return string $namespaceVersion - */ - private function getNamespaceVersion() - { - if (null !== $this->namespaceVersion) { - return $this->namespaceVersion; - } - - $namespaceCacheKey = $this->getNamespaceCacheKey(); - $namespaceVersion = $this->doFetch($namespaceCacheKey); - - if (false === $namespaceVersion) { - $namespaceVersion = 1; - - $this->doSave($namespaceCacheKey, $namespaceVersion); - } - - $this->namespaceVersion = $namespaceVersion; - - return $this->namespaceVersion; - } - - /** - * Fetches an entry from the cache. - * - * @param string $id cache id The id of the cache entry to fetch. - * @return string The cached data or FALSE, if no cache entry exists for the given id. - */ - abstract protected function doFetch($id); - - /** - * Test if an entry exists in the cache. - * - * @param string $id cache id The cache id of the entry to check for. - * @return boolean TRUE if a cache entry exists for the given cache id, FALSE otherwise. - */ - abstract protected function doContains($id); - - /** - * Puts data into the cache. - * - * @param string $id The cache id. - * @param string $data The cache entry/data. - * @param bool|int $lifeTime The lifetime. If != false, sets a specific lifetime for this - * cache entry (null => infinite lifeTime). - * - * @return boolean TRUE if the entry was successfully stored in the cache, FALSE otherwise. - */ - abstract protected function doSave($id, $data, $lifeTime = false); - - /** - * Deletes a cache entry. - * - * @param string $id cache id - * @return boolean TRUE if the cache entry was successfully deleted, FALSE otherwise. - */ - abstract protected function doDelete($id); - - /** - * Deletes all cache entries. - * - * @return boolean TRUE if the cache entry was successfully deleted, FALSE otherwise. - */ - abstract protected function doFlush(); - - /** - * Retrieves cached information from data store - * - * @since 2.2 - * @return array An associative array with server's statistics if available, NULL otherwise. - */ - abstract protected function doGetStats(); -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Cache/FileCache.php b/vendor/doctrine/common/lib/Doctrine/Common/Cache/FileCache.php deleted file mode 100644 index da650b4..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Cache/FileCache.php +++ /dev/null @@ -1,132 +0,0 @@ -. - */ - -namespace Doctrine\Common\Cache; - -/** - * Base file cache driver. - * - * @since 2.3 - * @author Fabio B. Silva - */ -abstract class FileCache extends CacheProvider -{ - /** - * @var string Cache directory. - */ - protected $directory; - - /** - * @var string Cache file extension. - */ - protected $extension; - - /** - * Constructor - * - * @param string $directory Cache directory. - * @param string $directory Cache file extension. - * - * @throws \InvalidArgumentException - */ - public function __construct($directory, $extension = null) - { - if ( ! is_dir($directory) && ! @mkdir($directory, 0777, true)) { - throw new \InvalidArgumentException(sprintf( - 'The directory "%s" does not exist and could not be created.', - $directory - )); - } - - if ( ! is_writable($directory)) { - throw new \InvalidArgumentException(sprintf( - 'The directory "%s" is not writable.', - $directory - )); - } - - $this->directory = realpath($directory); - $this->extension = $extension ?: $this->extension; - } - - /** - * Gets the cache directory. - * - * @return string - */ - public function getDirectory() - { - return $this->directory; - } - - /** - * Gets the cache file extension. - * - * @return string - */ - public function getExtension() - { - return $this->extension; - } - - /** - * @return string - */ - protected function getFilename($id) - { - $path = implode(str_split(md5($id), 12), DIRECTORY_SEPARATOR); - $path = $this->directory . DIRECTORY_SEPARATOR . $path; - - return $path . DIRECTORY_SEPARATOR . $id . $this->extension; - } - - /** - * {@inheritdoc} - */ - protected function doDelete($id) - { - return @unlink($this->getFilename($id)); - } - - /** - * {@inheritdoc} - */ - protected function doFlush() - { - $pattern = '/^.+\\' . $this->extension . '$/i'; - $iterator = new \RecursiveDirectoryIterator($this->directory); - $iterator = new \RecursiveIteratorIterator($iterator); - $iterator = new \RegexIterator($iterator, $pattern); - - foreach ($iterator as $name => $file) { - @unlink($name); - } - - return true; - } - - /** - * {@inheritdoc} - */ - protected function doGetStats() - { - return null; - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Cache/FilesystemCache.php b/vendor/doctrine/common/lib/Doctrine/Common/Cache/FilesystemCache.php deleted file mode 100644 index a27a717..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Cache/FilesystemCache.php +++ /dev/null @@ -1,114 +0,0 @@ -. - */ - -namespace Doctrine\Common\Cache; - -/** - * Filesystem cache driver. - * - * @since 2.3 - * @author Fabio B. Silva - */ -class FilesystemCache extends FileCache -{ - const EXTENSION = '.doctrinecache.data'; - - /** - * {@inheritdoc} - */ - protected $extension = self::EXTENSION; - - /** - * {@inheritdoc} - */ - protected function doFetch($id) - { - $data = ''; - $lifetime = -1; - $filename = $this->getFilename($id); - - if ( ! file_exists($filename)) { - return false; - } - - $resource = fopen($filename, "r"); - - if (false !== ($line = fgets($resource))) { - $lifetime = (integer) $line; - } - - if ($lifetime !== 0 && $lifetime < time()) { - fclose($resource); - - return false; - } - - while (false !== ($line = fgets($resource))) { - $data .= $line; - } - - fclose($resource); - - return unserialize($data); - } - - /** - * {@inheritdoc} - */ - protected function doContains($id) - { - $lifetime = -1; - $filename = $this->getFilename($id); - - if ( ! file_exists($filename)) { - return false; - } - - $resource = fopen($filename, "r"); - - if (false !== ($line = fgets($resource))) { - $lifetime = (integer) $line; - } - - fclose($resource); - - return $lifetime === 0 || $lifetime > time(); - } - - /** - * {@inheritdoc} - */ - protected function doSave($id, $data, $lifeTime = 0) - { - if ($lifeTime > 0) { - $lifeTime = time() + $lifeTime; - } - - $data = serialize($data); - $filename = $this->getFilename($id); - $filepath = pathinfo($filename, PATHINFO_DIRNAME); - - if ( ! is_dir($filepath)) { - mkdir($filepath, 0777, true); - } - - return file_put_contents($filename, $lifeTime . PHP_EOL . $data); - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Cache/MemcacheCache.php b/vendor/doctrine/common/lib/Doctrine/Common/Cache/MemcacheCache.php deleted file mode 100644 index 5687b96..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Cache/MemcacheCache.php +++ /dev/null @@ -1,121 +0,0 @@ -. - */ - -namespace Doctrine\Common\Cache; - -use \Memcache; - -/** - * Memcache cache provider. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.0 - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - * @author David Abdemoulaie - */ -class MemcacheCache extends CacheProvider -{ - /** - * @var Memcache - */ - private $memcache; - - /** - * Sets the memcache instance to use. - * - * @param Memcache $memcache - */ - public function setMemcache(Memcache $memcache) - { - $this->memcache = $memcache; - } - - /** - * Gets the memcache instance used by the cache. - * - * @return Memcache - */ - public function getMemcache() - { - return $this->memcache; - } - - /** - * {@inheritdoc} - */ - protected function doFetch($id) - { - return $this->memcache->get($id); - } - - /** - * {@inheritdoc} - */ - protected function doContains($id) - { - return (bool) $this->memcache->get($id); - } - - /** - * {@inheritdoc} - */ - protected function doSave($id, $data, $lifeTime = 0) - { - if ($lifeTime > 30 * 24 * 3600) { - $lifeTime = time() + $lifeTime; - } - return $this->memcache->set($id, $data, 0, (int) $lifeTime); - } - - /** - * {@inheritdoc} - */ - protected function doDelete($id) - { - return $this->memcache->delete($id); - } - - /** - * {@inheritdoc} - */ - protected function doFlush() - { - return $this->memcache->flush(); - } - - /** - * {@inheritdoc} - */ - protected function doGetStats() - { - $stats = $this->memcache->getStats(); - return array( - Cache::STATS_HITS => $stats['get_hits'], - Cache::STATS_MISSES => $stats['get_misses'], - Cache::STATS_UPTIME => $stats['uptime'], - Cache::STATS_MEMORY_USAGE => $stats['bytes'], - Cache::STATS_MEMORY_AVAILIABLE => $stats['limit_maxbytes'], - ); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Cache/MemcachedCache.php b/vendor/doctrine/common/lib/Doctrine/Common/Cache/MemcachedCache.php deleted file mode 100644 index 75f1345..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Cache/MemcachedCache.php +++ /dev/null @@ -1,124 +0,0 @@ -. - */ - -namespace Doctrine\Common\Cache; - -use \Memcached; - -/** - * Memcached cache provider. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.2 - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - * @author David Abdemoulaie - */ -class MemcachedCache extends CacheProvider -{ - /** - * @var Memcached - */ - private $memcached; - - /** - * Sets the memcache instance to use. - * - * @param Memcached $memcached - */ - public function setMemcached(Memcached $memcached) - { - $this->memcached = $memcached; - } - - /** - * Gets the memcached instance used by the cache. - * - * @return Memcached - */ - public function getMemcached() - { - return $this->memcached; - } - - /** - * {@inheritdoc} - */ - protected function doFetch($id) - { - return $this->memcached->get($id); - } - - /** - * {@inheritdoc} - */ - protected function doContains($id) - { - return (false !== $this->memcached->get($id)); - } - - /** - * {@inheritdoc} - */ - protected function doSave($id, $data, $lifeTime = 0) - { - if ($lifeTime > 30 * 24 * 3600) { - $lifeTime = time() + $lifeTime; - } - return $this->memcached->set($id, $data, (int) $lifeTime); - } - - /** - * {@inheritdoc} - */ - protected function doDelete($id) - { - return $this->memcached->delete($id); - } - - /** - * {@inheritdoc} - */ - protected function doFlush() - { - return $this->memcached->flush(); - } - - /** - * {@inheritdoc} - */ - protected function doGetStats() - { - $stats = $this->memcached->getStats(); - $servers = $this->memcached->getServerList(); - $key = $servers[0]['host'] . ':' . $servers[0]['port']; - $stats = $stats[$key]; - return array( - Cache::STATS_HITS => $stats['get_hits'], - Cache::STATS_MISSES => $stats['get_misses'], - Cache::STATS_UPTIME => $stats['uptime'], - Cache::STATS_MEMORY_USAGE => $stats['bytes'], - Cache::STATS_MEMORY_AVAILIABLE => $stats['limit_maxbytes'], - ); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Cache/PhpFileCache.php b/vendor/doctrine/common/lib/Doctrine/Common/Cache/PhpFileCache.php deleted file mode 100644 index 0971cd9..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Cache/PhpFileCache.php +++ /dev/null @@ -1,108 +0,0 @@ -. - */ - -namespace Doctrine\Common\Cache; - -/** - * Php file cache driver. - * - * @since 2.3 - * @author Fabio B. Silva - */ -class PhpFileCache extends FileCache -{ - const EXTENSION = '.doctrinecache.php'; - - /** - * {@inheritdoc} - */ - protected $extension = self::EXTENSION; - - /** - * {@inheritdoc} - */ - protected function doFetch($id) - { - $filename = $this->getFilename($id); - - if ( ! file_exists($filename)) { - return false; - } - - $value = include $filename; - - if ($value['lifetime'] !== 0 && $value['lifetime'] < time()) { - return false; - } - - return $value['data']; - } - - /** - * {@inheritdoc} - */ - protected function doContains($id) - { - $filename = $this->getFilename($id); - - if ( ! file_exists($filename)) { - return false; - } - - $value = include $filename; - - return $value['lifetime'] === 0 || $value['lifetime'] > time(); - } - - /** - * {@inheritdoc} - */ - protected function doSave($id, $data, $lifeTime = 0) - { - if ($lifeTime > 0) { - $lifeTime = time() + $lifeTime; - } - - if (is_object($data) && ! method_exists($data, '__set_state')) { - throw new \InvalidArgumentException( - "Invalid argument given, PhpFileCache only allows objects that implement __set_state() " . - "and fully support var_export(). You can use the FilesystemCache to save arbitrary object " . - "graphs using serialize()/deserialize()." - ); - } - - $filename = $this->getFilename($id); - $filepath = pathinfo($filename, PATHINFO_DIRNAME); - - if ( ! is_dir($filepath)) { - mkdir($filepath, 0777, true); - } - - $value = array( - 'lifetime' => $lifeTime, - 'data' => $data - ); - - $value = var_export($value, true); - $code = sprintf('. - */ - -namespace Doctrine\Common\Cache; - -use Redis; - -/** - * Redis cache provider. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.2 - * @author Osman Ungur - */ -class RedisCache extends CacheProvider -{ - /** - * @var Redis - */ - private $redis; - - /** - * Sets the redis instance to use. - * - * @param Redis $redis - */ - public function setRedis(Redis $redis) - { - $redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_IGBINARY); - $this->redis = $redis; - } - - /** - * Gets the redis instance used by the cache. - * - * @return Redis - */ - public function getRedis() - { - return $this->redis; - } - - /** - * {@inheritdoc} - */ - protected function doFetch($id) - { - return $this->redis->get($id); - } - - /** - * {@inheritdoc} - */ - protected function doContains($id) - { - return $this->redis->exists($id); - } - - /** - * {@inheritdoc} - */ - protected function doSave($id, $data, $lifeTime = 0) - { - $result = $this->redis->set($id, $data); - if ($lifeTime > 0) { - $this->redis->expire($id, $lifeTime); - } - return $result; - } - - /** - * {@inheritdoc} - */ - protected function doDelete($id) - { - return $this->redis->delete($id); - } - - /** - * {@inheritdoc} - */ - protected function doFlush() - { - return $this->redis->flushDB(); - } - - /** - * {@inheritdoc} - */ - protected function doGetStats() - { - $info = $this->redis->info(); - return array( - Cache::STATS_HITS => false, - Cache::STATS_MISSES => false, - Cache::STATS_UPTIME => $info['uptime_in_seconds'], - Cache::STATS_MEMORY_USAGE => $info['used_memory'], - Cache::STATS_MEMORY_AVAILIABLE => false - ); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Cache/WinCacheCache.php b/vendor/doctrine/common/lib/Doctrine/Common/Cache/WinCacheCache.php deleted file mode 100644 index 777d0fd..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Cache/WinCacheCache.php +++ /dev/null @@ -1,93 +0,0 @@ -. - */ - -namespace Doctrine\Common\Cache; - -/** - * WinCache cache provider. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.2 - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - * @author David Abdemoulaie - */ -class WinCacheCache extends CacheProvider -{ - /** - * {@inheritdoc} - */ - protected function doFetch($id) - { - return wincache_ucache_get($id); - } - - /** - * {@inheritdoc} - */ - protected function doContains($id) - { - return wincache_ucache_exists($id); - } - - /** - * {@inheritdoc} - */ - protected function doSave($id, $data, $lifeTime = 0) - { - return (bool) wincache_ucache_set($id, $data, (int) $lifeTime); - } - - /** - * {@inheritdoc} - */ - protected function doDelete($id) - { - return wincache_ucache_delete($id); - } - - /** - * {@inheritdoc} - */ - protected function doFlush() - { - return wincache_ucache_clear(); - } - - /** - * {@inheritdoc} - */ - protected function doGetStats() - { - $info = wincache_ucache_info(); - $meminfo = wincache_ucache_meminfo(); - - return array( - Cache::STATS_HITS => $info['total_hit_count'], - Cache::STATS_MISSES => $info['total_miss_count'], - Cache::STATS_UPTIME => $info['total_cache_uptime'], - Cache::STATS_MEMORY_USAGE => $meminfo['memory_total'], - Cache::STATS_MEMORY_AVAILIABLE => $meminfo['memory_free'], - ); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Cache/XcacheCache.php b/vendor/doctrine/common/lib/Doctrine/Common/Cache/XcacheCache.php deleted file mode 100644 index 8733e26..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Cache/XcacheCache.php +++ /dev/null @@ -1,110 +0,0 @@ -. - */ - -namespace Doctrine\Common\Cache; - -/** - * Xcache cache driver. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.0 - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - * @author David Abdemoulaie - */ -class XcacheCache extends CacheProvider -{ - /** - * {@inheritdoc} - */ - protected function doFetch($id) - { - return $this->doContains($id) ? unserialize(xcache_get($id)) : false; - } - - /** - * {@inheritdoc} - */ - protected function doContains($id) - { - return xcache_isset($id); - } - - /** - * {@inheritdoc} - */ - protected function doSave($id, $data, $lifeTime = 0) - { - return xcache_set($id, serialize($data), (int) $lifeTime); - } - - /** - * {@inheritdoc} - */ - protected function doDelete($id) - { - return xcache_unset($id); - } - - /** - * {@inheritdoc} - */ - protected function doFlush() - { - $this->checkAuthorization(); - - xcache_clear_cache(XC_TYPE_VAR, 0); - - return true; - } - - /** - * Checks that xcache.admin.enable_auth is Off - * - * @throws \BadMethodCallException When xcache.admin.enable_auth is On - * @return void - */ - protected function checkAuthorization() - { - if (ini_get('xcache.admin.enable_auth')) { - throw new \BadMethodCallException('To use all features of \Doctrine\Common\Cache\XcacheCache, you must set "xcache.admin.enable_auth" to "Off" in your php.ini.'); - } - } - - /** - * {@inheritdoc} - */ - protected function doGetStats() - { - $this->checkAuthorization(); - - $info = xcache_info(XC_TYPE_VAR, 0); - return array( - Cache::STATS_HITS => $info['hits'], - Cache::STATS_MISSES => $info['misses'], - Cache::STATS_UPTIME => null, - Cache::STATS_MEMORY_USAGE => $info['size'], - Cache::STATS_MEMORY_AVAILIABLE => $info['avail'], - ); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Cache/ZendDataCache.php b/vendor/doctrine/common/lib/Doctrine/Common/Cache/ZendDataCache.php deleted file mode 100644 index fc90bc6..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Cache/ZendDataCache.php +++ /dev/null @@ -1,84 +0,0 @@ -. - */ - -namespace Doctrine\Common\Cache; - -/** - * Zend Data Cache cache driver. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.0 - * @author Ralph Schindler - * @author Guilherme Blanco - */ -class ZendDataCache extends CacheProvider -{ - /** - * {@inheritdoc} - */ - protected function doFetch($id) - { - return zend_shm_cache_fetch($id); - } - - /** - * {@inheritdoc} - */ - protected function doContains($id) - { - return (false !== zend_shm_cache_fetch($id)); - } - - /** - * {@inheritdoc} - */ - protected function doSave($id, $data, $lifeTime = 0) - { - return zend_shm_cache_store($id, $data, $lifeTime); - } - - /** - * {@inheritdoc} - */ - protected function doDelete($id) - { - return zend_shm_cache_delete($id); - } - - /** - * {@inheritdoc} - */ - protected function doFlush() - { - $namespace = $this->getNamespace(); - if (empty($namespace)) { - return zend_shm_cache_clear(); - } - return zend_shm_cache_clear($namespace); - } - - /** - * {@inheritdoc} - */ - protected function doGetStats() - { - return null; - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/ClassLoader.php b/vendor/doctrine/common/lib/Doctrine/Common/ClassLoader.php deleted file mode 100644 index 45024e1..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/ClassLoader.php +++ /dev/null @@ -1,263 +0,0 @@ -. - */ - -namespace Doctrine\Common; - -/** - * A ClassLoader is an autoloader for class files that can be - * installed on the SPL autoload stack. It is a class loader that either loads only classes - * of a specific namespace or all namespaces and it is suitable for working together - * with other autoloaders in the SPL autoload stack. - * - * If no include path is configured through the constructor or {@link setIncludePath}, a ClassLoader - * relies on the PHP include_path. - * - * @author Roman Borschel - * @since 2.0 - */ -class ClassLoader -{ - /** - * @var string PHP file extension - */ - protected $fileExtension = '.php'; - - /** - * @var string Current namespace - */ - protected $namespace; - - /** - * @var string Current include path - */ - protected $includePath; - - /** - * @var string PHP namespace separator - */ - protected $namespaceSeparator = '\\'; - - /** - * Creates a new ClassLoader that loads classes of the - * specified namespace from the specified include path. - * - * If no include path is given, the ClassLoader relies on the PHP include_path. - * If neither a namespace nor an include path is given, the ClassLoader will - * be responsible for loading all classes, thereby relying on the PHP include_path. - * - * @param string $ns The namespace of the classes to load. - * @param string $includePath The base include path to use. - */ - public function __construct($ns = null, $includePath = null) - { - $this->namespace = $ns; - $this->includePath = $includePath; - } - - /** - * Sets the namespace separator used by classes in the namespace of this ClassLoader. - * - * @param string $sep The separator to use. - */ - public function setNamespaceSeparator($sep) - { - $this->namespaceSeparator = $sep; - } - - /** - * Gets the namespace separator used by classes in the namespace of this ClassLoader. - * - * @return string - */ - public function getNamespaceSeparator() - { - return $this->namespaceSeparator; - } - - /** - * Sets the base include path for all class files in the namespace of this ClassLoader. - * - * @param string $includePath - */ - public function setIncludePath($includePath) - { - $this->includePath = $includePath; - } - - /** - * Gets the base include path for all class files in the namespace of this ClassLoader. - * - * @return string - */ - public function getIncludePath() - { - return $this->includePath; - } - - /** - * Sets the file extension of class files in the namespace of this ClassLoader. - * - * @param string $fileExtension - */ - public function setFileExtension($fileExtension) - { - $this->fileExtension = $fileExtension; - } - - /** - * Gets the file extension of class files in the namespace of this ClassLoader. - * - * @return string - */ - public function getFileExtension() - { - return $this->fileExtension; - } - - /** - * Registers this ClassLoader on the SPL autoload stack. - */ - public function register() - { - spl_autoload_register(array($this, 'loadClass')); - } - - /** - * Removes this ClassLoader from the SPL autoload stack. - */ - public function unregister() - { - spl_autoload_unregister(array($this, 'loadClass')); - } - - /** - * Loads the given class or interface. - * - * @param string $className The name of the class to load. - - * @return boolean TRUE if the class has been successfully loaded, FALSE otherwise. - */ - public function loadClass($className) - { - if ($this->namespace !== null && strpos($className, $this->namespace.$this->namespaceSeparator) !== 0) { - return false; - } - - require ($this->includePath !== null ? $this->includePath . DIRECTORY_SEPARATOR : '') - . str_replace($this->namespaceSeparator, DIRECTORY_SEPARATOR, $className) - . $this->fileExtension; - - return true; - } - - /** - * Asks this ClassLoader whether it can potentially load the class (file) with - * the given name. - * - * @param string $className The fully-qualified name of the class. - * @return boolean TRUE if this ClassLoader can load the class, FALSE otherwise. - */ - public function canLoadClass($className) - { - if ($this->namespace !== null && strpos($className, $this->namespace.$this->namespaceSeparator) !== 0) { - return false; - } - - $file = str_replace($this->namespaceSeparator, DIRECTORY_SEPARATOR, $className) . $this->fileExtension; - - if ($this->includePath !== null) { - return file_exists($this->includePath . DIRECTORY_SEPARATOR . $file); - } - - return (false !== stream_resolve_include_path($file)); - } - - /** - * Checks whether a class with a given name exists. A class "exists" if it is either - * already defined in the current request or if there is an autoloader on the SPL - * autoload stack that is a) responsible for the class in question and b) is able to - * load a class file in which the class definition resides. - * - * If the class is not already defined, each autoloader in the SPL autoload stack - * is asked whether it is able to tell if the class exists. If the autoloader is - * a ClassLoader, {@link canLoadClass} is used, otherwise the autoload - * function of the autoloader is invoked and expected to return a value that - * evaluates to TRUE if the class (file) exists. As soon as one autoloader reports - * that the class exists, TRUE is returned. - * - * Note that, depending on what kinds of autoloaders are installed on the SPL - * autoload stack, the class (file) might already be loaded as a result of checking - * for its existence. This is not the case with a ClassLoader, who separates - * these responsibilities. - * - * @param string $className The fully-qualified name of the class. - * @return boolean TRUE if the class exists as per the definition given above, FALSE otherwise. - */ - public static function classExists($className) - { - if (class_exists($className, false) || interface_exists($className, false)) { - return true; - } - - foreach (spl_autoload_functions() as $loader) { - if (is_array($loader)) { // array(???, ???) - if (is_object($loader[0])) { - if ($loader[0] instanceof ClassLoader) { // array($obj, 'methodName') - if ($loader[0]->canLoadClass($className)) { - return true; - } - } else if ($loader[0]->{$loader[1]}($className)) { - return true; - } - } else if ($loader[0]::$loader[1]($className)) { // array('ClassName', 'methodName') - return true; - } - } else if ($loader instanceof \Closure) { // function($className) {..} - if ($loader($className)) { - return true; - } - } else if (is_string($loader) && $loader($className)) { // "MyClass::loadClass" - return true; - } - } - - return class_exists($className, false) || interface_exists($className, false); - } - - /** - * Gets the ClassLoader from the SPL autoload stack that is responsible - * for (and is able to load) the class with the given name. - * - * @param string $className The name of the class. - * @return ClassLoader The ClassLoader for the class or NULL if no such ClassLoader exists. - */ - public static function getClassLoader($className) - { - foreach (spl_autoload_functions() as $loader) { - if (is_array($loader) - && $loader[0] instanceof ClassLoader - && $loader[0]->canLoadClass($className) - ) { - return $loader[0]; - } - } - - return null; - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Collections/ArrayCollection.php b/vendor/doctrine/common/lib/Doctrine/Common/Collections/ArrayCollection.php deleted file mode 100644 index 7c2b13e..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Collections/ArrayCollection.php +++ /dev/null @@ -1,500 +0,0 @@ -. - */ - -namespace Doctrine\Common\Collections; - -use Closure, ArrayIterator; -use Doctrine\Common\Collections\Expr\Expression; -use Doctrine\Common\Collections\Expr\ClosureExpressionVisitor; - -/** - * An ArrayCollection is a Collection implementation that wraps a regular PHP array. - * - * @since 2.0 - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - */ -class ArrayCollection implements Collection, Selectable -{ - /** - * An array containing the entries of this collection. - * - * @var array - */ - private $_elements; - - /** - * Initializes a new ArrayCollection. - * - * @param array $elements - */ - public function __construct(array $elements = array()) - { - $this->_elements = $elements; - } - - /** - * Gets the PHP array representation of this collection. - * - * @return array The PHP array representation of this collection. - */ - public function toArray() - { - return $this->_elements; - } - - /** - * Sets the internal iterator to the first element in the collection and - * returns this element. - * - * @return mixed - */ - public function first() - { - return reset($this->_elements); - } - - /** - * Sets the internal iterator to the last element in the collection and - * returns this element. - * - * @return mixed - */ - public function last() - { - return end($this->_elements); - } - - /** - * Gets the current key/index at the current internal iterator position. - * - * @return mixed - */ - public function key() - { - return key($this->_elements); - } - - /** - * Moves the internal iterator position to the next element. - * - * @return mixed - */ - public function next() - { - return next($this->_elements); - } - - /** - * Gets the element of the collection at the current internal iterator position. - * - * @return mixed - */ - public function current() - { - return current($this->_elements); - } - - /** - * Removes an element with a specific key/index from the collection. - * - * @param mixed $key - * @return mixed The removed element or NULL, if no element exists for the given key. - */ - public function remove($key) - { - if (isset($this->_elements[$key])) { - $removed = $this->_elements[$key]; - unset($this->_elements[$key]); - - return $removed; - } - - return null; - } - - /** - * Removes the specified element from the collection, if it is found. - * - * @param mixed $element The element to remove. - * @return boolean TRUE if this collection contained the specified element, FALSE otherwise. - */ - public function removeElement($element) - { - $key = array_search($element, $this->_elements, true); - - if ($key !== false) { - unset($this->_elements[$key]); - - return true; - } - - return false; - } - - /** - * ArrayAccess implementation of offsetExists() - * - * @see containsKey() - * - * @param mixed $offset - * @return bool - */ - public function offsetExists($offset) - { - return $this->containsKey($offset); - } - - /** - * ArrayAccess implementation of offsetGet() - * - * @see get() - * - * @param mixed $offset - * @return mixed - */ - public function offsetGet($offset) - { - return $this->get($offset); - } - - /** - * ArrayAccess implementation of offsetSet() - * - * @see add() - * @see set() - * - * @param mixed $offset - * @param mixed $value - * @return bool - */ - public function offsetSet($offset, $value) - { - if ( ! isset($offset)) { - return $this->add($value); - } - return $this->set($offset, $value); - } - - /** - * ArrayAccess implementation of offsetUnset() - * - * @see remove() - * - * @param mixed $offset - * @return mixed - */ - public function offsetUnset($offset) - { - return $this->remove($offset); - } - - /** - * Checks whether the collection contains a specific key/index. - * - * @param mixed $key The key to check for. - * @return boolean TRUE if the given key/index exists, FALSE otherwise. - */ - public function containsKey($key) - { - return isset($this->_elements[$key]); - } - - /** - * Checks whether the given element is contained in the collection. - * Only element values are compared, not keys. The comparison of two elements - * is strict, that means not only the value but also the type must match. - * For objects this means reference equality. - * - * @param mixed $element - * @return boolean TRUE if the given element is contained in the collection, - * FALSE otherwise. - */ - public function contains($element) - { - foreach ($this->_elements as $collectionElement) { - if ($element === $collectionElement) { - return true; - } - } - - return false; - } - - /** - * Tests for the existence of an element that satisfies the given predicate. - * - * @param Closure $p The predicate. - * @return boolean TRUE if the predicate is TRUE for at least one element, FALSE otherwise. - */ - public function exists(Closure $p) - { - foreach ($this->_elements as $key => $element) { - if ($p($key, $element)) { - return true; - } - } - return false; - } - - /** - * Searches for a given element and, if found, returns the corresponding key/index - * of that element. The comparison of two elements is strict, that means not - * only the value but also the type must match. - * For objects this means reference equality. - * - * @param mixed $element The element to search for. - * @return mixed The key/index of the element or FALSE if the element was not found. - */ - public function indexOf($element) - { - return array_search($element, $this->_elements, true); - } - - /** - * Gets the element with the given key/index. - * - * @param mixed $key The key. - * @return mixed The element or NULL, if no element exists for the given key. - */ - public function get($key) - { - if (isset($this->_elements[$key])) { - return $this->_elements[$key]; - } - return null; - } - - /** - * Gets all keys/indexes of the collection elements. - * - * @return array - */ - public function getKeys() - { - return array_keys($this->_elements); - } - - /** - * Gets all elements. - * - * @return array - */ - public function getValues() - { - return array_values($this->_elements); - } - - /** - * Returns the number of elements in the collection. - * - * Implementation of the Countable interface. - * - * @return integer The number of elements in the collection. - */ - public function count() - { - return count($this->_elements); - } - - /** - * Adds/sets an element in the collection at the index / with the specified key. - * - * When the collection is a Map this is like put(key,value)/add(key,value). - * When the collection is a List this is like add(position,value). - * - * @param mixed $key - * @param mixed $value - */ - public function set($key, $value) - { - $this->_elements[$key] = $value; - } - - /** - * Adds an element to the collection. - * - * @param mixed $value - * @return boolean Always TRUE. - */ - public function add($value) - { - $this->_elements[] = $value; - return true; - } - - /** - * Checks whether the collection is empty. - * - * Note: This is preferable over count() == 0. - * - * @return boolean TRUE if the collection is empty, FALSE otherwise. - */ - public function isEmpty() - { - return ! $this->_elements; - } - - /** - * Gets an iterator for iterating over the elements in the collection. - * - * @return ArrayIterator - */ - public function getIterator() - { - return new ArrayIterator($this->_elements); - } - - /** - * Applies the given function to each element in the collection and returns - * a new collection with the elements returned by the function. - * - * @param Closure $func - * @return Collection - */ - public function map(Closure $func) - { - return new static(array_map($func, $this->_elements)); - } - - /** - * Returns all the elements of this collection that satisfy the predicate p. - * The order of the elements is preserved. - * - * @param Closure $p The predicate used for filtering. - * @return Collection A collection with the results of the filter operation. - */ - public function filter(Closure $p) - { - return new static(array_filter($this->_elements, $p)); - } - - /** - * Applies the given predicate p to all elements of this collection, - * returning true, if the predicate yields true for all elements. - * - * @param Closure $p The predicate. - * @return boolean TRUE, if the predicate yields TRUE for all elements, FALSE otherwise. - */ - public function forAll(Closure $p) - { - foreach ($this->_elements as $key => $element) { - if ( ! $p($key, $element)) { - return false; - } - } - - return true; - } - - /** - * Partitions this collection in two collections according to a predicate. - * Keys are preserved in the resulting collections. - * - * @param Closure $p The predicate on which to partition. - * @return array An array with two elements. The first element contains the collection - * of elements where the predicate returned TRUE, the second element - * contains the collection of elements where the predicate returned FALSE. - */ - public function partition(Closure $p) - { - $coll1 = $coll2 = array(); - foreach ($this->_elements as $key => $element) { - if ($p($key, $element)) { - $coll1[$key] = $element; - } else { - $coll2[$key] = $element; - } - } - return array(new static($coll1), new static($coll2)); - } - - /** - * Returns a string representation of this object. - * - * @return string - */ - public function __toString() - { - return __CLASS__ . '@' . spl_object_hash($this); - } - - /** - * Clears the collection. - */ - public function clear() - { - $this->_elements = array(); - } - - /** - * Extract a slice of $length elements starting at position $offset from the Collection. - * - * If $length is null it returns all elements from $offset to the end of the Collection. - * Keys have to be preserved by this method. Calling this method will only return the - * selected slice and NOT change the elements contained in the collection slice is called on. - * - * @param int $offset - * @param int $length - * @return array - */ - public function slice($offset, $length = null) - { - return array_slice($this->_elements, $offset, $length, true); - } - - /** - * Select all elements from a selectable that match the criteria and - * return a new collection containing these elements. - * - * @param Criteria $criteria - * @return Collection - */ - public function matching(Criteria $criteria) - { - $expr = $criteria->getWhereExpression(); - $filtered = $this->_elements; - - if ($expr) { - $visitor = new ClosureExpressionVisitor(); - $filter = $visitor->dispatch($expr); - $filtered = array_filter($filtered, $filter); - } - - if ($orderings = $criteria->getOrderings()) { - $next = null; - foreach (array_reverse($orderings) as $field => $ordering) { - $next = ClosureExpressionVisitor::sortByField($field, $ordering == 'DESC' ? -1 : 1, $next); - } - - usort($filtered, $next); - } - - $offset = $criteria->getFirstResult(); - $length = $criteria->getMaxResults(); - - if ($offset || $length) { - $filtered = array_slice($filtered, (int)$offset, $length); - } - - return new static($filtered); - } -} - diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Collections/Collection.php b/vendor/doctrine/common/lib/Doctrine/Common/Collections/Collection.php deleted file mode 100644 index 51eb9e7..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Collections/Collection.php +++ /dev/null @@ -1,243 +0,0 @@ -. - */ - -namespace Doctrine\Common\Collections; - -use Closure, Countable, IteratorAggregate, ArrayAccess; - -/** - * The missing (SPL) Collection/Array/OrderedMap interface. - * - * A Collection resembles the nature of a regular PHP array. That is, - * it is essentially an ordered map that can also be used - * like a list. - * - * A Collection has an internal iterator just like a PHP array. In addition, - * a Collection can be iterated with external iterators, which is preferrable. - * To use an external iterator simply use the foreach language construct to - * iterate over the collection (which calls {@link getIterator()} internally) or - * explicitly retrieve an iterator though {@link getIterator()} which can then be - * used to iterate over the collection. - * You can not rely on the internal iterator of the collection being at a certain - * position unless you explicitly positioned it before. Prefer iteration with - * external iterators. - * - * @since 2.0 - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - */ -interface Collection extends Countable, IteratorAggregate, ArrayAccess -{ - /** - * Adds an element at the end of the collection. - * - * @param mixed $element The element to add. - * @return boolean Always TRUE. - */ - function add($element); - - /** - * Clears the collection, removing all elements. - */ - function clear(); - - /** - * Checks whether an element is contained in the collection. - * This is an O(n) operation, where n is the size of the collection. - * - * @param mixed $element The element to search for. - * @return boolean TRUE if the collection contains the element, FALSE otherwise. - */ - function contains($element); - - /** - * Checks whether the collection is empty (contains no elements). - * - * @return boolean TRUE if the collection is empty, FALSE otherwise. - */ - function isEmpty(); - - /** - * Removes the element at the specified index from the collection. - * - * @param string|integer $key The kex/index of the element to remove. - * @return mixed The removed element or NULL, if the collection did not contain the element. - */ - function remove($key); - - /** - * Removes the specified element from the collection, if it is found. - * - * @param mixed $element The element to remove. - * @return boolean TRUE if this collection contained the specified element, FALSE otherwise. - */ - function removeElement($element); - - /** - * Checks whether the collection contains an element with the specified key/index. - * - * @param string|integer $key The key/index to check for. - * @return boolean TRUE if the collection contains an element with the specified key/index, - * FALSE otherwise. - */ - function containsKey($key); - - /** - * Gets the element at the specified key/index. - * - * @param string|integer $key The key/index of the element to retrieve. - * @return mixed - */ - function get($key); - - /** - * Gets all keys/indices of the collection. - * - * @return array The keys/indices of the collection, in the order of the corresponding - * elements in the collection. - */ - function getKeys(); - - /** - * Gets all values of the collection. - * - * @return array The values of all elements in the collection, in the order they - * appear in the collection. - */ - function getValues(); - - /** - * Sets an element in the collection at the specified key/index. - * - * @param string|integer $key The key/index of the element to set. - * @param mixed $value The element to set. - */ - function set($key, $value); - - /** - * Gets a native PHP array representation of the collection. - * - * @return array - */ - function toArray(); - - /** - * Sets the internal iterator to the first element in the collection and - * returns this element. - * - * @return mixed - */ - function first(); - - /** - * Sets the internal iterator to the last element in the collection and - * returns this element. - * - * @return mixed - */ - function last(); - - /** - * Gets the key/index of the element at the current iterator position. - * - */ - function key(); - - /** - * Gets the element of the collection at the current iterator position. - * - */ - function current(); - - /** - * Moves the internal iterator position to the next element. - * - */ - function next(); - - /** - * Tests for the existence of an element that satisfies the given predicate. - * - * @param Closure $p The predicate. - * @return boolean TRUE if the predicate is TRUE for at least one element, FALSE otherwise. - */ - function exists(Closure $p); - - /** - * Returns all the elements of this collection that satisfy the predicate p. - * The order of the elements is preserved. - * - * @param Closure $p The predicate used for filtering. - * @return Collection A collection with the results of the filter operation. - */ - function filter(Closure $p); - - /** - * Applies the given predicate p to all elements of this collection, - * returning true, if the predicate yields true for all elements. - * - * @param Closure $p The predicate. - * @return boolean TRUE, if the predicate yields TRUE for all elements, FALSE otherwise. - */ - function forAll(Closure $p); - - /** - * Applies the given function to each element in the collection and returns - * a new collection with the elements returned by the function. - * - * @param Closure $func - * @return Collection - */ - function map(Closure $func); - - /** - * Partitions this collection in two collections according to a predicate. - * Keys are preserved in the resulting collections. - * - * @param Closure $p The predicate on which to partition. - * @return array An array with two elements. The first element contains the collection - * of elements where the predicate returned TRUE, the second element - * contains the collection of elements where the predicate returned FALSE. - */ - function partition(Closure $p); - - /** - * Gets the index/key of a given element. The comparison of two elements is strict, - * that means not only the value but also the type must match. - * For objects this means reference equality. - * - * @param mixed $element The element to search for. - * @return mixed The key/index of the element or FALSE if the element was not found. - */ - function indexOf($element); - - /** - * Extract a slice of $length elements starting at position $offset from the Collection. - * - * If $length is null it returns all elements from $offset to the end of the Collection. - * Keys have to be preserved by this method. Calling this method will only return the - * selected slice and NOT change the elements contained in the collection slice is called on. - * - * @param int $offset - * @param int $length - * @return array - */ - function slice($offset, $length = null); -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Collections/Criteria.php b/vendor/doctrine/common/lib/Doctrine/Common/Collections/Criteria.php deleted file mode 100644 index 3b05549..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Collections/Criteria.php +++ /dev/null @@ -1,240 +0,0 @@ -. - */ - -namespace Doctrine\Common\Collections; - -use Doctrine\Common\Collections\Expr\Expression; -use Doctrine\Common\Collections\Expr\CompositeExpression; - -/** - * Criteria for filtering Selectable collections. - * - * @author Benjamin Eberlei - * @since 2.3 - */ -class Criteria -{ - /** - * @var string - */ - const ASC = 'ASC'; - - /** - * @var string - */ - const DESC = 'DESC'; - - /** - * @var \Doctrine\Common\Collections\ExpressionBuilder - */ - private static $expressionBuilder; - - /** - * @var \Doctrine\Common\Collections\Expr\Expression - */ - private $expression; - - /** - * @var array|null - */ - private $orderings; - - /** - * @var int - */ - private $firstResult; - - /** - * @var int - */ - private $maxResults; - - /** - * Creates an instance of the class. - * - * @return Criteria - */ - public static function create() - { - return new static(); - } - - /** - * Return the expression builder. - * - * @return \Doctrine\Common\Collections\ExpressionBuilder - */ - public static function expr() - { - if (self::$expressionBuilder === null) { - self::$expressionBuilder = new ExpressionBuilder(); - } - return self::$expressionBuilder; - } - - /** - * Construct new criteria - * - * @param Expression $expression - * @param array $orderings - * @param int $firstResult - * @param int $maxResults - */ - public function __construct(Expression $expression = null, array $orderings = null, $firstResult = null, $maxResults = null) - { - $this->expression = $expression; - $this->orderings = $orderings; - $this->firstResult = $firstResult; - $this->maxResults = $maxResults; - } - - /** - * Set the where expression to evaluate when this criteria is searched for. - * - * @param Expression - * @return Criteria - */ - public function where(Expression $expression) - { - $this->expression = $expression; - return $this; - } - - /** - * Append the where expression to evaluate when this criteria is searched for - * using an AND with previous expression. - * - * @param Expression - * @return Criteria - */ - public function andWhere(Expression $expression) - { - if ($this->expression === null) { - return $this->where($expression); - } - - $this->expression = new CompositeExpression(CompositeExpression::TYPE_AND, array( - $this->expression, $expression - )); - - return $this; - } - - /** - * Append the where expression to evaluate when this criteria is searched for - * using an OR with previous expression. - * - * @param Expression - * @return Criteria - */ - public function orWhere(Expression $expression) - { - if ($this->expression === null) { - return $this->where($expression); - } - - $this->expression = new CompositeExpression(CompositeExpression::TYPE_OR, array( - $this->expression, $expression - )); - - return $this; - } - - /** - * Get the expression attached to this criteria. - * - * @return Expression|null - */ - public function getWhereExpression() - { - return $this->expression; - } - - /** - * Get current orderings of this Criteria - * - * @return array - */ - public function getOrderings() - { - return $this->orderings; - } - - /** - * Set the ordering of the result of this criteria. - * - * Keys are field and values are the order, being either ASC or DESC. - * - * @see Criteria::ASC - * @see Criteria::DESC - * - * @param array - * @return Criteria - */ - public function orderBy(array $orderings) - { - $this->orderings = $orderings; - return $this; - } - - /** - * Get current first result option of the critera. - * - * @return firstResult. - */ - public function getFirstResult() - { - return $this->firstResult; - } - - /** - * Set number of first result that this criteria should return. - * - * @param firstResult the value to set. - * @return Criteria - */ - public function setFirstResult($firstResult) - { - $this->firstResult = $firstResult; - return $this; - } - - /** - * Get maxResults. - * - * @return maxResults. - */ - public function getMaxResults() - { - return $this->maxResults; - } - - /** - * Set maxResults. - * - * @param maxResults the value to set. - * @return Criteria - */ - public function setMaxResults($maxResults) - { - $this->maxResults = $maxResults; - return $this; - } -} - diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/ClosureExpressionVisitor.php b/vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/ClosureExpressionVisitor.php deleted file mode 100644 index 06ccb04..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/ClosureExpressionVisitor.php +++ /dev/null @@ -1,195 +0,0 @@ -. - */ - -namespace Doctrine\Common\Collections\Expr; - -/** - * Walks an expression graph and turns it into a PHP closure. - * - * This closure can be used with {@Collection#filter()} and is used internally - * by {@ArrayCollection#select()}. - * - * @author Benjamin Eberlei - * @since 2.3 - */ -class ClosureExpressionVisitor extends ExpressionVisitor -{ - /** - * Access the field of a given object. This field has to be public directly - * or indirectly (through an accessor get* or a magic method, __get, __call). - * - * is*() is not supported. - * - * @return mixed - */ - static public function getObjectFieldValue($object, $field) - { - $accessor = "get" . $field; - - if (method_exists($object, $accessor) || method_exists($object, '__call')) { - return $object->$accessor(); - } - - if ($object instanceof \ArrayAccess) { - return $object[$field]; - } - - return $object->$field; - } - - /** - * Helper for sorting arrays of objects based on multiple fields + - * orientations. - * - * @param string $name - * @param int $orientation - * @param Closure $next - * @return Closure - */ - static public function sortByField($name, $orientation = 1, \Closure $next = null) - { - if (!$next) { - $next = function() { - return 0; - }; - } - - return function ($a, $b) use ($name, $next, $orientation) { - $aValue = ClosureExpressionVisitor::getObjectFieldValue($a, $name); - $bValue = ClosureExpressionVisitor::getObjectFieldValue($b, $name); - - if ($aValue === $bValue) { - return $next($a, $b); - } - - return (($aValue > $bValue) ? 1 : -1) * $orientation; - }; - } - - /** - * {@inheritDoc} - */ - public function walkComparison(Comparison $comparison) - { - $field = $comparison->getField(); - $value = $comparison->getValue()->getValue(); // shortcut for walkValue() - - switch ($comparison->getOperator()) { - case Comparison::EQ: - case Comparison::IS: - return function ($object) use ($field, $value) { - return ClosureExpressionVisitor::getObjectFieldValue($object, $field) === $value; - }; - - case Comparison::NEQ: - return function ($object) use ($field, $value) { - return ClosureExpressionVisitor::getObjectFieldValue($object, $field) !== $value; - }; - - case Comparison::LT: - return function ($object) use ($field, $value) { - return ClosureExpressionVisitor::getObjectFieldValue($object, $field) < $value; - }; - - case Comparison::LTE: - return function ($object) use ($field, $value) { - return ClosureExpressionVisitor::getObjectFieldValue($object, $field) <= $value; - }; - - case Comparison::GT: - return function ($object) use ($field, $value) { - return ClosureExpressionVisitor::getObjectFieldValue($object, $field) > $value; - }; - - case Comparison::GTE: - return function ($object) use ($field, $value) { - return ClosureExpressionVisitor::getObjectFieldValue($object, $field) >= $value; - }; - - case Comparison::IN: - return function ($object) use ($field, $value) { - return in_array(ClosureExpressionVisitor::getObjectFieldValue($object, $field), $value); - }; - - case Comparison::NIN: - return function ($object) use ($field, $value) { - return ! in_array(ClosureExpressionVisitor::getObjectFieldValue($object, $field), $value); - }; - - default: - throw new \RuntimeException("Unknown comparison operator: " . $comparison->getOperator()); - } - } - - /** - * {@inheritDoc} - */ - public function walkValue(Value $value) - { - return $value->getValue(); - } - - /** - * {@inheritDoc} - */ - public function walkCompositeExpression(CompositeExpression $expr) - { - $expressionList = array(); - - foreach ($expr->getExpressionList() as $child) { - $expressionList[] = $this->dispatch($child); - } - - switch($expr->getType()) { - case CompositeExpression::TYPE_AND: - return $this->andExpressions($expressionList); - - case CompositeExpression::TYPE_OR: - return $this->orExpressions($expressionList); - - default: - throw new \RuntimeException("Unknown composite " . $expr->getType()); - } - } - - private function andExpressions($expressions) - { - return function ($object) use ($expressions) { - foreach ($expressions as $expression) { - if ( ! $expression($object)) { - return false; - } - } - return true; - }; - } - - private function orExpressions($expressions) - { - return function ($object) use ($expressions) { - foreach ($expressions as $expression) { - if ($expression($object)) { - return true; - } - } - return false; - }; - } -} - diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/Comparison.php b/vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/Comparison.php deleted file mode 100644 index 29cfcff..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/Comparison.php +++ /dev/null @@ -1,75 +0,0 @@ -. - */ - -namespace Doctrine\Common\Collections\Expr; - -/** - * Comparison of a field with a value by the given operator. - * - * @author Benjamin Eberlei - * @since 2.3 - */ -class Comparison implements Expression -{ - const EQ = '='; - const NEQ = '<>'; - const LT = '<'; - const LTE = '<='; - const GT = '>'; - const GTE = '>='; - const IS = 'IS'; - const IN = 'IN'; - const NIN = 'NIN'; - - private $field; - private $op; - private $value; - - public function __construct($field, $operator, $value) - { - if ( ! ($value instanceof Value)) { - $value = new Value($value); - } - - $this->field = $field; - $this->op = $operator; - $this->value = $value; - } - - public function getField() - { - return $this->field; - } - - public function getValue() - { - return $this->value; - } - - public function getOperator() - { - return $this->op; - } - - public function visit(ExpressionVisitor $visitor) - { - return $visitor->walkComparison($this); - } -} - diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/CompositeExpression.php b/vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/CompositeExpression.php deleted file mode 100644 index fe917cf..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/CompositeExpression.php +++ /dev/null @@ -1,72 +0,0 @@ -. - */ - -namespace Doctrine\Common\Collections\Expr; - -/** - * Expression of Expressions combined by AND or OR operation. - * - * @author Benjamin Eberlei - * @since 2.3 - */ -class CompositeExpression implements Expression -{ - const TYPE_AND = 'AND'; - const TYPE_OR = 'OR'; - - private $type; - private $expressions = array(); - - public function __construct($type, array $expressions) - { - $this->type = $type; - - foreach ($expressions as $expr) { - if ($expr instanceof Value) { - throw new \RuntimeException("Values are not supported expressions as children of and/or expressions."); - } - if ( ! ($expr instanceof Expression)) { - throw new \RuntimeException("No expression given to CompositeExpression."); - } - - $this->expressions[] = $expr; - } - } - - /** - * Return the list of expressions nested in this composite. - * - * @return Expression[] - */ - public function getExpressionList() - { - return $this->expressions; - } - - public function getType() - { - return $this->type; - } - - public function visit(ExpressionVisitor $visitor) - { - return $visitor->walkCompositeExpression($this); - } -} - diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/Expression.php b/vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/Expression.php deleted file mode 100644 index b0762ad..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/Expression.php +++ /dev/null @@ -1,31 +0,0 @@ -. - */ - -namespace Doctrine\Common\Collections\Expr; - -/** - * Expression for the {@link Selectable} interface. - * - * @author Benjamin Eberlei - */ -interface Expression -{ - public function visit(ExpressionVisitor $visitor); -} - diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/ExpressionVisitor.php b/vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/ExpressionVisitor.php deleted file mode 100644 index 5e69b98..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/ExpressionVisitor.php +++ /dev/null @@ -1,81 +0,0 @@ -. - */ - -namespace Doctrine\Common\Collections\Expr; - -/** - * An Expression visitor walks a graph of expressions and turns them into a - * query for the underlying implementation. - * - * @author Benjamin Eberlei - */ -abstract class ExpressionVisitor -{ - /** - * Convert a comparison expression into the target query language output - * - * @param Comparison $comparison - * - * @return mixed - */ - abstract public function walkComparison(Comparison $comparison); - - /** - * Convert a value expression into the target query language part. - * - * @param Value $value - * - * @return mixed - */ - abstract public function walkValue(Value $value); - - /** - * Convert a composite expression into the target query language output - * - * @param CompositeExpression $expr - * - * @return mixed - */ - abstract public function walkCompositeExpression(CompositeExpression $expr); - - /** - * Dispatch walking an expression to the appropriate handler. - * - * @param Expression - * - * @return mixed - */ - public function dispatch(Expression $expr) - { - switch (true) { - case ($expr instanceof Comparison): - return $this->walkComparison($expr); - - case ($expr instanceof Value): - return $this->walkValue($expr); - - case ($expr instanceof CompositeExpression): - return $this->walkCompositeExpression($expr); - - default: - throw new \RuntimeException("Unknown Expression " . get_class($expr)); - } - } -} - diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/Value.php b/vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/Value.php deleted file mode 100644 index f0df11a..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Collections/Expr/Value.php +++ /dev/null @@ -1,41 +0,0 @@ -. - */ - -namespace Doctrine\Common\Collections\Expr; - -class Value implements Expression -{ - private $value; - - public function __construct($value) - { - $this->value = $value; - } - - public function getValue() - { - return $this->value; - } - - public function visit(ExpressionVisitor $visitor) - { - return $visitor->walkValue($this); - } -} - diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Collections/ExpressionBuilder.php b/vendor/doctrine/common/lib/Doctrine/Common/Collections/ExpressionBuilder.php deleted file mode 100644 index b53f0cd..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Collections/ExpressionBuilder.php +++ /dev/null @@ -1,149 +0,0 @@ -. - */ - -namespace Doctrine\Common\Collections; - -use Doctrine\Common\Collections\Expr\Comparison; -use Doctrine\Common\Collections\Expr\CompositeExpression; -use Doctrine\Common\Collections\Expr\Value; - -/** - * Builder for Expressions in the {@link Selectable} interface. - * - * @author Benjamin Eberlei - * @since 2.3 - */ -class ExpressionBuilder -{ - /** - * @return CompositeExpression - */ - public function andX($x = null) - { - return new CompositeExpression(CompositeExpression::TYPE_AND, func_get_args()); - } - - /** - * @return CompositeExpression - */ - public function orX($x = null) - { - return new CompositeExpression(CompositeExpression::TYPE_OR, func_get_args()); - } - - /** - * @param string $field - * @param mixed $value - * - * @return Comparison - */ - public function eq($field, $value) - { - return new Comparison($field, Comparison::EQ, new Value($value)); - } - - /** - * @param string $field - * @param mixed $value - * - * @return Comparison - */ - public function gt($field, $value) - { - return new Comparison($field, Comparison::GT, new Value($value)); - } - - /** - * @param string $field - * @param mixed $value - * - * @return Comparison - */ - public function lt($field, $value) - { - return new Comparison($field, Comparison::LT, new Value($value)); - } - - /** - * @param string $field - * @param mixed $value - * - * @return Comparison - */ - public function gte($field, $value) - { - return new Comparison($field, Comparison::GTE, new Value($value)); - } - - /** - * @param string $field - * @param mixed $value - * - * @return Comparison - */ - public function lte($field, $value) - { - return new Comparison($field, Comparison::LTE, new Value($value)); - } - - /** - * @param string $field - * @param mixed $value - * - * @return Comparison - */ - public function neq($field, $value) - { - return new Comparison($field, Comparison::NEQ, new Value($value)); - } - - /** - * @param string $field - * @param mixed $value - * - * @return Comparison - */ - public function isNull($field) - { - return new Comparison($field, Comparison::IS, new Value(null)); - } - - /** - * @param string $field - * @param mixed $value - * - * @return Comparison - */ - public function in($field, array $values) - { - return new Comparison($field, Comparison::IN, new Value($values)); - } - - /** - * @param string $field - * @param mixed $value - * - * @return Comparison - */ - public function notIn($field, array $values) - { - return new Comparison($field, Comparison::NIN, new Value($values)); - } -} - diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Collections/Selectable.php b/vendor/doctrine/common/lib/Doctrine/Common/Collections/Selectable.php deleted file mode 100644 index 675d6ea..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Collections/Selectable.php +++ /dev/null @@ -1,48 +0,0 @@ -. - */ - -namespace Doctrine\Common\Collections; - -/** - * Interface for collections that allow efficient filtering with an expression API. - * - * Goal of this interface is a backend independent method to fetch elements - * from a collections. {@link Expression} is crafted in a way that you can - * implement queries from both in-memory and database-backed collections. - * - * For database backed collections this allows very efficient access by - * utilizing the query APIs, for example SQL in the ORM. Applications using - * this API can implement efficient database access without having to ask the - * EntityManager or Repositories. - * - * @author Benjamin Eberlei - * @since 2.3 - */ -interface Selectable -{ - /** - * Select all elements from a selectable that match the expression and - * return a new collection containing these elements. - * - * @param Criteria $criteria - * @return Collection - */ - function matching(Criteria $criteria); -} - diff --git a/vendor/doctrine/common/lib/Doctrine/Common/CommonException.php b/vendor/doctrine/common/lib/Doctrine/Common/CommonException.php deleted file mode 100644 index 6db7675..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/CommonException.php +++ /dev/null @@ -1,28 +0,0 @@ -. - */ - -namespace Doctrine\Common; - -/** - * Base exception class for package Doctrine\Common - * @author heinrich - * - */ -class CommonException extends \Exception { -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Comparable.php b/vendor/doctrine/common/lib/Doctrine/Common/Comparable.php deleted file mode 100644 index 20d065e..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Comparable.php +++ /dev/null @@ -1,49 +0,0 @@ -. - */ - - -namespace Doctrine\Common; - -/** - * Comparable interface that allows to compare two value objects to each other for similarity. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.com - * @since 2.2 - * @author Benjamin Eberlei - * @author Guilherme Blanco - */ -interface Comparable -{ - /** - * Compare the current object to the passed $other. - * - * Returns 0 if they are semantically equal, 1 if the other object - * is less than the current one, or -1 if its more than the current one. - * - * This method should not check for identity using ===, only for semantical equality for example - * when two different DateTime instances point to the exact same Date + TZ. - * - * @param mixed $other - * - * @return int - */ - public function compareTo($other); -} - diff --git a/vendor/doctrine/common/lib/Doctrine/Common/EventArgs.php b/vendor/doctrine/common/lib/Doctrine/Common/EventArgs.php deleted file mode 100644 index a87eee8..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/EventArgs.php +++ /dev/null @@ -1,67 +0,0 @@ -. - */ - -namespace Doctrine\Common; - -/** - * EventArgs is the base class for classes containing event data. - * - * This class contains no event data. It is used by events that do not pass state - * information to an event handler when an event is raised. The single empty EventArgs - * instance can be obtained through {@link getEmptyInstance}. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.0 - * @version $Revision: 3938 $ - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - */ -class EventArgs -{ - /** - * @var EventArgs Single instance of EventArgs - */ - private static $_emptyEventArgsInstance; - - /** - * Gets the single, empty and immutable EventArgs instance. - * - * This instance will be used when events are dispatched without any parameter, - * like this: EventManager::dispatchEvent('eventname'); - * - * The benefit from this is that only one empty instance is instantiated and shared - * (otherwise there would be instances for every dispatched in the abovementioned form) - * - * @see EventManager::dispatchEvent - * @link http://msdn.microsoft.com/en-us/library/system.eventargs.aspx - * @return EventArgs - */ - public static function getEmptyInstance() - { - if ( ! self::$_emptyEventArgsInstance) { - self::$_emptyEventArgsInstance = new EventArgs; - } - - return self::$_emptyEventArgsInstance; - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/EventManager.php b/vendor/doctrine/common/lib/Doctrine/Common/EventManager.php deleted file mode 100644 index 25aac44..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/EventManager.php +++ /dev/null @@ -1,147 +0,0 @@ -. - */ - -namespace Doctrine\Common; - -/** - * The EventManager is the central point of Doctrine's event listener system. - * Listeners are registered on the manager and events are dispatched through the - * manager. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.0 - * @version $Revision: 3938 $ - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - */ -class EventManager -{ - /** - * Map of registered listeners. - * => - * - * @var array - */ - private $_listeners = array(); - - /** - * Dispatches an event to all registered listeners. - * - * @param string $eventName The name of the event to dispatch. The name of the event is - * the name of the method that is invoked on listeners. - * @param EventArgs $eventArgs The event arguments to pass to the event handlers/listeners. - * If not supplied, the single empty EventArgs instance is used. - * @return boolean - */ - public function dispatchEvent($eventName, EventArgs $eventArgs = null) - { - if (isset($this->_listeners[$eventName])) { - $eventArgs = $eventArgs === null ? EventArgs::getEmptyInstance() : $eventArgs; - - foreach ($this->_listeners[$eventName] as $listener) { - $listener->$eventName($eventArgs); - } - } - } - - /** - * Gets the listeners of a specific event or all listeners. - * - * @param string $event The name of the event. - * @return array The event listeners for the specified event, or all event listeners. - */ - public function getListeners($event = null) - { - return $event ? $this->_listeners[$event] : $this->_listeners; - } - - /** - * Checks whether an event has any registered listeners. - * - * @param string $event - * @return boolean TRUE if the specified event has any listeners, FALSE otherwise. - */ - public function hasListeners($event) - { - return isset($this->_listeners[$event]) && $this->_listeners[$event]; - } - - /** - * Adds an event listener that listens on the specified events. - * - * @param string|array $events The event(s) to listen on. - * @param object $listener The listener object. - */ - public function addEventListener($events, $listener) - { - // Picks the hash code related to that listener - $hash = spl_object_hash($listener); - - foreach ((array) $events as $event) { - // Overrides listener if a previous one was associated already - // Prevents duplicate listeners on same event (same instance only) - $this->_listeners[$event][$hash] = $listener; - } - } - - /** - * Removes an event listener from the specified events. - * - * @param string|array $events - * @param object $listener - */ - public function removeEventListener($events, $listener) - { - // Picks the hash code related to that listener - $hash = spl_object_hash($listener); - - foreach ((array) $events as $event) { - // Check if actually have this listener associated - if (isset($this->_listeners[$event][$hash])) { - unset($this->_listeners[$event][$hash]); - } - } - } - - /** - * Adds an EventSubscriber. The subscriber is asked for all the events he is - * interested in and added as a listener for these events. - * - * @param \Doctrine\Common\EventSubscriber $subscriber The subscriber. - */ - public function addEventSubscriber(EventSubscriber $subscriber) - { - $this->addEventListener($subscriber->getSubscribedEvents(), $subscriber); - } - - /** - * Removes an EventSubscriber. The subscriber is asked for all the events it is - * interested in and removed as a listener for these events. - * - * @param \Doctrine\Common\EventSubscriber $subscriber The subscriber. - */ - public function removeEventSubscriber(EventSubscriber $subscriber) - { - $this->removeEventListener($subscriber->getSubscribedEvents(), $subscriber); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/EventSubscriber.php b/vendor/doctrine/common/lib/Doctrine/Common/EventSubscriber.php deleted file mode 100644 index 1458791..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/EventSubscriber.php +++ /dev/null @@ -1,45 +0,0 @@ -. - */ - -namespace Doctrine\Common; - -/** - * An EventSubscriber knows himself what events he is interested in. - * If an EventSubscriber is added to an EventManager, the manager invokes - * {@link getSubscribedEvents} and registers the subscriber as a listener for all - * returned events. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.0 - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - */ -interface EventSubscriber -{ - /** - * Returns an array of events this subscriber wants to listen to. - * - * @return array - */ - function getSubscribedEvents(); -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Lexer.php b/vendor/doctrine/common/lib/Doctrine/Common/Lexer.php deleted file mode 100644 index 8e2554c..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Lexer.php +++ /dev/null @@ -1,266 +0,0 @@ -. - */ - -namespace Doctrine\Common; - -/** - * Base class for writing simple lexers, i.e. for creating small DSLs. - * - * @since 2.0 - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - * @todo Rename: AbstractLexer - */ -abstract class Lexer -{ - /** - * @var array Array of scanned tokens - */ - private $tokens = array(); - - /** - * @var integer Current lexer position in input string - */ - private $position = 0; - - /** - * @var integer Current peek of current lexer position - */ - private $peek = 0; - - /** - * @var array The next token in the input. - */ - public $lookahead; - - /** - * @var array The last matched/seen token. - */ - public $token; - - /** - * Sets the input data to be tokenized. - * - * The Lexer is immediately reset and the new input tokenized. - * Any unprocessed tokens from any previous input are lost. - * - * @param string $input The input to be tokenized. - */ - public function setInput($input) - { - $this->tokens = array(); - $this->reset(); - $this->scan($input); - } - - /** - * Resets the lexer. - */ - public function reset() - { - $this->lookahead = null; - $this->token = null; - $this->peek = 0; - $this->position = 0; - } - - /** - * Resets the peek pointer to 0. - */ - public function resetPeek() - { - $this->peek = 0; - } - - /** - * Resets the lexer position on the input to the given position. - * - * @param integer $position Position to place the lexical scanner - */ - public function resetPosition($position = 0) - { - $this->position = $position; - } - - /** - * Checks whether a given token matches the current lookahead. - * - * @param integer|string $token - * @return boolean - */ - public function isNextToken($token) - { - return null !== $this->lookahead && $this->lookahead['type'] === $token; - } - - /** - * Checks whether any of the given tokens matches the current lookahead - * - * @param array $tokens - * @return boolean - */ - public function isNextTokenAny(array $tokens) - { - return null !== $this->lookahead && in_array($this->lookahead['type'], $tokens, true); - } - - /** - * Moves to the next token in the input string. - * - * A token is an associative array containing three items: - * - 'value' : the string value of the token in the input string - * - 'type' : the type of the token (identifier, numeric, string, input - * parameter, none) - * - 'position' : the position of the token in the input string - * - * @return array|null the next token; null if there is no more tokens left - */ - public function moveNext() - { - $this->peek = 0; - $this->token = $this->lookahead; - $this->lookahead = (isset($this->tokens[$this->position])) - ? $this->tokens[$this->position++] : null; - - return $this->lookahead !== null; - } - - /** - * Tells the lexer to skip input tokens until it sees a token with the given value. - * - * @param string $type The token type to skip until. - */ - public function skipUntil($type) - { - while ($this->lookahead !== null && $this->lookahead['type'] !== $type) { - $this->moveNext(); - } - } - - /** - * Checks if given value is identical to the given token - * - * @param mixed $value - * @param integer $token - * @return boolean - */ - public function isA($value, $token) - { - return $this->getType($value) === $token; - } - - /** - * Moves the lookahead token forward. - * - * @return array | null The next token or NULL if there are no more tokens ahead. - */ - public function peek() - { - if (isset($this->tokens[$this->position + $this->peek])) { - return $this->tokens[$this->position + $this->peek++]; - } else { - return null; - } - } - - /** - * Peeks at the next token, returns it and immediately resets the peek. - * - * @return array|null The next token or NULL if there are no more tokens ahead. - */ - public function glimpse() - { - $peek = $this->peek(); - $this->peek = 0; - return $peek; - } - - /** - * Scans the input string for tokens. - * - * @param string $input a query string - */ - protected function scan($input) - { - static $regex; - - if ( ! isset($regex)) { - $regex = '/(' . implode(')|(', $this->getCatchablePatterns()) . ')|' - . implode('|', $this->getNonCatchablePatterns()) . '/i'; - } - - $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE; - $matches = preg_split($regex, $input, -1, $flags); - - foreach ($matches as $match) { - // Must remain before 'value' assignment since it can change content - $type = $this->getType($match[0]); - - $this->tokens[] = array( - 'value' => $match[0], - 'type' => $type, - 'position' => $match[1], - ); - } - } - - /** - * Gets the literal for a given token. - * - * @param integer $token - * @return string - */ - public function getLiteral($token) - { - $className = get_class($this); - $reflClass = new \ReflectionClass($className); - $constants = $reflClass->getConstants(); - - foreach ($constants as $name => $value) { - if ($value === $token) { - return $className . '::' . $name; - } - } - - return $token; - } - - /** - * Lexical catchable patterns. - * - * @return array - */ - abstract protected function getCatchablePatterns(); - - /** - * Lexical non-catchable patterns. - * - * @return array - */ - abstract protected function getNonCatchablePatterns(); - - /** - * Retrieve token type. Also processes the token value if necessary. - * - * @param string $value - * @return integer - */ - abstract protected function getType(&$value); -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/NotifyPropertyChanged.php b/vendor/doctrine/common/lib/Doctrine/Common/NotifyPropertyChanged.php deleted file mode 100644 index e32c0b9..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/NotifyPropertyChanged.php +++ /dev/null @@ -1,45 +0,0 @@ -. - */ - -namespace Doctrine\Common; - -/** - * Contract for classes that provide the service of notifying listeners of - * changes to their properties. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.0 - * @version $Revision: 3938 $ - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - */ -interface NotifyPropertyChanged -{ - /** - * Adds a listener that wants to be notified about property changes. - * - * @param PropertyChangedListener $listener - */ - function addPropertyChangedListener(PropertyChangedListener $listener); -} - diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/AbstractManagerRegistry.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/AbstractManagerRegistry.php deleted file mode 100644 index 94fcd05..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/AbstractManagerRegistry.php +++ /dev/null @@ -1,259 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence; - -use Doctrine\Common\Persistence\ManagerRegistry; - -/** - * Abstract implementation of the ManagerRegistry contract. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.2 - * @author Fabien Potencier - * @author Benjamin Eberlei - * @author Lukas Kahwe Smith - */ -abstract class AbstractManagerRegistry implements ManagerRegistry -{ - /** - * @var string - */ - private $name; - - /** - * @var array - */ - private $connections; - - /** - * @var array - */ - private $managers; - - /** - * @var string - */ - private $defaultConnection; - - /** - * @var string - */ - private $defaultManager; - - /** - * @var string - */ - private $proxyInterfaceName; - - /** - * Constructor - * - * @param string $name - * @param array $connections - * @param array $managers - * @param string $defaultConnection - * @param string $defaultManager - * @param string $proxyInterfaceName - */ - public function __construct($name, array $connections, array $managers, $defaultConnection, $defaultManager, $proxyInterfaceName) - { - $this->name = $name; - $this->connections = $connections; - $this->managers = $managers; - $this->defaultConnection = $defaultConnection; - $this->defaultManager = $defaultManager; - $this->proxyInterfaceName = $proxyInterfaceName; - } - - /** - * Fetches/creates the given services - * - * A service in this context is connection or a manager instance - * - * @param string $name name of the service - * @return object instance of the given service - */ - abstract protected function getService($name); - - /** - * Resets the given services - * - * A service in this context is connection or a manager instance - * - * @param string $name name of the service - * @return void - */ - abstract protected function resetService($name); - - /** - * Get the name of the registry - * - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * {@inheritdoc} - */ - public function getConnection($name = null) - { - if (null === $name) { - $name = $this->defaultConnection; - } - - if (!isset($this->connections[$name])) { - throw new \InvalidArgumentException(sprintf('Doctrine %s Connection named "%s" does not exist.', $this->name, $name)); - } - - return $this->getService($this->connections[$name]); - } - - /** - * {@inheritdoc} - */ - public function getConnectionNames() - { - return $this->connections; - } - - /** - * {@inheritdoc} - */ - public function getConnections() - { - $connections = array(); - foreach ($this->connections as $name => $id) { - $connections[$name] = $this->getService($id); - } - - return $connections; - } - - /** - * {@inheritdoc} - */ - public function getDefaultConnectionName() - { - return $this->defaultConnection; - } - - /** - * {@inheritdoc} - */ - public function getDefaultManagerName() - { - return $this->defaultManager; - } - - /** - * {@inheritdoc} - * - * @throws \InvalidArgumentException - */ - public function getManager($name = null) - { - if (null === $name) { - $name = $this->defaultManager; - } - - if (!isset($this->managers[$name])) { - throw new \InvalidArgumentException(sprintf('Doctrine %s Manager named "%s" does not exist.', $this->name, $name)); - } - - return $this->getService($this->managers[$name]); - } - - /** - * {@inheritdoc} - */ - public function getManagerForClass($class) - { - // Check for namespace alias - if (strpos($class, ':') !== false) { - list($namespaceAlias, $simpleClassName) = explode(':', $class); - $class = $this->getAliasNamespace($namespaceAlias) . '\\' . $simpleClassName; - } - - $proxyClass = new \ReflectionClass($class); - if ($proxyClass->implementsInterface($this->proxyInterfaceName)) { - $class = $proxyClass->getParentClass()->getName(); - } - - foreach ($this->managers as $id) { - $manager = $this->getService($id); - - if (!$manager->getMetadataFactory()->isTransient($class)) { - return $manager; - } - } - } - - /** - * {@inheritdoc} - */ - public function getManagerNames() - { - return $this->managers; - } - - /** - * {@inheritdoc} - */ - public function getManagers() - { - $dms = array(); - foreach ($this->managers as $name => $id) { - $dms[$name] = $this->getService($id); - } - - return $dms; - } - - /** - * {@inheritdoc} - */ - public function getRepository($persistentObjectName, $persistentManagerName = null) - { - return $this->getManager($persistentManagerName)->getRepository($persistentObjectName); - } - - /** - * {@inheritdoc} - */ - public function resetManager($name = null) - { - if (null === $name) { - $name = $this->defaultManager; - } - - if (!isset($this->managers[$name])) { - throw new \InvalidArgumentException(sprintf('Doctrine %s Manager named "%s" does not exist.', $this->name, $name)); - } - - // force the creation of a new document manager - // if the current one is closed - $this->resetService($this->managers[$name]); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/ConnectionRegistry.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/ConnectionRegistry.php deleted file mode 100644 index 7d6f0cf..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/ConnectionRegistry.php +++ /dev/null @@ -1,63 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence; - -/** - * Contract covering connection for a Doctrine persistence layer ManagerRegistry class to implement. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.2 - * @author Fabien Potencier - * @author Benjamin Eberlei - * @author Lukas Kahwe Smith - */ -interface ConnectionRegistry -{ - /** - * Gets the default connection name. - * - * @return string The default connection name - */ - function getDefaultConnectionName(); - - /** - * Gets the named connection. - * - * @param string $name The connection name (null for the default one) - * - * @return object - */ - function getConnection($name = null); - - /** - * Gets an array of all registered connections - * - * @return array An array of Connection instances - */ - function getConnections(); - - /** - * Gets all connection names. - * - * @return array An array of connection names - */ - function getConnectionNames(); -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Event/LifecycleEventArgs.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Event/LifecycleEventArgs.php deleted file mode 100644 index 2fb7c47..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Event/LifecycleEventArgs.php +++ /dev/null @@ -1,77 +0,0 @@ -. -*/ - -namespace Doctrine\Common\Persistence\Event; - -use Doctrine\Common\EventArgs; -use Doctrine\Common\Persistence\ObjectManager; - -/** - * Lifecycle Events are triggered by the UnitOfWork during lifecycle transitions - * of entities. - * - * @link www.doctrine-project.org - * @since 2.2 - * @author Roman Borschel - * @author Benjamin Eberlei - */ -class LifecycleEventArgs extends EventArgs -{ - /** - * @var ObjectManager - */ - private $objectManager; - - /** - * @var object - */ - private $entity; - - /** - * Constructor - * - * @param object $entity - * @param ObjectManager $objectManager - */ - public function __construct($entity, ObjectManager $objectManager) - { - $this->entity = $entity; - $this->objectManager = $objectManager; - } - - /** - * Retrieve associated Entity. - * - * @return object - */ - public function getEntity() - { - return $this->entity; - } - - /** - * Retrieve associated ObjectManager. - * - * @return ObjectManager - */ - public function getObjectManager() - { - return $this->objectManager; - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Event/LoadClassMetadataEventArgs.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Event/LoadClassMetadataEventArgs.php deleted file mode 100644 index c014d73..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Event/LoadClassMetadataEventArgs.php +++ /dev/null @@ -1,76 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence\Event; - -use Doctrine\Common\EventArgs; -use Doctrine\Common\Persistence\ObjectManager; -use Doctrine\Common\Persistence\Mapping\ClassMetadata; - -/** - * Class that holds event arguments for a loadMetadata event. - * - * @author Jonathan H. Wage - * @since 2.2 - */ -class LoadClassMetadataEventArgs extends EventArgs -{ - /** - * @var ClassMetadata - */ - private $classMetadata; - - /** - * @var ObjectManager - */ - private $objectManager; - - /** - * Constructor. - * - * @param ClassMetadata $classMetadata - * @param ObjectManager $objectManager - */ - public function __construct(ClassMetadata $classMetadata, ObjectManager $objectManager) - { - $this->classMetadata = $classMetadata; - $this->objectManager = $objectManager; - } - - /** - * Retrieve associated ClassMetadata. - * - * @return ClassMetadata - */ - public function getClassMetadata() - { - return $this->classMetadata; - } - - /** - * Retrieve associated ObjectManager. - * - * @return ObjectManager - */ - public function getObjectManager() - { - return $this->objectManager; - } -} - diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Event/ManagerEventArgs.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Event/ManagerEventArgs.php deleted file mode 100644 index f139365..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Event/ManagerEventArgs.php +++ /dev/null @@ -1,59 +0,0 @@ -. -*/ - -namespace Doctrine\Common\Persistence\Event; - -use Doctrine\Common\Persistence\ObjectManager; - -/** - * Provides event arguments for the preFlush event. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.2 - * @author Roman Borschel - * @author Benjamin Eberlei - */ -class ManagerEventArgs extends \Doctrine\Common\EventArgs -{ - /** - * @var ObjectManager - */ - private $objectManager; - - /** - * Constructor. - * - * @param ObjectManager $objectManager - */ - public function __construct(ObjectManager $objectManager) - { - $this->objectManager = $objectManager; - } - - /** - * Retrieve associated ObjectManager. - * - * @return ObjectManager - */ - public function getObjectManager() - { - return $this->objectManager; - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Event/OnClearEventArgs.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Event/OnClearEventArgs.php deleted file mode 100644 index 18b6554..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Event/OnClearEventArgs.php +++ /dev/null @@ -1,84 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence\Event; - -/** - * Provides event arguments for the onClear event. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.2 - * @author Roman Borschel - * @author Benjamin Eberlei - */ -class OnClearEventArgs extends \Doctrine\Common\EventArgs -{ - /** - * @var \Doctrine\Common\Persistence\ObjectManager - */ - private $objectManager; - - /** - * @var string - */ - private $entityClass; - - /** - * Constructor. - * - * @param \Doctrine\Common\Persistence\ObjectManager $objectManager - * @param string $entityClass Optional entity class - */ - public function __construct($objectManager, $entityClass = null) - { - $this->objectManager = $objectManager; - $this->entityClass = $entityClass; - } - - /** - * Retrieve associated ObjectManager. - * - * @return \Doctrine\Common\Persistence\ObjectManager - */ - public function getObjectManager() - { - return $this->objectManager; - } - - /** - * Name of the entity class that is cleared, or empty if all are cleared. - * - * @return string - */ - public function getEntityClass() - { - return $this->entityClass; - } - - /** - * Check if event clears all entities. - * - * @return bool - */ - public function clearsAllEntities() - { - return ($this->entityClass === null); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Event/PreUpdateEventArgs.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Event/PreUpdateEventArgs.php deleted file mode 100644 index 86ac819..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Event/PreUpdateEventArgs.php +++ /dev/null @@ -1,133 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence\Event; - -use Doctrine\Common\EventArgs, - Doctrine\Common\Persistence\ObjectManager; - -/** - * Class that holds event arguments for a preUpdate event. - * - * @author Guilherme Blanco - * @author Roman Borschel - * @author Benjamin Eberlei - * @since 2.2 - */ -class PreUpdateEventArgs extends LifecycleEventArgs -{ - /** - * @var array - */ - private $entityChangeSet; - - /** - * Constructor. - * - * @param object $entity - * @param ObjectManager $objectManager - * @param array $changeSet - */ - public function __construct($entity, ObjectManager $objectManager, array &$changeSet) - { - parent::__construct($entity, $objectManager); - - $this->entityChangeSet = &$changeSet; - } - - /** - * Retrieve entity changeset. - * - * @return array - */ - public function getEntityChangeSet() - { - return $this->entityChangeSet; - } - - /** - * Check if field has a changeset. - * - * @param string $field - * - * @return boolean - */ - public function hasChangedField($field) - { - return isset($this->entityChangeSet[$field]); - } - - /** - * Get the old value of the changeset of the changed field. - * - * @param string $field - * @return mixed - */ - public function getOldValue($field) - { - $this->assertValidField($field); - - return $this->entityChangeSet[$field][0]; - } - - /** - * Get the new value of the changeset of the changed field. - * - * @param string $field - * @return mixed - */ - public function getNewValue($field) - { - $this->assertValidField($field); - - return $this->entityChangeSet[$field][1]; - } - - /** - * Set the new value of this field. - * - * @param string $field - * @param mixed $value - */ - public function setNewValue($field, $value) - { - $this->assertValidField($field); - - $this->entityChangeSet[$field][1] = $value; - } - - /** - * Assert the field exists in changeset. - * - * @param string $field - * - * @throws \InvalidArgumentException - */ - private function assertValidField($field) - { - if ( ! isset($this->entityChangeSet[$field])) { - throw new \InvalidArgumentException(sprintf( - 'Field "%s" is not a valid field of the entity "%s" in PreUpdateEventArgs.', - $field, - get_class($this->getEntity()) - )); - } - } -} - diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/ManagerRegistry.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/ManagerRegistry.php deleted file mode 100644 index bdb23bd..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/ManagerRegistry.php +++ /dev/null @@ -1,112 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence; - -/** - * Contract covering object managers for a Doctrine persistence layer ManagerRegistry class to implement. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.2 - * @author Fabien Potencier - * @author Benjamin Eberlei - * @author Lukas Kahwe Smith - */ -interface ManagerRegistry extends ConnectionRegistry -{ - /** - * Gets the default object manager name. - * - * @return string The default object manager name - */ - function getDefaultManagerName(); - - /** - * Gets a named object manager. - * - * @param string $name The object manager name (null for the default one) - * - * @return \Doctrine\Common\Persistence\ObjectManager - */ - function getManager($name = null); - - /** - * Gets an array of all registered object managers - * - * @return \Doctrine\Common\Persistence\ObjectManager[] An array of ObjectManager instances - */ - function getManagers(); - - /** - * Resets a named object manager. - * - * This method is useful when an object manager has been closed - * because of a rollbacked transaction AND when you think that - * it makes sense to get a new one to replace the closed one. - * - * Be warned that you will get a brand new object manager as - * the existing one is not useable anymore. This means that any - * other object with a dependency on this object manager will - * hold an obsolete reference. You can inject the registry instead - * to avoid this problem. - * - * @param string $name The object manager name (null for the default one) - * - * @return \Doctrine\Common\Persistence\ObjectManager - */ - function resetManager($name = null); - - /** - * Resolves a registered namespace alias to the full namespace. - * - * This method looks for the alias in all registered object managers. - * - * @param string $alias The alias - * - * @return string The full namespace - */ - function getAliasNamespace($alias); - - /** - * Gets all connection names. - * - * @return array An array of connection names - */ - function getManagerNames(); - - /** - * Gets the ObjectRepository for an persistent object. - * - * @param string $persistentObject The name of the persistent object. - * @param string $persistentManagerName The object manager name (null for the default one) - * - * @return \Doctrine\Common\Persistence\ObjectRepository - */ - function getRepository($persistentObject, $persistentManagerName = null); - - /** - * Gets the object manager associated with a given class. - * - * @param string $class A persistent object class name - * - * @return \Doctrine\Common\Persistence\ObjectManager|null - */ - function getManagerForClass($class); -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php deleted file mode 100644 index 1ace1cc..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/AbstractClassMetadataFactory.php +++ /dev/null @@ -1,383 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence\Mapping; - -use Doctrine\Common\Cache\Cache, - Doctrine\Common\Util\ClassUtils; - -/** - * The ClassMetadataFactory is used to create ClassMetadata objects that contain all the - * metadata mapping informations of a class which describes how a class should be mapped - * to a relational database. - * - * This class was abstracted from the ORM ClassMetadataFactory - * - * @since 2.2 - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - */ -abstract class AbstractClassMetadataFactory implements ClassMetadataFactory -{ - /** - * Salt used by specific Object Manager implementation. - * - * @var string - */ - protected $cacheSalt = "\$CLASSMETADATA"; - - /** - * @var \Doctrine\Common\Cache\Cache - */ - private $cacheDriver; - - /** - * @var array - */ - private $loadedMetadata = array(); - - /** - * @var bool - */ - protected $initialized = false; - - /** - * @var ReflectionService - */ - private $reflectionService; - - /** - * Sets the cache driver used by the factory to cache ClassMetadata instances. - * - * @param Doctrine\Common\Cache\Cache $cacheDriver - */ - public function setCacheDriver(Cache $cacheDriver = null) - { - $this->cacheDriver = $cacheDriver; - } - - /** - * Gets the cache driver used by the factory to cache ClassMetadata instances. - * - * @return Doctrine\Common\Cache\Cache - */ - public function getCacheDriver() - { - return $this->cacheDriver; - } - - /** - * Return an array of all the loaded metadata currently in memory. - * - * @return array - */ - public function getLoadedMetadata() - { - return $this->loadedMetadata; - } - - /** - * Forces the factory to load the metadata of all classes known to the underlying - * mapping driver. - * - * @return array The ClassMetadata instances of all mapped classes. - */ - public function getAllMetadata() - { - if ( ! $this->initialized) { - $this->initialize(); - } - - $driver = $this->getDriver(); - $metadata = array(); - foreach ($driver->getAllClassNames() as $className) { - $metadata[] = $this->getMetadataFor($className); - } - - return $metadata; - } - - /** - * Lazy initialization of this stuff, especially the metadata driver, - * since these are not needed at all when a metadata cache is active. - * - * @return void - */ - abstract protected function initialize(); - - /** - * Get the fully qualified class-name from the namespace alias. - * - * @param string $namespaceAlias - * @param string $simpleClassName - * @return string - */ - abstract protected function getFqcnFromAlias($namespaceAlias, $simpleClassName); - - /** - * Return the mapping driver implementation. - * - * @return \Doctrine\Common\Persistence\Mapping\Driver\MappingDriver - */ - abstract protected function getDriver(); - - /** - * Wakeup reflection after ClassMetadata gets unserialized from cache. - * - * @param ClassMetadata $class - * @param ReflectionService $reflService - * @return void - */ - abstract protected function wakeupReflection(ClassMetadata $class, ReflectionService $reflService); - - /** - * Initialize Reflection after ClassMetadata was constructed. - * - * @param ClassMetadata $class - * @param ReflectionService $reflService - * @return void - */ - abstract protected function initializeReflection(ClassMetadata $class, ReflectionService $reflService); - - /** - * Checks whether the class metadata is an entity. - * - * This method should false for mapped superclasses or - * embedded classes. - * - * @param ClassMetadata $class - * @return boolean - */ - abstract protected function isEntity(ClassMetadata $class); - - /** - * Gets the class metadata descriptor for a class. - * - * @param string $className The name of the class. - * @return \Doctrine\Common\Persistence\Mapping\ClassMetadata - */ - public function getMetadataFor($className) - { - if (isset($this->loadedMetadata[$className])) { - return $this->loadedMetadata[$className]; - } - - $realClassName = $className; - - // Check for namespace alias - if (strpos($className, ':') !== false) { - list($namespaceAlias, $simpleClassName) = explode(':', $className); - $realClassName = $this->getFqcnFromAlias($namespaceAlias, $simpleClassName); - } else { - $realClassName = ClassUtils::getRealClass($realClassName); - } - - if (isset($this->loadedMetadata[$realClassName])) { - // We do not have the alias name in the map, include it - $this->loadedMetadata[$className] = $this->loadedMetadata[$realClassName]; - - return $this->loadedMetadata[$realClassName]; - } - - if ($this->cacheDriver) { - if (($cached = $this->cacheDriver->fetch($realClassName . $this->cacheSalt)) !== false) { - $this->loadedMetadata[$realClassName] = $cached; - $this->wakeupReflection($cached, $this->getReflectionService()); - } else { - foreach ($this->loadMetadata($realClassName) as $loadedClassName) { - $this->cacheDriver->save( - $loadedClassName . $this->cacheSalt, $this->loadedMetadata[$loadedClassName], null - ); - } - } - } else { - $this->loadMetadata($realClassName); - } - - if ($className != $realClassName) { - // We do not have the alias name in the map, include it - $this->loadedMetadata[$className] = $this->loadedMetadata[$realClassName]; - } - - return $this->loadedMetadata[$className]; - } - - /** - * Checks whether the factory has the metadata for a class loaded already. - * - * @param string $className - * @return boolean TRUE if the metadata of the class in question is already loaded, FALSE otherwise. - */ - public function hasMetadataFor($className) - { - return isset($this->loadedMetadata[$className]); - } - - /** - * Sets the metadata descriptor for a specific class. - * - * NOTE: This is only useful in very special cases, like when generating proxy classes. - * - * @param string $className - * @param ClassMetadata $class - */ - public function setMetadataFor($className, $class) - { - $this->loadedMetadata[$className] = $class; - } - - /** - * Get array of parent classes for the given entity class - * - * @param string $name - * @return array $parentClasses - */ - protected function getParentClasses($name) - { - // Collect parent classes, ignoring transient (not-mapped) classes. - $parentClasses = array(); - foreach (array_reverse($this->getReflectionService()->getParentClasses($name)) as $parentClass) { - if ( ! $this->getDriver()->isTransient($parentClass)) { - $parentClasses[] = $parentClass; - } - } - return $parentClasses; - } - - /** - * Loads the metadata of the class in question and all it's ancestors whose metadata - * is still not loaded. - * - * @param string $name The name of the class for which the metadata should get loaded. - * - * @return array - */ - protected function loadMetadata($name) - { - if ( ! $this->initialized) { - $this->initialize(); - } - - $loaded = array(); - - $parentClasses = $this->getParentClasses($name); - $parentClasses[] = $name; - - // Move down the hierarchy of parent classes, starting from the topmost class - $parent = null; - $rootEntityFound = false; - $visited = array(); - $reflService = $this->getReflectionService(); - foreach ($parentClasses as $className) { - if (isset($this->loadedMetadata[$className])) { - $parent = $this->loadedMetadata[$className]; - if ($this->isEntity($parent)) { - $rootEntityFound = true; - array_unshift($visited, $className); - } - continue; - } - - $class = $this->newClassMetadataInstance($className); - $this->initializeReflection($class, $reflService); - - $this->doLoadMetadata($class, $parent, $rootEntityFound, $visited); - - $this->loadedMetadata[$className] = $class; - - $parent = $class; - - if ($this->isEntity($class)) { - $rootEntityFound = true; - array_unshift($visited, $className); - } - - $this->wakeupReflection($class, $reflService); - - $loaded[] = $className; - } - - return $loaded; - } - - /** - * Actually load the metadata from the underlying metadata - * - * @param ClassMetadata $class - * @param ClassMetadata|null $parent - * @param bool $rootEntityFound - * @param array $nonSuperclassParents classnames all parent classes that are not marked as mapped superclasses - * @return void - */ - abstract protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents); - - /** - * Creates a new ClassMetadata instance for the given class name. - * - * @param string $className - * @return ClassMetadata - */ - abstract protected function newClassMetadataInstance($className); - - /** - * Check if this class is mapped by this Object Manager + ClassMetadata configuration - * - * @param $class - * @return bool - */ - public function isTransient($class) - { - if ( ! $this->initialized) { - $this->initialize(); - } - - // Check for namespace alias - if (strpos($class, ':') !== false) { - list($namespaceAlias, $simpleClassName) = explode(':', $class); - $class = $this->getFqcnFromAlias($namespaceAlias, $simpleClassName); - } - - return $this->getDriver()->isTransient($class); - } - - /** - * Set reflectionService. - * - * @param ReflectionService $reflectionService - */ - public function setReflectionService(ReflectionService $reflectionService) - { - $this->reflectionService = $reflectionService; - } - - /** - * Get the reflection service associated with this metadata factory. - * - * @return ReflectionService - */ - public function getReflectionService() - { - if ($this->reflectionService === null) { - $this->reflectionService = new RuntimeReflectionService(); - } - return $this->reflectionService; - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/ClassMetadata.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/ClassMetadata.php deleted file mode 100644 index 4836bf8..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/ClassMetadata.php +++ /dev/null @@ -1,165 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence\Mapping; - -/** - * Contract for a Doctrine persistence layer ClassMetadata class to implement. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.1 - * @author Benjamin Eberlei - * @author Jonathan Wage - */ -interface ClassMetadata -{ - /** - * Get fully-qualified class name of this persistent class. - * - * @return string - */ - function getName(); - - /** - * Gets the mapped identifier field name. - * - * The returned structure is an array of the identifier field names. - * - * @return array - */ - function getIdentifier(); - - /** - * Gets the ReflectionClass instance for this mapped class. - * - * @return \ReflectionClass - */ - function getReflectionClass(); - - /** - * Checks if the given field name is a mapped identifier for this class. - * - * @param string $fieldName - * @return boolean - */ - function isIdentifier($fieldName); - - /** - * Checks if the given field is a mapped property for this class. - * - * @param string $fieldName - * @return boolean - */ - function hasField($fieldName); - - /** - * Checks if the given field is a mapped association for this class. - * - * @param string $fieldName - * @return boolean - */ - function hasAssociation($fieldName); - - /** - * Checks if the given field is a mapped single valued association for this class. - * - * @param string $fieldName - * @return boolean - */ - function isSingleValuedAssociation($fieldName); - - /** - * Checks if the given field is a mapped collection valued association for this class. - * - * @param string $fieldName - * @return boolean - */ - function isCollectionValuedAssociation($fieldName); - - /** - * A numerically indexed list of field names of this persistent class. - * - * This array includes identifier fields if present on this class. - * - * @return array - */ - function getFieldNames(); - - /** - * Returns an array of identifier field names numerically indexed. - * - * @return array - */ - function getIdentifierFieldNames(); - - /** - * A numerically indexed list of association names of this persistent class. - * - * This array includes identifier associations if present on this class. - * - * @return array - */ - function getAssociationNames(); - - /** - * Returns a type name of this field. - * - * This type names can be implementation specific but should at least include the php types: - * integer, string, boolean, float/double, datetime. - * - * @param string $fieldName - * @return string - */ - function getTypeOfField($fieldName); - - /** - * Returns the target class name of the given association. - * - * @param string $assocName - * @return string - */ - function getAssociationTargetClass($assocName); - - /** - * Checks if the association is the inverse side of a bidirectional association - * - * @param string $assocName - * @return boolean - */ - function isAssociationInverseSide($assocName); - - /** - * Returns the target field of the owning side of the association - * - * @param string $assocName - * @return string - */ - function getAssociationMappedByTargetField($assocName); - - /** - * Return the identifier of this object as an array with field name as key. - * - * Has to return an empty array if no identifier isset. - * - * @param object $object - * @return array - */ - function getIdentifierValues($object); -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/ClassMetadataFactory.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/ClassMetadataFactory.php deleted file mode 100644 index 3fa39bc..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/ClassMetadataFactory.php +++ /dev/null @@ -1,74 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence\Mapping; - -/** - * Contract for a Doctrine persistence layer ClassMetadata class to implement. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.1 - * @author Benjamin Eberlei - * @author Jonathan Wage - */ -interface ClassMetadataFactory -{ - /** - * Forces the factory to load the metadata of all classes known to the underlying - * mapping driver. - * - * @return array The ClassMetadata instances of all mapped classes. - */ - function getAllMetadata(); - - /** - * Gets the class metadata descriptor for a class. - * - * @param string $className The name of the class. - * @return ClassMetadata - */ - function getMetadataFor($className); - - /** - * Checks whether the factory has the metadata for a class loaded already. - * - * @param string $className - * @return boolean TRUE if the metadata of the class in question is already loaded, FALSE otherwise. - */ - function hasMetadataFor($className); - - /** - * Sets the metadata descriptor for a specific class. - * - * @param string $className - * @param ClassMetadata $class - */ - function setMetadataFor($className, $class); - - /** - * Whether the class with the specified name should have its metadata loaded. - * This is only the case if it is either mapped directly or as a - * MappedSuperclass. - * - * @param string $className - * @return boolean - */ - function isTransient($className); -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/AnnotationDriver.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/AnnotationDriver.php deleted file mode 100644 index 1131add..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/AnnotationDriver.php +++ /dev/null @@ -1,214 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence\Mapping\Driver; - -use Doctrine\Common\Cache\ArrayCache, - Doctrine\Common\Annotations\AnnotationReader, - Doctrine\Common\Annotations\AnnotationRegistry, - Doctrine\Common\Persistence\Mapping\MappingException; - -/** - * The AnnotationDriver reads the mapping metadata from docblock annotations. - * - * @since 2.2 - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan H. Wage - * @author Roman Borschel - */ -abstract class AnnotationDriver implements MappingDriver -{ - /** - * The AnnotationReader. - * - * @var AnnotationReader - */ - protected $reader; - - /** - * The paths where to look for mapping files. - * - * @var array - */ - protected $paths = array(); - - /** - * The file extension of mapping documents. - * - * @var string - */ - protected $fileExtension = '.php'; - - /** - * Cache for AnnotationDriver#getAllClassNames() - * - * @var array - */ - protected $classNames; - - /** - * Name of the entity annotations as keys - * - * @var array - */ - protected $entityAnnotationClasses = array(); - - /** - * Initializes a new AnnotationDriver that uses the given AnnotationReader for reading - * docblock annotations. - * - * @param AnnotationReader $reader The AnnotationReader to use, duck-typed. - * @param string|array $paths One or multiple paths where mapping classes can be found. - */ - public function __construct($reader, $paths = null) - { - $this->reader = $reader; - if ($paths) { - $this->addPaths((array) $paths); - } - } - - /** - * Append lookup paths to metadata driver. - * - * @param array $paths - */ - public function addPaths(array $paths) - { - $this->paths = array_unique(array_merge($this->paths, $paths)); - } - - /** - * Retrieve the defined metadata lookup paths. - * - * @return array - */ - public function getPaths() - { - return $this->paths; - } - - /** - * Retrieve the current annotation reader - * - * @return AnnotationReader - */ - public function getReader() - { - return $this->reader; - } - - /** - * Get the file extension used to look for mapping files under - * - * @return string - */ - public function getFileExtension() - { - return $this->fileExtension; - } - - /** - * Set the file extension used to look for mapping files under - * - * @param string $fileExtension The file extension to set - * @return void - */ - public function setFileExtension($fileExtension) - { - $this->fileExtension = $fileExtension; - } - - /** - * Whether the class with the specified name is transient. Only non-transient - * classes, that is entities and mapped superclasses, should have their metadata loaded. - * - * A class is non-transient if it is annotated with an annotation - * from the {@see AnnotationDriver::entityAnnotationClasses}. - * - * @param string $className - * @return boolean - */ - public function isTransient($className) - { - $classAnnotations = $this->reader->getClassAnnotations(new \ReflectionClass($className)); - - foreach ($classAnnotations as $annot) { - if (isset($this->entityAnnotationClasses[get_class($annot)])) { - return false; - } - } - return true; - } - - /** - * {@inheritDoc} - */ - public function getAllClassNames() - { - if ($this->classNames !== null) { - return $this->classNames; - } - - if (!$this->paths) { - throw MappingException::pathRequired(); - } - - $classes = array(); - $includedFiles = array(); - - foreach ($this->paths as $path) { - if ( ! is_dir($path)) { - throw MappingException::fileMappingDriversRequireConfiguredDirectoryPath($path); - } - - $iterator = new \RegexIterator( - new \RecursiveIteratorIterator( - new \RecursiveDirectoryIterator($path, \FilesystemIterator::SKIP_DOTS), - \RecursiveIteratorIterator::LEAVES_ONLY - ), - '/^.+' . str_replace('.', '\.', $this->fileExtension) . '$/i', - \RecursiveRegexIterator::GET_MATCH - ); - - foreach ($iterator as $file) { - $sourceFile = realpath($file[0]); - - require_once $sourceFile; - - $includedFiles[] = $sourceFile; - } - } - - $declared = get_declared_classes(); - - foreach ($declared as $className) { - $rc = new \ReflectionClass($className); - $sourceFile = $rc->getFileName(); - if (in_array($sourceFile, $includedFiles) && ! $this->isTransient($className)) { - $classes[] = $className; - } - } - - $this->classNames = $classes; - - return $classes; - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/DefaultFileLocator.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/DefaultFileLocator.php deleted file mode 100644 index 0d61174..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/DefaultFileLocator.php +++ /dev/null @@ -1,170 +0,0 @@ -. -*/ - -namespace Doctrine\Common\Persistence\Mapping\Driver; - -use Doctrine\Common\Persistence\Mapping\MappingException; - -/** - * Locate the file that contains the metadata information for a given class name. - * - * This behavior is inpependent of the actual content of the file. It just detects - * the file which is responsible for the given class name. - * - * @author Benjamin Eberlei - * @author Johannes M. Schmitt - */ -class DefaultFileLocator implements FileLocator -{ - /** - * The paths where to look for mapping files. - * - * @var array - */ - protected $paths = array(); - - /** - * The file extension of mapping documents. - * - * @var string - */ - protected $fileExtension; - - /** - * Initializes a new FileDriver that looks in the given path(s) for mapping - * documents and operates in the specified operating mode. - * - * @param string|array $paths One or multiple paths where mapping documents can be found. - * @param string|null $fileExtension - */ - public function __construct($paths, $fileExtension = null) - { - $this->addPaths((array) $paths); - $this->fileExtension = $fileExtension; - } - - /** - * Append lookup paths to metadata driver. - * - * @param array $paths - */ - public function addPaths(array $paths) - { - $this->paths = array_unique(array_merge($this->paths, $paths)); - } - - /** - * Retrieve the defined metadata lookup paths. - * - * @return array - */ - public function getPaths() - { - return $this->paths; - } - - /** - * Get the file extension used to look for mapping files under - * - * @return string - */ - public function getFileExtension() - { - return $this->fileExtension; - } - - /** - * Set the file extension used to look for mapping files under - * - * @param string $fileExtension The file extension to set - * @return void - */ - public function setFileExtension($fileExtension) - { - $this->fileExtension = $fileExtension; - } - - /** - * {@inheritDoc} - */ - public function findMappingFile($className) - { - $fileName = str_replace('\\', '.', $className) . $this->fileExtension; - - // Check whether file exists - foreach ($this->paths as $path) { - if (file_exists($path . DIRECTORY_SEPARATOR . $fileName)) { - return $path . DIRECTORY_SEPARATOR . $fileName; - } - } - - throw MappingException::mappingFileNotFound($className, $fileName); - } - - /** - * {@inheritDoc} - */ - public function getAllClassNames($globalBasename) - { - $classes = array(); - - if ($this->paths) { - foreach ($this->paths as $path) { - if ( ! is_dir($path)) { - throw MappingException::fileMappingDriversRequireConfiguredDirectoryPath($path); - } - - $iterator = new \RecursiveIteratorIterator( - new \RecursiveDirectoryIterator($path), - \RecursiveIteratorIterator::LEAVES_ONLY - ); - - foreach ($iterator as $file) { - $fileName = $file->getBasename($this->fileExtension); - - if ($fileName == $file->getBasename() || $fileName == $globalBasename) { - continue; - } - - // NOTE: All files found here means classes are not transient! - $classes[] = str_replace('.', '\\', $fileName); - } - } - } - - return $classes; - } - - /** - * {@inheritDoc} - */ - public function fileExists($className) - { - $fileName = str_replace('\\', '.', $className) . $this->fileExtension; - - // Check whether file exists - foreach ((array) $this->paths as $path) { - if (file_exists($path . DIRECTORY_SEPARATOR . $fileName)) { - return true; - } - } - - return false; - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/FileDriver.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/FileDriver.php deleted file mode 100644 index b0a7685..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/FileDriver.php +++ /dev/null @@ -1,214 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence\Mapping\Driver; - -use Doctrine\Common\Persistence\Mapping\MappingException; - -/** - * Base driver for file-based metadata drivers. - * - * A file driver operates in a mode where it loads the mapping files of individual - * classes on demand. This requires the user to adhere to the convention of 1 mapping - * file per class and the file names of the mapping files must correspond to the full - * class name, including namespace, with the namespace delimiters '\', replaced by dots '.'. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.com - * @since 2.2 - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan H. Wage - * @author Roman Borschel - */ -abstract class FileDriver implements MappingDriver -{ - /** - * @var FileLocator - */ - protected $locator; - - /** - * @var array - */ - protected $classCache; - - /** - * @var string - */ - protected $globalBasename; - - /** - * Initializes a new FileDriver that looks in the given path(s) for mapping - * documents and operates in the specified operating mode. - * - * @param string|array|FileLocator $locator A FileLocator or one/multiple paths where mapping documents can be found. - * @param string $fileExtension - */ - public function __construct($locator, $fileExtension = null) - { - if ($locator instanceof FileLocator) { - $this->locator = $locator; - } else { - $this->locator = new DefaultFileLocator((array)$locator, $fileExtension); - } - } - - /** - * Set global basename - * - * @param string $file - */ - public function setGlobalBasename($file) - { - $this->globalBasename = $file; - } - - /** - * Retrieve global basename - * - * @return string - */ - public function getGlobalBasename() - { - return $this->globalBasename; - } - - /** - * Get the element of schema meta data for the class from the mapping file. - * This will lazily load the mapping file if it is not loaded yet - * - * @param string $className - * - * @throws MappingException - * @return array The element of schema meta data - */ - public function getElement($className) - { - if ($this->classCache === null) { - $this->initialize(); - } - - if (isset($this->classCache[$className])) { - return $this->classCache[$className]; - } - - $result = $this->loadMappingFile($this->locator->findMappingFile($className)); - if (!isset($result[$className])) { - throw MappingException::invalidMappingFile($className, str_replace('\\', '.', $className) . $this->locator->getFileExtension()); - } - - return $result[$className]; - } - - /** - * Whether the class with the specified name should have its metadata loaded. - * This is only the case if it is either mapped as an Entity or a - * MappedSuperclass. - * - * @param string $className - * @return boolean - */ - public function isTransient($className) - { - if ($this->classCache === null) { - $this->initialize(); - } - - if (isset($this->classCache[$className])) { - return false; - } - - return !$this->locator->fileExists($className); - } - - /** - * Gets the names of all mapped classes known to this driver. - * - * @return array The names of all mapped classes known to this driver. - */ - public function getAllClassNames() - { - if ($this->classCache === null) { - $this->initialize(); - } - - $classNames = (array)$this->locator->getAllClassNames($this->globalBasename); - if ($this->classCache) { - $classNames = array_merge(array_keys($this->classCache), $classNames); - } - return $classNames; - } - - /** - * Loads a mapping file with the given name and returns a map - * from class/entity names to their corresponding file driver elements. - * - * @param string $file The mapping file to load. - * @return array - */ - abstract protected function loadMappingFile($file); - - /** - * Initialize the class cache from all the global files. - * - * Using this feature adds a substantial performance hit to file drivers as - * more metadata has to be loaded into memory than might actually be - * necessary. This may not be relevant to scenarios where caching of - * metadata is in place, however hits very hard in scenarios where no - * caching is used. - * - * @return void - */ - protected function initialize() - { - $this->classCache = array(); - if (null !== $this->globalBasename) { - foreach ($this->locator->getPaths() as $path) { - $file = $path.'/'.$this->globalBasename.$this->locator->getFileExtension(); - if (is_file($file)) { - $this->classCache = array_merge( - $this->classCache, - $this->loadMappingFile($file) - ); - } - } - } - } - - /** - * Retrieve the locator used to discover mapping files by className - * - * @return FileLocator - */ - public function getLocator() - { - return $this->locator; - } - - /** - * Set the locator used to discover mapping files by className - * - * @param FileLocator $locator - */ - public function setLocator(FileLocator $locator) - { - $this->locator = $locator; - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/FileLocator.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/FileLocator.php deleted file mode 100644 index ec2b606..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/FileLocator.php +++ /dev/null @@ -1,71 +0,0 @@ -. -*/ - -namespace Doctrine\Common\Persistence\Mapping\Driver; - -/** - * Locate the file that contains the metadata information for a given class name. - * - * This behavior is independent of the actual content of the file. It just detects - * the file which is responsible for the given class name. - * - * @author Benjamin Eberlei - * @author Johannes M. Schmitt - */ -interface FileLocator -{ - /** - * Locate mapping file for the given class name. - * - * @param string $className - * @return string - */ - function findMappingFile($className); - - /** - * Get all class names that are found with this file locator. - * - * @param string $globalBasename Passed to allow excluding the basename - * @return array - */ - function getAllClassNames($globalBasename); - - /** - * Check if a file can be found for this class name. - * - * @param string $className - * - * @return bool - */ - function fileExists($className); - - /** - * Get all the paths that this file locator looks for mapping files. - * - * @return array - */ - function getPaths(); - - /** - * Get the file extension that mapping files are suffixed with. - * - * @return string - */ - function getFileExtension(); -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/MappingDriver.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/MappingDriver.php deleted file mode 100644 index 955d831..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/MappingDriver.php +++ /dev/null @@ -1,56 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence\Mapping\Driver; - -use Doctrine\Common\Persistence\Mapping\ClassMetadata; - -/** - * Contract for metadata drivers. - * - * @since 2.2 - * @author Jonathan H. Wage - */ -interface MappingDriver -{ - /** - * Loads the metadata for the specified class into the provided container. - * - * @param string $className - * @param ClassMetadata $metadata - */ - function loadMetadataForClass($className, ClassMetadata $metadata); - - /** - * Gets the names of all mapped classes known to this driver. - * - * @return array The names of all mapped classes known to this driver. - */ - function getAllClassNames(); - - /** - * Whether the class with the specified name should have its metadata loaded. - * This is only the case if it is either mapped as an Entity or a - * MappedSuperclass. - * - * @param string $className - * @return boolean - */ - function isTransient($className); -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/MappingDriverChain.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/MappingDriverChain.php deleted file mode 100644 index 3b1049d..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/MappingDriverChain.php +++ /dev/null @@ -1,168 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence\Mapping\Driver; - -use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver, - Doctrine\Common\Persistence\Mapping\ClassMetadata, - Doctrine\Common\Persistence\Mapping\MappingException; - -/** - * The DriverChain allows you to add multiple other mapping drivers for - * certain namespaces - * - * @since 2.2 - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan H. Wage - * @author Roman Borschel - */ -class MappingDriverChain implements MappingDriver -{ - /** - * The default driver - * - * @var MappingDriver - */ - private $defaultDriver; - - /** - * @var array - */ - private $drivers = array(); - - /** - * Get the default driver. - * - * @return MappingDriver|null - */ - public function getDefaultDriver() - { - return $this->defaultDriver; - } - - /** - * Set the default driver. - * - * @param MappingDriver $driver - */ - public function setDefaultDriver(MappingDriver $driver) - { - $this->defaultDriver = $driver; - } - - /** - * Add a nested driver. - * - * @param MappingDriver $nestedDriver - * @param string $namespace - */ - public function addDriver(MappingDriver $nestedDriver, $namespace) - { - $this->drivers[$namespace] = $nestedDriver; - } - - /** - * Get the array of nested drivers. - * - * @return array $drivers - */ - public function getDrivers() - { - return $this->drivers; - } - - /** - * Loads the metadata for the specified class into the provided container. - * - * @param string $className - * @param ClassMetadata $metadata - * - * @throws MappingException - */ - public function loadMetadataForClass($className, ClassMetadata $metadata) - { - /* @var $driver MappingDriver */ - foreach ($this->drivers as $namespace => $driver) { - if (strpos($className, $namespace) === 0) { - $driver->loadMetadataForClass($className, $metadata); - return; - } - } - - if (null !== $this->defaultDriver) { - $this->defaultDriver->loadMetadataForClass($className, $metadata); - return; - } - - throw MappingException::classNotFoundInNamespaces($className, array_keys($this->drivers)); - } - - /** - * Gets the names of all mapped classes known to this driver. - * - * @return array The names of all mapped classes known to this driver. - */ - public function getAllClassNames() - { - $classNames = array(); - $driverClasses = array(); - - /* @var $driver MappingDriver */ - foreach ($this->drivers AS $namespace => $driver) { - $oid = spl_object_hash($driver); - - if (!isset($driverClasses[$oid])) { - $driverClasses[$oid] = $driver->getAllClassNames(); - } - - foreach ($driverClasses[$oid] AS $className) { - if (strpos($className, $namespace) === 0) { - $classNames[$className] = true; - } - } - } - - return array_keys($classNames); - } - - /** - * Whether the class with the specified name should have its metadata loaded. - * - * This is only the case for non-transient classes either mapped as an Entity or MappedSuperclass. - * - * @param string $className - * @return boolean - */ - public function isTransient($className) - { - /* @var $driver MappingDriver */ - foreach ($this->drivers AS $namespace => $driver) { - if (strpos($className, $namespace) === 0) { - return $driver->isTransient($className); - } - } - - if ($this->defaultDriver !== null) { - return $this->defaultDriver->isTransient($className); - } - - return true; - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/PHPDriver.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/PHPDriver.php deleted file mode 100644 index e0c8611..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/PHPDriver.php +++ /dev/null @@ -1,72 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence\Mapping\Driver; - -use Doctrine\Common\Persistence\Mapping\ClassMetadata; - -/** - * The PHPDriver includes php files which just populate ClassMetadataInfo - * instances with plain php code - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.0 - * @version $Revision$ - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan H. Wage - * @author Roman Borschel - */ -class PHPDriver extends FileDriver -{ - /** - * {@inheritdoc} - */ - protected $metadata; - - /** - * {@inheritDoc} - */ - public function __construct($locator, $fileExtension = null) - { - $fileExtension = ".php"; - parent::__construct($locator, $fileExtension); - } - - /** - * {@inheritdoc} - */ - public function loadMetadataForClass($className, ClassMetadata $metadata) - { - $this->metadata = $metadata; - $this->loadMappingFile($this->locator->findMappingFile($className)); - } - - /** - * {@inheritdoc} - */ - protected function loadMappingFile($file) - { - $metadata = $this->metadata; - include $file; - - return array($metadata->getName() => $metadata); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/StaticPHPDriver.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/StaticPHPDriver.php deleted file mode 100644 index e3cea73..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/StaticPHPDriver.php +++ /dev/null @@ -1,141 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence\Mapping\Driver; - -use Doctrine\Common\Persistence\Mapping\ClassMetadata; -use Doctrine\Common\Persistence\Mapping\MappingException; - -/** - * The StaticPHPDriver calls a static loadMetadata() method on your entity - * classes where you can manually populate the ClassMetadata instance. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.2 - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan H. Wage - * @author Roman Borschel - */ -class StaticPHPDriver implements MappingDriver -{ - /** - * Paths of entity directories. - * - * @var array - */ - private $paths = array(); - - /** - * Map of all class names. - * - * @var array - */ - private $classNames; - - /** - * Constructor - * - * @param array|string $paths - */ - public function __construct($paths) - { - $this->addPaths((array) $paths); - } - - /** - * Add paths - * - * @param array $paths - */ - public function addPaths(array $paths) - { - $this->paths = array_unique(array_merge($this->paths, $paths)); - } - - /** - * {@inheritdoc} - */ - public function loadMetadataForClass($className, ClassMetadata $metadata) - { - $className::loadMetadata($metadata); - } - - /** - * {@inheritDoc} - * @todo Same code exists in AnnotationDriver, should we re-use it somehow or not worry about it? - */ - public function getAllClassNames() - { - if ($this->classNames !== null) { - return $this->classNames; - } - - if (!$this->paths) { - throw MappingException::pathRequired(); - } - - $classes = array(); - $includedFiles = array(); - - foreach ($this->paths as $path) { - if (!is_dir($path)) { - throw MappingException::fileMappingDriversRequireConfiguredDirectoryPath($path); - } - - $iterator = new \RecursiveIteratorIterator( - new \RecursiveDirectoryIterator($path), - \RecursiveIteratorIterator::LEAVES_ONLY - ); - - foreach ($iterator as $file) { - if ($file->getBasename('.php') == $file->getBasename()) { - continue; - } - - $sourceFile = realpath($file->getPathName()); - require_once $sourceFile; - $includedFiles[] = $sourceFile; - } - } - - $declared = get_declared_classes(); - - foreach ($declared as $className) { - $rc = new \ReflectionClass($className); - $sourceFile = $rc->getFileName(); - if (in_array($sourceFile, $includedFiles) && !$this->isTransient($className)) { - $classes[] = $className; - } - } - - $this->classNames = $classes; - - return $classes; - } - - /** - * {@inheritdoc} - */ - public function isTransient($className) - { - return ! method_exists($className, 'loadMetadata'); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/SymfonyFileLocator.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/SymfonyFileLocator.php deleted file mode 100644 index 9095187..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/Driver/SymfonyFileLocator.php +++ /dev/null @@ -1,214 +0,0 @@ -. -*/ - -namespace Doctrine\Common\Persistence\Mapping\Driver; - -use Doctrine\Common\Persistence\Mapping\MappingException; - -/** - * The Symfony File Locator makes a simplifying assumptions compared - * to the DefaultFileLocator. By assuming paths only contain entities of a certain - * namespace the mapping files consists of the short classname only. - * - * @author Fabien Potencier - * @author Benjamin Eberlei - * @license MIT - */ -class SymfonyFileLocator implements FileLocator -{ - /** - * The paths where to look for mapping files. - * - * @var array - */ - protected $paths = array(); - - /** - * A map of mapping directory path to namespace prefix used to expand class shortnames. - * - * @var array - */ - protected $prefixes = array(); - - /** - * File extension that is searched for. - * - * @var string - */ - protected $fileExtension; - - /** - * Constructor - * - * @param array $prefixes - * @param string|null $fileExtension - */ - public function __construct(array $prefixes, $fileExtension = null) - { - $this->addNamespacePrefixes($prefixes); - $this->fileExtension = $fileExtension; - } - - /** - * Add Namespace Prefixes - * - * @param array $prefixes - */ - public function addNamespacePrefixes(array $prefixes) - { - $this->prefixes = array_merge($this->prefixes, $prefixes); - $this->paths = array_merge($this->paths, array_keys($prefixes)); - } - - /** - * Get Namespace Prefixes - * - * @return array - */ - public function getNamespacePrefixes() - { - return $this->prefixes; - } - - /** - * {@inheritDoc} - */ - public function getPaths() - { - return $this->paths; - } - - /** - * {@inheritDoc} - */ - public function getFileExtension() - { - return $this->fileExtension; - } - - /** - * Set the file extension used to look for mapping files under - * - * @param string $fileExtension The file extension to set - * @return void - */ - public function setFileExtension($fileExtension) - { - $this->fileExtension = $fileExtension; - } - - /** - * {@inheritDoc} - */ - public function fileExists($className) - { - $defaultFileName = str_replace('\\', '.', $className).$this->fileExtension; - foreach ($this->paths as $path) { - if (!isset($this->prefixes[$path])) { - // global namespace class - if (is_file($path.DIRECTORY_SEPARATOR.$defaultFileName)) { - return true; - } - - continue; - } - - $prefix = $this->prefixes[$path]; - - if (0 !== strpos($className, $prefix.'\\')) { - continue; - } - - $filename = $path.'/'.strtr(substr($className, strlen($prefix)+1), '\\', '.').$this->fileExtension; - return is_file($filename); - } - - return false; - } - - /** - * {@inheritDoc} - */ - public function getAllClassNames($globalBasename = null) - { - $classes = array(); - - if ($this->paths) { - foreach ((array) $this->paths as $path) { - if (!is_dir($path)) { - throw MappingException::fileMappingDriversRequireConfiguredDirectoryPath($path); - } - - $iterator = new \RecursiveIteratorIterator( - new \RecursiveDirectoryIterator($path), - \RecursiveIteratorIterator::LEAVES_ONLY - ); - - foreach ($iterator as $file) { - $fileName = $file->getBasename($this->fileExtension); - - if ($fileName == $file->getBasename() || $fileName == $globalBasename) { - continue; - } - - // NOTE: All files found here means classes are not transient! - if (isset($this->prefixes[$path])) { - $classes[] = $this->prefixes[$path].'\\'.str_replace('.', '\\', $fileName); - } else { - $classes[] = str_replace('.', '\\', $fileName); - } - } - } - } - - return $classes; - } - - /** - * {@inheritDoc} - */ - public function findMappingFile($className) - { - $defaultFileName = str_replace('\\', '.', $className).$this->fileExtension; - foreach ($this->paths as $path) { - if (!isset($this->prefixes[$path])) { - if (is_file($path.DIRECTORY_SEPARATOR.$defaultFileName)) { - return $path.DIRECTORY_SEPARATOR.$defaultFileName; - } - - continue; - } - - $prefix = $this->prefixes[$path]; - - if (0 !== strpos($className, $prefix.'\\')) { - continue; - } - - $filename = $path.'/'.strtr(substr($className, strlen($prefix)+1), '\\', '.').$this->fileExtension; - if (is_file($filename)) { - return $filename; - } - - throw MappingException::mappingFileNotFound($className, $filename); - } - - throw MappingException::mappingFileNotFound($className, substr($className, strrpos($className, '\\') + 1).$this->fileExtension); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/MappingException.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/MappingException.php deleted file mode 100644 index c1e7ad5..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/MappingException.php +++ /dev/null @@ -1,86 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence\Mapping; - -/** - * A MappingException indicates that something is wrong with the mapping setup. - * - * @since 2.2 - */ -class MappingException extends \Exception -{ - /** - * - * @param string $className - * @param array $namespaces - * - * @return MappingException - */ - public static function classNotFoundInNamespaces($className, $namespaces) - { - return new self("The class '" . $className . "' was not found in the ". - "chain configured namespaces " . implode(", ", $namespaces)); - } - - /** - * @return MappingException - */ - public static function pathRequired() - { - return new self("Specifying the paths to your entities is required ". - "in the AnnotationDriver to retrieve all class names."); - } - - /** - * @param string|null $path - * @return MappingException - */ - public static function fileMappingDriversRequireConfiguredDirectoryPath($path = null) - { - if ( ! empty($path)) { - $path = '[' . $path . ']'; - } - - return new self( - 'File mapping drivers must have a valid directory path, ' . - 'however the given path ' . $path . ' seems to be incorrect!' - ); - } - - /** - * @param string $entityName - * @param string $fileName - * @return MappingException - */ - public static function mappingFileNotFound($entityName, $fileName) - { - return new self("No mapping file found named '$fileName' for class '$entityName'."); - } - - /** - * @param string $entityName - * @param string $fileName - * @return MappingException - */ - public static function invalidMappingFile($entityName, $fileName) - { - return new self("Invalid mapping file '$fileName' for class '$entityName'."); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/ReflectionService.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/ReflectionService.php deleted file mode 100644 index 3db85d9..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/ReflectionService.php +++ /dev/null @@ -1,80 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence\Mapping; - -/** - * Very simple reflection service abstraction. - * - * This is required inside metadata layers that may require either - * static or runtime reflection. - * - * @author Benjamin Eberlei - */ -interface ReflectionService -{ - /** - * Return an array of the parent classes (not interfaces) for the given class. - * - * @param string $class - * @return array - */ - function getParentClasses($class); - - /** - * Return the shortname of a class. - * - * @param string $class - * @return string - */ - function getClassShortName($class); - - /** - * @param string $class - * @return string - */ - function getClassNamespace($class); - - /** - * Return a reflection class instance or null - * - * @param string $class - * @return \ReflectionClass|null - */ - function getClass($class); - - /** - * Return an accessible property (setAccessible(true)) or null. - * - * @param string $class - * @param string $property - * @return \ReflectionProperty|null - */ - function getAccessibleProperty($class, $property); - - /** - * Check if the class have a public method with the given name. - * - * @param mixed $class - * @param mixed $method - * @return bool - */ - function hasPublicMethod($class, $method); -} - diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/RuntimeReflectionService.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/RuntimeReflectionService.php deleted file mode 100644 index 77b9e76..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/RuntimeReflectionService.php +++ /dev/null @@ -1,102 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence\Mapping; - -use ReflectionClass; -use ReflectionProperty; - -/** - * PHP Runtime Reflection Service - * - * @author Benjamin Eberlei - */ -class RuntimeReflectionService implements ReflectionService -{ - /** - * Return an array of the parent classes (not interfaces) for the given class. - * - * @param string $class - * @return array - */ - public function getParentClasses($class) - { - return class_parents($class); - } - - /** - * Return the shortname of a class. - * - * @param string $class - * @return string - */ - public function getClassShortName($class) - { - $r = new ReflectionClass($class); - return $r->getShortName(); - } - - /** - * @param string $class - * @return string - */ - public function getClassNamespace($class) - { - $r = new ReflectionClass($class); - return $r->getNamespaceName(); - } - - /** - * Return a reflection class instance or null - * - * @param string $class - * @return ReflectionClass|null - */ - public function getClass($class) - { - return new ReflectionClass($class); - } - - /** - * Return an accessible property (setAccessible(true)) or null. - * - * @param string $class - * @param string $property - * @return ReflectionProperty|null - */ - public function getAccessibleProperty($class, $property) - { - $property = new ReflectionProperty($class, $property); - $property->setAccessible(true); - return $property; - } - - /** - * Check if the class have a public method with the given name. - * - * @param mixed $class - * @param mixed $method - * @return bool - */ - public function hasPublicMethod($class, $method) - { - return method_exists($class, $method) && is_callable(array($class, $method)); - } -} - diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/StaticReflectionService.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/StaticReflectionService.php deleted file mode 100644 index 4f6d1cf..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Mapping/StaticReflectionService.php +++ /dev/null @@ -1,107 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence\Mapping; - -use ReflectionClass; -use ReflectionProperty; - -/** - * PHP Runtime Reflection Service - * - * @author Benjamin Eberlei - */ -class StaticReflectionService implements ReflectionService -{ - /** - * Return an array of the parent classes (not interfaces) for the given class. - * - * @param string $class - * @return array - */ - public function getParentClasses($class) - { - return array(); - } - - /** - * Return the shortname of a class. - * - * @param string $className - * @return string - */ - public function getClassShortName($className) - { - if (strpos($className, '\\') !== false) { - $className = substr($className, strrpos($className, "\\")+1); - } - return $className; - } - - /** - * Return the namespace of a class. - * - * @param string $className - * @return string - */ - public function getClassNamespace($className) - { - $namespace = ''; - if (strpos($className, '\\') !== false) { - $namespace = strrev(substr( strrev($className), strpos(strrev($className), '\\')+1 )); - } - return $namespace; - } - - /** - * Return a reflection class instance or null - * - * @param string $class - * @return ReflectionClass|null - */ - public function getClass($class) - { - return null; - } - - /** - * Return an accessible property (setAccessible(true)) or null. - * - * @param string $class - * @param string $property - * @return ReflectionProperty|null - */ - public function getAccessibleProperty($class, $property) - { - return null; - } - - /** - * Check if the class have a public method with the given name. - * - * @param mixed $class - * @param mixed $method - * @return bool - */ - public function hasPublicMethod($class, $method) - { - return method_exists($class, $method) && is_callable(array($class, $method)); - } -} - diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/ObjectManager.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/ObjectManager.php deleted file mode 100644 index 2bb8722..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/ObjectManager.php +++ /dev/null @@ -1,152 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence; - -/** - * Contract for a Doctrine persistence layer ObjectManager class to implement. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.1 - * @author Benjamin Eberlei - * @author Jonathan Wage - */ -interface ObjectManager -{ - /** - * Finds a object by its identifier. - * - * This is just a convenient shortcut for getRepository($className)->find($id). - * - * @param string - * @param mixed - * @return object - */ - function find($className, $id); - - /** - * Tells the ObjectManager to make an instance managed and persistent. - * - * The object will be entered into the database as a result of the flush operation. - * - * NOTE: The persist operation always considers objects that are not yet known to - * this ObjectManager as NEW. Do not pass detached objects to the persist operation. - * - * @param object $object The instance to make managed and persistent. - */ - function persist($object); - - /** - * Removes an object instance. - * - * A removed object will be removed from the database as a result of the flush operation. - * - * @param object $object The object instance to remove. - */ - function remove($object); - - /** - * Merges the state of a detached object into the persistence context - * of this ObjectManager and returns the managed copy of the object. - * The object passed to merge will not become associated/managed with this ObjectManager. - * - * @param object $object - * @return object - */ - function merge($object); - - /** - * Clears the ObjectManager. All objects that are currently managed - * by this ObjectManager become detached. - * - * @param string $objectName if given, only objects of this type will get detached - */ - function clear($objectName = null); - - /** - * Detaches an object from the ObjectManager, causing a managed object to - * become detached. Unflushed changes made to the object if any - * (including removal of the object), will not be synchronized to the database. - * Objects which previously referenced the detached object will continue to - * reference it. - * - * @param object $object The object to detach. - */ - function detach($object); - - /** - * Refreshes the persistent state of an object from the database, - * overriding any local changes that have not yet been persisted. - * - * @param object $object The object to refresh. - */ - function refresh($object); - - /** - * Flushes all changes to objects that have been queued up to now to the database. - * This effectively synchronizes the in-memory state of managed objects with the - * database. - */ - function flush(); - - /** - * Gets the repository for a class. - * - * @param string $className - * @return \Doctrine\Common\Persistence\ObjectRepository - */ - function getRepository($className); - - /** - * Returns the ClassMetadata descriptor for a class. - * - * The class name must be the fully-qualified class name without a leading backslash - * (as it is returned by get_class($obj)). - * - * @param string $className - * @return \Doctrine\Common\Persistence\Mapping\ClassMetadata - */ - function getClassMetadata($className); - - /** - * Gets the metadata factory used to gather the metadata of classes. - * - * @return \Doctrine\Common\Persistence\Mapping\ClassMetadataFactory - */ - function getMetadataFactory(); - - /** - * Helper method to initialize a lazy loading proxy or persistent collection. - * - * This method is a no-op for other objects. - * - * @param object $obj - */ - function initializeObject($obj); - - /** - * Check if the object is part of the current UnitOfWork and therefore - * managed. - * - * @param object $object - * @return bool - */ - function contains($object); -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/ObjectManagerAware.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/ObjectManagerAware.php deleted file mode 100644 index 69fba78..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/ObjectManagerAware.php +++ /dev/null @@ -1,49 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence; - -use Doctrine\Common\Persistence\Mapping\ClassMetadata; - -/** - * Makes a Persistent Objects aware of its own object-manager. - * - * Using this interface the managing object manager and class metadata instances - * are injected into the persistent object after construction. This allows - * you to implement ActiveRecord functionality on top of the persistance-ignorance - * that Doctrine propagates. - * - * Word of Warning: This is a very powerful hook to change how you can work with your domain models. - * Using this hook will break the Single Responsibility Principle inside your Domain Objects - * and increase the coupling of database and objects. - * - * Every ObjectManager has to implement this functionality itself. - * - * @author Benjamin Eberlei - */ -interface ObjectManagerAware -{ - /** - * Injects responsible ObjectManager and the ClassMetadata into this persistent object. - * - * @param ObjectManager $objectManager - * @param ClassMetadata $classMetadata - */ - public function injectObjectManager(ObjectManager $objectManager, ClassMetadata $classMetadata); -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/ObjectRepository.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/ObjectRepository.php deleted file mode 100644 index 9a3e5b6..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/ObjectRepository.php +++ /dev/null @@ -1,78 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence; - -/** - * Contract for a Doctrine persistence layer ObjectRepository class to implement. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.1 - * @author Benjamin Eberlei - * @author Jonathan Wage - */ -interface ObjectRepository -{ - /** - * Finds an object by its primary key / identifier. - * - * @param int $id The identifier. - * @return object The object. - */ - function find($id); - - /** - * Finds all objects in the repository. - * - * @return mixed The objects. - */ - function findAll(); - - /** - * Finds objects by a set of criteria. - * - * Optionally sorting and limiting details can be passed. An implementation may throw - * an UnexpectedValueException if certain values of the sorting or limiting details are - * not supported. - * - * @throws \UnexpectedValueException - * @param array $criteria - * @param array|null $orderBy - * @param int|null $limit - * @param int|null $offset - * @return mixed The objects. - */ - function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null); - - /** - * Finds a single object by a set of criteria. - * - * @param array $criteria - * @return object The object. - */ - function findOneBy(array $criteria); - - /** - * Returns the class name of the object managed by the repository - * - * @return string - */ - function getClassName(); -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/PersistentObject.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/PersistentObject.php deleted file mode 100644 index 9fcc4cb..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/PersistentObject.php +++ /dev/null @@ -1,244 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence; - -use Doctrine\Common\Persistence\Mapping\ClassMetadata; -use Doctrine\Common\Collections\ArrayCollection; -use Doctrine\Common\Collections\Collection; - -/** - * PersistentObject base class that implements getter/setter methods for all mapped fields and associations - * by overriding __call. - * - * This class is a forward compatible implementation of the PersistentObject trait. - * - * - * Limitations: - * - * 1. All persistent objects have to be associated with a single ObjectManager, multiple - * ObjectManagers are not supported. You can set the ObjectManager with `PersistentObject#setObjectManager()`. - * 2. Setters and getters only work if a ClassMetadata instance was injected into the PersistentObject. - * This is either done on `postLoad` of an object or by accessing the global object manager. - * 3. There are no hooks for setters/getters. Just implement the method yourself instead of relying on __call(). - * 4. Slower than handcoded implementations: An average of 7 method calls per access to a field and 11 for an association. - * 5. Only the inverse side associations get autoset on the owning side aswell. Setting objects on the owning side - * will not set the inverse side associations. - * - * @example - * - * PersistentObject::setObjectManager($em); - * - * class Foo extends PersistentObject - * { - * private $id; - * } - * - * $foo = new Foo(); - * $foo->getId(); // method exists through __call - * - * @author Benjamin Eberlei - */ -abstract class PersistentObject implements ObjectManagerAware -{ - /** - * @var ObjectManager - */ - private static $objectManager; - - /** - * @var ClassMetadata - */ - private $cm; - - /** - * Set the object manager responsible for all persistent object base classes. - * - * @param ObjectManager $objectManager - */ - static public function setObjectManager(ObjectManager $objectManager = null) - { - self::$objectManager = $objectManager; - } - - /** - * @return ObjectManager - */ - static public function getObjectManager() - { - return self::$objectManager; - } - - /** - * Inject Doctrine Object Manager - * - * @param ObjectManager $objectManager - * @param ClassMetadata $classMetadata - * - * @throws \RuntimeException - */ - public function injectObjectManager(ObjectManager $objectManager, ClassMetadata $classMetadata) - { - if ($objectManager !== self::$objectManager) { - throw new \RuntimeException("Trying to use PersistentObject with different ObjectManager instances. " . - "Was PersistentObject::setObjectManager() called?"); - } - - $this->cm = $classMetadata; - } - - /** - * Sets a persistent fields value. - * - * @param string $field - * @param array $args - * - * @throws \BadMethodCallException - When no persistent field exists by that name. - * @throws \InvalidArgumentException - When the wrong target object type is passed to an association - * @return void - */ - private function set($field, $args) - { - $this->initializeDoctrine(); - - if ($this->cm->hasField($field) && !$this->cm->isIdentifier($field)) { - $this->$field = $args[0]; - } else if ($this->cm->hasAssociation($field) && $this->cm->isSingleValuedAssociation($field)) { - $targetClass = $this->cm->getAssociationTargetClass($field); - if (!($args[0] instanceof $targetClass) && $args[0] !== null) { - throw new \InvalidArgumentException("Expected persistent object of type '".$targetClass."'"); - } - $this->$field = $args[0]; - $this->completeOwningSide($field, $targetClass, $args[0]); - } else { - throw new \BadMethodCallException("no field with name '".$field."' exists on '".$this->cm->getName()."'"); - } - } - - /** - * Get persistent field value. - * - * - * @param string $field - * - * @throws \BadMethodCallException - When no persistent field exists by that name. - * @return mixed - */ - private function get($field) - { - $this->initializeDoctrine(); - - if ( $this->cm->hasField($field) || $this->cm->hasAssociation($field) ) { - return $this->$field; - } else { - throw new \BadMethodCallException("no field with name '".$field."' exists on '".$this->cm->getName()."'"); - } - } - - /** - * If this is an inverse side association complete the owning side. - * - * @param string $field - * @param ClassMetadata $targetClass - * @param object $targetObject - */ - private function completeOwningSide($field, $targetClass, $targetObject) - { - // add this object on the owning side aswell, for obvious infinite recursion - // reasons this is only done when called on the inverse side. - if ($this->cm->isAssociationInverseSide($field)) { - $mappedByField = $this->cm->getAssociationMappedByTargetField($field); - $targetMetadata = self::$objectManager->getClassMetadata($targetClass); - - $setter = ($targetMetadata->isCollectionValuedAssociation($mappedByField) ? "add" : "set").$mappedByField; - $targetObject->$setter($this); - } - } - - /** - * Add an object to a collection - * - * @param string $field - * @param array $args - * - * @throws \BadMethodCallException - * @throws \InvalidArgumentException - */ - private function add($field, $args) - { - $this->initializeDoctrine(); - - if ($this->cm->hasAssociation($field) && $this->cm->isCollectionValuedAssociation($field)) { - $targetClass = $this->cm->getAssociationTargetClass($field); - if (!($args[0] instanceof $targetClass)) { - throw new \InvalidArgumentException("Expected persistent object of type '".$targetClass."'"); - } - if (!($this->$field instanceof Collection)) { - $this->$field = new ArrayCollection($this->$field ?: array()); - } - $this->$field->add($args[0]); - $this->completeOwningSide($field, $targetClass, $args[0]); - } else { - throw new \BadMethodCallException("There is no method add".$field."() on ".$this->cm->getName()); - } - } - - /** - * Initialize Doctrine Metadata for this class. - * - * @throws \RuntimeException - * @return void - */ - private function initializeDoctrine() - { - if ($this->cm !== null) { - return; - } - - if (!self::$objectManager) { - throw new \RuntimeException("No runtime object manager set. Call PersistentObject#setObjectManager()."); - } - - $this->cm = self::$objectManager->getClassMetadata(get_class($this)); - } - - /** - * Magic method that implements - * - * @param string $method - * @param array $args - * - * @throws \BadMethodCallException - * @return mixed - */ - public function __call($method, $args) - { - $command = substr($method, 0, 3); - $field = lcfirst(substr($method, 3)); - if ($command == "set") { - $this->set($field, $args); - } else if ($command == "get") { - return $this->get($field); - } else if ($command == "add") { - $this->add($field, $args); - } else { - throw new \BadMethodCallException("There is no method ".$method." on ".$this->cm->getName()); - } - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Proxy.php b/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Proxy.php deleted file mode 100644 index e25598c..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Persistence/Proxy.php +++ /dev/null @@ -1,60 +0,0 @@ -. - */ - -namespace Doctrine\Common\Persistence; - -/** - * Interface for proxy classes. - * - * @author Roman Borschel - * @since 2.2 - */ -interface Proxy -{ - /** - * Marker for Proxy class names. - * - * @var string - */ - const MARKER = '__CG__'; - - /** - * Length of the proxy marker - * - * @var int - */ - const MARKER_LENGTH = 6; - - /** - * Initialize this proxy if its not yet initialized. - * - * Acts as a no-op if already initialized. - * - * @return void - */ - public function __load(); - - /** - * Is this proxy initialized or not. - * - * @return bool - */ - public function __isInitialized(); -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/PropertyChangedListener.php b/vendor/doctrine/common/lib/Doctrine/Common/PropertyChangedListener.php deleted file mode 100644 index 1171874..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/PropertyChangedListener.php +++ /dev/null @@ -1,48 +0,0 @@ -. - */ - -namespace Doctrine\Common; - -/** - * Contract for classes that are potential listeners of a NotifyPropertyChanged - * implementor. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.0 - * @version $Revision: 3938 $ - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - */ -interface PropertyChangedListener -{ - /** - * Notifies the listener of a property change. - * - * @param object $sender The object on which the property changed. - * @param string $propertyName The name of the property that changed. - * @param mixed $oldValue The old value of the property that changed. - * @param mixed $newValue The new value of the property that changed. - */ - function propertyChanged($sender, $propertyName, $oldValue, $newValue); -} - diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Reflection/ClassFinderInterface.php b/vendor/doctrine/common/lib/Doctrine/Common/Reflection/ClassFinderInterface.php deleted file mode 100644 index ae69607..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Reflection/ClassFinderInterface.php +++ /dev/null @@ -1,38 +0,0 @@ -. - */ - -namespace Doctrine\Common\Reflection; - -/** - * Finds a class in a PSR-0 structure. - * - * @author Karoly Negyesi - */ -interface ClassFinderInterface -{ - /** - * Finds a class. - * - * @param string $class The name of the class. - * - * @return - * The name of the class or NULL if not found. - */ - public function findFile($class); -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Reflection/Psr0FindFile.php b/vendor/doctrine/common/lib/Doctrine/Common/Reflection/Psr0FindFile.php deleted file mode 100644 index b6a5fd1..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Reflection/Psr0FindFile.php +++ /dev/null @@ -1,83 +0,0 @@ -. - */ - -namespace Doctrine\Common\Reflection; - -/** - * Finds a class in a PSR-0 structure. - * - * @author Karoly Negyesi - */ -class Psr0FindFile implements ClassFinderInterface -{ - /** - * The PSR-0 prefixes. - * - * @var string - */ - protected $prefixes; - - /** - * @param string $prefixes - * An array of prefixes. Each key is a PHP namespace and each value is - * a list of directories. - */ - public function __construct($prefixes) - { - $this->prefixes = $prefixes; - } - - /** - * Finds a class. - * - * @param string $class The name of the class. - * - * @return - * The name of the class or NULL if not found. - */ - public function findFile($class) - { - $lastNsPos = strrpos($class, '\\'); - if ('\\' == $class[0]) { - $class = substr($class, 1); - } - - if (false !== $lastNsPos) { - // namespaced class name - $classPath = str_replace('\\', DIRECTORY_SEPARATOR, substr($class, 0, $lastNsPos)) . DIRECTORY_SEPARATOR; - $className = substr($class, $lastNsPos + 1); - } else { - // PEAR-like class name - $classPath = null; - $className = $class; - } - - $classPath .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; - - foreach ($this->prefixes as $prefix => $dirs) { - if (0 === strpos($class, $prefix)) { - foreach ($dirs as $dir) { - if (file_exists($dir . DIRECTORY_SEPARATOR . $classPath)) { - return $dir . DIRECTORY_SEPARATOR . $classPath; - } - } - } - } - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Reflection/ReflectionProviderInterface.php b/vendor/doctrine/common/lib/Doctrine/Common/Reflection/ReflectionProviderInterface.php deleted file mode 100644 index a436a2d..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Reflection/ReflectionProviderInterface.php +++ /dev/null @@ -1,45 +0,0 @@ -. - */ - -namespace Doctrine\Common\Reflection; - -interface ReflectionProviderInterface -{ - /** - * Get the ReflectionClass equivalent for this class. - * - * @return ReflectionClass - */ - public function getReflectionClass(); - - /** - * Get the ReflectionClass equivalent for this class. - * - * @return ReflectionMethod - */ - public function getReflectionMethod($name); - - /** - * Get the ReflectionClass equivalent for this class. - * - * @return ReflectionMethod - */ - public function getReflectionProperty($name); -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Reflection/StaticReflectionClass.php b/vendor/doctrine/common/lib/Doctrine/Common/Reflection/StaticReflectionClass.php deleted file mode 100644 index 12e45d5..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Reflection/StaticReflectionClass.php +++ /dev/null @@ -1,112 +0,0 @@ -. - */ - -namespace Doctrine\Common\Reflection; - -use ReflectionClass; -use ReflectionException; - -class StaticReflectionClass extends ReflectionClass -{ - /** - * The static reflection parser object. - * - * @var StaticReflectionParser - */ - private $staticReflectionParser; - - public function __construct(StaticReflectionParser $staticReflectionParser) - { - $this->staticReflectionParser = $staticReflectionParser; - } - - public function getName() - { - return $this->staticReflectionParser->getClassName(); - } - - public function getDocComment() - { - return $this->staticReflectionParser->getDocComment(); - } - - public function getNamespaceName() - { - return $this->staticReflectionParser->getNamespaceName(); - } - - public function getUseStatements() - { - return $this->staticReflectionParser->getUseStatements(); - } - - public function getMethod($name) - { - return $this->staticReflectionParser->getReflectionMethod($name); - } - - public function getProperty($name) - { - return $this->staticReflectionParser->getReflectionProperty($name); - } - - public static function export($argument, $return = false) { throw new ReflectionException('Method not implemented'); } - public function getConstant($name) { throw new ReflectionException('Method not implemented'); } - public function getConstants() { throw new ReflectionException('Method not implemented'); } - public function getConstructor() { throw new ReflectionException('Method not implemented'); } - public function getDefaultProperties() { throw new ReflectionException('Method not implemented'); } - public function getEndLine() { throw new ReflectionException('Method not implemented'); } - public function getExtension() { throw new ReflectionException('Method not implemented'); } - public function getExtensionName() { throw new ReflectionException('Method not implemented'); } - public function getFileName() { throw new ReflectionException('Method not implemented'); } - public function getInterfaceNames() { throw new ReflectionException('Method not implemented'); } - public function getInterfaces() { throw new ReflectionException('Method not implemented'); } - public function getMethods($filter = NULL) { throw new ReflectionException('Method not implemented'); } - public function getModifiers() { throw new ReflectionException('Method not implemented'); } - public function getParentClass() { throw new ReflectionException('Method not implemented'); } - public function getProperties($filter = NULL) { throw new ReflectionException('Method not implemented'); } - public function getShortName() { throw new ReflectionException('Method not implemented'); } - public function getStartLine() { throw new ReflectionException('Method not implemented'); } - public function getStaticProperties() { throw new ReflectionException('Method not implemented'); } - public function getStaticPropertyValue($name, $default = '') { throw new ReflectionException('Method not implemented'); } - public function getTraitAliases() { throw new ReflectionException('Method not implemented'); } - public function getTraitNames() { throw new ReflectionException('Method not implemented'); } - public function getTraits() { throw new ReflectionException('Method not implemented'); } - public function hasConstant($name) { throw new ReflectionException('Method not implemented'); } - public function hasMethod($name) { throw new ReflectionException('Method not implemented'); } - public function hasProperty($name) { throw new ReflectionException('Method not implemented'); } - public function implementsInterface($interface) { throw new ReflectionException('Method not implemented'); } - public function inNamespace() { throw new ReflectionException('Method not implemented'); } - public function isAbstract() { throw new ReflectionException('Method not implemented'); } - public function isCloneable() { throw new ReflectionException('Method not implemented'); } - public function isFinal() { throw new ReflectionException('Method not implemented'); } - public function isInstance($object) { throw new ReflectionException('Method not implemented'); } - public function isInstantiable() { throw new ReflectionException('Method not implemented'); } - public function isInterface() { throw new ReflectionException('Method not implemented'); } - public function isInternal() { throw new ReflectionException('Method not implemented'); } - public function isIterateable() { throw new ReflectionException('Method not implemented'); } - public function isSubclassOf($class) { throw new ReflectionException('Method not implemented'); } - public function isTrait() { throw new ReflectionException('Method not implemented'); } - public function isUserDefined() { throw new ReflectionException('Method not implemented'); } - public function newInstance($args) { throw new ReflectionException('Method not implemented'); } - public function newInstanceArgs(array $args = array()) { throw new ReflectionException('Method not implemented'); } - public function newInstanceWithoutConstructor() { throw new ReflectionException('Method not implemented'); } - public function setStaticPropertyValue($name, $value) { throw new ReflectionException('Method not implemented'); } - public function __toString() { throw new ReflectionException('Method not implemented'); } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Reflection/StaticReflectionMethod.php b/vendor/doctrine/common/lib/Doctrine/Common/Reflection/StaticReflectionMethod.php deleted file mode 100644 index 6482036..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Reflection/StaticReflectionMethod.php +++ /dev/null @@ -1,103 +0,0 @@ -. - */ - -namespace Doctrine\Common\Reflection; - -use ReflectionMethod; -use ReflectionException; - -class StaticReflectionMethod extends ReflectionMethod -{ - /** - * The PSR-0 parser object. - * - * @var StaticReflectionParser - */ - protected $staticReflectionParser; - - /** - * The name of the method. - * - * @var string - */ - protected $methodName; - - public function __construct(StaticReflectionParser $staticReflectionParser, $methodName) - { - $this->staticReflectionParser = $staticReflectionParser; - $this->methodName = $methodName; - } - public function getName() - { - return $this->methodName; - } - protected function getStaticReflectionParser() - { - return $this->staticReflectionParser->getStaticReflectionParserForDeclaringClass('method', $this->methodName); - } - public function getDeclaringClass() - { - return $this->getStaticReflectionParser()->getReflectionClass(); - } - public function getNamespaceName() - { - return $this->getStaticReflectionParser()->getNamespaceName(); - } - public function getDocComment() - { - return $this->getStaticReflectionParser()->getDocComment('method', $this->methodName); - } - public function getUseStatements() - { - return $this->getStaticReflectionParser()->getUseStatements(); - } - public static function export($class, $name, $return = false) { throw new ReflectionException('Method not implemented'); } - public function getClosure($object) { throw new ReflectionException('Method not implemented'); } - public function getModifiers() { throw new ReflectionException('Method not implemented'); } - public function getPrototype() { throw new ReflectionException('Method not implemented'); } - public function invoke($object, $parameter = NULL) { throw new ReflectionException('Method not implemented'); } - public function invokeArgs($object, array $args) { throw new ReflectionException('Method not implemented'); } - public function isAbstract() { throw new ReflectionException('Method not implemented'); } - public function isConstructor() { throw new ReflectionException('Method not implemented'); } - public function isDestructor() { throw new ReflectionException('Method not implemented'); } - public function isFinal() { throw new ReflectionException('Method not implemented'); } - public function isPrivate() { throw new ReflectionException('Method not implemented'); } - public function isProtected() { throw new ReflectionException('Method not implemented'); } - public function isPublic() { throw new ReflectionException('Method not implemented'); } - public function isStatic() { throw new ReflectionException('Method not implemented'); } - public function setAccessible($accessible) { throw new ReflectionException('Method not implemented'); } - public function __toString() { throw new ReflectionException('Method not implemented'); } - public function getClosureThis() { throw new ReflectionException('Method not implemented'); } - public function getEndLine() { throw new ReflectionException('Method not implemented'); } - public function getExtension() { throw new ReflectionException('Method not implemented'); } - public function getExtensionName() { throw new ReflectionException('Method not implemented'); } - public function getFileName() { throw new ReflectionException('Method not implemented'); } - public function getNumberOfParameters() { throw new ReflectionException('Method not implemented'); } - public function getNumberOfRequiredParameters() { throw new ReflectionException('Method not implemented'); } - public function getParameters() { throw new ReflectionException('Method not implemented'); } - public function getShortName() { throw new ReflectionException('Method not implemented'); } - public function getStartLine() { throw new ReflectionException('Method not implemented'); } - public function getStaticVariables() { throw new ReflectionException('Method not implemented'); } - public function inNamespace() { throw new ReflectionException('Method not implemented'); } - public function isClosure() { throw new ReflectionException('Method not implemented'); } - public function isDeprecated() { throw new ReflectionException('Method not implemented'); } - public function isInternal() { throw new ReflectionException('Method not implemented'); } - public function isUserDefined() { throw new ReflectionException('Method not implemented'); } - public function returnsReference() { throw new ReflectionException('Method not implemented'); } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Reflection/StaticReflectionParser.php b/vendor/doctrine/common/lib/Doctrine/Common/Reflection/StaticReflectionParser.php deleted file mode 100644 index 7f3e41f..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Reflection/StaticReflectionParser.php +++ /dev/null @@ -1,282 +0,0 @@ -. - */ - -namespace Doctrine\Common\Reflection; - -use ReflectionException; -use Doctrine\Common\Annotations\TokenParser; - -/** - * Parses a file for namespaces/use/class declarations. - * - * @author Karoly Negyesi - */ -class StaticReflectionParser implements ReflectionProviderInterface -{ - - /** - * The name of the class. - * - * @var string - */ - protected $className; - - /** - * TRUE if the caller only wants class annotations. - * - * @var boolean. - */ - protected $classAnnotationOptimize; - - /** - * TRUE when the parser has ran. - * - * @var boolean - */ - protected $parsed = false; - - /** - * The namespace of the class - * - * @var string - */ - protected $namespace = ''; - - /** - * The use statements of this class. - * - * @var array - */ - protected $useStatements = array(); - - /** - * The docComment of the class. - * - * @var string - */ - protected $docComment = array( - 'class' => '', - 'property' => array(), - 'method' => array(), - ); - - /** - * The name of the class this class extends, if any. - * - * @var string - */ - protected $parentClassName = ''; - - /** - * The parent PSR-0 Parser. - * - * @var \Doctrine\Common\Annotations\StaticReflectionParser - */ - protected $parentStaticReflectionParser; - - /** - * Parses a class residing in a PSR-0 hierarchy. - * - * @param string $class - * The full, namespaced class name. - * @param ClassFinder $finder - * A ClassFinder object which finds the class. - * @param boolean $classAnnotationOptimize - * Only retrieve the class docComment. Presumes there is only one - * statement per line. - */ - public function __construct($className, $finder, $classAnnotationOptimize = false) - { - $this->className = ltrim($className, '\\'); - if ($lastNsPos = strrpos($this->className, '\\')) { - $this->namespace = substr($this->className, 0, $lastNsPos); - } - $this->finder = $finder; - $this->classAnnotationOptimize = $classAnnotationOptimize; - } - - protected function parse() - { - if ($this->parsed || !$fileName = $this->finder->findFile($this->className)) { - return; - } - $this->parsed = true; - $contents = file_get_contents($fileName); - if ($this->classAnnotationOptimize) { - if (preg_match("/(\A.*)^\s+(abstract|final)?\s+class\s+$className\s+{/sm", $contents, $matches)) { - $contents = $matches[1]; - } - } - $tokenParser = new TokenParser($contents); - $docComment = ''; - while ($token = $tokenParser->next(false)) { - if (is_array($token)) { - switch ($token[0]) { - case T_USE: - $this->useStatements = array_merge($this->useStatements, $tokenParser->parseUseStatement()); - break; - case T_DOC_COMMENT: - $docComment = $token[1]; - break; - case T_CLASS: - $this->docComment['class'] = $docComment; - $docComment = ''; - break; - case T_VAR: - case T_PRIVATE: - case T_PROTECTED: - case T_PUBLIC: - $token = $tokenParser->next(); - if ($token[0] === T_VARIABLE) { - $propertyName = substr($token[1], 1); - $this->docComment['property'][$propertyName] = $docComment; - continue 2; - } - if ($token[0] !== T_FUNCTION) { - // For example, it can be T_FINAL. - continue 2; - } - // No break. - case T_FUNCTION: - // The next string after function is the name, but - // there can be & before the function name so find the - // string. - while (($token = $tokenParser->next()) && $token[0] !== T_STRING); - $methodName = $token[1]; - $this->docComment['method'][$methodName] = $docComment; - $docComment = ''; - break; - case T_EXTENDS: - $this->parentClassName = $tokenParser->parseClass(); - $nsPos = strpos($this->parentClassName, '\\'); - $fullySpecified = false; - if ($nsPos === 0) { - $fullySpecified = true; - } else { - if ($nsPos) { - $prefix = strtolower(substr($this->parentClassName, 0, $nsPos)); - $postfix = substr($this->parentClassName, $nsPos); - } else { - $prefix = strtolower($this->parentClassName); - $postfix = ''; - } - foreach ($this->useStatements as $alias => $use) { - if ($alias == $prefix) { - $this->parentClassName = '\\' . $use . $postfix; - $fullySpecified = true; - } - } - } - if (!$fullySpecified) { - $this->parentClassName = '\\' . $this->namespace . '\\' . $this->parentClassName; - } - break; - } - } - } - } - - protected function getParentStaticReflectionParser() - { - if (empty($this->parentStaticReflectionParser)) { - $this->parentStaticReflectionParser = new static($this->parentClassName, $this->finder); - } - - return $this->parentStaticReflectionParser; - } - - public function getClassName() - { - return $this->className; - } - - public function getNamespaceName() - { - return $this->namespace; - } - - /** - * Get the ReflectionClass equivalent for this file / class. - */ - public function getReflectionClass() - { - return new StaticReflectionClass($this); - } - - /** - * Get the ReflectionMethod equivalent for the method of this file / class. - */ - public function getReflectionMethod($methodName) - { - return new StaticReflectionMethod($this, $methodName); - } - - /** - * Get the ReflectionProperty equivalent for the method of this file / class. - */ - public function getReflectionProperty($propertyName) - { - return new StaticReflectionProperty($this, $propertyName); - } - - /** - * Get the use statements from this file. - */ - public function getUseStatements() - { - $this->parse(); - - return $this->useStatements; - } - - /** - * Get docComment. - * - * @param string $type class, property or method. - * @param string $name Name of the property or method, not needed for class. - * - * @return string the doc comment or empty string if none. - */ - public function getDocComment($type = 'class', $name = '') - { - $this->parse(); - - return $name ? $this->docComment[$type][$name] : $this->docComment[$type]; - } - - /** - * Get the PSR-0 parser for the declaring class. - * - * @param string $type property or method. - * @param string $name Name of the property or method. - * - * @return StaticReflectionParser A static reflection parser for the declaring class. - */ - public function getStaticReflectionParserForDeclaringClass($type, $name) - { - $this->parse(); - if (isset($this->docComment[$type][$name])) { - return $this; - } - if (!empty($this->parentClassName)) { - return $this->getParentStaticReflectionParser()->getStaticReflectionParserForDeclaringClass($type, $name); - } - throw new ReflectionException('Invalid ' . $type . ' "' . $name . '"'); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Reflection/StaticReflectionProperty.php b/vendor/doctrine/common/lib/Doctrine/Common/Reflection/StaticReflectionProperty.php deleted file mode 100644 index 7c6411a..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Reflection/StaticReflectionProperty.php +++ /dev/null @@ -1,77 +0,0 @@ -. - */ - -namespace Doctrine\Common\Reflection; - -use ReflectionProperty; -use ReflectionException; - -class StaticReflectionProperty extends ReflectionProperty -{ - /** - * The PSR-0 parser object. - * - * @var StaticReflectionParser - */ - protected $staticReflectionParser; - - /** - * The name of the property. - * - * @var string - */ - protected $propertyName; - - public function __construct(StaticReflectionParser $staticReflectionParser, $propertyName) - { - $this->staticReflectionParser = $staticReflectionParser; - $this->propertyName = $propertyName; - } - public function getName() - { - return $this->propertyName; - } - protected function getStaticReflectionParser() - { - return $this->staticReflectionParser->getStaticReflectionParserForDeclaringClass('property', $this->propertyName); - } - public function getDeclaringClass() - { - return $this->getStaticReflectionParser()->getReflectionClass(); - } - public function getDocComment() - { - return $this->getStaticReflectionParser()->getDocComment('property', $this->propertyName); - } - public function getUseStatements() - { - return $this->getStaticReflectionParser()->getUseStatements(); - } - public static function export ($class, $name, $return = false) { throw new ReflectionException('Method not implemented'); } - public function getModifiers() { throw new ReflectionException('Method not implemented'); } - public function getValue($object = NULL) { throw new ReflectionException('Method not implemented'); } - public function isDefault() { throw new ReflectionException('Method not implemented'); } - public function isPrivate() { throw new ReflectionException('Method not implemented'); } - public function isProtected() { throw new ReflectionException('Method not implemented'); } - public function isPublic() { throw new ReflectionException('Method not implemented'); } - public function isStatic() { throw new ReflectionException('Method not implemented'); } - public function setAccessible ($accessible) { throw new ReflectionException('Method not implemented'); } - public function setValue ($object, $value = NULL) { throw new ReflectionException('Method not implemented'); } - public function __toString() { throw new ReflectionException('Method not implemented'); } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Util/ClassUtils.php b/vendor/doctrine/common/lib/Doctrine/Common/Util/ClassUtils.php deleted file mode 100644 index 078a8db..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Util/ClassUtils.php +++ /dev/null @@ -1,103 +0,0 @@ -. - */ - -namespace Doctrine\Common\Util; - -use Doctrine\Common\Persistence\Proxy; - -/** - * Class and reflection related functionality for objects that - * might or not be proxy objects at the moment. - * - * @author Benjamin Eberlei - * @author Johannes Schmitt - */ -class ClassUtils -{ - /** - * Get the real class name of a class name that could be a proxy. - * - * @param string - * @return string - */ - public static function getRealClass($class) - { - if (false === $pos = strrpos($class, '\\'.Proxy::MARKER.'\\')) { - return $class; - } - - return substr($class, $pos + Proxy::MARKER_LENGTH + 2); - } - - /** - * Get the real class name of an object (even if its a proxy) - * - * @param object - * @return string - */ - public static function getClass($object) - { - return self::getRealClass(get_class($object)); - } - - /** - * Get the real parent class name of a class or object - * - * @param string - * @return string - */ - public static function getParentClass($className) - { - return get_parent_class( self::getRealClass( $className ) ); - } - - /** - * Create a new reflection class - * - * @param string - * @return \ReflectionClass - */ - public static function newReflectionClass($class) - { - return new \ReflectionClass( self::getRealClass( $class ) ); - } - - /** - * Create a new reflection object - * - * @param object - * @return \ReflectionObject - */ - public static function newReflectionObject($object) - { - return self::newReflectionClass( self::getClass( $object ) ); - } - - /** - * Given a class name and a proxy namespace return the proxy name. - * - * @param string $className - * @param string $proxyNamespace - * @return string - */ - public static function generateProxyClassName($className, $proxyNamespace) - { - return rtrim($proxyNamespace, '\\') . '\\'.Proxy::MARKER.'\\' . ltrim($className, '\\'); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Util/Debug.php b/vendor/doctrine/common/lib/Doctrine/Common/Util/Debug.php deleted file mode 100644 index 458e5c8..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Util/Debug.php +++ /dev/null @@ -1,135 +0,0 @@ -. - */ - -namespace Doctrine\Common\Util; - -/** - * Static class containing most used debug methods. - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.0 - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - * @author Giorgio Sironi - */ -final class Debug -{ - /** - * Private constructor (prevents from instantiation) - * - */ - private function __construct() {} - - /** - * Prints a dump of the public, protected and private properties of $var. - * - * @link http://xdebug.org/ - * @param mixed $var - * @param integer $maxDepth Maximum nesting level for object properties - * @param boolean $stripTags Flag that indicate if output should strip HTML tags - */ - public static function dump($var, $maxDepth = 2, $stripTags = true) - { - ini_set('html_errors', 'On'); - - if (extension_loaded('xdebug')) { - ini_set('xdebug.var_display_max_depth', $maxDepth); - } - - $var = self::export($var, $maxDepth++); - - ob_start(); - var_dump($var); - $dump = ob_get_contents(); - ob_end_clean(); - - echo ($stripTags ? strip_tags(html_entity_decode($dump)) : $dump); - - ini_set('html_errors', 'Off'); - } - - /** - * Export - * - * @param mixed $var - * @param int $maxDepth - * @return mixed - */ - public static function export($var, $maxDepth) - { - $return = null; - $isObj = is_object($var); - - if ($isObj && in_array('Doctrine\Common\Collections\Collection', class_implements($var))) { - $var = $var->toArray(); - } - - if ($maxDepth) { - if (is_array($var)) { - $return = array(); - - foreach ($var as $k => $v) { - $return[$k] = self::export($v, $maxDepth - 1); - } - } else if ($isObj) { - $return = new \stdclass(); - if ($var instanceof \DateTime) { - $return->__CLASS__ = "DateTime"; - $return->date = $var->format('c'); - $return->timezone = $var->getTimeZone()->getName(); - } else { - $reflClass = ClassUtils::newReflectionObject($var); - $return->__CLASS__ = ClassUtils::getClass($var); - - if ($var instanceof \Doctrine\Common\Persistence\Proxy) { - $return->__IS_PROXY__ = true; - $return->__PROXY_INITIALIZED__ = $var->__isInitialized(); - } - - foreach ($reflClass->getProperties() as $reflProperty) { - $name = $reflProperty->getName(); - - $reflProperty->setAccessible(true); - $return->$name = self::export($reflProperty->getValue($var), $maxDepth - 1); - } - } - } else { - $return = $var; - } - } else { - $return = is_object($var) ? get_class($var) - : (is_array($var) ? 'Array(' . count($var) . ')' : $var); - } - - return $return; - } - - /** - * Convert to string - * - * @param object $obj - * @return string - */ - public static function toString($obj) - { - return method_exists('__toString', $obj) ? (string) $obj : get_class($obj) . '@' . spl_object_hash($obj); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Util/Inflector.php b/vendor/doctrine/common/lib/Doctrine/Common/Util/Inflector.php deleted file mode 100644 index 214ed57..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Util/Inflector.php +++ /dev/null @@ -1,72 +0,0 @@ -. - */ - -namespace Doctrine\Common\Util; - -/** - * Doctrine inflector has static methods for inflecting text - * - * The methods in these classes are from several different sources collected - * across several different php projects and several different authors. The - * original author names and emails are not known - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 1.0 - * @version $Revision: 3189 $ - * @author Konsta Vesterinen - * @author Jonathan H. Wage - */ -class Inflector -{ - /** - * Convert word in to the format for a Doctrine table name. Converts 'ModelName' to 'model_name' - * - * @param string $word Word to tableize - * @return string $word Tableized word - */ - public static function tableize($word) - { - return strtolower(preg_replace('~(?<=\\w)([A-Z])~', '_$1', $word)); - } - - /** - * Convert a word in to the format for a Doctrine class name. Converts 'table_name' to 'TableName' - * - * @param string $word Word to classify - * @return string $word Classified word - */ - public static function classify($word) - { - return str_replace(" ", "", ucwords(strtr($word, "_-", " "))); - } - - /** - * Camelize a word. This uses the classify() method and turns the first character to lowercase - * - * @param string $word - * @return string $word - */ - public static function camelize($word) - { - return lcfirst(self::classify($word)); - } -} diff --git a/vendor/doctrine/common/lib/Doctrine/Common/Version.php b/vendor/doctrine/common/lib/Doctrine/Common/Version.php deleted file mode 100644 index cca4894..0000000 --- a/vendor/doctrine/common/lib/Doctrine/Common/Version.php +++ /dev/null @@ -1,55 +0,0 @@ -. - */ - -namespace Doctrine\Common; - -/** - * Class to store and retrieve the version of Doctrine - * - * @license http://www.opensource.org/licenses/lgpl-license.php LGPL - * @link www.doctrine-project.org - * @since 2.0 - * @version $Revision$ - * @author Benjamin Eberlei - * @author Guilherme Blanco - * @author Jonathan Wage - * @author Roman Borschel - */ -class Version -{ - /** - * Current Doctrine Version - */ - const VERSION = '2.3.0'; - - /** - * Compares a Doctrine version with the current one. - * - * @param string $version Doctrine version to compare. - * @return int Returns -1 if older, 0 if it is the same, 1 if version - * passed as argument is newer. - */ - public static function compare($version) - { - $currentVersion = str_replace(' ', '', strtolower(self::VERSION)); - $version = str_replace(' ', '', $version); - - return version_compare($version, $currentVersion); - } -} diff --git a/vendor/doctrine/common/phpunit.xml.dist b/vendor/doctrine/common/phpunit.xml.dist deleted file mode 100644 index b9d3b34..0000000 --- a/vendor/doctrine/common/phpunit.xml.dist +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - ./tests/Doctrine/ - - - - - - ./lib/Doctrine/ - - - - - - performance - - - diff --git a/vendor/doctrine/common/tests/.gitignore b/vendor/doctrine/common/tests/.gitignore deleted file mode 100644 index 7210405..0000000 --- a/vendor/doctrine/common/tests/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -Doctrine/Tests/Proxies/ -Doctrine/Tests/ORM/Proxy/generated/ -Doctrine/Tests/ORM/Tools/Export/export diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/AbstractReaderTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/AbstractReaderTest.php deleted file mode 100644 index 4261e6b..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/AbstractReaderTest.php +++ /dev/null @@ -1,517 +0,0 @@ - array($testsRoot), - ); - $staticReflectionParser = new StaticReflectionParser($className, new Psr0FindFile($paths)); - return array( - 'native' => array(new ReflectionClass($className)), - 'static' => array($staticReflectionParser->getReflectionClass()), - ); - } - - /** - * @dataProvider getReflectionClass - */ - public function testAnnotations($class) - { - $reader = $this->getReader(); - $this->assertEquals(1, count($reader->getClassAnnotations($class))); - $this->assertInstanceOf($annotName = 'Doctrine\Tests\Common\Annotations\DummyAnnotation', $annot = $reader->getClassAnnotation($class, $annotName)); - $this->assertEquals("hello", $annot->dummyValue); - - $field1Prop = $class->getProperty('field1'); - $propAnnots = $reader->getPropertyAnnotations($field1Prop); - $this->assertEquals(1, count($propAnnots)); - $this->assertInstanceOf($annotName, $annot = $reader->getPropertyAnnotation($field1Prop, $annotName)); - $this->assertEquals("fieldHello", $annot->dummyValue); - - $getField1Method = $class->getMethod('getField1'); - $methodAnnots = $reader->getMethodAnnotations($getField1Method); - $this->assertEquals(1, count($methodAnnots)); - $this->assertInstanceOf($annotName, $annot = $reader->getMethodAnnotation($getField1Method, $annotName)); - $this->assertEquals(array(1, 2, "three"), $annot->value); - - $field2Prop = $class->getProperty('field2'); - $propAnnots = $reader->getPropertyAnnotations($field2Prop); - $this->assertEquals(1, count($propAnnots)); - $this->assertInstanceOf($annotName = 'Doctrine\Tests\Common\Annotations\DummyJoinTable', $joinTableAnnot = $reader->getPropertyAnnotation($field2Prop, $annotName)); - $this->assertEquals(1, count($joinTableAnnot->joinColumns)); - $this->assertEquals(1, count($joinTableAnnot->inverseJoinColumns)); - $this->assertTrue($joinTableAnnot->joinColumns[0] instanceof DummyJoinColumn); - $this->assertTrue($joinTableAnnot->inverseJoinColumns[0] instanceof DummyJoinColumn); - $this->assertEquals('col1', $joinTableAnnot->joinColumns[0]->name); - $this->assertEquals('col2', $joinTableAnnot->joinColumns[0]->referencedColumnName); - $this->assertEquals('col3', $joinTableAnnot->inverseJoinColumns[0]->name); - $this->assertEquals('col4', $joinTableAnnot->inverseJoinColumns[0]->referencedColumnName); - - $dummyAnnot = $reader->getMethodAnnotation($class->getMethod('getField1'), 'Doctrine\Tests\Common\Annotations\DummyAnnotation'); - $this->assertEquals('', $dummyAnnot->dummyValue); - $this->assertEquals(array(1, 2, 'three'), $dummyAnnot->value); - - $dummyAnnot = $reader->getPropertyAnnotation($class->getProperty('field1'), 'Doctrine\Tests\Common\Annotations\DummyAnnotation'); - $this->assertEquals('fieldHello', $dummyAnnot->dummyValue); - - $classAnnot = $reader->getClassAnnotation($class, 'Doctrine\Tests\Common\Annotations\DummyAnnotation'); - $this->assertEquals('hello', $classAnnot->dummyValue); - } - - public function testAnnotationsWithValidTargets() - { - $reader = $this->getReader(); - $class = new ReflectionClass('Doctrine\Tests\Common\Annotations\Fixtures\ClassWithValidAnnotationTarget'); - - $this->assertEquals(1,count($reader->getClassAnnotations($class))); - $this->assertEquals(1,count($reader->getPropertyAnnotations($class->getProperty('foo')))); - $this->assertEquals(1,count($reader->getMethodAnnotations($class->getMethod('someFunction')))); - $this->assertEquals(1,count($reader->getPropertyAnnotations($class->getProperty('nested')))); - } - - public function testAnnotationsWithVarType() - { - $reader = $this->getReader(); - $class = new ReflectionClass('Doctrine\Tests\Common\Annotations\Fixtures\ClassWithAnnotationWithVarType'); - - $this->assertEquals(1,count($fooAnnot = $reader->getPropertyAnnotations($class->getProperty('foo')))); - $this->assertEquals(1,count($barAnnot = $reader->getMethodAnnotations($class->getMethod('bar')))); - - $this->assertInternalType('string', $fooAnnot[0]->string); - $this->assertInstanceOf('Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll', $barAnnot[0]->annotation); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage [Semantical Error] Annotation @AnnotationTargetPropertyMethod is not allowed to be declared on class Doctrine\Tests\Common\Annotations\Fixtures\ClassWithInvalidAnnotationTargetAtClass. You may only use this annotation on these code elements: METHOD, PROPERTY - */ - public function testClassWithInvalidAnnotationTargetAtClassDocBlock() - { - $reader = $this->getReader(); - $reader->getClassAnnotations(new \ReflectionClass('Doctrine\Tests\Common\Annotations\Fixtures\ClassWithInvalidAnnotationTargetAtClass')); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage [Semantical Error] Annotation @AnnotationTargetClass is not allowed to be declared on property Doctrine\Tests\Common\Annotations\Fixtures\ClassWithInvalidAnnotationTargetAtProperty::$foo. You may only use this annotation on these code elements: CLASS - */ - public function testClassWithInvalidAnnotationTargetAtPropertyDocBlock() - { - $reader = $this->getReader(); - $reader->getPropertyAnnotations(new \ReflectionProperty('Doctrine\Tests\Common\Annotations\Fixtures\ClassWithInvalidAnnotationTargetAtProperty', 'foo')); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage [Semantical Error] Annotation @AnnotationTargetAnnotation is not allowed to be declared on property Doctrine\Tests\Common\Annotations\Fixtures\ClassWithInvalidAnnotationTargetAtProperty::$bar. You may only use this annotation on these code elements: ANNOTATION - */ - public function testClassWithInvalidNestedAnnotationTargetAtPropertyDocBlock() - { - $reader = $this->getReader(); - $reader->getPropertyAnnotations(new \ReflectionProperty('Doctrine\Tests\Common\Annotations\Fixtures\ClassWithInvalidAnnotationTargetAtProperty', 'bar')); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage [Semantical Error] Annotation @AnnotationTargetClass is not allowed to be declared on method Doctrine\Tests\Common\Annotations\Fixtures\ClassWithInvalidAnnotationTargetAtMethod::functionName(). You may only use this annotation on these code elements: CLASS - */ - public function testClassWithInvalidAnnotationTargetAtMethodDocBlock() - { - $reader = $this->getReader(); - $reader->getMethodAnnotations(new \ReflectionMethod('Doctrine\Tests\Common\Annotations\Fixtures\ClassWithInvalidAnnotationTargetAtMethod', 'functionName')); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage Expected namespace separator or identifier, got ')' at position 24 in class @Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithTargetSyntaxError. - */ - public function testClassWithAnnotationWithTargetSyntaxErrorAtClassDocBlock() - { - $reader = $this->getReader(); - $reader->getClassAnnotations(new \ReflectionClass('Doctrine\Tests\Common\Annotations\Fixtures\ClassWithAnnotationWithTargetSyntaxError')); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage Expected namespace separator or identifier, got ')' at position 24 in class @Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithTargetSyntaxError. - */ - public function testClassWithAnnotationWithTargetSyntaxErrorAtPropertyDocBlock() - { - $reader = $this->getReader(); - $reader->getPropertyAnnotations(new \ReflectionProperty('Doctrine\Tests\Common\Annotations\Fixtures\ClassWithAnnotationWithTargetSyntaxError','foo')); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage Expected namespace separator or identifier, got ')' at position 24 in class @Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithTargetSyntaxError. - */ - public function testClassWithAnnotationWithTargetSyntaxErrorAtMethodDocBlock() - { - $reader = $this->getReader(); - $reader->getMethodAnnotations(new \ReflectionMethod('Doctrine\Tests\Common\Annotations\Fixtures\ClassWithAnnotationWithTargetSyntaxError','bar')); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage [Type Error] Attribute "string" of @AnnotationWithVarType declared on property Doctrine\Tests\Common\Annotations\Fixtures\ClassWithAnnotationWithVarType::$invalidProperty expects a(n) string, but got integer. - */ - public function testClassWithPropertyInvalidVarTypeError() - { - $reader = $this->getReader(); - $class = new ReflectionClass('Doctrine\Tests\Common\Annotations\Fixtures\ClassWithAnnotationWithVarType'); - - $reader->getPropertyAnnotations($class->getProperty('invalidProperty')); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage [Type Error] Attribute "annotation" of @AnnotationWithVarType declared on method Doctrine\Tests\Common\Annotations\Fixtures\ClassWithAnnotationWithVarType::invalidMethod() expects a(n) Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll, but got an instance of Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAnnotation. - */ - public function testClassWithMethodInvalidVarTypeError() - { - $reader = $this->getReader(); - $class = new ReflectionClass('Doctrine\Tests\Common\Annotations\Fixtures\ClassWithAnnotationWithVarType'); - - $reader->getMethodAnnotations($class->getMethod('invalidMethod')); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage Expected namespace separator or identifier, got ')' at position 18 in class Doctrine\Tests\Common\Annotations\DummyClassSyntaxError. - */ - public function testClassSyntaxErrorContext() - { - $reader = $this->getReader(); - $reader->getClassAnnotations(new \ReflectionClass('Doctrine\Tests\Common\Annotations\DummyClassSyntaxError')); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage Expected namespace separator or identifier, got ')' at position 18 in method Doctrine\Tests\Common\Annotations\DummyClassMethodSyntaxError::foo(). - */ - public function testMethodSyntaxErrorContext() - { - $reader = $this->getReader(); - $reader->getMethodAnnotations(new \ReflectionMethod('Doctrine\Tests\Common\Annotations\DummyClassMethodSyntaxError', 'foo')); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage Expected namespace separator or identifier, got ')' at position 18 in property Doctrine\Tests\Common\Annotations\DummyClassPropertySyntaxError::$foo. - */ - public function testPropertySyntaxErrorContext() - { - $reader = $this->getReader(); - $reader->getPropertyAnnotations(new \ReflectionProperty('Doctrine\Tests\Common\Annotations\DummyClassPropertySyntaxError', 'foo')); - } - - /** - * @group regression - */ - public function testMultipleAnnotationsOnSameLine() - { - $reader = $this->getReader(); - $annots = $reader->getPropertyAnnotations(new \ReflectionProperty('Doctrine\Tests\Common\Annotations\DummyClass2', 'id')); - $this->assertEquals(3, count($annots)); - } - - public function testNonAnnotationProblem() - { - $reader = $this->getReader(); - - $this->assertNotNull($annot = $reader->getPropertyAnnotation(new \ReflectionProperty('Doctrine\Tests\Common\Annotations\DummyClassNonAnnotationProblem', 'foo'), $name = 'Doctrine\Tests\Common\Annotations\DummyAnnotation')); - $this->assertInstanceOf($name, $annot); - } - - public function testImportWithConcreteAnnotation() - { - $reader = $this->getReader(); - $property = new \ReflectionProperty('Doctrine\Tests\Common\Annotations\TestImportWithConcreteAnnotation', 'field'); - $annotations = $reader->getPropertyAnnotations($property); - $this->assertEquals(1, count($annotations)); - $this->assertNotNull($reader->getPropertyAnnotation($property, 'Doctrine\Tests\Common\Annotations\DummyAnnotation')); - } - - public function testImportWithInheritance() - { - $reader = $this->getReader(); - - $class = new TestParentClass(); - $ref = new \ReflectionClass($class); - - $childAnnotations = $reader->getPropertyAnnotations($ref->getProperty('child')); - $this->assertEquals(1, count($childAnnotations)); - $this->assertInstanceOf('Doctrine\Tests\Common\Annotations\Foo\Name', reset($childAnnotations)); - - $parentAnnotations = $reader->getPropertyAnnotations($ref->getProperty('parent')); - $this->assertEquals(1, count($parentAnnotations)); - $this->assertInstanceOf('Doctrine\Tests\Common\Annotations\Bar\Name', reset($parentAnnotations)); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage The annotation "@NameFoo" in property Doctrine\Tests\Common\Annotations\TestAnnotationNotImportedClass::$field was never imported. - */ - public function testImportDetectsNotImportedAnnotation() - { - $reader = $this->getReader(); - $reader->getPropertyAnnotations(new \ReflectionProperty('Doctrine\Tests\Common\Annotations\TestAnnotationNotImportedClass', 'field')); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage The annotation "@Foo\Bar\Name" in property Doctrine\Tests\Common\Annotations\TestNonExistentAnnotationClass::$field was never imported. - */ - public function testImportDetectsNonExistentAnnotation() - { - $reader = $this->getReader(); - $reader->getPropertyAnnotations(new \ReflectionProperty('Doctrine\Tests\Common\Annotations\TestNonExistentAnnotationClass', 'field')); - } - - public function testTopLevelAnnotation() - { - $reader = $this->getReader(); - $annotations = $reader->getPropertyAnnotations(new \ReflectionProperty('Doctrine\Tests\Common\Annotations\TestTopLevelAnnotationClass', 'field')); - - $this->assertEquals(1, count($annotations)); - $this->assertInstanceOf('\TopLevelAnnotation', reset($annotations)); - } - - public function testIgnoresAnnotationsNotPrefixedWithWhitespace() - { - $reader = $this->getReader(); - - $annotation = $reader->getClassAnnotation(new \ReflectionClass(new TestIgnoresNonAnnotationsClass()), 'Doctrine\Tests\Common\Annotations\Name'); - $this->assertInstanceOf('Doctrine\Tests\Common\Annotations\Name', $annotation); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage The class "Doctrine\Tests\Common\Annotations\Fixtures\NoAnnotation" is not annotated with @Annotation. Are you sure this class can be used as annotation? If so, then you need to add @Annotation to the _class_ doc comment of "Doctrine\Tests\Common\Annotations\Fixtures\NoAnnotation". If it is indeed no annotation, then you need to add @IgnoreAnnotation("NoAnnotation") to the _class_ doc comment of class Doctrine\Tests\Common\Annotations\Fixtures\InvalidAnnotationUsageClass. - */ - public function testErrorWhenInvalidAnnotationIsUsed() - { - $reader = $this->getReader(); - $ref = new \ReflectionClass('Doctrine\Tests\Common\Annotations\Fixtures\InvalidAnnotationUsageClass'); - $reader->getClassAnnotations($ref); - } - - public function testInvalidAnnotationUsageButIgnoredClass() - { - $reader = $this->getReader(); - $ref = new \ReflectionClass('Doctrine\Tests\Common\Annotations\Fixtures\InvalidAnnotationUsageButIgnoredClass'); - $annots = $reader->getClassAnnotations($ref); - - $this->assertEquals(2, count($annots)); - } - - /** - * @group DDC-1660 - * @group regression - */ - public function testInvalidAnnotationButIgnored() - { - $reader = $this->getReader(); - $class = new \ReflectionClass('Doctrine\Tests\Common\Annotations\Fixtures\ClassDDC1660'); - - $this->assertTrue(class_exists('Doctrine\Tests\Common\Annotations\Fixtures\Annotation\Version')); - $this->assertCount(0, $reader->getClassAnnotations($class)); - $this->assertCount(0, $reader->getMethodAnnotations($class->getMethod('bar'))); - $this->assertCount(0, $reader->getPropertyAnnotations($class->getProperty('foo'))); - } - - abstract protected function getReader(); -} - -/** - * @parseAnnotation("var") - * @author Johannes M. Schmitt - * - */ -class TestParseAnnotationClass -{ - /** - * @var - */ - private $field; -} - -/** - * @Name - * @author Johannes M. Schmitt - */ -class TestIgnoresNonAnnotationsClass -{ -} - -class TestTopLevelAnnotationClass -{ - /** - * @\TopLevelAnnotation - */ - private $field; -} - -class TestNonExistentAnnotationClass -{ - /** - * @Foo\Bar\Name - */ - private $field; -} - -class TestAnnotationNotImportedClass -{ - /** - * @NameFoo - */ - private $field; -} - -class TestChildClass -{ - /** - * @\Doctrine\Tests\Common\Annotations\Foo\Name(name = "foo") - */ - protected $child; -} - -class TestParentClass extends TestChildClass -{ - /** - * @\Doctrine\Tests\Common\Annotations\Bar\Name(name = "bar") - */ - private $parent; -} - -class TestImportWithConcreteAnnotation -{ - /** - * @DummyAnnotation(dummyValue = "bar") - */ - private $field; -} - -/** - * @ignoreAnnotation("var") - */ -class DummyClass2 { - /** - * @DummyId @DummyColumn(type="integer") @DummyGeneratedValue - * @var integer - */ - private $id; -} - -/** @Annotation */ -class DummyId extends \Doctrine\Common\Annotations\Annotation {} -/** @Annotation */ -class DummyColumn extends \Doctrine\Common\Annotations\Annotation { - public $type; -} -/** @Annotation */ -class DummyGeneratedValue extends \Doctrine\Common\Annotations\Annotation {} -/** @Annotation */ -class DummyAnnotation extends \Doctrine\Common\Annotations\Annotation { - public $dummyValue; -} -/** @Annotation */ -class DummyJoinColumn extends \Doctrine\Common\Annotations\Annotation { - public $name; - public $referencedColumnName; -} -/** @Annotation */ -class DummyJoinTable extends \Doctrine\Common\Annotations\Annotation { - public $name; - public $joinColumns; - public $inverseJoinColumns; -} - -/** - * @DummyAnnotation(@) - */ -class DummyClassSyntaxError -{ - -} - -class DummyClassMethodSyntaxError -{ - /** - * @DummyAnnotation(@) - */ - public function foo() - { - - } -} - -class DummyClassPropertySyntaxError -{ - /** - * @DummyAnnotation(@) - */ - public $foo; -} - -/** - * @ignoreAnnotation({"since", "var"}) - */ -class DummyClassNonAnnotationProblem -{ - /** - * @DummyAnnotation - * - * @var \Test - * @since 0.1 - */ - public $foo; -} - - -/** -* @DummyAnnotation Foo bar -*/ -class DummyClassWithEmail -{ - -} - -namespace Doctrine\Tests\Common\Annotations\Foo; - -/** @Annotation */ -class Name extends \Doctrine\Common\Annotations\Annotation -{ - public $name; -} - -namespace Doctrine\Tests\Common\Annotations\Bar; - -/** @Annotation */ -class Name extends \Doctrine\Common\Annotations\Annotation -{ - public $name; -} diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/AnnotationReaderTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/AnnotationReaderTest.php deleted file mode 100644 index d2cc667..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/AnnotationReaderTest.php +++ /dev/null @@ -1,13 +0,0 @@ -getMock('Doctrine\Common\Cache\Cache'); - $cache - ->expects($this->at(0)) - ->method('fetch') - ->with($this->equalTo($cacheKey)) - ->will($this->returnValue(array())) - ; - $cache - ->expects($this->at(1)) - ->method('fetch') - ->with($this->equalTo('[C]'.$cacheKey)) - ->will($this->returnValue(time() - 10)) - ; - $cache - ->expects($this->at(2)) - ->method('save') - ->with($this->equalTo($cacheKey)) - ; - $cache - ->expects($this->at(3)) - ->method('save') - ->with($this->equalTo('[C]'.$cacheKey)) - ; - - $reader = new CachedReader(new AnnotationReader(), $cache, true); - $route = new Route(); - $route->pattern = '/someprefix'; - $this->assertEquals(array($route), $reader->getClassAnnotations(new \ReflectionClass($name))); - } - - protected function getReader() - { - $this->cache = new ArrayCache(); - return new CachedReader(new AnnotationReader(), $this->cache); - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/DocLexerTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/DocLexerTest.php deleted file mode 100644 index 03a55c8..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/DocLexerTest.php +++ /dev/null @@ -1,137 +0,0 @@ -setInput("@Name"); - $this->assertNull($lexer->token); - $this->assertNull($lexer->lookahead); - - $this->assertTrue($lexer->moveNext()); - $this->assertNull($lexer->token); - $this->assertEquals('@', $lexer->lookahead['value']); - - $this->assertTrue($lexer->moveNext()); - $this->assertEquals('@', $lexer->token['value']); - $this->assertEquals('Name', $lexer->lookahead['value']); - - $this->assertFalse($lexer->moveNext()); - } - - public function testScannerTokenizesDocBlockWhitConstants() - { - $lexer = new DocLexer(); - $docblock = '@AnnotationWithConstants(PHP_EOL, ClassWithConstants::SOME_VALUE, \Doctrine\Tests\Common\Annotations\Fixtures\IntefaceWithConstants::SOME_VALUE)'; - - $tokens = array ( - array( - 'value' => '@', - 'position' => 0, - 'type' => DocLexer::T_AT, - ), - array( - 'value' => 'AnnotationWithConstants', - 'position' => 1, - 'type' => DocLexer::T_IDENTIFIER, - ), - array( - 'value' => '(', - 'position' => 24, - 'type' => DocLexer::T_OPEN_PARENTHESIS, - ), - array( - 'value' => 'PHP_EOL', - 'position' => 25, - 'type' => DocLexer::T_IDENTIFIER, - ), - array( - 'value' => ',', - 'position' => 32, - 'type' => DocLexer::T_COMMA, - ), - array( - 'value' => 'ClassWithConstants::SOME_VALUE', - 'position' => 34, - 'type' => DocLexer::T_IDENTIFIER, - ), - array( - 'value' => ',', - 'position' => 64, - 'type' => DocLexer::T_COMMA, - ), - array( - 'value' => '\\Doctrine\\Tests\\Common\\Annotations\\Fixtures\\IntefaceWithConstants::SOME_VALUE', - 'position' => 66, - 'type' => DocLexer::T_IDENTIFIER, - ), - array( - 'value' => ')', - 'position' => 143, - 'type' => DocLexer::T_CLOSE_PARENTHESIS, - ) - - ); - - $lexer->setInput($docblock); - - foreach ($tokens as $expected) { - $lexer->moveNext(); - $lookahead = $lexer->lookahead; - $this->assertEquals($expected['value'], $lookahead['value']); - $this->assertEquals($expected['type'], $lookahead['type']); - $this->assertEquals($expected['position'], $lookahead['position']); - } - - $this->assertFalse($lexer->moveNext()); - } - - - public function testScannerTokenizesDocBlockWhitInvalidIdentifier() - { - $lexer = new DocLexer(); - $docblock = '@Foo\3.42'; - - $tokens = array ( - array( - 'value' => '@', - 'position' => 0, - 'type' => DocLexer::T_AT, - ), - array( - 'value' => 'Foo', - 'position' => 1, - 'type' => DocLexer::T_IDENTIFIER, - ), - array( - 'value' => '\\', - 'position' => 4, - 'type' => DocLexer::T_NAMESPACE_SEPARATOR, - ), - array( - 'value' => 3.42, - 'position' => 5, - 'type' => DocLexer::T_FLOAT, - ) - ); - - $lexer->setInput($docblock); - - foreach ($tokens as $expected) { - $lexer->moveNext(); - $lookahead = $lexer->lookahead; - $this->assertEquals($expected['value'], $lookahead['value']); - $this->assertEquals($expected['type'], $lookahead['type']); - $this->assertEquals($expected['position'], $lookahead['position']); - } - - $this->assertFalse($lexer->moveNext()); - } - -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/DocParserTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/DocParserTest.php deleted file mode 100644 index b14698f..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/DocParserTest.php +++ /dev/null @@ -1,1208 +0,0 @@ -createTestParser(); - - // Nested arrays with nested annotations - $result = $parser->parse('@Name(foo={1,2, {"key"=@Name}})'); - $annot = $result[0]; - - $this->assertTrue($annot instanceof Name); - $this->assertNull($annot->value); - $this->assertEquals(3, count($annot->foo)); - $this->assertEquals(1, $annot->foo[0]); - $this->assertEquals(2, $annot->foo[1]); - $this->assertTrue(is_array($annot->foo[2])); - - $nestedArray = $annot->foo[2]; - $this->assertTrue(isset($nestedArray['key'])); - $this->assertTrue($nestedArray['key'] instanceof Name); - } - - public function testBasicAnnotations() - { - $parser = $this->createTestParser(); - - // Marker annotation - $result = $parser->parse("@Name"); - $annot = $result[0]; - $this->assertTrue($annot instanceof Name); - $this->assertNull($annot->value); - $this->assertNull($annot->foo); - - // Associative arrays - $result = $parser->parse('@Name(foo={"key1" = "value1"})'); - $annot = $result[0]; - $this->assertNull($annot->value); - $this->assertTrue(is_array($annot->foo)); - $this->assertTrue(isset($annot->foo['key1'])); - - // Numerical arrays - $result = $parser->parse('@Name({2="foo", 4="bar"})'); - $annot = $result[0]; - $this->assertTrue(is_array($annot->value)); - $this->assertEquals('foo', $annot->value[2]); - $this->assertEquals('bar', $annot->value[4]); - $this->assertFalse(isset($annot->value[0])); - $this->assertFalse(isset($annot->value[1])); - $this->assertFalse(isset($annot->value[3])); - - // Multiple values - $result = $parser->parse('@Name(@Name, @Name)'); - $annot = $result[0]; - - $this->assertTrue($annot instanceof Name); - $this->assertTrue(is_array($annot->value)); - $this->assertTrue($annot->value[0] instanceof Name); - $this->assertTrue($annot->value[1] instanceof Name); - - // Multiple types as values - $result = $parser->parse('@Name(foo="Bar", @Name, {"key1"="value1", "key2"="value2"})'); - $annot = $result[0]; - - $this->assertTrue($annot instanceof Name); - $this->assertTrue(is_array($annot->value)); - $this->assertTrue($annot->value[0] instanceof Name); - $this->assertTrue(is_array($annot->value[1])); - $this->assertEquals('value1', $annot->value[1]['key1']); - $this->assertEquals('value2', $annot->value[1]['key2']); - - // Complete docblock - $docblock = <<parse($docblock); - $this->assertEquals(1, count($result)); - $annot = $result[0]; - $this->assertTrue($annot instanceof Name); - $this->assertEquals("bar", $annot->foo); - $this->assertNull($annot->value); - } - - public function testNamespacedAnnotations() - { - $parser = new DocParser; - $parser->setIgnoreNotImportedAnnotations(true); - - $docblock = << - * @Doctrine\Tests\Common\Annotations\Name(foo="bar") - * @ignore - */ -DOCBLOCK; - - $result = $parser->parse($docblock); - $this->assertEquals(1, count($result)); - $annot = $result[0]; - $this->assertTrue($annot instanceof Name); - $this->assertEquals("bar", $annot->foo); - } - - /** - * @group debug - */ - public function testTypicalMethodDocBlock() - { - $parser = $this->createTestParser(); - - $docblock = <<parse($docblock); - $this->assertEquals(2, count($result)); - $this->assertTrue(isset($result[0])); - $this->assertTrue(isset($result[1])); - $annot = $result[0]; - $this->assertTrue($annot instanceof Name); - $this->assertEquals("bar", $annot->foo); - $marker = $result[1]; - $this->assertTrue($marker instanceof Marker); - } - - - public function testAnnotationWithoutConstructor() - { - $parser = $this->createTestParser(); - - - $docblock = <<parse($docblock); - $this->assertEquals(count($result), 1); - $annot = $result[0]; - - $this->assertNotNull($annot); - $this->assertTrue($annot instanceof SomeAnnotationClassNameWithoutConstructor); - - $this->assertNull($annot->name); - $this->assertNotNull($annot->data); - $this->assertEquals($annot->data, "Some data"); - - - - -$docblock = <<parse($docblock); - $this->assertEquals(count($result), 1); - $annot = $result[0]; - - $this->assertNotNull($annot); - $this->assertTrue($annot instanceof SomeAnnotationClassNameWithoutConstructor); - - $this->assertEquals($annot->name, "Some Name"); - $this->assertEquals($annot->data, "Some data"); - - - - -$docblock = <<parse($docblock); - $this->assertEquals(count($result), 1); - $annot = $result[0]; - - $this->assertEquals($annot->data, "Some data"); - $this->assertNull($annot->name); - - - $docblock = <<parse($docblock); - $this->assertEquals(count($result), 1); - $annot = $result[0]; - - $this->assertEquals($annot->name, "Some name"); - $this->assertNull($annot->data); - - $docblock = <<parse($docblock); - $this->assertEquals(count($result), 1); - $annot = $result[0]; - - $this->assertEquals($annot->data, "Some data"); - $this->assertNull($annot->name); - - - - $docblock = <<parse($docblock); - $this->assertEquals(count($result), 1); - $annot = $result[0]; - - $this->assertEquals($annot->name, "Some name"); - $this->assertEquals($annot->data, "Some data"); - - - $docblock = <<parse($docblock); - $this->assertEquals(count($result), 1); - $annot = $result[0]; - - $this->assertEquals($annot->name, "Some name"); - $this->assertEquals($annot->data, "Some data"); - - $docblock = <<parse($docblock); - $this->assertEquals(count($result), 1); - $this->assertTrue($result[0] instanceof SomeAnnotationClassNameWithoutConstructorAndProperties); - } - - public function testAnnotationTarget() - { - - $parser = new DocParser; - $parser->setImports(array( - '__NAMESPACE__' => 'Doctrine\Tests\Common\Annotations\Fixtures', - )); - $class = new \ReflectionClass('Doctrine\Tests\Common\Annotations\Fixtures\ClassWithValidAnnotationTarget'); - - - $context = 'class ' . $class->getName(); - $docComment = $class->getDocComment(); - - $parser->setTarget(Target::TARGET_CLASS); - $this->assertNotNull($parser->parse($docComment,$context)); - - - $property = $class->getProperty('foo'); - $docComment = $property->getDocComment(); - $context = 'property ' . $class->getName() . "::\$" . $property->getName(); - - $parser->setTarget(Target::TARGET_PROPERTY); - $this->assertNotNull($parser->parse($docComment,$context)); - - - - $method = $class->getMethod('someFunction'); - $docComment = $property->getDocComment(); - $context = 'method ' . $class->getName() . '::' . $method->getName() . '()'; - - $parser->setTarget(Target::TARGET_METHOD); - $this->assertNotNull($parser->parse($docComment,$context)); - - - try { - $class = new \ReflectionClass('Doctrine\Tests\Common\Annotations\Fixtures\ClassWithInvalidAnnotationTargetAtClass'); - $context = 'class ' . $class->getName(); - $docComment = $class->getDocComment(); - - $parser->setTarget(Target::TARGET_CLASS); - $parser->parse($class->getDocComment(),$context); - - $this->fail(); - } catch (\Doctrine\Common\Annotations\AnnotationException $exc) { - $this->assertNotNull($exc->getMessage()); - } - - - try { - - $class = new \ReflectionClass('Doctrine\Tests\Common\Annotations\Fixtures\ClassWithInvalidAnnotationTargetAtMethod'); - $method = $class->getMethod('functionName'); - $docComment = $method->getDocComment(); - $context = 'method ' . $class->getName() . '::' . $method->getName() . '()'; - - $parser->setTarget(Target::TARGET_METHOD); - $parser->parse($docComment,$context); - - $this->fail(); - } catch (\Doctrine\Common\Annotations\AnnotationException $exc) { - $this->assertNotNull($exc->getMessage()); - } - - - try { - $class = new \ReflectionClass('Doctrine\Tests\Common\Annotations\Fixtures\ClassWithInvalidAnnotationTargetAtProperty'); - $property = $class->getProperty('foo'); - $docComment = $property->getDocComment(); - $context = 'property ' . $class->getName() . "::\$" . $property->getName(); - - $parser->setTarget(Target::TARGET_PROPERTY); - $parser->parse($docComment,$context); - - $this->fail(); - } catch (\Doctrine\Common\Annotations\AnnotationException $exc) { - $this->assertNotNull($exc->getMessage()); - } - - } - - public function getAnnotationVarTypeProviderValid() - { - //({attribute name}, {attribute value}) - return array( - // mixed type - array('mixed', '"String Value"'), - array('mixed', 'true'), - array('mixed', 'false'), - array('mixed', '1'), - array('mixed', '1.2'), - array('mixed', '@Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll'), - - // boolean type - array('boolean', 'true'), - array('boolean', 'false'), - - // alias for internal type boolean - array('bool', 'true'), - array('bool', 'false'), - - // integer type - array('integer', '0'), - array('integer', '1'), - array('integer', '123456789'), - array('integer', '9223372036854775807'), - - // alias for internal type double - array('float', '0.1'), - array('float', '1.2'), - array('float', '123.456'), - - // string type - array('string', '"String Value"'), - array('string', '"true"'), - array('string', '"123"'), - - // array type - array('array', '{@AnnotationExtendsAnnotationTargetAll}'), - array('array', '{@AnnotationExtendsAnnotationTargetAll,@AnnotationExtendsAnnotationTargetAll}'), - - array('arrayOfIntegers', '1'), - array('arrayOfIntegers', '{1}'), - array('arrayOfIntegers', '{1,2,3,4}'), - array('arrayOfAnnotations', '@AnnotationExtendsAnnotationTargetAll'), - array('arrayOfAnnotations', '{@Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll}'), - array('arrayOfAnnotations', '{@AnnotationExtendsAnnotationTargetAll, @Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll}'), - - // annotation instance - array('annotation', '@Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll'), - array('annotation', '@AnnotationExtendsAnnotationTargetAll'), - ); - } - - public function getAnnotationVarTypeProviderInvalid() - { - //({attribute name}, {type declared type}, {attribute value} , {given type or class}) - return array( - // boolean type - array('boolean','boolean','1','integer'), - array('boolean','boolean','1.2','double'), - array('boolean','boolean','"str"','string'), - array('boolean','boolean','{1,2,3}','array'), - array('boolean','boolean','@Name', 'an instance of Doctrine\Tests\Common\Annotations\Name'), - - // alias for internal type boolean - array('bool','bool', '1','integer'), - array('bool','bool', '1.2','double'), - array('bool','bool', '"str"','string'), - array('bool','bool', '{"str"}','array'), - - // integer type - array('integer','integer', 'true','boolean'), - array('integer','integer', 'false','boolean'), - array('integer','integer', '1.2','double'), - array('integer','integer', '"str"','string'), - array('integer','integer', '{"str"}','array'), - array('integer','integer', '{1,2,3,4}','array'), - - // alias for internal type double - array('float','float', 'true','boolean'), - array('float','float', 'false','boolean'), - array('float','float', '123','integer'), - array('float','float', '"str"','string'), - array('float','float', '{"str"}','array'), - array('float','float', '{12.34}','array'), - array('float','float', '{1,2,3}','array'), - - // string type - array('string','string', 'true','boolean'), - array('string','string', 'false','boolean'), - array('string','string', '12','integer'), - array('string','string', '1.2','double'), - array('string','string', '{"str"}','array'), - array('string','string', '{1,2,3,4}','array'), - - // annotation instance - array('annotation','Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll', 'true','boolean'), - array('annotation','Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll', 'false','boolean'), - array('annotation','Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll', '12','integer'), - array('annotation','Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll', '1.2','double'), - array('annotation','Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll', '{"str"}','array'), - array('annotation','Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll', '{1,2,3,4}','array'), - array('annotation','Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll', '@Name','an instance of Doctrine\Tests\Common\Annotations\Name'), - ); - } - - public function getAnnotationVarTypeArrayProviderInvalid() - { - //({attribute name}, {type declared type}, {attribute value} , {given type or class}) - return array( - array('arrayOfIntegers','integer', 'true','boolean'), - array('arrayOfIntegers','integer', 'false','boolean'), - array('arrayOfIntegers','integer', '{true,true}','boolean'), - array('arrayOfIntegers','integer', '{1,true}','boolean'), - array('arrayOfIntegers','integer', '{1,2,1.2}','double'), - array('arrayOfIntegers','integer', '{1,2,"str"}','string'), - - - array('arrayOfAnnotations','Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll', 'true','boolean'), - array('arrayOfAnnotations','Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll', 'false','boolean'), - array('arrayOfAnnotations','Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll', '{@Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll,true}','boolean'), - array('arrayOfAnnotations','Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll', '{@Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll,true}','boolean'), - array('arrayOfAnnotations','Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll', '{@Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll,1.2}','double'), - array('arrayOfAnnotations','Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll', '{@Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll,@AnnotationExtendsAnnotationTargetAll,"str"}','string'), - ); - } - - /** - * @dataProvider getAnnotationVarTypeProviderValid - */ - public function testAnnotationWithVarType($attribute, $value) - { - $parser = $this->createTestParser(); - $context = 'property SomeClassName::$invalidProperty.'; - $docblock = sprintf('@Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithVarType(%s = %s)',$attribute, $value); - $parser->setTarget(Target::TARGET_PROPERTY); - - $result = $parser->parse($docblock, $context); - - $this->assertTrue(sizeof($result) === 1); - $this->assertInstanceOf('Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithVarType', $result[0]); - $this->assertNotNull($result[0]->$attribute); - } - - /** - * @dataProvider getAnnotationVarTypeProviderInvalid - */ - public function testAnnotationWithVarTypeError($attribute,$type,$value,$given) - { - $parser = $this->createTestParser(); - $context = 'property SomeClassName::invalidProperty.'; - $docblock = sprintf('@Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithVarType(%s = %s)',$attribute, $value); - $parser->setTarget(Target::TARGET_PROPERTY); - - try { - $parser->parse($docblock, $context); - $this->fail(); - } catch (\Doctrine\Common\Annotations\AnnotationException $exc) { - $this->assertContains("[Type Error] Attribute \"$attribute\" of @Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithVarType declared on property SomeClassName::invalidProperty. expects a(n) $type, but got $given.", $exc->getMessage()); - } - } - - - /** - * @dataProvider getAnnotationVarTypeArrayProviderInvalid - */ - public function testAnnotationWithVarTypeArrayError($attribute,$type,$value,$given) - { - $parser = $this->createTestParser(); - $context = 'property SomeClassName::invalidProperty.'; - $docblock = sprintf('@Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithVarType(%s = %s)',$attribute, $value); - $parser->setTarget(Target::TARGET_PROPERTY); - - try { - $parser->parse($docblock, $context); - $this->fail(); - } catch (\Doctrine\Common\Annotations\AnnotationException $exc) { - $this->assertContains("[Type Error] Attribute \"$attribute\" of @Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithVarType declared on property SomeClassName::invalidProperty. expects either a(n) $type, or an array of {$type}s, but got $given.", $exc->getMessage()); - } - } - - /** - * @dataProvider getAnnotationVarTypeProviderValid - */ - public function testAnnotationWithAttributes($attribute, $value) - { - $parser = $this->createTestParser(); - $context = 'property SomeClassName::$invalidProperty.'; - $docblock = sprintf('@Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithAttributes(%s = %s)',$attribute, $value); - $parser->setTarget(Target::TARGET_PROPERTY); - - $result = $parser->parse($docblock, $context); - - $this->assertTrue(sizeof($result) === 1); - $this->assertInstanceOf('Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithAttributes', $result[0]); - $getter = "get".ucfirst($attribute); - $this->assertNotNull($result[0]->$getter()); - } - - /** - * @dataProvider getAnnotationVarTypeProviderInvalid - */ - public function testAnnotationWithAttributesError($attribute,$type,$value,$given) - { - $parser = $this->createTestParser(); - $context = 'property SomeClassName::invalidProperty.'; - $docblock = sprintf('@Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithAttributes(%s = %s)',$attribute, $value); - $parser->setTarget(Target::TARGET_PROPERTY); - - try { - $parser->parse($docblock, $context); - $this->fail(); - } catch (\Doctrine\Common\Annotations\AnnotationException $exc) { - $this->assertContains("[Type Error] Attribute \"$attribute\" of @Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithAttributes declared on property SomeClassName::invalidProperty. expects a(n) $type, but got $given.", $exc->getMessage()); - } - } - - - /** - * @dataProvider getAnnotationVarTypeArrayProviderInvalid - */ - public function testAnnotationWithAttributesWithVarTypeArrayError($attribute,$type,$value,$given) - { - $parser = $this->createTestParser(); - $context = 'property SomeClassName::invalidProperty.'; - $docblock = sprintf('@Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithAttributes(%s = %s)',$attribute, $value); - $parser->setTarget(Target::TARGET_PROPERTY); - - try { - $parser->parse($docblock, $context); - $this->fail(); - } catch (\Doctrine\Common\Annotations\AnnotationException $exc) { - $this->assertContains("[Type Error] Attribute \"$attribute\" of @Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithAttributes declared on property SomeClassName::invalidProperty. expects either a(n) $type, or an array of {$type}s, but got $given.", $exc->getMessage()); - } - } - - public function testAnnotationWithRequiredAttributes() - { - $parser = $this->createTestParser(); - $context = 'property SomeClassName::invalidProperty.'; - $parser->setTarget(Target::TARGET_PROPERTY); - - - $docblock = '@Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithRequiredAttributes("Some Value", annot = @Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAnnotation)'; - $result = $parser->parse($docblock); - - $this->assertTrue(sizeof($result) === 1); - $this->assertInstanceOf('Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithRequiredAttributes', $result[0]); - $this->assertEquals("Some Value",$result[0]->getValue()); - $this->assertInstanceOf('Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAnnotation', $result[0]->getAnnot()); - - - $docblock = '@Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithRequiredAttributes("Some Value")'; - try { - $result = $parser->parse($docblock,$context); - $this->fail(); - } catch (\Doctrine\Common\Annotations\AnnotationException $exc) { - $this->assertContains('Attribute "annot" of @Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithRequiredAttributes declared on property SomeClassName::invalidProperty. expects a(n) Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAnnotation. This value should not be null.', $exc->getMessage()); - } - - $docblock = '@Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithRequiredAttributes(annot = @Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAnnotation)'; - try { - $result = $parser->parse($docblock,$context); - $this->fail(); - } catch (\Doctrine\Common\Annotations\AnnotationException $exc) { - $this->assertContains('Attribute "value" of @Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithRequiredAttributes declared on property SomeClassName::invalidProperty. expects a(n) string. This value should not be null.', $exc->getMessage()); - } - - } - - public function testAnnotationWithRequiredAttributesWithoutContructor() - { - $parser = $this->createTestParser(); - $context = 'property SomeClassName::invalidProperty.'; - $parser->setTarget(Target::TARGET_PROPERTY); - - - $docblock = '@Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithRequiredAttributesWithoutContructor("Some Value", annot = @Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAnnotation)'; - $result = $parser->parse($docblock); - - $this->assertTrue(sizeof($result) === 1); - $this->assertInstanceOf('Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithRequiredAttributesWithoutContructor', $result[0]); - $this->assertEquals("Some Value", $result[0]->value); - $this->assertInstanceOf('Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAnnotation', $result[0]->annot); - - - $docblock = '@Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithRequiredAttributesWithoutContructor("Some Value")'; - try { - $result = $parser->parse($docblock,$context); - $this->fail(); - } catch (\Doctrine\Common\Annotations\AnnotationException $exc) { - $this->assertContains('Attribute "annot" of @Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithRequiredAttributesWithoutContructor declared on property SomeClassName::invalidProperty. expects a(n) Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAnnotation. This value should not be null.', $exc->getMessage()); - } - - $docblock = '@Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithRequiredAttributesWithoutContructor(annot = @Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAnnotation)'; - try { - $result = $parser->parse($docblock,$context); - $this->fail(); - } catch (\Doctrine\Common\Annotations\AnnotationException $exc) { - $this->assertContains('Attribute "value" of @Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithRequiredAttributesWithoutContructor declared on property SomeClassName::invalidProperty. expects a(n) string. This value should not be null.', $exc->getMessage()); - } - - } - - public function getConstantsProvider() - { - $provider[] = array( - '@AnnotationWithConstants(PHP_EOL)', - PHP_EOL - ); - $provider[] = array( - '@AnnotationWithConstants(AnnotationWithConstants::INTEGER)', - AnnotationWithConstants::INTEGER - ); - $provider[] = array( - '@Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithConstants(AnnotationWithConstants::STRING)', - AnnotationWithConstants::STRING - ); - $provider[] = array( - '@AnnotationWithConstants(Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithConstants::FLOAT)', - AnnotationWithConstants::FLOAT - ); - $provider[] = array( - '@AnnotationWithConstants(ClassWithConstants::SOME_VALUE)', - ClassWithConstants::SOME_VALUE - ); - $provider[] = array( - '@AnnotationWithConstants(Doctrine\Tests\Common\Annotations\Fixtures\ClassWithConstants::SOME_VALUE)', - ClassWithConstants::SOME_VALUE - ); - $provider[] = array( - '@AnnotationWithConstants(IntefaceWithConstants::SOME_VALUE)', - IntefaceWithConstants::SOME_VALUE - ); - $provider[] = array( - '@AnnotationWithConstants(\Doctrine\Tests\Common\Annotations\Fixtures\IntefaceWithConstants::SOME_VALUE)', - IntefaceWithConstants::SOME_VALUE - ); - $provider[] = array( - '@AnnotationWithConstants({AnnotationWithConstants::STRING, AnnotationWithConstants::INTEGER, AnnotationWithConstants::FLOAT})', - array(AnnotationWithConstants::STRING, AnnotationWithConstants::INTEGER, AnnotationWithConstants::FLOAT) - ); - $provider[] = array( - '@AnnotationWithConstants({ - AnnotationWithConstants::STRING = AnnotationWithConstants::INTEGER - })', - array(AnnotationWithConstants::STRING => AnnotationWithConstants::INTEGER) - ); - $provider[] = array( - '@AnnotationWithConstants({ - Doctrine\Tests\Common\Annotations\Fixtures\IntefaceWithConstants::SOME_KEY = AnnotationWithConstants::INTEGER - })', - array(IntefaceWithConstants::SOME_KEY => AnnotationWithConstants::INTEGER) - ); - $provider[] = array( - '@AnnotationWithConstants({ - \Doctrine\Tests\Common\Annotations\Fixtures\IntefaceWithConstants::SOME_KEY = AnnotationWithConstants::INTEGER - })', - array(IntefaceWithConstants::SOME_KEY => AnnotationWithConstants::INTEGER) - ); - $provider[] = array( - '@AnnotationWithConstants({ - AnnotationWithConstants::STRING = AnnotationWithConstants::INTEGER, - ClassWithConstants::SOME_KEY = ClassWithConstants::SOME_VALUE, - Doctrine\Tests\Common\Annotations\Fixtures\ClassWithConstants::SOME_KEY = IntefaceWithConstants::SOME_VALUE - })', - array( - AnnotationWithConstants::STRING => AnnotationWithConstants::INTEGER, - ClassWithConstants::SOME_KEY => ClassWithConstants::SOME_VALUE, - ClassWithConstants::SOME_KEY => IntefaceWithConstants::SOME_VALUE - ) - ); - return $provider; - } - - /** - * @dataProvider getConstantsProvider - */ - public function testSupportClassConstants($docblock, $expected) - { - $parser = $this->createTestParser(); - $parser->setImports(array( - 'classwithconstants' => 'Doctrine\Tests\Common\Annotations\Fixtures\ClassWithConstants', - 'intefacewithconstants' => 'Doctrine\Tests\Common\Annotations\Fixtures\IntefaceWithConstants', - 'annotationwithconstants' => 'Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithConstants' - )); - - $result = $parser->parse($docblock); - $this->assertInstanceOf('\Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithConstants', $annotation = $result[0]); - $this->assertEquals($expected, $annotation->value); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage The annotation @SomeAnnotationClassNameWithoutConstructorAndProperties declared on does not accept any values, but got {"value":"Foo"}. - */ - public function testWithoutConstructorWhenIsNotDefaultValue() - { - $parser = $this->createTestParser(); - $docblock = <<setTarget(Target::TARGET_CLASS); - $parser->parse($docblock); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage The annotation @SomeAnnotationClassNameWithoutConstructorAndProperties declared on does not accept any values, but got {"value":"Foo"}. - */ - public function testWithoutConstructorWhenHasNoProperties() - { - $parser = $this->createTestParser(); - $docblock = <<setTarget(Target::TARGET_CLASS); - $parser->parse($docblock); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage Expected namespace separator or identifier, got ')' at position 24 in class @Doctrine\Tests\Common\Annotations\Fixtures\AnnotationWithTargetSyntaxError. - */ - public function testAnnotationTargetSyntaxError() - { - $parser = $this->createTestParser(); - $context = 'class ' . 'SomeClassName'; - $docblock = <<setTarget(Target::TARGET_CLASS); - $parser->parse($docblock,$context); - } - - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage Invalid Target "Foo". Available targets: [ALL, CLASS, METHOD, PROPERTY, ANNOTATION] - */ - public function testAnnotationWithInvalidTargetDeclarationError() - { - $parser = $this->createTestParser(); - $context = 'class ' . 'SomeClassName'; - $docblock = <<setTarget(Target::TARGET_CLASS); - $parser->parse($docblock,$context); - } - - /** - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage @Target expects either a string value, or an array of strings, "NULL" given. - */ - public function testAnnotationWithTargetEmptyError() - { - $parser = $this->createTestParser(); - $context = 'class ' . 'SomeClassName'; - $docblock = <<setTarget(Target::TARGET_CLASS); - $parser->parse($docblock,$context); - } - - /** - * @group DDC-575 - */ - public function testRegressionDDC575() - { - $parser = $this->createTestParser(); - - $docblock = <<parse($docblock); - - $this->assertInstanceOf("Doctrine\Tests\Common\Annotations\Name", $result[0]); - - $docblock = <<parse($docblock); - - $this->assertInstanceOf("Doctrine\Tests\Common\Annotations\Name", $result[0]); - } - - /** - * @group DDC-77 - */ - public function testAnnotationWithoutClassIsIgnoredWithoutWarning() - { - $parser = new DocParser(); - $parser->setIgnoreNotImportedAnnotations(true); - $result = $parser->parse("@param"); - - $this->assertEquals(0, count($result)); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage Expected PlainValue, got ''' at position 10. - */ - public function testAnnotationDontAcceptSingleQuotes() - { - $parser = $this->createTestParser(); - $parser->parse("@Name(foo='bar')"); - } - - /** - * @group DCOM-41 - */ - public function testAnnotationDoesntThrowExceptionWhenAtSignIsNotFollowedByIdentifier() - { - $parser = new DocParser(); - $result = $parser->parse("'@'"); - - $this->assertEquals(0, count($result)); - } - - /** - * @group DCOM-41 - * @expectedException Doctrine\Common\Annotations\AnnotationException - */ - public function testAnnotationThrowsExceptionWhenAtSignIsNotFollowedByIdentifierInNestedAnnotation() - { - $parser = new DocParser(); - $result = $parser->parse("@Doctrine\Tests\Common\Annotations\Name(@')"); - } - - /** - * @group DCOM-56 - */ - public function testAutoloadAnnotation() - { - $this->assertFalse(class_exists('Doctrine\Tests\Common\Annotations\Fixture\Annotation\Autoload', false), 'Pre-condition: Doctrine\Tests\Common\Annotations\Fixture\Annotation\Autoload not allowed to be loaded.'); - - $parser = new DocParser(); - - AnnotationRegistry::registerAutoloadNamespace('Doctrine\Tests\Common\Annotations\Fixtures\Annotation', __DIR__ . '/../../../../'); - - $parser->setImports(array( - 'autoload' => 'Doctrine\Tests\Common\Annotations\Fixtures\Annotation\Autoload', - )); - $annotations = $parser->parse('@Autoload'); - - $this->assertEquals(1, count($annotations)); - $this->assertInstanceOf('Doctrine\Tests\Common\Annotations\Fixtures\Annotation\Autoload', $annotations[0]); - } - - public function createTestParser() - { - $parser = new DocParser(); - $parser->setIgnoreNotImportedAnnotations(true); - $parser->setImports(array( - 'name' => 'Doctrine\Tests\Common\Annotations\Name', - '__NAMESPACE__' => 'Doctrine\Tests\Common\Annotations', - )); - - return $parser; - } - - /** - * @group DDC-78 - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage Expected PlainValue, got ''' at position 10 in class \Doctrine\Tests\Common\Annotations\Name - */ - public function testSyntaxErrorWithContextDescription() - { - $parser = $this->createTestParser(); - $parser->parse("@Name(foo='bar')", "class \Doctrine\Tests\Common\Annotations\Name"); - } - - /** - * @group DDC-183 - */ - public function testSyntaxErrorWithUnknownCharacters() - { - $docblock = <<setInput(trim($docblock, '/ *')); - //var_dump($lexer); - - try { - $parser = $this->createTestParser(); - $result = $parser->parse($docblock); - } catch (Exception $e) { - $this->fail($e->getMessage()); - } - } - - /** - * @group DCOM-14 - */ - public function testIgnorePHPDocThrowTag() - { - $docblock = <<createTestParser(); - $result = $parser->parse($docblock); - } catch (Exception $e) { - $this->fail($e->getMessage()); - } - } - - /** - * @group DCOM-38 - */ - public function testCastInt() - { - $parser = $this->createTestParser(); - - $result = $parser->parse("@Name(foo=1234)"); - $annot = $result[0]; - $this->assertInternalType('int', $annot->foo); - } - - /** - * @group DCOM-38 - */ - public function testCastNegativeInt() - { - $parser = $this->createTestParser(); - - $result = $parser->parse("@Name(foo=-1234)"); - $annot = $result[0]; - $this->assertInternalType('int', $annot->foo); - } - - /** - * @group DCOM-38 - */ - public function testCastFloat() - { - $parser = $this->createTestParser(); - - $result = $parser->parse("@Name(foo=1234.345)"); - $annot = $result[0]; - $this->assertInternalType('float', $annot->foo); - } - - /** - * @group DCOM-38 - */ - public function testCastNegativeFloat() - { - $parser = $this->createTestParser(); - - $result = $parser->parse("@Name(foo=-1234.345)"); - $annot = $result[0]; - $this->assertInternalType('float', $annot->foo); - - $result = $parser->parse("@Marker(-1234.345)"); - $annot = $result[0]; - $this->assertInternalType('float', $annot->value); - } - - public function testReservedKeywordsInAnnotations() - { - $parser = $this->createTestParser(); - - $result = $parser->parse('@Doctrine\Tests\Common\Annotations\True'); - $this->assertTrue($result[0] instanceof True); - $result = $parser->parse('@Doctrine\Tests\Common\Annotations\False'); - $this->assertTrue($result[0] instanceof False); - $result = $parser->parse('@Doctrine\Tests\Common\Annotations\Null'); - $this->assertTrue($result[0] instanceof Null); - - $result = $parser->parse('@True'); - $this->assertTrue($result[0] instanceof True); - $result = $parser->parse('@False'); - $this->assertTrue($result[0] instanceof False); - $result = $parser->parse('@Null'); - $this->assertTrue($result[0] instanceof Null); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage [Creation Error] The annotation @SomeAnnotationClassNameWithoutConstructor declared on some class does not have a property named "invalidaProperty". Available properties: data, name - */ - public function testSetValuesExeption() - { - $docblock = <<createTestParser()->parse($docblock, 'some class'); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage [Syntax Error] Expected Doctrine\Common\Annotations\DocLexer::T_IDENTIFIER or Doctrine\Common\Annotations\DocLexer::T_TRUE or Doctrine\Common\Annotations\DocLexer::T_FALSE or Doctrine\Common\Annotations\DocLexer::T_NULL, got '3.42' at position 5. - */ - public function testInvalidIdentifierInAnnotation() - { - $parser = $this->createTestParser(); - $parser->parse('@Foo\3.42'); - } - - public function testTrailingCommaIsAllowed() - { - $parser = $this->createTestParser(); - - $annots = $parser->parse('@Name({ - "Foo", - "Bar", - })'); - $this->assertEquals(1, count($annots)); - $this->assertEquals(array('Foo', 'Bar'), $annots[0]->value); - } - - public function testDefaultAnnotationValueIsNotOverwritten() - { - $parser = $this->createTestParser(); - - $annots = $parser->parse('@Doctrine\Tests\Common\Annotations\Fixtures\Annotation\AnnotWithDefaultValue'); - $this->assertEquals(1, count($annots)); - $this->assertEquals('bar', $annots[0]->foo); - } - - public function testArrayWithColon() - { - $parser = $this->createTestParser(); - - $annots = $parser->parse('@Name({"foo": "bar"})'); - $this->assertEquals(1, count($annots)); - $this->assertEquals(array('foo' => 'bar'), $annots[0]->value); - } - - /** - * @expectedException Doctrine\Common\Annotations\AnnotationException - * @expectedExceptionMessage [Semantical Error] Couldn't find constant foo. - */ - public function testInvalidContantName() - { - $parser = $this->createTestParser(); - $parser->parse('@Name(foo: "bar")'); - } -} - -/** @Annotation */ -class SomeAnnotationClassNameWithoutConstructor -{ - public $data; - public $name; -} - -/** @Annotation */ -class SomeAnnotationWithConstructorWithoutParams -{ - function __construct() - { - $this->data = "Some data"; - } - public $data; - public $name; -} - -/** @Annotation */ -class SomeAnnotationClassNameWithoutConstructorAndProperties{} - -/** - * @Annotation - * @Target("Foo") - */ -class AnnotationWithInvalidTargetDeclaration{} - -/** - * @Annotation - * @Target - */ -class AnnotationWithTargetEmpty{} - -/** @Annotation */ -class AnnotationExtendsAnnotationTargetAll extends \Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll -{ -} - -/** @Annotation */ -class Name extends \Doctrine\Common\Annotations\Annotation { - public $foo; -} - -/** @Annotation */ -class Marker { - public $value; -} - -/** @Annotation */ -class True {} - -/** @Annotation */ -class False {} - -/** @Annotation */ -class Null {} - -namespace Doctrine\Tests\Common\Annotations\FooBar; - -/** @Annotation */ -class Name extends \Doctrine\Common\Annotations\Annotation { -} diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/DummyClass.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/DummyClass.php deleted file mode 100644 index 17223f6..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/DummyClass.php +++ /dev/null @@ -1,48 +0,0 @@ -cacheDir = sys_get_temp_dir() . "/annotations_". uniqid(); - @mkdir($this->cacheDir); - return new FileCacheReader(new AnnotationReader(), $this->cacheDir); - } - - public function tearDown() - { - foreach (glob($this->cacheDir.'/*.php') AS $file) { - unlink($file); - } - rmdir($this->cacheDir); - } - - /** - * @group DCOM-81 - */ - public function testAttemptToCreateAnnotationCacheDir() - { - $this->cacheDir = sys_get_temp_dir() . "/not_existed_dir_". uniqid(); - - $this->assertFalse(is_dir($this->cacheDir)); - - $cache = new FileCacheReader(new AnnotationReader(), $this->cacheDir); - - $this->assertTrue(is_dir($this->cacheDir)); - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/Annotation/AnnotWithDefaultValue.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/Annotation/AnnotWithDefaultValue.php deleted file mode 100644 index 44108e1..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/Annotation/AnnotWithDefaultValue.php +++ /dev/null @@ -1,10 +0,0 @@ -roles = $values['value']; - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/Annotation/Template.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/Annotation/Template.php deleted file mode 100644 index b507e60..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/Annotation/Template.php +++ /dev/null @@ -1,14 +0,0 @@ -name = isset($values['value']) ? $values['value'] : null; - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/Annotation/Version.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/Annotation/Version.php deleted file mode 100644 index 09ef031..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/Annotation/Version.php +++ /dev/null @@ -1,11 +0,0 @@ -"), - @Attribute("annotation", type = "Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll"), - @Attribute("arrayOfAnnotations", type = "array"), - }) - */ -final class AnnotationWithAttributes -{ - - public final function __construct(array $data) - { - foreach ($data as $key => $value) { - $this->$key = $value; - } - } - - private $mixed; - private $boolean; - private $bool; - private $float; - private $string; - private $integer; - private $array; - private $annotation; - private $arrayOfIntegers; - private $arrayOfAnnotations; - - /** - * @return mixed - */ - public function getMixed() - { - return $this->mixed; - } - - /** - * @return boolean - */ - public function getBoolean() - { - return $this->boolean; - } - - /** - * @return bool - */ - public function getBool() - { - return $this->bool; - } - - /** - * @return float - */ - public function getFloat() - { - return $this->float; - } - - /** - * @return string - */ - public function getString() - { - return $this->string; - } - - public function getInteger() - { - return $this->integer; - } - - /** - * @return array - */ - public function getArray() - { - return $this->array; - } - - /** - * @return Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAll - */ - public function getAnnotation() - { - return $this->annotation; - } - - /** - * @return array - */ - public function getArrayOfIntegers() - { - return $this->arrayOfIntegers; - } - - /** - * @return array - */ - public function getArrayOfAnnotations() - { - return $this->arrayOfAnnotations; - } - -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/AnnotationWithConstants.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/AnnotationWithConstants.php deleted file mode 100644 index 9c94558..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/AnnotationWithConstants.php +++ /dev/null @@ -1,20 +0,0 @@ - $value) { - $this->$key = $value; - } - } - - /** - * @var string - */ - private $value; - - /** - * - * @var Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAnnotation - */ - private $annot; - - /** - * @return string - */ - public function getValue() - { - return $this->value; - } - - /** - * @return Doctrine\Tests\Common\Annotations\Fixtures\AnnotationTargetAnnotation - */ - public function getAnnot() - { - return $this->annot; - } - -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/AnnotationWithRequiredAttributesWithoutContructor.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/AnnotationWithRequiredAttributesWithoutContructor.php deleted file mode 100644 index bf458ee..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/AnnotationWithRequiredAttributesWithoutContructor.php +++ /dev/null @@ -1,24 +0,0 @@ - - */ - public $arrayOfIntegers; - - /** - * @var array - */ - public $arrayOfAnnotations; - -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/ClassDDC1660.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/ClassDDC1660.php deleted file mode 100644 index 4e652e1..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/ClassDDC1660.php +++ /dev/null @@ -1,30 +0,0 @@ -events->filter(function ($item) use ($year, $month, $day) { - $leftDate = new \DateTime($year.'-'.$month.'-'.$day.' 00:00'); - $rigthDate = new \DateTime($year.'-'.$month.'-'.$day.' +1 day 00:00'); - return ( ( $leftDate <= $item->getDateStart() ) && ( $item->getDateStart() < $rigthDate ) ); - - } - ); - return $extractEvents; - } - -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/ClassWithConstants.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/ClassWithConstants.php deleted file mode 100644 index 055e245..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/ClassWithConstants.php +++ /dev/null @@ -1,10 +0,0 @@ - - */ -class Controller -{ - /** - * @Route("/", name="_demo") - * @Template() - */ - public function indexAction() - { - return array(); - } - - /** - * @Route("/hello/{name}", name="_demo_hello") - * @Template() - */ - public function helloAction($name) - { - return array('name' => $name); - } - - /** - * @Route("/contact", name="_demo_contact") - * @Template() - */ - public function contactAction() - { - $form = ContactForm::create($this->get('form.context'), 'contact'); - - $form->bind($this->container->get('request'), $form); - if ($form->isValid()) { - $form->send($this->get('mailer')); - - $this->get('session')->setFlash('notice', 'Message sent!'); - - return new RedirectResponse($this->generateUrl('_demo')); - } - - return array('form' => $form); - } - - /** - * Creates the ACL for the passed object identity - * - * @param ObjectIdentityInterface $oid - * @return void - */ - private function createObjectIdentity(ObjectIdentityInterface $oid) - { - $classId = $this->createOrRetrieveClassId($oid->getType()); - - $this->connection->executeQuery($this->getInsertObjectIdentitySql($oid->getIdentifier(), $classId, true)); - } - - /** - * Returns the primary key for the passed class type. - * - * If the type does not yet exist in the database, it will be created. - * - * @param string $classType - * @return integer - */ - private function createOrRetrieveClassId($classType) - { - if (false !== $id = $this->connection->executeQuery($this->getSelectClassIdSql($classType))->fetchColumn()) { - return $id; - } - - $this->connection->executeQuery($this->getInsertClassSql($classType)); - - return $this->connection->executeQuery($this->getSelectClassIdSql($classType))->fetchColumn(); - } - - /** - * Returns the primary key for the passed security identity. - * - * If the security identity does not yet exist in the database, it will be - * created. - * - * @param SecurityIdentityInterface $sid - * @return integer - */ - private function createOrRetrieveSecurityIdentityId(SecurityIdentityInterface $sid) - { - if (false !== $id = $this->connection->executeQuery($this->getSelectSecurityIdentityIdSql($sid))->fetchColumn()) { - return $id; - } - - $this->connection->executeQuery($this->getInsertSecurityIdentitySql($sid)); - - return $this->connection->executeQuery($this->getSelectSecurityIdentityIdSql($sid))->fetchColumn(); - } - - /** - * Deletes all ACEs for the given object identity primary key. - * - * @param integer $oidPK - * @return void - */ - private function deleteAccessControlEntries($oidPK) - { - $this->connection->executeQuery($this->getDeleteAccessControlEntriesSql($oidPK)); - } - - /** - * Deletes the object identity from the database. - * - * @param integer $pk - * @return void - */ - private function deleteObjectIdentity($pk) - { - $this->connection->executeQuery($this->getDeleteObjectIdentitySql($pk)); - } - - /** - * Deletes all entries from the relations table from the database. - * - * @param integer $pk - * @return void - */ - private function deleteObjectIdentityRelations($pk) - { - $this->connection->executeQuery($this->getDeleteObjectIdentityRelationsSql($pk)); - } - - /** - * This regenerates the ancestor table which is used for fast read access. - * - * @param AclInterface $acl - * @return void - */ - private function regenerateAncestorRelations(AclInterface $acl) - { - $pk = $acl->getId(); - $this->connection->executeQuery($this->getDeleteObjectIdentityRelationsSql($pk)); - $this->connection->executeQuery($this->getInsertObjectIdentityRelationSql($pk, $pk)); - - $parentAcl = $acl->getParentAcl(); - while (null !== $parentAcl) { - $this->connection->executeQuery($this->getInsertObjectIdentityRelationSql($pk, $parentAcl->getId())); - - $parentAcl = $parentAcl->getParentAcl(); - } - } - - /** - * This processes changes on an ACE related property (classFieldAces, or objectFieldAces). - * - * @param string $name - * @param array $changes - * @return void - */ - private function updateFieldAceProperty($name, array $changes) - { - $sids = new \SplObjectStorage(); - $classIds = new \SplObjectStorage(); - $currentIds = array(); - foreach ($changes[1] as $field => $new) { - for ($i=0,$c=count($new); $i<$c; $i++) { - $ace = $new[$i]; - - if (null === $ace->getId()) { - if ($sids->contains($ace->getSecurityIdentity())) { - $sid = $sids->offsetGet($ace->getSecurityIdentity()); - } else { - $sid = $this->createOrRetrieveSecurityIdentityId($ace->getSecurityIdentity()); - } - - $oid = $ace->getAcl()->getObjectIdentity(); - if ($classIds->contains($oid)) { - $classId = $classIds->offsetGet($oid); - } else { - $classId = $this->createOrRetrieveClassId($oid->getType()); - } - - $objectIdentityId = $name === 'classFieldAces' ? null : $ace->getAcl()->getId(); - - $this->connection->executeQuery($this->getInsertAccessControlEntrySql($classId, $objectIdentityId, $field, $i, $sid, $ace->getStrategy(), $ace->getMask(), $ace->isGranting(), $ace->isAuditSuccess(), $ace->isAuditFailure())); - $aceId = $this->connection->executeQuery($this->getSelectAccessControlEntryIdSql($classId, $objectIdentityId, $field, $i))->fetchColumn(); - $this->loadedAces[$aceId] = $ace; - - $aceIdProperty = new \ReflectionProperty('Symfony\Component\Security\Acl\Domain\Entry', 'id'); - $aceIdProperty->setAccessible(true); - $aceIdProperty->setValue($ace, intval($aceId)); - } else { - $currentIds[$ace->getId()] = true; - } - } - } - - foreach ($changes[0] as $old) { - for ($i=0,$c=count($old); $i<$c; $i++) { - $ace = $old[$i]; - - if (!isset($currentIds[$ace->getId()])) { - $this->connection->executeQuery($this->getDeleteAccessControlEntrySql($ace->getId())); - unset($this->loadedAces[$ace->getId()]); - } - } - } - } - - /** - * This processes changes on an ACE related property (classAces, or objectAces). - * - * @param string $name - * @param array $changes - * @return void - */ - private function updateAceProperty($name, array $changes) - { - list($old, $new) = $changes; - - $sids = new \SplObjectStorage(); - $classIds = new \SplObjectStorage(); - $currentIds = array(); - for ($i=0,$c=count($new); $i<$c; $i++) { - $ace = $new[$i]; - - if (null === $ace->getId()) { - if ($sids->contains($ace->getSecurityIdentity())) { - $sid = $sids->offsetGet($ace->getSecurityIdentity()); - } else { - $sid = $this->createOrRetrieveSecurityIdentityId($ace->getSecurityIdentity()); - } - - $oid = $ace->getAcl()->getObjectIdentity(); - if ($classIds->contains($oid)) { - $classId = $classIds->offsetGet($oid); - } else { - $classId = $this->createOrRetrieveClassId($oid->getType()); - } - - $objectIdentityId = $name === 'classAces' ? null : $ace->getAcl()->getId(); - - $this->connection->executeQuery($this->getInsertAccessControlEntrySql($classId, $objectIdentityId, null, $i, $sid, $ace->getStrategy(), $ace->getMask(), $ace->isGranting(), $ace->isAuditSuccess(), $ace->isAuditFailure())); - $aceId = $this->connection->executeQuery($this->getSelectAccessControlEntryIdSql($classId, $objectIdentityId, null, $i))->fetchColumn(); - $this->loadedAces[$aceId] = $ace; - - $aceIdProperty = new \ReflectionProperty($ace, 'id'); - $aceIdProperty->setAccessible(true); - $aceIdProperty->setValue($ace, intval($aceId)); - } else { - $currentIds[$ace->getId()] = true; - } - } - - for ($i=0,$c=count($old); $i<$c; $i++) { - $ace = $old[$i]; - - if (!isset($currentIds[$ace->getId()])) { - $this->connection->executeQuery($this->getDeleteAccessControlEntrySql($ace->getId())); - unset($this->loadedAces[$ace->getId()]); - } - } - } - - /** - * Persists the changes which were made to ACEs to the database. - * - * @param \SplObjectStorage $aces - * @return void - */ - private function updateAces(\SplObjectStorage $aces) - { - foreach ($aces as $ace) { - $propertyChanges = $aces->offsetGet($ace); - $sets = array(); - - if (isset($propertyChanges['mask'])) { - $sets[] = sprintf('mask = %d', $propertyChanges['mask'][1]); - } - if (isset($propertyChanges['strategy'])) { - $sets[] = sprintf('granting_strategy = %s', $this->connection->quote($propertyChanges['strategy'])); - } - if (isset($propertyChanges['aceOrder'])) { - $sets[] = sprintf('ace_order = %d', $propertyChanges['aceOrder'][1]); - } - if (isset($propertyChanges['auditSuccess'])) { - $sets[] = sprintf('audit_success = %s', $this->connection->getDatabasePlatform()->convertBooleans($propertyChanges['auditSuccess'][1])); - } - if (isset($propertyChanges['auditFailure'])) { - $sets[] = sprintf('audit_failure = %s', $this->connection->getDatabasePlatform()->convertBooleans($propertyChanges['auditFailure'][1])); - } - - $this->connection->executeQuery($this->getUpdateAccessControlEntrySql($ace->getId(), $sets)); - } - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/DifferentNamespacesPerFileWithClassAsFirst.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/DifferentNamespacesPerFileWithClassAsFirst.php deleted file mode 100644 index bda2cc2..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/DifferentNamespacesPerFileWithClassAsFirst.php +++ /dev/null @@ -1,15 +0,0 @@ -test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test2() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test3() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test4() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test5() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test6() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test7() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test8() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - - } - - public function test9() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test10() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test11() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test12() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test13() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test14() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test15() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test16() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test17() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - - } - - public function test18() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test19() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test20() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test21() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test22() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test23() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test24() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test25() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test26() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test27() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - - } - - public function test28() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test29() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test30() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test31() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test32() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test33() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test34() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test35() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test36() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test37() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - - } - - public function test38() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test39() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/NoAnnotation.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/NoAnnotation.php deleted file mode 100644 index 1dae104..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/NoAnnotation.php +++ /dev/null @@ -1,5 +0,0 @@ -test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test2() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test3() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test4() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test5() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test6() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test7() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test8() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - - } - - public function test9() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test10() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test11() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test12() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test13() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test14() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test15() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test16() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test17() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - - } - - public function test18() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test19() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test20() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test21() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test22() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test23() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test24() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test25() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test26() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test27() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - - } - - public function test28() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test29() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test30() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test31() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test32() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test33() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test34() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test35() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test36() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test37() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - - } - - public function test38() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } - - public function test39() - { - echo $this->test1; - echo $this->test2; - echo $this->test3; - $array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); - foreach ($array as $key => $value) { - echo $key . ' => ' . $value; - } - - $val = (string)self::TEST1; - $val .= (string)self::TEST2; - $val .= (string)self::TEST3; - $val .= (string)self::TEST4; - $val .= (string)self::TEST5; - $val .= (string)self::TEST6; - $val .= (string)self::TEST7; - $val .= (string)self::TEST8; - $val .= (string)self::TEST9; - - strtolower($val); - - return $val; - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/TestInterface.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/TestInterface.php deleted file mode 100644 index 58c5e6a..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Fixtures/TestInterface.php +++ /dev/null @@ -1,13 +0,0 @@ -getMethod(); - - $time = microtime(true); - for ($i=0,$c=500; $i<$c; $i++) { - $reader->getMethodAnnotations($method); - } - $time = microtime(true) - $time; - - $this->printResults('cached reader (in-memory)', $time, $c); - } - - /** - * @group performance - */ - public function testCachedReadPerformanceWithFileCache() - { - $method = $this->getMethod(); - - // prime cache - $reader = new FileCacheReader(new AnnotationReader(), sys_get_temp_dir()); - $reader->getMethodAnnotations($method); - - $time = microtime(true); - for ($i=0,$c=500; $i<$c; $i++) { - $reader = new FileCacheReader(new AnnotationReader(), sys_get_temp_dir()); - $reader->getMethodAnnotations($method); - clearstatcache(); - } - $time = microtime(true) - $time; - - $this->printResults('cached reader (file)', $time, $c); - } - - /** - * @group performance - */ - public function testReadPerformance() - { - $method = $this->getMethod(); - - $time = microtime(true); - for ($i=0,$c=150; $i<$c; $i++) { - $reader = new AnnotationReader(); - $reader->getMethodAnnotations($method); - } - $time = microtime(true) - $time; - - $this->printResults('reader', $time, $c); - } - - /** - * @group performance - */ - public function testDocParsePerformance() - { - $imports = array( - 'ignorephpdoc' => 'Annotations\Annotation\IgnorePhpDoc', - 'ignoreannotation' => 'Annotations\Annotation\IgnoreAnnotation', - 'route' => 'Doctrine\Tests\Common\Annotations\Fixtures\Annotation\Route', - 'template' => 'Doctrine\Tests\Common\Annotations\Fixtures\Annotation\Template', - '__NAMESPACE__' => 'Doctrine\Tests\Common\Annotations\Fixtures', - ); - $ignored = array( - 'access', 'author', 'copyright', 'deprecated', 'example', 'ignore', - 'internal', 'link', 'see', 'since', 'tutorial', 'version', 'package', - 'subpackage', 'name', 'global', 'param', 'return', 'staticvar', - 'static', 'var', 'throws', 'inheritdoc', - ); - - $method = $this->getMethod(); - $methodComment = $method->getDocComment(); - $classComment = $method->getDeclaringClass()->getDocComment(); - - $time = microtime(true); - for ($i=0,$c=200; $i<$c; $i++) { - $parser = new DocParser(); - $parser->setImports($imports); - $parser->setIgnoredAnnotationNames($ignored); - $parser->setIgnoreNotImportedAnnotations(true); - - $parser->parse($methodComment); - $parser->parse($classComment); - } - $time = microtime(true) - $time; - - $this->printResults('doc-parser', $time, $c); - } - - /** - * @group performance - */ - public function testDocLexerPerformance() - { - $method = $this->getMethod(); - $methodComment = $method->getDocComment(); - $classComment = $method->getDeclaringClass()->getDocComment(); - - $time = microtime(true); - for ($i=0,$c=500; $i<$c; $i++) { - $lexer = new DocLexer(); - $lexer->setInput($methodComment); - $lexer->setInput($classComment); - } - $time = microtime(true) - $time; - - $this->printResults('doc-lexer', $time, $c); - } - - /** - * @group performance - */ - public function testPhpParserPerformanceWithShortCut() - { - $class = new \ReflectionClass('Doctrine\Tests\Common\Annotations\Fixtures\NamespacedSingleClassLOC1000'); - - $time = microtime(true); - for ($i=0,$c=500; $i<$c; $i++) { - $parser = new PhpParser(); - $parser->parseClass($class); - } - $time = microtime(true) - $time; - - $this->printResults('doc-parser-with-short-cut', $time, $c); - } - - /** - * @group performance - */ - public function testPhpParserPerformanceWithoutShortCut() - { - $class = new \ReflectionClass('SingleClassLOC1000'); - - $time = microtime(true); - for ($i=0,$c=500; $i<$c; $i++) { - $parser = new PhpParser(); - $parser->parseClass($class); - } - $time = microtime(true) - $time; - - $this->printResults('doc-parser-without-short-cut', $time, $c); - } - - private function getMethod() - { - return new \ReflectionMethod('Doctrine\Tests\Common\Annotations\Fixtures\Controller', 'helloAction'); - } - - private function printResults($test, $time, $iterations) - { - if (0 == $iterations) { - throw new \InvalidArgumentException('$iterations cannot be zero.'); - } - - $title = $test." results:\n"; - $iterationsText = sprintf("Iterations: %d\n", $iterations); - $totalTime = sprintf("Total Time: %.3f s\n", $time); - $iterationTime = sprintf("Time per iteration: %.3f ms\n", $time/$iterations * 1000); - - $max = max(strlen($title), strlen($iterationTime)) - 1; - - echo "\n".str_repeat('-', $max)."\n"; - echo $title; - echo str_repeat('=', $max)."\n"; - echo $iterationsText; - echo $totalTime; - echo $iterationTime; - echo str_repeat('-', $max)."\n"; - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/PhpParserTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/PhpParserTest.php deleted file mode 100644 index cf81116..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/PhpParserTest.php +++ /dev/null @@ -1,194 +0,0 @@ -assertEquals(array( - 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route', - 'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure', - ), $parser->parseClass($class)); - } - - public function testParseClassWithMultipleImportsInUseStatement() - { - $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\MultipleImportsInUseStatement'); - $parser = new PhpParser(); - - $this->assertEquals(array( - 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route', - 'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure', - ), $parser->parseClass($class)); - } - - public function testParseClassWhenNotUserDefined() - { - $parser = new PhpParser(); - $this->assertEquals(array(), $parser->parseClass(new \ReflectionClass('\stdClass'))); - } - - public function testParseClassWhenClassIsNotNamespaced() - { - $parser = new PhpParser(); - $class = new ReflectionClass('\AnnotationsTestsFixturesNonNamespacedClass'); - - $this->assertEquals(array( - 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route', - 'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template', - ), $parser->parseClass($class)); - } - - public function testParseClassWhenClassIsInterface() - { - $parser = new PhpParser(); - $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\TestInterface'); - - $this->assertEquals(array( - 'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure', - ), $parser->parseClass($class)); - } - - public function testClassWithFullyQualifiedUseStatements() - { - $parser = new PhpParser(); - $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\ClassWithFullyQualifiedUseStatements'); - - $this->assertEquals(array( - 'secure' => '\\' . __NAMESPACE__ . '\Fixtures\Annotation\Secure', - 'route' => '\\' . __NAMESPACE__ . '\Fixtures\Annotation\Route', - 'template' => '\\' . __NAMESPACE__ . '\Fixtures\Annotation\Template', - ), $parser->parseClass($class)); - } - - public function testNamespaceAndClassCommentedOut() - { - $parser = new PhpParser(); - $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\NamespaceAndClassCommentedOut'); - - $this->assertEquals(array( - 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route', - 'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template', - ), $parser->parseClass($class)); - } - - public function testEqualNamespacesPerFileWithClassAsFirst() - { - $parser = new PhpParser(); - $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\EqualNamespacesPerFileWithClassAsFirst'); - - $this->assertEquals(array( - 'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure', - 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route', - ), $parser->parseClass($class)); - } - - public function testEqualNamespacesPerFileWithClassAsLast() - { - $parser = new PhpParser(); - $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\EqualNamespacesPerFileWithClassAsLast'); - - $this->assertEquals(array( - 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route', - 'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template', - ), $parser->parseClass($class)); - } - - public function testDifferentNamespacesPerFileWithClassAsFirst() - { - $parser = new PhpParser(); - $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\DifferentNamespacesPerFileWithClassAsFirst'); - - $this->assertEquals(array( - 'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure', - ), $parser->parseClass($class)); - } - - public function testDifferentNamespacesPerFileWithClassAsLast() - { - $parser = new PhpParser(); - $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\DifferentNamespacesPerFileWithClassAsLast'); - - $this->assertEquals(array( - 'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template', - ), $parser->parseClass($class)); - } - - public function testGlobalNamespacesPerFileWithClassAsFirst() - { - $parser = new PhpParser(); - $class = new \ReflectionClass('\GlobalNamespacesPerFileWithClassAsFirst'); - - $this->assertEquals(array( - 'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure', - 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route', - ), $parser->parseClass($class)); - } - - public function testGlobalNamespacesPerFileWithClassAsLast() - { - $parser = new PhpParser(); - $class = new ReflectionClass('\GlobalNamespacesPerFileWithClassAsLast'); - - $this->assertEquals(array( - 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route', - 'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template', - ), $parser->parseClass($class)); - } - - public function testNamespaceWithClosureDeclaration() - { - $parser = new PhpParser(); - $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\NamespaceWithClosureDeclaration'); - - $this->assertEquals(array( - 'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure', - 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route', - 'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template', - ), $parser->parseClass($class)); - } - - public function testIfPointerResetsOnMultipleParsingTries() - { - $parser = new PhpParser(); - $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\NamespaceWithClosureDeclaration'); - - $this->assertEquals(array( - 'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure', - 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route', - 'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template', - ), $parser->parseClass($class)); - - $this->assertEquals(array( - 'secure' => __NAMESPACE__ . '\Fixtures\Annotation\Secure', - 'route' => __NAMESPACE__ . '\Fixtures\Annotation\Route', - 'template' => __NAMESPACE__ . '\Fixtures\Annotation\Template', - ), $parser->parseClass($class)); - } - - /** - * @group DCOM-97 - * @group regression - */ - public function testClassWithClosure() - { - $parser = new PhpParser(); - $class = new ReflectionClass(__NAMESPACE__ . '\Fixtures\ClassWithClosure'); - - $this->assertEquals(array( - 'annotationtargetall' => __NAMESPACE__ . '\Fixtures\AnnotationTargetAll', - 'annotationtargetannotation' => __NAMESPACE__ . '\Fixtures\AnnotationTargetAnnotation', - ), $parser->parseClass($class)); - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/SimpleAnnotationReaderTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/SimpleAnnotationReaderTest.php deleted file mode 100644 index 376539f..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/SimpleAnnotationReaderTest.php +++ /dev/null @@ -1,97 +0,0 @@ -getReader(); - $class = new \ReflectionClass('Doctrine\Tests\Common\Annotations\Fixtures\ClassDDC1660'); - - $this->assertTrue(class_exists('Doctrine\Tests\Common\Annotations\Fixtures\Annotation\Version')); - $this->assertCount(1, $reader->getClassAnnotations($class)); - $this->assertCount(1, $reader->getMethodAnnotations($class->getMethod('bar'))); - $this->assertCount(1, $reader->getPropertyAnnotations($class->getProperty('foo'))); - } - - protected function getReader() - { - $reader = new SimpleAnnotationReader(); - $reader->addNamespace(__NAMESPACE__); - $reader->addNamespace(__NAMESPACE__ . '\Fixtures'); - $reader->addNamespace(__NAMESPACE__ . '\Fixtures\Annotation'); - - return $reader; - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Ticket/DCOM55Test.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Ticket/DCOM55Test.php deleted file mode 100644 index a7b9e2f..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Ticket/DCOM55Test.php +++ /dev/null @@ -1,65 +0,0 @@ -getClassAnnotations($class); - } - - public function testAnnotation() - { - $class = new \ReflectionClass(__NAMESPACE__ . '\\DCOM55Consumer'); - $reader = new \Doctrine\Common\Annotations\AnnotationReader(); - $annots = $reader->getClassAnnotations($class); - - $this->assertEquals(1, count($annots)); - $this->assertInstanceOf(__NAMESPACE__.'\\DCOM55Annotation', $annots[0]); - } - - public function testParseAnnotationDocblocks() - { - $class = new \ReflectionClass(__NAMESPACE__ . '\\DCOM55Annotation'); - $reader = new \Doctrine\Common\Annotations\AnnotationReader(); - $annots = $reader->getClassAnnotations($class); - - $this->assertEquals(0, count($annots)); - } -} - -/** - * @Controller - */ -class Dummy -{ - -} - -/** - * @Annotation - */ -class DCOM55Annotation -{ - -} - -/** - * @DCOM55Annotation - */ -class DCOM55Consumer -{ - -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Ticket/DCOM58Entity.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Ticket/DCOM58Entity.php deleted file mode 100644 index 708bcc9..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/Ticket/DCOM58Entity.php +++ /dev/null @@ -1,8 +0,0 @@ -getClassAnnotations(new \ReflectionClass(__NAMESPACE__."\MappedClass")); - - foreach ($result as $annot) { - $classAnnotations[get_class($annot)] = $annot; - } - - $this->assertTrue(!isset($classAnnotations['']), 'Class "xxx" is not a valid entity or mapped super class.'); - } - - public function testIssueGlobalNamespace() - { - $docblock = "@Entity"; - $parser = new \Doctrine\Common\Annotations\DocParser(); - $parser->setImports(array( - "__NAMESPACE__" =>"Doctrine\Tests\Common\Annotations\Ticket\Doctrine\ORM\Mapping" - )); - - $annots = $parser->parse($docblock); - - $this->assertEquals(1, count($annots)); - $this->assertInstanceOf("Doctrine\Tests\Common\Annotations\Ticket\Doctrine\ORM\Mapping\Entity", $annots[0]); - } - - public function testIssueNamespaces() - { - $docblock = "@Entity"; - $parser = new \Doctrine\Common\Annotations\DocParser(); - $parser->addNamespace("Doctrine\Tests\Common\Annotations\Ticket\Doctrine\ORM"); - - $annots = $parser->parse($docblock); - - $this->assertEquals(1, count($annots)); - $this->assertInstanceOf("Doctrine\Tests\Common\Annotations\Ticket\Doctrine\ORM\Entity", $annots[0]); - } - - public function testIssueMultipleNamespaces() - { - $docblock = "@Entity"; - $parser = new \Doctrine\Common\Annotations\DocParser(); - $parser->addNamespace("Doctrine\Tests\Common\Annotations\Ticket\Doctrine\ORM\Mapping"); - $parser->addNamespace("Doctrine\Tests\Common\Annotations\Ticket\Doctrine\ORM"); - - $annots = $parser->parse($docblock); - - $this->assertEquals(1, count($annots)); - $this->assertInstanceOf("Doctrine\Tests\Common\Annotations\Ticket\Doctrine\ORM\Mapping\Entity", $annots[0]); - } - - public function testIssueWithNamespacesOrImports() - { - $docblock = "@Entity"; - $parser = new \Doctrine\Common\Annotations\DocParser(); - $annots = $parser->parse($docblock); - - $this->assertEquals(1, count($annots)); - $this->assertInstanceOf("Entity", $annots[0]); - $this->assertEquals(1, count($annots)); - } - - - public function testIssueSimpleAnnotationReader() - { - $reader = new \Doctrine\Common\Annotations\SimpleAnnotationReader(); - $reader->addNamespace('Doctrine\Tests\Common\Annotations\Ticket\Doctrine\ORM\Mapping'); - $annots = $reader->getClassAnnotations(new \ReflectionClass(__NAMESPACE__."\MappedClass")); - - $this->assertEquals(1, count($annots)); - $this->assertInstanceOf("Doctrine\Tests\Common\Annotations\Ticket\Doctrine\ORM\Mapping\Entity", $annots[0]); - } - -} - -/** - * @Entity - */ -class MappedClass -{ - -} - - -namespace Doctrine\Tests\Common\Annotations\Ticket\Doctrine\ORM\Mapping; -/** -* @Annotation -*/ -class Entity -{ - -} - -namespace Doctrine\Tests\Common\Annotations\Ticket\Doctrine\ORM; -/** -* @Annotation -*/ -class Entity -{ - -} diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/TopLevelAnnotation.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/TopLevelAnnotation.php deleted file mode 100644 index ff3ca37..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Annotations/TopLevelAnnotation.php +++ /dev/null @@ -1,8 +0,0 @@ -markTestSkipped('The ' . __CLASS__ .' requires the use of APC'); - } - } - - protected function _getCacheDriver() - { - return new ApcCache(); - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/ArrayCacheTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/ArrayCacheTest.php deleted file mode 100644 index 6cad891..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/ArrayCacheTest.php +++ /dev/null @@ -1,21 +0,0 @@ -_getCacheDriver(); - $stats = $cache->getStats(); - - $this->assertNull($stats); - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/CacheTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/CacheTest.php deleted file mode 100644 index 1bbc165..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/CacheTest.php +++ /dev/null @@ -1,91 +0,0 @@ -_getCacheDriver(); - - // Test save - $cache->save('test_key', 'testing this out'); - - // Test contains to test that save() worked - $this->assertTrue($cache->contains('test_key')); - - // Test fetch - $this->assertEquals('testing this out', $cache->fetch('test_key')); - - // Test delete - $cache->save('test_key2', 'test2'); - $cache->delete('test_key2'); - $this->assertFalse($cache->contains('test_key2')); - } - - public function testObjects() - { - $cache = $this->_getCacheDriver(); - - // Fetch/save test with objects (Is cache driver serializes/unserializes objects correctly ?) - $cache->save('test_object_key', new \ArrayObject()); - $this->assertTrue($cache->fetch('test_object_key') instanceof \ArrayObject); - } - - public function testDeleteAll() - { - $cache = $this->_getCacheDriver(); - $cache->save('test_key1', '1'); - $cache->save('test_key2', '2'); - $cache->deleteAll(); - - $this->assertFalse($cache->contains('test_key1')); - $this->assertFalse($cache->contains('test_key2')); - } - - public function testFlushAll() - { - $cache = $this->_getCacheDriver(); - $cache->save('test_key1', '1'); - $cache->save('test_key2', '2'); - $cache->flushAll(); - - $this->assertFalse($cache->contains('test_key1')); - $this->assertFalse($cache->contains('test_key2')); - } - - public function testNamespace() - { - $cache = $this->_getCacheDriver(); - $cache->setNamespace('test_'); - $cache->save('key1', 'test'); - - $this->assertTrue($cache->contains('key1')); - - $cache->setNamespace('test2_'); - - $this->assertFalse($cache->contains('key1')); - } - - /** - * @group DCOM-43 - */ - public function testGetStats() - { - $cache = $this->_getCacheDriver(); - $stats = $cache->getStats(); - - $this->assertArrayHasKey(Cache::STATS_HITS, $stats); - $this->assertArrayHasKey(Cache::STATS_MISSES, $stats); - $this->assertArrayHasKey(Cache::STATS_UPTIME, $stats); - $this->assertArrayHasKey(Cache::STATS_MEMORY_USAGE, $stats); - $this->assertArrayHasKey(Cache::STATS_MEMORY_AVAILIABLE, $stats); - } - - /** - * @return \Doctrine\Common\Cache\CacheProvider - */ - abstract protected function _getCacheDriver(); -} diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/FilesystemCacheTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/FilesystemCacheTest.php deleted file mode 100644 index f782e3c..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/FilesystemCacheTest.php +++ /dev/null @@ -1,97 +0,0 @@ -assertFalse(is_dir($dir)); - - $this->driver = new FilesystemCache($dir); - $this->assertTrue(is_dir($dir)); - - return $this->driver; - } - - public function testLifetime() - { - $cache = $this->_getCacheDriver(); - - // Test save - $cache->save('test_key', 'testing this out', 10); - - // Test contains to test that save() worked - $this->assertTrue($cache->contains('test_key')); - - // Test fetch - $this->assertEquals('testing this out', $cache->fetch('test_key')); - - // access private methods - $getFilename = new \ReflectionMethod($cache, 'getFilename'); - $getNamespacedId = new \ReflectionMethod($cache, 'getNamespacedId'); - - $getFilename->setAccessible(true); - $getNamespacedId->setAccessible(true); - - $id = $getNamespacedId->invoke($cache, 'test_key'); - $filename = $getFilename->invoke($cache, $id); - - $data = ''; - $lifetime = 0; - $resource = fopen($filename, "r"); - - if (false !== ($line = fgets($resource))) { - $lifetime = (integer) $line; - } - - while (false !== ($line = fgets($resource))) { - $data .= $line; - } - - $this->assertNotEquals(0, $lifetime, "previous lifetime could not be loaded"); - - // update lifetime - $lifetime = $lifetime - 20; - file_put_contents($filename, $lifetime . PHP_EOL . $data); - - // test expired data - $this->assertFalse($cache->contains('test_key')); - $this->assertFalse($cache->fetch('test_key')); - } - - public function testGetStats() - { - $cache = $this->_getCacheDriver(); - $stats = $cache->getStats(); - - $this->assertNull($stats); - } - - public function tearDown() - { - $dir = $this->driver->getDirectory(); - $ext = $this->driver->getExtension(); - $iterator = new \RecursiveDirectoryIterator($dir); - - foreach (new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::CHILD_FIRST) as $file) { - if ($file->isFile()) { - @unlink($file->getRealPath()); - } else { - @rmdir($file->getRealPath()); - } - } - } - -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/MemcacheCacheTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/MemcacheCacheTest.php deleted file mode 100644 index 36c180c..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/MemcacheCacheTest.php +++ /dev/null @@ -1,45 +0,0 @@ -_memcache = new \Memcache; - $ok = @$this->_memcache->connect('localhost', 11211); - if (!$ok) { - $this->markTestSkipped('The ' . __CLASS__ .' requires the use of memcache'); - } - } else { - $this->markTestSkipped('The ' . __CLASS__ .' requires the use of memcache'); - } - } - - public function testNoExpire() { - $cache = $this->_getCacheDriver(); - $cache->save('noexpire', 'value', 0); - sleep(1); - $this->assertTrue($cache->contains('noexpire'), 'Memcache provider should support no-expire'); - } - - public function testLongLifetime() - { - $cache = $this->_getCacheDriver(); - $cache->save('key', 'value', 30 * 24 * 3600 + 1); - $this->assertTrue($cache->contains('key'), 'Memcache provider should support TTL > 30 days'); - } - - protected function _getCacheDriver() - { - $driver = new MemcacheCache(); - $driver->setMemcache($this->_memcache); - return $driver; - } - -} diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/MemcachedCacheTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/MemcachedCacheTest.php deleted file mode 100644 index ecbe5a6..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/MemcachedCacheTest.php +++ /dev/null @@ -1,48 +0,0 @@ -memcached = new \Memcached(); - $this->memcached->setOption(\Memcached::OPT_COMPRESSION, false); - $this->memcached->addServer('127.0.0.1', 11211); - - $fh = @fsockopen('127.0.0.1', 11211); - if (!$fh) { - $this->markTestSkipped('The ' . __CLASS__ .' requires the use of memcache'); - } - } else { - $this->markTestSkipped('The ' . __CLASS__ .' requires the use of memcache'); - } - } - - public function testNoExpire() { - $cache = $this->_getCacheDriver(); - $cache->save('noexpire', 'value', 0); - sleep(1); - $this->assertTrue($cache->contains('noexpire'), 'Memcache provider should support no-expire'); - } - - public function testLongLifetime() - { - $cache = $this->_getCacheDriver(); - $cache->save('key', 'value', 30 * 24 * 3600 + 1); - - $this->assertTrue($cache->contains('key'), 'Memcached provider should support TTL > 30 days'); - } - - protected function _getCacheDriver() - { - $driver = new MemcachedCache(); - $driver->setMemcached($this->memcached); - return $driver; - } -} diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/PhpFileCacheTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/PhpFileCacheTest.php deleted file mode 100644 index 5085f46..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/PhpFileCacheTest.php +++ /dev/null @@ -1,149 +0,0 @@ -assertFalse(is_dir($dir)); - - $this->driver = new PhpFileCache($dir); - $this->assertTrue(is_dir($dir)); - - return $this->driver; - } - - public function testObjects() - { - $this->markTestSkipped('PhpFileCache does not support saving objects that dont implement __set_state()'); - } - - public function testLifetime() - { - $cache = $this->_getCacheDriver(); - - // Test save - $cache->save('test_key', 'testing this out', 10); - - // Test contains to test that save() worked - $this->assertTrue($cache->contains('test_key')); - - // Test fetch - $this->assertEquals('testing this out', $cache->fetch('test_key')); - - // access private methods - $getFilename = new \ReflectionMethod($cache, 'getFilename'); - $getNamespacedId = new \ReflectionMethod($cache, 'getNamespacedId'); - - $getFilename->setAccessible(true); - $getNamespacedId->setAccessible(true); - - $id = $getNamespacedId->invoke($cache, 'test_key'); - $path = $getFilename->invoke($cache, $id); - $value = include $path; - - // update lifetime - $value['lifetime'] = $value['lifetime'] - 20; - file_put_contents($path, 'assertFalse($cache->contains('test_key')); - $this->assertFalse($cache->fetch('test_key')); - } - - public function testImplementsSetState() - { - $cache = $this->_getCacheDriver(); - - // Test save - $cache->save('test_set_state', new SetStateClass(array(1,2,3))); - - //Test __set_state call - $this->assertCount(0, SetStateClass::$values); - - // Test fetch - $value = $cache->fetch('test_set_state'); - $this->assertInstanceOf('Doctrine\Tests\Common\Cache\SetStateClass', $value); - $this->assertEquals(array(1,2,3), $value->getValue()); - - //Test __set_state call - $this->assertCount(1, SetStateClass::$values); - - // Test contains - $this->assertTrue($cache->contains('test_set_state')); - } - - public function testNotImplementsSetState() - { - $cache = $this->_getCacheDriver(); - - $this->setExpectedException('InvalidArgumentException'); - $cache->save('test_not_set_state', new NotSetStateClass(array(1,2,3))); - } - - public function testGetStats() - { - $cache = $this->_getCacheDriver(); - $stats = $cache->getStats(); - - $this->assertNull($stats); - } - - public function tearDown() - { - if (!$this->driver) { - return; - } - - $dir = $this->driver->getDirectory(); - $ext = $this->driver->getExtension(); - $iterator = new \RecursiveDirectoryIterator($dir); - - foreach (new \RecursiveIteratorIterator($iterator, \RecursiveIteratorIterator::CHILD_FIRST) as $file) { - if ($file->isFile()) { - @unlink($file->getRealPath()); - } else { - @rmdir($file->getRealPath()); - } - } - } - -} - -class NotSetStateClass -{ - private $value; - - public function __construct($value) - { - $this->value = $value; - } - - public function getValue() - { - return $this->value; - } -} - -class SetStateClass extends NotSetStateClass -{ - public static $values = array(); - - public static function __set_state($data) - { - self::$values = $data; - return new self($data['value']); - } -} diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/RedisCacheTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/RedisCacheTest.php deleted file mode 100644 index 45bbc75..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/RedisCacheTest.php +++ /dev/null @@ -1,30 +0,0 @@ -_redis = new \Redis(); - $ok = @$this->_redis->connect('127.0.0.1'); - if (!$ok) { - $this->markTestSkipped('The ' . __CLASS__ .' requires the use of redis'); - } - } else { - $this->markTestSkipped('The ' . __CLASS__ .' requires the use of redis'); - } - } - - protected function _getCacheDriver() - { - $driver = new RedisCache(); - $driver->setRedis($this->_redis); - return $driver; - } -} diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/WinCacheCacheTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/WinCacheCacheTest.php deleted file mode 100644 index cb363df..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/WinCacheCacheTest.php +++ /dev/null @@ -1,20 +0,0 @@ -markTestSkipped('The ' . __CLASS__ .' requires the use of Wincache'); - } - } - - protected function _getCacheDriver() - { - return new WincacheCache(); - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/XcacheCacheTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/XcacheCacheTest.php deleted file mode 100644 index 6259848..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/XcacheCacheTest.php +++ /dev/null @@ -1,20 +0,0 @@ -markTestSkipped('The ' . __CLASS__ .' requires the use of xcache'); - } - } - - protected function _getCacheDriver() - { - return new XcacheCache(); - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/ZendDataCacheTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/ZendDataCacheTest.php deleted file mode 100644 index cd66e15..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Cache/ZendDataCacheTest.php +++ /dev/null @@ -1,28 +0,0 @@ -markTestSkipped('The ' . __CLASS__ .' requires the use of Zend Data Cache which only works in apache2handler SAPI'); - } - } - - public function testGetStats() - { - $cache = $this->_getCacheDriver(); - $stats = $cache->getStats(); - - $this->assertNull($stats); - } - - protected function _getCacheDriver() - { - return new ZendDataCache(); - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/ClassLoaderTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/ClassLoaderTest.php deleted file mode 100644 index 567cf91..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/ClassLoaderTest.php +++ /dev/null @@ -1,45 +0,0 @@ -setIncludePath(__DIR__); - $classLoader->setFileExtension('.class.php'); - $classLoader->setNamespaceSeparator('_'); - - $this->assertTrue($classLoader->canLoadClass('ClassLoaderTest_ClassA')); - $this->assertTrue($classLoader->canLoadClass('ClassLoaderTest_ClassB')); - $this->assertTrue($classLoader->canLoadClass('ClassLoaderTest_ClassC')); - $this->assertFalse($classLoader->canLoadClass('OtherClass')); - $this->assertEquals($classLoader->loadClass('ClassLoaderTest_ClassA'), true); - $this->assertEquals($classLoader->loadClass('ClassLoaderTest_ClassB'), true); - $this->assertEquals($classLoader->loadClass('ClassLoaderTest_ClassC'), true); - } - - public function testClassExists() - { - $this->assertFalse(ClassLoader::classExists('ClassLoaderTest\ClassD')); - $badLoader = function($className) { - require __DIR__ . '/ClassLoaderTest/ClassD.php'; - return true; - }; - spl_autoload_register($badLoader); - $this->assertTrue(ClassLoader::classExists('ClassLoaderTest\ClassD')); - spl_autoload_unregister($badLoader); - } - - public function testGetClassLoader() - { - $cl = new ClassLoader('ClassLoaderTest', __DIR__); - $cl->register(); - $this->assertTrue(ClassLoader::getClassLoader('ClassLoaderTest\ClassD') instanceof \Doctrine\Common\ClassLoader); - $this->assertNull(ClassLoader::getClassLoader('This\Class\Does\Not\Exist')); - $cl->unregister(); - } -} diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/ClassLoaderTest/ClassA.class.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/ClassLoaderTest/ClassA.class.php deleted file mode 100644 index 8554654..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/ClassLoaderTest/ClassA.class.php +++ /dev/null @@ -1,6 +0,0 @@ -. - */ - -namespace Doctrine\Tests\Common\Collections; - -use Doctrine\Common\Collections\Expr\ClosureExpressionVisitor; -use Doctrine\Common\Collections\ExpressionBuilder; - -/** - * @group DDC-1637 - */ -class ClosureExpressionVisitorTest extends \PHPUnit_Framework_TestCase -{ - private $visitor; - private $builder; - - public function setUp() - { - $this->visitor = new ClosureExpressionVisitor(); - $this->builder = new ExpressionBuilder(); - } - - public function testWalkEqualsComparison() - { - $closure = $this->visitor->walkComparison($this->builder->eq("foo", 1)); - - $this->assertTrue($closure(new TestObject(1))); - $this->assertFalse($closure(new TestObject(2))); - } - - public function testWalkNotEqualsComparison() - { - $closure = $this->visitor->walkComparison($this->builder->neq("foo", 1)); - - $this->assertFalse($closure(new TestObject(1))); - $this->assertTrue($closure(new TestObject(2))); - } - - public function testWalkLessThanComparison() - { - $closure = $this->visitor->walkComparison($this->builder->lt("foo", 1)); - - $this->assertFalse($closure(new TestObject(1))); - $this->assertTrue($closure(new TestObject(0))); - } - - public function testWalkLessThanEqualsComparison() - { - $closure = $this->visitor->walkComparison($this->builder->lte("foo", 1)); - - $this->assertFalse($closure(new TestObject(2))); - $this->assertTrue($closure(new TestObject(1))); - $this->assertTrue($closure(new TestObject(0))); - } - - public function testWalkGreaterThanEqualsComparison() - { - $closure = $this->visitor->walkComparison($this->builder->gte("foo", 1)); - - $this->assertTrue($closure(new TestObject(2))); - $this->assertTrue($closure(new TestObject(1))); - $this->assertFalse($closure(new TestObject(0))); - } - - public function testWalkGreaterThanComparison() - { - $closure = $this->visitor->walkComparison($this->builder->gt("foo", 1)); - - $this->assertTrue($closure(new TestObject(2))); - $this->assertFalse($closure(new TestObject(1))); - $this->assertFalse($closure(new TestObject(0))); - } - - public function testWalkInComparison() - { - $closure = $this->visitor->walkComparison($this->builder->in("foo", array(1, 2, 3))); - - $this->assertTrue($closure(new TestObject(2))); - $this->assertTrue($closure(new TestObject(1))); - $this->assertFalse($closure(new TestObject(0))); - } - - public function testWalkNotInComparison() - { - $closure = $this->visitor->walkComparison($this->builder->notIn("foo", array(1, 2, 3))); - - $this->assertFalse($closure(new TestObject(1))); - $this->assertFalse($closure(new TestObject(2))); - $this->assertTrue($closure(new TestObject(0))); - $this->assertTrue($closure(new TestObject(4))); - } - - public function testWalkAndCompositeExpression() - { - $closure = $this->visitor->walkCompositeExpression( - $this->builder->andX( - $this->builder->eq("foo", 1), - $this->builder->eq("bar", 1) - ) - ); - - $this->assertTrue($closure(new TestObject(1, 1))); - $this->assertFalse($closure(new TestObject(1, 0))); - $this->assertFalse($closure(new TestObject(0, 1))); - $this->assertFalse($closure(new TestObject(0, 0))); - } - - public function testWalkOrCompositeExpression() - { - $closure = $this->visitor->walkCompositeExpression( - $this->builder->orX( - $this->builder->eq("foo", 1), - $this->builder->eq("bar", 1) - ) - ); - - $this->assertTrue($closure(new TestObject(1, 1))); - $this->assertTrue($closure(new TestObject(1, 0))); - $this->assertTrue($closure(new TestObject(0, 1))); - $this->assertFalse($closure(new TestObject(0, 0))); - } - - public function testSortByFieldAscending() - { - $objects = array(new TestObject("b"), new TestObject("a"), new TestObject("c")); - $sort = ClosureExpressionVisitor::sortByField("foo"); - - usort($objects, $sort); - - $this->assertEquals("a", $objects[0]->getFoo()); - $this->assertEquals("b", $objects[1]->getFoo()); - $this->assertEquals("c", $objects[2]->getFoo()); - } - - public function testSortByFieldDescending() - { - $objects = array(new TestObject("b"), new TestObject("a"), new TestObject("c")); - $sort = ClosureExpressionVisitor::sortByField("foo", -1); - - usort($objects, $sort); - - $this->assertEquals("c", $objects[0]->getFoo()); - $this->assertEquals("b", $objects[1]->getFoo()); - $this->assertEquals("a", $objects[2]->getFoo()); - } - - public function testSortDelegate() - { - $objects = array(new TestObject("a", "c"), new TestObject("a", "b"), new TestObject("a", "a")); - $sort = ClosureExpressionVisitor::sortByField("bar", 1); - $sort = ClosureExpressionVisitor::sortByField("foo", 1, $sort); - - usort($objects, $sort); - - $this->assertEquals("a", $objects[0]->getBar()); - $this->assertEquals("b", $objects[1]->getBar()); - $this->assertEquals("c", $objects[2]->getBar()); - } -} - -class TestObject -{ - private $foo; - private $bar; - - public function __construct($foo = null, $bar = null) - { - $this->foo = $foo; - $this->bar = $bar; - } - - public function getFoo() - { - return $this->foo; - } - - public function getBar() - { - return $this->bar; - } -} - diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Collections/CollectionTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Collections/CollectionTest.php deleted file mode 100644 index 280efa3..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Collections/CollectionTest.php +++ /dev/null @@ -1,251 +0,0 @@ -_coll = new \Doctrine\Common\Collections\ArrayCollection; - } - - public function testIssetAndUnset() - { - $this->assertFalse(isset($this->_coll[0])); - $this->_coll->add('testing'); - $this->assertTrue(isset($this->_coll[0])); - unset($this->_coll[0]); - $this->assertFalse(isset($this->_coll[0])); - } - - public function testToString() - { - $this->_coll->add('testing'); - $this->assertTrue(is_string((string) $this->_coll)); - } - - public function testRemovingNonExistentEntryReturnsNull() - { - $this->assertEquals(null, $this->_coll->remove('testing_does_not_exist')); - } - - public function testExists() - { - $this->_coll->add("one"); - $this->_coll->add("two"); - $exists = $this->_coll->exists(function($k, $e) { return $e == "one"; }); - $this->assertTrue($exists); - $exists = $this->_coll->exists(function($k, $e) { return $e == "other"; }); - $this->assertFalse($exists); - } - - public function testMap() - { - $this->_coll->add(1); - $this->_coll->add(2); - $res = $this->_coll->map(function($e) { return $e * 2; }); - $this->assertEquals(array(2, 4), $res->toArray()); - } - - public function testFilter() - { - $this->_coll->add(1); - $this->_coll->add("foo"); - $this->_coll->add(3); - $res = $this->_coll->filter(function($e) { return is_numeric($e); }); - $this->assertEquals(array(0 => 1, 2 => 3), $res->toArray()); - } - - public function testFirstAndLast() - { - $this->_coll->add('one'); - $this->_coll->add('two'); - - $this->assertEquals($this->_coll->first(), 'one'); - $this->assertEquals($this->_coll->last(), 'two'); - } - - public function testArrayAccess() - { - $this->_coll[] = 'one'; - $this->_coll[] = 'two'; - - $this->assertEquals($this->_coll[0], 'one'); - $this->assertEquals($this->_coll[1], 'two'); - - unset($this->_coll[0]); - $this->assertEquals($this->_coll->count(), 1); - } - - public function testContainsKey() - { - $this->_coll[5] = 'five'; - $this->assertTrue($this->_coll->containsKey(5)); - } - - public function testContains() - { - $this->_coll[0] = 'test'; - $this->assertTrue($this->_coll->contains('test')); - } - - public function testSearch() - { - $this->_coll[0] = 'test'; - $this->assertEquals(0, $this->_coll->indexOf('test')); - } - - public function testGet() - { - $this->_coll[0] = 'test'; - $this->assertEquals('test', $this->_coll->get(0)); - } - - public function testGetKeys() - { - $this->_coll[] = 'one'; - $this->_coll[] = 'two'; - $this->assertEquals(array(0, 1), $this->_coll->getKeys()); - } - - public function testGetValues() - { - $this->_coll[] = 'one'; - $this->_coll[] = 'two'; - $this->assertEquals(array('one', 'two'), $this->_coll->getValues()); - } - - public function testCount() - { - $this->_coll[] = 'one'; - $this->_coll[] = 'two'; - $this->assertEquals($this->_coll->count(), 2); - $this->assertEquals(count($this->_coll), 2); - } - - public function testForAll() - { - $this->_coll[] = 'one'; - $this->_coll[] = 'two'; - $this->assertEquals($this->_coll->forAll(function($k, $e) { return is_string($e); }), true); - $this->assertEquals($this->_coll->forAll(function($k, $e) { return is_array($e); }), false); - } - - public function testPartition() - { - $this->_coll[] = true; - $this->_coll[] = false; - $partition = $this->_coll->partition(function($k, $e) { return $e == true; }); - $this->assertEquals($partition[0][0], true); - $this->assertEquals($partition[1][0], false); - } - - public function testClear() - { - $this->_coll[] = 'one'; - $this->_coll[] = 'two'; - $this->_coll->clear(); - $this->assertEquals($this->_coll->isEmpty(), true); - } - - public function testRemove() - { - $this->_coll[] = 'one'; - $this->_coll[] = 'two'; - $el = $this->_coll->remove(0); - - $this->assertEquals('one', $el); - $this->assertEquals($this->_coll->contains('one'), false); - $this->assertNull($this->_coll->remove(0)); - } - - public function testRemoveElement() - { - $this->_coll[] = 'one'; - $this->_coll[] = 'two'; - - $this->assertTrue($this->_coll->removeElement('two')); - $this->assertFalse($this->_coll->contains('two')); - $this->assertFalse($this->_coll->removeElement('two')); - } - - public function testSlice() - { - $this->_coll[] = 'one'; - $this->_coll[] = 'two'; - $this->_coll[] = 'three'; - - $slice = $this->_coll->slice(0, 1); - $this->assertInternalType('array', $slice); - $this->assertEquals(array('one'), $slice); - - $slice = $this->_coll->slice(1); - $this->assertEquals(array(1 => 'two', 2 => 'three'), $slice); - - $slice = $this->_coll->slice(1, 1); - $this->assertEquals(array(1 => 'two'), $slice); - } - - public function fillMatchingFixture() - { - $std1 = new \stdClass(); - $std1->foo = "bar"; - $this->_coll[] = $std1; - - $std2 = new \stdClass(); - $std2->foo = "baz"; - $this->_coll[] = $std2; - } - - /** - * @group DDC-1637 - */ - public function testMatching() - { - $this->fillMatchingFixture(); - - $col = $this->_coll->matching(new Criteria(Criteria::expr()->eq("foo", "bar"))); - $this->assertInstanceOf('Doctrine\Common\Collections\Collection', $col); - $this->assertNotSame($col, $this->_coll); - $this->assertEquals(1, count($col)); - } - - /** - * @group DDC-1637 - */ - public function testMatchingOrdering() - { - $this->fillMatchingFixture(); - - $col = $this->_coll->matching(new Criteria(null, array('foo' => 'DESC'))); - - $this->assertInstanceOf('Doctrine\Common\Collections\Collection', $col); - $this->assertNotSame($col, $this->_coll); - $this->assertEquals(2, count($col)); - $this->assertEquals('baz', $col[0]->foo); - $this->assertEquals('bar', $col[1]->foo); - } - - /** - * @group DDC-1637 - */ - public function testMatchingSlice() - { - $this->fillMatchingFixture(); - - $col = $this->_coll->matching(new Criteria(null, null, 1, 1)); - - $this->assertInstanceOf('Doctrine\Common\Collections\Collection', $col); - $this->assertNotSame($col, $this->_coll); - $this->assertEquals(1, count($col)); - $this->assertEquals('baz', $col[0]->foo); - } -} diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Collections/CriteriaTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Collections/CriteriaTest.php deleted file mode 100644 index 03fb6ca..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Collections/CriteriaTest.php +++ /dev/null @@ -1,82 +0,0 @@ -assertInstanceOf("Doctrine\Common\Collections\Criteria", $criteria); - } - - public function testConstructor() - { - $expr = new Comparison("field", "=", "value"); - $criteria = new Criteria($expr, array("foo" => "ASC"), 10, 20); - - $this->assertSame($expr, $criteria->getWhereExpression()); - $this->assertEquals(array("foo" => "ASC"), $criteria->getOrderings()); - $this->assertEquals(10, $criteria->getFirstResult()); - $this->assertEquals(20, $criteria->getMaxResults()); - } - - public function testWhere() - { - $expr = new Comparison("field", "=", "value"); - $criteria = new Criteria(); - - $criteria->where($expr); - - $this->assertSame($expr, $criteria->getWhereExpression()); - } - - public function testAndWhere() - { - $expr = new Comparison("field", "=", "value"); - $criteria = new Criteria(); - - $criteria->where($expr); - $expr = $criteria->getWhereExpression(); - $criteria->andWhere($expr); - - $where = $criteria->getWhereExpression(); - $this->assertInstanceOf('Doctrine\Common\Collections\Expr\CompositeExpression', $where); - - $this->assertEquals(CompositeExpression::TYPE_AND, $where->getType()); - $this->assertSame(array($expr, $expr), $where->getExpressionList()); - } - - public function testOrWhere() - { - $expr = new Comparison("field", "=", "value"); - $criteria = new Criteria(); - - $criteria->where($expr); - $expr = $criteria->getWhereExpression(); - $criteria->orWhere($expr); - - $where = $criteria->getWhereExpression(); - $this->assertInstanceOf('Doctrine\Common\Collections\Expr\CompositeExpression', $where); - - $this->assertEquals(CompositeExpression::TYPE_OR, $where->getType()); - $this->assertSame(array($expr, $expr), $where->getExpressionList()); - } - - public function testOrderings() - { - $criteria = Criteria::create() - ->orderBy(array("foo" => "ASC")); - - $this->assertEquals(array("foo" => "ASC"), $criteria->getOrderings()); - } - - public function testExpr() - { - $this->assertInstanceOf('Doctrine\Common\Collections\ExpressionBuilder', Criteria::expr()); - } -} diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Collections/ExpressionBuilderTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Collections/ExpressionBuilderTest.php deleted file mode 100644 index 68896b3..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Collections/ExpressionBuilderTest.php +++ /dev/null @@ -1,114 +0,0 @@ -builder = new ExpressionBuilder(); - } - - public function testAndX() - { - $expr = $this->builder->andX($this->builder->eq("a", "b")); - - $this->assertInstanceOf("Doctrine\Common\Collections\Expr\CompositeExpression", $expr); - $this->assertEquals(CompositeExpression::TYPE_AND, $expr->getType()); - } - - public function testOrX() - { - $expr = $this->builder->orX($this->builder->eq("a", "b")); - - $this->assertInstanceOf("Doctrine\Common\Collections\Expr\CompositeExpression", $expr); - $this->assertEquals(CompositeExpression::TYPE_OR, $expr->getType()); - } - - public function testInvalidAndXArgument() - { - $this->setExpectedException("RuntimeException"); - $this->builder->andX("foo"); - } - - public function testEq() - { - $expr = $this->builder->eq("a", "b"); - - $this->assertInstanceOf("Doctrine\Common\Collections\Expr\Comparison", $expr); - $this->assertEquals(Comparison::EQ, $expr->getOperator()); - } - - public function testNeq() - { - $expr = $this->builder->neq("a", "b"); - - $this->assertInstanceOf("Doctrine\Common\Collections\Expr\Comparison", $expr); - $this->assertEquals(Comparison::NEQ, $expr->getOperator()); - } - - public function testLt() - { - $expr = $this->builder->lt("a", "b"); - - $this->assertInstanceOf("Doctrine\Common\Collections\Expr\Comparison", $expr); - $this->assertEquals(Comparison::LT, $expr->getOperator()); - } - - public function testGt() - { - $expr = $this->builder->gt("a", "b"); - - $this->assertInstanceOf("Doctrine\Common\Collections\Expr\Comparison", $expr); - $this->assertEquals(Comparison::GT, $expr->getOperator()); - } - - public function testGte() - { - $expr = $this->builder->gte("a", "b"); - - $this->assertInstanceOf("Doctrine\Common\Collections\Expr\Comparison", $expr); - $this->assertEquals(Comparison::GTE, $expr->getOperator()); - } - - public function testLte() - { - $expr = $this->builder->lte("a", "b"); - - $this->assertInstanceOf("Doctrine\Common\Collections\Expr\Comparison", $expr); - $this->assertEquals(Comparison::LTE, $expr->getOperator()); - } - - public function testIn() - { - $expr = $this->builder->in("a", array("b")); - - $this->assertInstanceOf("Doctrine\Common\Collections\Expr\Comparison", $expr); - $this->assertEquals(Comparison::IN, $expr->getOperator()); - } - - public function testNotIn() - { - $expr = $this->builder->notIn("a", array("b")); - - $this->assertInstanceOf("Doctrine\Common\Collections\Expr\Comparison", $expr); - $this->assertEquals(Comparison::NIN, $expr->getOperator()); - } - - public function testIsNull() - { - $expr = $this->builder->isNull("a"); - - $this->assertInstanceOf("Doctrine\Common\Collections\Expr\Comparison", $expr); - $this->assertEquals(Comparison::IS, $expr->getOperator()); - } -} - diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/EventManagerTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/EventManagerTest.php deleted file mode 100644 index 2b11b20..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/EventManagerTest.php +++ /dev/null @@ -1,88 +0,0 @@ -_eventManager = new EventManager; - $this->_preFooInvoked = false; - $this->_postFooInvoked = false; - } - - public function testInitialState() - { - $this->assertEquals(array(), $this->_eventManager->getListeners()); - $this->assertFalse($this->_eventManager->hasListeners(self::preFoo)); - $this->assertFalse($this->_eventManager->hasListeners(self::postFoo)); - } - - public function testAddEventListener() - { - $this->_eventManager->addEventListener(array('preFoo', 'postFoo'), $this); - $this->assertTrue($this->_eventManager->hasListeners(self::preFoo)); - $this->assertTrue($this->_eventManager->hasListeners(self::postFoo)); - $this->assertEquals(1, count($this->_eventManager->getListeners(self::preFoo))); - $this->assertEquals(1, count($this->_eventManager->getListeners(self::postFoo))); - $this->assertEquals(2, count($this->_eventManager->getListeners())); - } - - public function testDispatchEvent() - { - $this->_eventManager->addEventListener(array('preFoo', 'postFoo'), $this); - $this->_eventManager->dispatchEvent(self::preFoo); - $this->assertTrue($this->_preFooInvoked); - $this->assertFalse($this->_postFooInvoked); - } - - public function testRemoveEventListener() - { - $this->_eventManager->addEventListener(array('preBar'), $this); - $this->assertTrue($this->_eventManager->hasListeners(self::preBar)); - $this->_eventManager->removeEventListener(array('preBar'), $this); - $this->assertFalse($this->_eventManager->hasListeners(self::preBar)); - } - - public function testAddEventSubscriber() - { - $eventSubscriber = new TestEventSubscriber(); - $this->_eventManager->addEventSubscriber($eventSubscriber); - $this->assertTrue($this->_eventManager->hasListeners(self::preFoo)); - $this->assertTrue($this->_eventManager->hasListeners(self::postFoo)); - } - - /* Listener methods */ - - public function preFoo(EventArgs $e) - { - $this->_preFooInvoked = true; - } - - public function postFoo(EventArgs $e) - { - $this->_postFooInvoked = true; - } -} - -class TestEventSubscriber implements \Doctrine\Common\EventSubscriber -{ - public function getSubscribedEvents() - { - return array('preFoo', 'postFoo'); - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/ChainDriverTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/ChainDriverTest.php deleted file mode 100644 index 66ad762..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/ChainDriverTest.php +++ /dev/null @@ -1,130 +0,0 @@ -getMock('Doctrine\Common\Persistence\Mapping\ClassMetadata'); - - $chain = new MappingDriverChain(); - - $driver1 = $this->getMock('Doctrine\Common\Persistence\Mapping\Driver\MappingDriver'); - $driver1->expects($this->never()) - ->method('loadMetadataForClass'); - $driver1->expectS($this->never()) - ->method('isTransient'); - - $driver2 = $this->getMock('Doctrine\Common\Persistence\Mapping\Driver\MappingDriver'); - $driver2->expects($this->at(0)) - ->method('loadMetadataForClass') - ->with($this->equalTo($className), $this->equalTo($classMetadata)); - $driver2->expects($this->at(1)) - ->method('isTransient') - ->with($this->equalTo($className)) - ->will($this->returnValue( true )); - - $chain->addDriver($driver1, 'Doctrine\Tests\Models\Company'); - $chain->addDriver($driver2, 'Doctrine\Tests\Common\Persistence\Mapping'); - - $chain->loadMetadataForClass($className, $classMetadata); - - $this->assertTrue( $chain->isTransient($className) ); - } - - public function testLoadMetadata_NoDelegatorFound_ThrowsMappingException() - { - $className = 'Doctrine\Tests\Common\Persistence\Mapping\DriverChainEntity'; - $classMetadata = $this->getMock('Doctrine\Common\Persistence\Mapping\ClassMetadata'); - - $chain = new MappingDriverChain(); - - $this->setExpectedException('Doctrine\Common\Persistence\Mapping\MappingException'); - $chain->loadMetadataForClass($className, $classMetadata); - } - - public function testGatherAllClassNames() - { - $className = 'Doctrine\Tests\Common\Persistence\Mapping\DriverChainEntity'; - $classMetadata = $this->getMock('Doctrine\Common\Peristence\ClassMetadata'); - - $chain = new MappingDriverChain(); - - $driver1 = $this->getMock('Doctrine\Common\Persistence\Mapping\Driver\MappingDriver'); - $driver1->expects($this->once()) - ->method('getAllClassNames') - ->will($this->returnValue(array('Doctrine\Tests\Models\Company\Foo'))); - - $driver2 = $this->getMock('Doctrine\Common\Persistence\Mapping\Driver\MappingDriver'); - $driver2->expects($this->once()) - ->method('getAllClassNames') - ->will($this->returnValue(array('Doctrine\Tests\ORM\Mapping\Bar', 'Doctrine\Tests\ORM\Mapping\Baz', 'FooBarBaz'))); - - $chain->addDriver($driver1, 'Doctrine\Tests\Models\Company'); - $chain->addDriver($driver2, 'Doctrine\Tests\ORM\Mapping'); - - $this->assertEquals(array( - 'Doctrine\Tests\Models\Company\Foo', - 'Doctrine\Tests\ORM\Mapping\Bar', - 'Doctrine\Tests\ORM\Mapping\Baz' - ), $chain->getAllClassNames()); - } - - /** - * @group DDC-706 - */ - public function testIsTransient() - { - $driver1 = $this->getMock('Doctrine\Common\Persistence\Mapping\Driver\MappingDriver'); - $chain = new MappingDriverChain(); - $chain->addDriver($driver1, 'Doctrine\Tests\Models\CMS'); - - $this->assertTrue($chain->isTransient('stdClass'), "stdClass isTransient"); - } - - /** - * @group DDC-1412 - */ - public function testDefaultDriver() - { - $companyDriver = $this->getMock('Doctrine\Common\Persistence\Mapping\Driver\MappingDriver'); - $dafaultDriver = $this->getMock('Doctrine\Common\Persistence\Mapping\Driver\MappingDriver'); - $entityClassName = 'Doctrine\Tests\ORM\Mapping\DriverChainEntity'; - $managerClassName = 'Doctrine\Tests\Models\Company\CompanyManager'; - $chain = new MappingDriverChain(); - - $companyDriver->expects($this->never()) - ->method('loadMetadataForClass'); - $companyDriver->expects($this->once()) - ->method('isTransient') - ->with($this->equalTo($managerClassName)) - ->will($this->returnValue(false)); - - $dafaultDriver->expects($this->never()) - ->method('loadMetadataForClass'); - $dafaultDriver->expects($this->once()) - ->method('isTransient') - ->with($this->equalTo($entityClassName)) - ->will($this->returnValue(true)); - - $this->assertNull($chain->getDefaultDriver()); - - $chain->setDefaultDriver($dafaultDriver); - $chain->addDriver($companyDriver, 'Doctrine\Tests\Models\Company'); - - $this->assertSame($dafaultDriver, $chain->getDefaultDriver()); - - $this->assertTrue($chain->isTransient($entityClassName)); - $this->assertFalse($chain->isTransient($managerClassName)); - } -} - -class DriverChainEntity -{ - -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/ClassMetadataFactoryTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/ClassMetadataFactoryTest.php deleted file mode 100644 index bc1559a..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/ClassMetadataFactoryTest.php +++ /dev/null @@ -1,139 +0,0 @@ -getMock('Doctrine\Common\Persistence\Mapping\Driver\MappingDriver'); - $metadata = $this->getMock('Doctrine\Common\Persistence\Mapping\ClassMetadata'); - $this->cmf = new TestClassMetadataFactory($driver, $metadata); - } - - public function testGetCacheDriver() - { - $this->assertNull($this->cmf->getCacheDriver()); - $cache = new ArrayCache(); - $this->cmf->setCacheDriver($cache); - $this->assertSame($cache, $this->cmf->getCacheDriver()); - } - - public function testGetMetadataFor() - { - $metadata = $this->cmf->getMetadataFor('stdClass'); - - $this->assertInstanceOf('Doctrine\Common\Persistence\Mapping\ClassMetadata', $metadata); - $this->assertTrue($this->cmf->hasMetadataFor('stdClass')); - } - - public function testGetParentMetadata() - { - $metadata = $this->cmf->getMetadataFor(__NAMESPACE__ . '\ChildEntity'); - - $this->assertInstanceOf('Doctrine\Common\Persistence\Mapping\ClassMetadata', $metadata); - $this->assertTrue($this->cmf->hasMetadataFor(__NAMESPACE__ . '\ChildEntity')); - $this->assertTrue($this->cmf->hasMetadataFor(__NAMESPACE__ . '\RootEntity')); - } - - public function testGetCachedMetadata() - { - $metadata = $this->getMock('Doctrine\Common\Persistence\Mapping\ClassMetadata'); - $cache = new ArrayCache(); - $cache->save(__NAMESPACE__. '\ChildEntity$CLASSMETADATA', $metadata); - - $this->cmf->setCacheDriver($cache); - - $loadedMetadata = $this->cmf->getMetadataFor(__NAMESPACE__ . '\ChildEntity'); - $this->assertSame($loadedMetadata, $metadata); - } - - public function testCacheGetMetadataFor() - { - $cache = new ArrayCache(); - $this->cmf->setCacheDriver($cache); - - $loadedMetadata = $this->cmf->getMetadataFor(__NAMESPACE__ . '\ChildEntity'); - - $this->assertSame($loadedMetadata, $cache->fetch(__NAMESPACE__. '\ChildEntity$CLASSMETADATA')); - } - - public function testGetAliasedMetadata() - { - $loadedMetadata = $this->cmf->getMetadataFor('prefix:ChildEntity'); - - $this->assertTrue($this->cmf->hasMetadataFor(__NAMESPACE__ . '\ChildEntity')); - $this->assertTrue($this->cmf->hasMetadataFor('prefix:ChildEntity')); - } -} - -class TestClassMetadataFactory extends AbstractClassMetadataFactory -{ - public $driver; - public $metadata; - - public function __construct($driver, $metadata) - { - $this->driver = $driver; - $this->metadata = $metadata; - } - - protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents) - { - - } - - protected function getFqcnFromAlias($namespaceAlias, $simpleClassName) - { - return __NAMESPACE__ . '\\' . $simpleClassName; - } - - protected function initialize() - { - - } - - protected function newClassMetadataInstance($className) - { - return $this->metadata; - } - - protected function getDriver() - { - return $this->driver; - } - protected function wakeupReflection(ClassMetadata $class, ReflectionService $reflService) - { - } - - protected function initializeReflection(ClassMetadata $class, ReflectionService $reflService) - { - } - - protected function isEntity(ClassMetadata $class) - { - return true; - } -} - -class RootEntity -{ - -} - -class ChildEntity extends RootEntity -{ - -} diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/DefaultFileLocatorTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/DefaultFileLocatorTest.php deleted file mode 100644 index 37072de..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/DefaultFileLocatorTest.php +++ /dev/null @@ -1,90 +0,0 @@ -assertEquals(array($path), $locator->getPaths()); - - $locator = new DefaultFileLocator($path); - $this->assertEquals(array($path), $locator->getPaths()); - } - - public function testGetFileExtension() - { - $locator = new DefaultFileLocator(array(), ".yml"); - $this->assertEquals(".yml", $locator->getFileExtension()); - $locator->setFileExtension(".xml"); - $this->assertEquals(".xml", $locator->getFileExtension()); - } - - public function testUniquePaths() - { - $path = __DIR__ . "/_files"; - - $locator = new DefaultFileLocator(array($path, $path)); - $this->assertEquals(array($path), $locator->getPaths()); - } - - public function testFindMappingFile() - { - $path = __DIR__ . "/_files"; - - $locator = new DefaultFileLocator(array($path), ".yml"); - - $this->assertEquals(__DIR__ . '/_files' . DIRECTORY_SEPARATOR . 'stdClass.yml', $locator->findMappingFile('stdClass')); - } - - public function testFindMappingFileNotFound() - { - $path = __DIR__ . "/_files"; - - $locator = new DefaultFileLocator(array($path), ".yml"); - - $this->setExpectedException( - 'Doctrine\Common\Persistence\Mapping\MappingException', - "No mapping file found named 'stdClass2.yml' for class 'stdClass2'" - ); - $locator->findMappingFile('stdClass2'); - } - - public function testGetAllClassNames() - { - $path = __DIR__ . "/_files"; - - $locator = new DefaultFileLocator(array($path), ".yml"); - $classes = $locator->getAllClassNames(null); - sort($classes); - - $this->assertEquals(array('global', 'stdClass'), $classes); - $this->assertEquals(array('stdClass'), $locator->getAllClassNames("global")); - } - - public function testGetAllClassNamesNonMatchingFileExtension() - { - $path = __DIR__ . "/_files"; - - $locator = new DefaultFileLocator(array($path), ".xml"); - $this->assertEquals(array(), $locator->getAllClassNames("global")); - } - - public function testFileExists() - { - $path = __DIR__ . "/_files"; - - $locator = new DefaultFileLocator(array($path), ".yml"); - - $this->assertTrue($locator->fileExists("stdClass")); - $this->assertFalse($locator->fileExists("stdClass2")); - $this->assertTrue($locator->fileExists("global")); - $this->assertFalse($locator->fileExists("global2")); - } -} diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/FileDriverTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/FileDriverTest.php deleted file mode 100644 index 020c242..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/FileDriverTest.php +++ /dev/null @@ -1,142 +0,0 @@ -assertNull($driver->getGlobalBasename()); - - $driver->setGlobalBasename("global"); - $this->assertEquals("global", $driver->getGlobalBasename()); - } - - public function testGetElementFromGlobalFile() - { - $driver = new TestFileDriver($this->newLocator()); - $driver->setGlobalBasename("global"); - - $element = $driver->getElement('stdGlobal'); - - $this->assertEquals('stdGlobal', $element); - } - - public function testGetElementFromFile() - { - $locator = $this->newLocator(); - $locator->expects($this->once()) - ->method('findMappingFile') - ->with($this->equalTo('stdClass')) - ->will($this->returnValue(__DIR__ . '/_files/stdClass.yml')); - - $driver = new TestFileDriver($locator); - - $this->assertEquals('stdClass', $driver->getElement('stdClass')); - } - - public function testGetAllClassNamesGlobalBasename() - { - $driver = new TestFileDriver($this->newLocator()); - $driver->setGlobalBasename("global"); - - $classNames = $driver->getAllClassNames(); - - $this->assertEquals(array('stdGlobal', 'stdGlobal2'), $classNames); - } - - public function testGetAllClassNamesFromMappingFile() - { - $locator = $this->newLocator(); - $locator->expects($this->any()) - ->method('getAllClassNames') - ->with($this->equalTo(null)) - ->will($this->returnValue(array('stdClass'))); - $driver = new TestFileDriver($locator); - - $classNames = $driver->getAllClassNames(); - - $this->assertEquals(array('stdClass'), $classNames); - } - - public function testGetAllClassNamesBothSources() - { - $locator = $this->newLocator(); - $locator->expects($this->any()) - ->method('getAllClassNames') - ->with($this->equalTo('global')) - ->will($this->returnValue(array('stdClass'))); - $driver = new TestFileDriver($locator); - $driver->setGlobalBasename("global"); - - $classNames = $driver->getAllClassNames(); - - $this->assertEquals(array('stdGlobal', 'stdGlobal2', 'stdClass'), $classNames); - } - - public function testIsNotTransient() - { - $locator = $this->newLocator(); - $locator->expects($this->once()) - ->method('fileExists') - ->with($this->equalTo('stdClass')) - ->will($this->returnValue( true )); - - $driver = new TestFileDriver($locator); - $driver->setGlobalBasename("global"); - - $this->assertFalse($driver->isTransient('stdClass')); - $this->assertFalse($driver->isTransient('stdGlobal')); - $this->assertFalse($driver->isTransient('stdGlobal2')); - } - - public function testIsTransient() - { - $locator = $this->newLocator(); - $locator->expects($this->once()) - ->method('fileExists') - ->with($this->equalTo('stdClass2')) - ->will($this->returnValue( false )); - - $driver = new TestFileDriver($locator); - - $this->assertTrue($driver->isTransient('stdClass2')); - } - - public function testNonLocatorFallback() - { - $driver = new TestFileDriver(__DIR__ . '/_files', '.yml'); - $this->assertTrue($driver->isTransient('stdClass2')); - $this->assertFalse($driver->isTransient('stdClass')); - } - - private function newLocator() - { - $locator = $this->getMock('Doctrine\Common\Persistence\Mapping\Driver\FileLocator'); - $locator->expects($this->any())->method('getFileExtension')->will($this->returnValue('.yml')); - $locator->expects($this->any())->method('getPaths')->will($this->returnValue(array(__DIR__ . "/_files"))); - return $locator; - } -} - -class TestFileDriver extends FileDriver -{ - protected function loadMappingFile($file) - { - if (strpos($file, "global.yml") !== false) { - return array('stdGlobal' => 'stdGlobal', 'stdGlobal2' => 'stdGlobal2'); - } - return array('stdClass' => 'stdClass'); - } - - public function loadMetadataForClass($className, ClassMetadata $metadata) - { - - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/PHPDriverTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/PHPDriverTest.php deleted file mode 100644 index 8fc4d80..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/PHPDriverTest.php +++ /dev/null @@ -1,18 +0,0 @@ -getMock('Doctrine\Common\Persistence\Mapping\ClassMetadata'); - $metadata->expects($this->once())->method('getFieldNames'); - - $driver = new PHPDriver(array(__DIR__ . "/_files")); - $driver->loadMetadataForClass('TestEntity', $metadata); - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/RuntimeReflectionServiceTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/RuntimeReflectionServiceTest.php deleted file mode 100644 index 5f06cad..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/RuntimeReflectionServiceTest.php +++ /dev/null @@ -1,70 +0,0 @@ -. - */ - -namespace Doctrine\Tests\Common\Persistence\Mapping; - -use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService; - -/** - * @group DCOM-93 - */ -class RuntimeReflectionServiceTest extends \PHPUnit_Framework_TestCase -{ - private $reflectionService; - - public function setUp() - { - $this->reflectionService = new RuntimeReflectionService(); - } - - public function testShortname() - { - $this->assertEquals("RuntimeReflectionServiceTest", $this->reflectionService->getClassShortName(__CLASS__)); - } - - public function testClassNamespaceName() - { - $this->assertEquals("Doctrine\Tests\Common\Persistence\Mapping", $this->reflectionService->getClassNamespace(__CLASS__)); - } - - public function testGetParentClasses() - { - $classes = $this->reflectionService->getParentClasses(__CLASS__); - $this->assertTrue(count($classes) >= 1, "The test class ".__CLASS__." should have at least one parent."); - } - - public function testGetReflectionClass() - { - $class = $this->reflectionService->getClass(__CLASS__); - $this->assertInstanceOf("ReflectionClass", $class); - } - - public function testGetMethods() - { - $this->assertTrue($this->reflectionService->hasPublicMethod(__CLASS__, "testGetMethods")); - $this->assertFalse($this->reflectionService->hasPublicMethod(__CLASS__, "testGetMethods2")); - } - - public function testGetAccessibleProperty() - { - $reflProp = $this->reflectionService->getAccessibleProperty(__CLASS__, "reflectionService"); - $this->assertInstanceOf("ReflectionProperty", $reflProp); - } -} - diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/StaticPHPDriverTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/StaticPHPDriverTest.php deleted file mode 100644 index 9f1c568..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/StaticPHPDriverTest.php +++ /dev/null @@ -1,35 +0,0 @@ -getMock('Doctrine\Common\Persistence\Mapping\ClassMetadata'); - $metadata->expects($this->once())->method('getFieldNames'); - - $driver = new StaticPHPDriver(array(__DIR__)); - $driver->loadMetadataForClass(__NAMESPACE__ . '\\TestEntity', $metadata); - } - - public function testGetAllClassNames() - { - $driver = new StaticPHPDriver(array(__DIR__)); - $classNames = $driver->getAllClassNames(); - - $this->assertContains( - 'Doctrine\Tests\Common\Persistence\Mapping\TestEntity', $classNames); - } -} - -class TestEntity -{ - static public function loadMetadata($metadata) - { - $metadata->getFieldNames(); - } -} \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/StaticReflectionServiceTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/StaticReflectionServiceTest.php deleted file mode 100644 index ffce6d4..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/StaticReflectionServiceTest.php +++ /dev/null @@ -1,70 +0,0 @@ -. - */ - -namespace Doctrine\Tests\Common\Persistence\Mapping; - -use Doctrine\Common\Persistence\Mapping\StaticReflectionService; - -/** - * @group DCOM-93 - */ -class StaticReflectionServiceTest extends \PHPUnit_Framework_TestCase -{ - private $reflectionService; - - public function setUp() - { - $this->reflectionService = new StaticReflectionService(); - } - - public function testShortname() - { - $this->assertEquals("StaticReflectionServiceTest", $this->reflectionService->getClassShortName(__CLASS__)); - } - - public function testClassNamespaceName() - { - $this->assertEquals("Doctrine\Tests\Common\Persistence\Mapping", $this->reflectionService->getClassNamespace(__CLASS__)); - } - - public function testGetParentClasses() - { - $classes = $this->reflectionService->getParentClasses(__CLASS__); - $this->assertTrue(count($classes) == 0, "The test class ".__CLASS__." should have no parents according to static reflection."); - } - - public function testGetReflectionClass() - { - $class = $this->reflectionService->getClass(__CLASS__); - $this->assertNull($class); - } - - public function testGetMethods() - { - $this->assertTrue($this->reflectionService->hasPublicMethod(__CLASS__, "testGetMethods")); - $this->assertFalse($this->reflectionService->hasPublicMethod(__CLASS__, "testGetMethods2")); - } - - public function testGetAccessibleProperty() - { - $reflProp = $this->reflectionService->getAccessibleProperty(__CLASS__, "reflectionService"); - $this->assertNull($reflProp); - } -} - diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/SymfonyFileLocatorTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/SymfonyFileLocatorTest.php deleted file mode 100644 index b51162e..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/SymfonyFileLocatorTest.php +++ /dev/null @@ -1,88 +0,0 @@ - $prefix)); - $this->assertEquals(array($path), $locator->getPaths()); - - $locator = new SymfonyFileLocator(array($path => $prefix)); - $this->assertEquals(array($path), $locator->getPaths()); - } - - public function testGetPrefixes() - { - $path = __DIR__ . "/_files"; - $prefix = "Foo"; - - $locator = new SymfonyFileLocator(array($path => $prefix)); - $this->assertEquals(array($path => $prefix), $locator->getNamespacePrefixes()); - } - - public function testGetFileExtension() - { - $locator = new SymfonyFileLocator(array(), ".yml"); - $this->assertEquals(".yml", $locator->getFileExtension()); - $locator->setFileExtension(".xml"); - $this->assertEquals(".xml", $locator->getFileExtension()); - } - - public function testFileExists() - { - $path = __DIR__ . "/_files"; - $prefix = "Foo"; - - $locator = new SymfonyFileLocator(array($path => $prefix), ".yml"); - - $this->assertTrue($locator->fileExists("Foo\stdClass")); - $this->assertTrue($locator->fileExists("Foo\global")); - $this->assertFalse($locator->fileExists("Foo\stdClass2")); - $this->assertFalse($locator->fileExists("Foo\global2")); - } - - public function testGetAllClassNames() - { - $path = __DIR__ . "/_files"; - $prefix = "Foo"; - - $locator = new SymfonyFileLocator(array($path => $prefix), ".yml"); - $classes = $locator->getAllClassNames(null); - sort($classes); - - $this->assertEquals(array("Foo\\global", "Foo\\stdClass"), $classes); - $this->assertEquals(array("Foo\\stdClass"), $locator->getAllClassNames("global")); - } - - public function testFindMappingFile() - { - $path = __DIR__ . "/_files"; - $prefix = "Foo"; - - $locator = new SymfonyFileLocator(array($path => $prefix), ".yml"); - - $this->assertEquals(__DIR__ . "/_files/stdClass.yml", $locator->findMappingFile("Foo\\stdClass")); - } - - public function testFindMappingFileNotFound() - { - $path = __DIR__ . "/_files"; - $prefix = "Foo"; - - $locator = new SymfonyFileLocator(array($path => $prefix), ".yml"); - - $this->setExpectedException( - "Doctrine\Common\Persistence\Mapping\MappingException", - "No mapping file found named '".__DIR__."/_files/stdClass2.yml' for class 'Foo\stdClass2'." - ); - $locator->findMappingFile("Foo\\stdClass2"); - } -} diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/_files/TestEntity.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/_files/TestEntity.php deleted file mode 100644 index d0e9976..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/_files/TestEntity.php +++ /dev/null @@ -1,3 +0,0 @@ -getFieldNames(); \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/_files/global.yml b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/_files/global.yml deleted file mode 100644 index 30d74d2..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/_files/global.yml +++ /dev/null @@ -1 +0,0 @@ -test \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/_files/stdClass.yml b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/_files/stdClass.yml deleted file mode 100644 index 30d74d2..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/Mapping/_files/stdClass.yml +++ /dev/null @@ -1 +0,0 @@ -test \ No newline at end of file diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/PersistentObjectTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/PersistentObjectTest.php deleted file mode 100644 index a0f77b5..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Persistence/PersistentObjectTest.php +++ /dev/null @@ -1,247 +0,0 @@ -cm = new TestObjectMetadata; - $this->om = $this->getMock('Doctrine\Common\Persistence\ObjectManager'); - $this->om->expects($this->any())->method('getClassMetadata') - ->will($this->returnValue($this->cm)); - $this->object = new TestObject; - PersistentObject::setObjectManager($this->om); - $this->object->injectObjectManager($this->om, $this->cm); - } - - public function testGetObjectManager() - { - $this->assertSame($this->om, PersistentObject::getObjectManager()); - } - - public function testNonMatchingObjectManager() - { - $this->setExpectedException('RuntimeException'); - $om = $this->getMock('Doctrine\Common\Persistence\ObjectManager'); - $this->object->injectObjectManager($om, $this->cm); - } - - public function testGetField() - { - $this->assertEquals('beberlei', $this->object->getName()); - } - - public function testSetField() - { - $this->object->setName("test"); - $this->assertEquals("test", $this->object->getName()); - } - - public function testGetIdentifier() - { - $this->assertEquals(1, $this->object->getId()); - } - - public function testSetIdentifier() - { - $this->setExpectedException('BadMethodCallException'); - $this->object->setId(2); - } - - public function testSetUnknownField() - { - $this->setExpectedException('BadMethodCallException'); - $this->object->setUnknown("test"); - } - - public function testGetUnknownField() - { - $this->setExpectedException('BadMethodCallException'); - $this->object->getUnknown(); - } - - public function testGetToOneAssociation() - { - $this->assertNull($this->object->getParent()); - } - - public function testSetToOneAssociation() - { - $parent = new TestObject(); - $this->object->setParent($parent); - $this->assertSame($parent, $this->object->getParent($parent)); - } - - public function testSetInvalidToOneAssocation() - { - $parent = new \stdClass(); - - $this->setExpectedException('InvalidArgumentException'); - $this->object->setParent($parent); - } - - public function testSetToOneAssociationNull() - { - $parent = new TestObject(); - $this->object->setParent($parent); - $this->object->setParent(null); - $this->assertNull($this->object->getParent()); - } - - public function testAddToManyAssocation() - { - $child = new TestObject(); - $this->object->addChildren($child); - - $this->assertSame($this->object, $child->getParent()); - $this->assertEquals(1, count($this->object->getChildren())); - - $child = new TestObject(); - $this->object->addChildren($child); - - $this->assertEquals(2, count($this->object->getChildren())); - } - - public function testAddInvalidToManyAssocation() - { - $this->setExpectedException('InvalidArgumentException'); - $this->object->addChildren(new \stdClass()); - } - - public function testNoObjectManagerSet() - { - PersistentObject::setObjectManager(null); - $child = new TestObject(); - - $this->setExpectedException('RuntimeException'); - $child->setName("test"); - } - - public function testInvalidMethod() - { - $this->setExpectedException('BadMethodCallException'); - $this->object->asdf(); - } - - public function testAddInvalidCollection() - { - $this->setExpectedException('BadMethodCallException'); - $this->object->addAsdf(new \stdClass()); - } -} - -class TestObject extends PersistentObject -{ - protected $id = 1; - protected $name = 'beberlei'; - protected $parent; - protected $children; -} - -class TestObjectMetadata implements ClassMetadata -{ - - public function getAssociationMappedByTargetField($assocName) - { - $assoc = array('children' => 'parent'); - return $assoc[$assocName]; - } - - public function getAssociationNames() - { - return array('parent', 'children'); - } - - public function getAssociationTargetClass($assocName) - { - return __NAMESPACE__ . '\TestObject'; - } - - public function getFieldNames() - { - return array('id', 'name'); - } - - public function getIdentifier() - { - return array('id'); - } - - public function getName() - { - return __NAMESPACE__ . '\TestObject'; - } - - public function getReflectionClass() - { - return new \ReflectionClass($this->getName()); - } - - public function getTypeOfField($fieldName) - { - $types = array('id' => 'integer', 'name' => 'string'); - return $types[$fieldName]; - } - - public function hasAssociation($fieldName) - { - return in_array($fieldName, array('parent', 'children')); - } - - public function hasField($fieldName) - { - return in_array($fieldName, array('id', 'name')); - } - - public function isAssociationInverseSide($assocName) - { - return ($assocName === 'children'); - } - - public function isCollectionValuedAssociation($fieldName) - { - return ($fieldName === 'children'); - } - - public function isIdentifier($fieldName) - { - return $fieldName === 'id'; - } - - public function isSingleValuedAssociation($fieldName) - { - return $fieldName === 'parent'; - } - - public function getIdentifierValues($entity) - { - - } - - public function getIdentifierFieldNames() - { - - } - - public function initializeReflection(ReflectionService $reflService) - { - - } - - public function wakeupReflection(ReflectionService $reflService) - { - - } -} diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Reflection/DeeperNamespaceParent.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Reflection/DeeperNamespaceParent.php deleted file mode 100644 index 72faa77..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Reflection/DeeperNamespaceParent.php +++ /dev/null @@ -1,7 +0,0 @@ - array($testsRoot), - ); - $noParentClassName = 'Doctrine\\Tests\\Common\\Reflection\\NoParent'; - $staticReflectionParser = new StaticReflectionParser($noParentClassName, new Psr0FindFile($paths)); - $declaringClassName = $staticReflectionParser->getStaticReflectionParserForDeclaringClass('property', 'test')->getClassName(); - $this->assertEquals($noParentClassName, $declaringClassName); - - $className = 'Doctrine\\Tests\\Common\\Reflection\\FullyClassifiedParent'; - $staticReflectionParser = new StaticReflectionParser($className, new Psr0FindFile($paths)); - $declaringClassName = $staticReflectionParser->getStaticReflectionParserForDeclaringClass('property', 'test')->getClassName(); - $this->assertEquals($noParentClassName, $declaringClassName); - - $className = 'Doctrine\\Tests\\Common\\Reflection\\SameNamespaceParent'; - $staticReflectionParser = new StaticReflectionParser($className, new Psr0FindFile($paths)); - $declaringClassName = $staticReflectionParser->getStaticReflectionParserForDeclaringClass('property', 'test')->getClassName(); - $this->assertEquals($noParentClassName, $declaringClassName); - - $dummyParentClassName = 'Doctrine\\Tests\\Common\\Reflection\\Dummies\\NoParent'; - - $className = 'Doctrine\\Tests\\Common\\Reflection\\DeeperNamespaceParent'; - $staticReflectionParser = new StaticReflectionParser($className, new Psr0FindFile($paths)); - $declaringClassName = $staticReflectionParser->getStaticReflectionParserForDeclaringClass('property', 'test')->getClassName(); - $this->assertEquals($dummyParentClassName, $declaringClassName); - - $className = 'Doctrine\\Tests\\Common\\Reflection\\UseParent'; - $staticReflectionParser = new StaticReflectionParser($className, new Psr0FindFile($paths)); - $declaringClassName = $staticReflectionParser->getStaticReflectionParserForDeclaringClass('property', 'test')->getClassName(); - $this->assertEquals($dummyParentClassName, $declaringClassName); - - } -} diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Reflection/UseParent.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Reflection/UseParent.php deleted file mode 100644 index dd512d4..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Reflection/UseParent.php +++ /dev/null @@ -1,9 +0,0 @@ -assertEquals($expectedClassName, ClassUtils::getRealClass($className)); - } - - /** - * @dataProvider dataGetClass - */ - public function testGetClass( $className, $expectedClassName ) - { - $object = new $className(); - $this->assertEquals($expectedClassName, ClassUtils::getClass($object)); - } - - public function testGetParentClass() - { - $parentClass = ClassUtils::getParentClass( 'MyProject\Proxies\__CG__\OtherProject\Proxies\__CG__\Doctrine\Tests\Common\Util\ChildObject' ); - $this->assertEquals('stdClass', $parentClass); - } - - public function testGenerateProxyClassName() - { - $this->assertEquals( 'Proxies\__CG__\stdClass', ClassUtils::generateProxyClassName( 'stdClass', 'Proxies' ) ); - } - - /** - * @dataProvider dataGetClass - */ - public function testNewReflectionClass( $className, $expectedClassName ) - { - $reflClass = ClassUtils::newReflectionClass( $className ); - $this->assertEquals( $expectedClassName, $reflClass->getName() ); - } - - /** - * @dataProvider dataGetClass - */ - public function testNewReflectionObject( $className, $expectedClassName ) - { - $object = new $className; - $reflClass = ClassUtils::newReflectionObject( $object ); - $this->assertEquals( $expectedClassName, $reflClass->getName() ); - } - } - - class ChildObject extends \stdClass - { - } -} - -namespace MyProject\Proxies\__CG__ -{ - class stdClass extends \stdClass - { - } -} - -namespace MyProject\Proxies\__CG__\Doctrine\Tests\Common\Util -{ - class ChildObject extends \Doctrine\Tests\Common\Util\ChildObject - { - } -} - -namespace MyProject\Proxies\__CG__\OtherProject\Proxies\__CG__ -{ - class stdClass extends \MyProject\Proxies\__CG__\stdClass - { - } -} - -namespace MyProject\Proxies\__CG__\OtherProject\Proxies\__CG__\Doctrine\Tests\Common\Util -{ - class ChildObject extends \MyProject\Proxies\__CG__\Doctrine\Tests\Common\Util\ChildObject - { - } -} diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Util/DebugTest.php b/vendor/doctrine/common/tests/Doctrine/Tests/Common/Util/DebugTest.php deleted file mode 100644 index b4e9eed..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/Common/Util/DebugTest.php +++ /dev/null @@ -1,27 +0,0 @@ -foo = "bar"; - $obj->bar = 1234; - - $var = Debug::export($obj, 2); - $this->assertEquals( "stdClass", $var->__CLASS__ ); - } - - public function testExportDateTime() - { - $obj = new \DateTime( "2010-10-10 10:10:10" ); - - $var = Debug::export( $obj, 2 ); - $this->assertEquals( "DateTime", $var->__CLASS__ ); - } -} diff --git a/vendor/doctrine/common/tests/Doctrine/Tests/DoctrineTestCase.php b/vendor/doctrine/common/tests/Doctrine/Tests/DoctrineTestCase.php deleted file mode 100644 index e8323d2..0000000 --- a/vendor/doctrine/common/tests/Doctrine/Tests/DoctrineTestCase.php +++ /dev/null @@ -1,10 +0,0 @@ - - */ -class NativePhpunitTask extends Task -{ - private $test; - private $testfile; - private $testdirectory; - private $configuration = null; - private $coverageClover = null; - private $junitlogfile = null; - private $haltonfailure = true; - private $haltonerror = true; - - public function setTestdirectory($directory) { - $this->testdirectory = $directory; - } - - public function setTest($test) { - $this->test = $test; - } - - public function setTestfile($testfile) { - $this->testfile = $testfile; - } - - public function setJunitlogfile($junitlogfile) { - if (strlen($junitlogfile) == 0) { - $junitlogfile = NULL; - } - - $this->junitlogfile = $junitlogfile; - } - - public function setConfiguration($configuration) { - if (strlen($configuration) == 0) { - $configuration = NULL; - } - - $this->configuration = $configuration; - } - - public function setCoverageClover($coverageClover) { - if (strlen($coverageClover) == 0) { - $coverageClover = NULL; - } - - $this->coverageClover = $coverageClover; - } - - public function setHaltonfailure($haltonfailures) { - $this->haltonfailure = $haltonfailures; - } - - public function setHaltonerror($haltonerrors) { - $this->haltonerror = $haltonerrors; - } - - public function init() - { - require_once "PHPUnit/Runner/Version.php"; - $version = PHPUnit_Runner_Version::id(); - - if (version_compare($version, '3.4.0') < 0) { - throw new BuildException("NativePHPUnitTask requires PHPUnit version >= 3.2.0", $this->getLocation()); - } - - require_once 'PHPUnit/Util/Filter.php'; - - // point PHPUnit_MAIN_METHOD define to non-existing method - if (!defined('PHPUnit_MAIN_METHOD')) { - define('PHPUnit_MAIN_METHOD', 'PHPUnitTask::undefined'); - } - } - - public function main() - { - if (!is_dir(realpath($this->testdirectory))) { - throw new BuildException("NativePHPUnitTask requires a Test Directory path given, '".$this->testdirectory."' given."); - } - set_include_path(realpath($this->testdirectory) . PATH_SEPARATOR . get_include_path()); - - $printer = new NativePhpunitPrinter(); - - $arguments = array( - 'configuration' => $this->configuration, - 'coverageClover' => $this->coverageClover, - 'junitLogfile' => $this->junitlogfile, - 'printer' => $printer, - ); - - $runner = new PHPUnit_TextUI_TestRunner(); - $suite = $runner->getTest($this->test, $this->testfile, true); - - try { - $result = $runner->doRun($suite, $arguments); - /* @var $result PHPUnit_Framework_TestResult */ - - if ( ($this->haltonfailure && $result->failureCount() > 0) || ($this->haltonerror && $result->errorCount() > 0) ) { - throw new BuildException("PHPUnit: ".$result->failureCount()." Failures and ".$result->errorCount()." Errors, ". - "last failure message: ".$printer->getMessages()); - } - - $this->log("PHPUnit Success: ".count($result->passed())." tests passed, no ". - "failures (".$result->skippedCount()." skipped, ".$result->notImplementedCount()." not implemented)"); - - // Hudson for example doesn't like the backslash in class names - if (file_exists($this->coverageClover)) { - $this->log("Generated Clover Coverage XML to: ".$this->coverageClover); - $content = file_get_contents($this->coverageClover); - $content = str_replace("\\", ".", $content); - file_put_contents($this->coverageClover, $content); - unset($content); - } - - } catch(\Exception $e) { - throw new BuildException("NativePhpunitTask failed: ".$e->getMessage()); - } - } -} - -class NativePhpunitPrinter extends PHPUnit_Util_Printer implements PHPUnit_Framework_TestListener -{ - private $_messages = array(); - - public function write($buffer) - { - // do nothing - } - - public function getMessages() - { - return $this->_messages; - } - - /** - * An error occurred. - * - * @param PHPUnit_Framework_Test $test - * @param Exception $e - * @param float $time - */ - public function addError(PHPUnit_Framework_Test $test, Exception $e, $time) - { - $this->_messages[] = "Test ERROR: ".$test->getName().": ".$e->getMessage(); - } - - /** - * A failure occurred. - * - * @param PHPUnit_Framework_Test $test - * @param PHPUnit_Framework_AssertionFailedError $e - * @param float $time - */ - public function addFailure(PHPUnit_Framework_Test $test, PHPUnit_Framework_AssertionFailedError $e, $time) - { - $this->_messages[] = "Test FAILED: ".$test->getName().": ".$e->getMessage(); - } - - /** - * Incomplete test. - * - * @param PHPUnit_Framework_Test $test - * @param Exception $e - * @param float $time - */ - public function addIncompleteTest(PHPUnit_Framework_Test $test, Exception $e, $time) - { - - } - - /** - * Skipped test. - * - * @param PHPUnit_Framework_Test $test - * @param Exception $e - * @param float $time - * @since Method available since Release 3.0.0 - */ - public function addSkippedTest(PHPUnit_Framework_Test $test, Exception $e, $time) - { - - } - - /** - * A test suite started. - * - * @param PHPUnit_Framework_TestSuite $suite - * @since Method available since Release 2.2.0 - */ - public function startTestSuite(PHPUnit_Framework_TestSuite $suite) - { - - } - - /** - * A test suite ended. - * - * @param PHPUnit_Framework_TestSuite $suite - * @since Method available since Release 2.2.0 - */ - public function endTestSuite(PHPUnit_Framework_TestSuite $suite) - { - - } - - /** - * A test started. - * - * @param PHPUnit_Framework_Test $test - */ - public function startTest(PHPUnit_Framework_Test $test) - { - - } - - /** - * A test ended. - * - * @param PHPUnit_Framework_Test $test - * @param float $time - */ - public function endTest(PHPUnit_Framework_Test $test, $time) - { - - } -} diff --git a/vendor/doctrine/common/tests/README.markdown b/vendor/doctrine/common/tests/README.markdown deleted file mode 100644 index e6f1703..0000000 --- a/vendor/doctrine/common/tests/README.markdown +++ /dev/null @@ -1,27 +0,0 @@ -# Running the Doctrine 2 Testsuite - -## Running tests - -Execute PHPUnit in the root folder of your doctrine-common clone. - - phpunit - -## Testing Lock-Support - -The Lock support in Doctrine 2 is tested using Gearman, which allows to run concurrent tasks in parallel. -Install Gearman with PHP as follows: - -1. Go to http://www.gearman.org and download the latest Gearman Server -2. Compile it and then call ldconfig -3. Start it up "gearmand -vvvv" -4. Install pecl/gearman by calling "gearman-beta" - -You can then go into tests/ and start up two workers: - - php Doctrine/Tests/ORM/Functional/Locking/LockAgentWorker.php - -Then run the locking test-suite: - - phpunit --configuration Doctrine/Tests/ORM/Functional/Locking/GearmanLockTest.php - -This can run considerable time, because it is using sleep() to test for the timing ranges of locks. \ No newline at end of file diff --git a/vendor/fabpot/goutte/.gitignore b/vendor/fabpot/goutte/.gitignore index c0bb3e6..81b9258 100644 --- a/vendor/fabpot/goutte/.gitignore +++ b/vendor/fabpot/goutte/.gitignore @@ -1,3 +1,3 @@ +composer.lock phpunit.xml vendor - diff --git a/vendor/fabpot/goutte/.travis.yml b/vendor/fabpot/goutte/.travis.yml index 37705da..e85a7b4 100644 --- a/vendor/fabpot/goutte/.travis.yml +++ b/vendor/fabpot/goutte/.travis.yml @@ -1,8 +1,18 @@ language: php + php: - - "5.4" - - "5.3" + - '5.6' + - '5.5' + - '5.4' + - '5.3' + - hhvm + before_script: - - composer install -n --dev + - composer install -n + script: - - phpunit + - phpunit + +matrix: + allow_failures: + - php: hhvm diff --git a/vendor/fabpot/goutte/CHANGELOG b/vendor/fabpot/goutte/CHANGELOG deleted file mode 100644 index 791013c..0000000 --- a/vendor/fabpot/goutte/CHANGELOG +++ /dev/null @@ -1,7 +0,0 @@ -CHANGELOG -========= - -* 0.2 - - * The first argument to Client has been removed - * Zend libraries have been replaced with Guzzle diff --git a/vendor/fabpot/goutte/Goutte/Client.php b/vendor/fabpot/goutte/Goutte/Client.php index f69e40a..b962c55 100644 --- a/vendor/fabpot/goutte/Goutte/Client.php +++ b/vendor/fabpot/goutte/Goutte/Client.php @@ -46,7 +46,7 @@ public function setClient(GuzzleClientInterface $client) public function getClient() { if (!$this->client) { - $this->client = new GuzzleClient('', array('redirect.disable' => true)); + $this->client = new GuzzleClient('', array(GuzzleClient::DISABLE_REDIRECTS => true)); } return $this->client; @@ -59,6 +59,11 @@ public function setHeader($name, $value) return $this; } + public function removeHeader($name) + { + unset($this->headers[$name]); + } + public function setAuth($user, $password = '', $type = CURLAUTH_BASIC) { $this->auth = array( @@ -70,11 +75,18 @@ public function setAuth($user, $password = '', $type = CURLAUTH_BASIC) return $this; } + public function resetAuth() + { + $this->auth = null; + + return $this; + } + protected function doRequest($request) { $headers = array(); foreach ($request->getServer() as $key => $val) { - $key = ucfirst(strtolower(str_replace(array('_', 'HTTP-'), array('-', ''), $key))); + $key = implode('-', array_map('ucfirst', explode('-', strtolower(str_replace(array('_', 'HTTP-'), array('-', ''), $key))))); if (!isset($headers[$key])) { $headers[$key] = $val; } @@ -112,7 +124,7 @@ protected function doRequest($request) $guzzleRequest->addCookie($name, $value); } - if ('POST' == $request->getMethod()) { + if ('POST' == $request->getMethod() || 'PUT' == $request->getMethod()) { $this->addPostFiles($guzzleRequest, $request->getFiles()); } @@ -153,7 +165,7 @@ protected function addPostFiles($request, array $files, $arrayName = '') if (is_array($info)) { if (isset($info['tmp_name'])) { if ('' !== $info['tmp_name']) { - $request->addPostFile($name, $info['tmp_name']); + $request->addPostFile($name, $info['tmp_name'], null, isset($info['name']) ? $info['name'] : null); } else { continue; } @@ -168,6 +180,8 @@ protected function addPostFiles($request, array $files, $arrayName = '') protected function createResponse(GuzzleResponse $response) { - return new Response($response->getBody(true), $response->getStatusCode(), $response->getHeaders()->getAll()); + $headers = $response->getHeaders()->toArray(); + + return new Response($response->getBody(true), $response->getStatusCode(), $headers); } } diff --git a/vendor/fabpot/goutte/Goutte/Compiler.php b/vendor/fabpot/goutte/Goutte/Compiler.php deleted file mode 100644 index 5e1b875..0000000 --- a/vendor/fabpot/goutte/Goutte/Compiler.php +++ /dev/null @@ -1,93 +0,0 @@ - - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */ - -namespace Goutte; - -use Symfony\Component\Finder\Finder; - -/** - * The Compiler class compiles the Goutte utility. - * - * @author Fabien Potencier - */ -class Compiler -{ - public function compile($pharFile = 'goutte.phar') - { - if (file_exists($pharFile)) { - unlink($pharFile); - } - - $phar = new \Phar($pharFile, 0, 'Goutte'); - $phar->setSignatureAlgorithm(\Phar::SHA1); - - $phar->startBuffering(); - - // CLI Component files - foreach ($this->getFiles() as $file) { - $path = str_replace(__DIR__.'/', '', $file); - $phar->addFromString($path, file_get_contents($file)); - } - - // Stubs - $phar['_cli_stub.php'] = $this->getCliStub(); - $phar['_web_stub.php'] = $this->getWebStub(); - $phar->setDefaultStub('_cli_stub.php', '_web_stub.php'); - - $phar->stopBuffering(); - - // $phar->compressFiles(\Phar::GZ); - - unset($phar); - } - - protected function getCliStub() - { - return "getLicense()." require_once __DIR__.'/vendor/autoload.php'; __HALT_COMPILER();"; - } - - protected function getWebStub() - { - return " - * - * This source file is subject to the MIT license that is bundled - * with this source code in the file LICENSE. - */'; - } - - protected function getFiles() - { - $files = array( - 'LICENSE', - 'vendor/autoload.php', - 'Goutte/Client.php', - ); - - $dirs = array( - 'vendor/composer', - 'vendor/symfony', - 'vendor/guzzle' - ); - - $iterator = Finder::create()->files()->name('*.php')->in($dirs); - - return array_merge($files, iterator_to_array($iterator)); - } -} diff --git a/vendor/fabpot/goutte/Goutte/Resources/phar-stub.php b/vendor/fabpot/goutte/Goutte/Resources/phar-stub.php new file mode 100644 index 0000000..b9c3b44 --- /dev/null +++ b/vendor/fabpot/goutte/Goutte/Resources/phar-stub.php @@ -0,0 +1,14 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +require_once 'phar://'.__FILE__.'/vendor/autoload.php'; + +__HALT_COMPILER(); diff --git a/vendor/fabpot/goutte/Goutte/Tests/ClientTest.php b/vendor/fabpot/goutte/Goutte/Tests/ClientTest.php index db0a5d5..654dd9d 100644 --- a/vendor/fabpot/goutte/Goutte/Tests/ClientTest.php +++ b/vendor/fabpot/goutte/Goutte/Tests/ClientTest.php @@ -15,6 +15,7 @@ use Symfony\Component\BrowserKit\Cookie; use Guzzle\Http\Message\Response as GuzzleResponse; +use Guzzle\Http\Message\Header as GuzzleHeader; use Guzzle\Http\Client as GuzzleClient; use Guzzle\Plugin\Mock\MockPlugin; use Guzzle\Plugin\History\HistoryPlugin; @@ -28,7 +29,7 @@ */ class ClientTest extends \PHPUnit_Framework_TestCase { - protected $history; + protected $historyPlugin; protected $mockPlugin; protected function getGuzzle() @@ -89,6 +90,19 @@ public function testUsesAuth() $this->assertEquals('**', $request->getPassword()); } + public function testResetsAuth() + { + $guzzle = $this->getGuzzle(); + $client = new Client(); + $client->setClient($guzzle); + $client->setAuth('me', '**'); + $client->resetAuth(); + $crawler = $client->request('GET', 'http://www.example.com/'); + $request = $this->historyPlugin->getLastRequest(); + $this->assertNull($request->getUsername()); + $this->assertNull($request->getPassword()); + } + public function testUsesCookies() { $guzzle = $this->getGuzzle(); @@ -117,7 +131,7 @@ public function testUsesPostFiles() $this->assertEquals(array( 'test' => array( - new PostFile('test', __FILE__, 'text/x-php') + new PostFile('test', __FILE__, 'text/x-php', 'test.txt') ) ), $request->getPostFiles()); } @@ -160,7 +174,7 @@ public function testUsesPostFilesNestedFields() $this->assertEquals(array( 'form[test]' => array( - new PostFile('form[test]', __FILE__, 'text/x-php') + new PostFile('form[test]', __FILE__, 'text/x-php', 'test.txt') ) ), $request->getPostFiles()); } @@ -244,4 +258,26 @@ public function testHandlesRedirectsCorrectly() // Ensure that two requests were sent $this->assertEquals(2, count($this->historyPlugin)); } + + public function testConvertsGuzzleHeadersToArrays() + { + if (!class_exists("Guzzle\Http\Message\Header")) { + $this->markTestSkipped("Guzzle ~3.6 required"); + } + + $guzzle = $this->getGuzzle(); + + $this->mockPlugin->clearQueue(); + $this->mockPlugin->addResponse(new GuzzleResponse(200, array( + new GuzzleHeader('Date', 'Tue, 04 Jun 2013 13:22:41 GMT'), + ))); + + $client = new Client(); + $client->setClient($guzzle); + $client->request('GET', 'http://www.example.com/'); + $response = $client->getResponse(); + $headers = $response->getHeaders(); + + $this->assertInternalType("array", array_shift($headers), "Header not converted from Guzzle\Http\Message\Header to array"); + } } diff --git a/vendor/fabpot/goutte/README.md b/vendor/fabpot/goutte/README.md deleted file mode 100644 index 53997f1..0000000 --- a/vendor/fabpot/goutte/README.md +++ /dev/null @@ -1,83 +0,0 @@ -Goutte, a simple PHP Web Scraper -================================ - -Goutte is a screen scraping and web crawling library for PHP. - -Goutte provides a nice API to crawl websites and extract data from the -HTML/XML responses. - -Requirements ------------- - -Goutte works with PHP 5.3.3 or later. - -Installation ------------- - -Installing Goutte is as easy as it can get. Download the [`Goutte.phar`][1] -file and you're done! - -Usage ------ - -Require the Goutte phar file to use Goutte in a script: - - require_once '/path/to/goutte.phar'; - -Create a Goutte Client instance (which extends -`Symfony\Component\BrowserKit\Client`): - - use Goutte\Client; - - $client = new Client(); - -Make requests with the `request()` method: - - $crawler = $client->request('GET', 'http://www.symfony-project.org/'); - -The method returns a `Crawler` object -(`Symfony\Component\DomCrawler\Crawler`). - -Click on links: - - $link = $crawler->selectLink('Plugins')->link(); - $crawler = $client->click($link); - -Submit forms: - - $form = $crawler->selectButton('sign in')->form(); - $crawler = $client->submit($form, array('signin[username]' => 'fabien', 'signin[password]' => 'xxxxxx')); - -Extract data: - - $nodes = $crawler->filter('.error_list'); - if ($nodes->count()) - { - die(sprintf("Authentication error: %s\n", $nodes->text())); - } - - printf("Nb tasks: %d\n", $crawler->filter('#nb_tasks')->text()); - -More Information ----------------- - -Read the documentation of the BrowserKit and DomCrawler Symfony Components for -more information about what you can do with Goutte. - -Technical Information ---------------------- - -Goutte is a thin wrapper around the following fine PHP libraries: - - * Symfony Components: BrowserKit, ClassLoader, CssSelector, DomCrawler, - Finder, and Process - - * [Guzzle](http://www.guzzlephp.org) - -License -------- - -Goutte is licensed under the MIT license. - -[1]: https://raw.github.com/fabpot/Goutte/master/goutte.phar - diff --git a/vendor/fabpot/goutte/README.rst b/vendor/fabpot/goutte/README.rst new file mode 100644 index 0000000..1fc247c --- /dev/null +++ b/vendor/fabpot/goutte/README.rst @@ -0,0 +1,105 @@ +Goutte, a simple PHP Web Scraper +================================ + +Goutte is a screen scraping and web crawling library for PHP. + +Goutte provides a nice API to crawl websites and extract data from the HTML/XML +responses. + +Requirements +------------ + +Goutte works with PHP 5.3.3 or later. + +Installation +------------ + +Add ``fabpot/goutte`` as a require dependency in your ``composer.json`` file: + +.. code-block:: bash + + php composer.phar require fabpot/goutte:~1.0 + +.. tip:: + + You can also download the `Goutte.phar`_ file: + + .. code-block:: php + + require_once '/path/to/goutte.phar'; + +Usage +----- + +Create a Goutte Client instance (which extends +``Symfony\Component\BrowserKit\Client``): + +.. code-block:: php + + use Goutte\Client; + + $client = new Client(); + +Make requests with the ``request()`` method: + +.. code-block:: php + + // Go to the symfony.com website + $crawler = $client->request('GET', 'http://www.symfony.com/blog/'); + +The method returns a ``Crawler`` object +(``Symfony\Component\DomCrawler\Crawler``). + +Click on links: + +.. code-block:: php + + // Click on the "Security Advisories" link + $link = $crawler->selectLink('Security Advisories')->link(); + $crawler = $client->click($link); + +Extract data: + +.. code-block:: php + + // Get the latest post in this category and display the titles + $crawler->filter('h2.post > a')->each(function ($node) { + print $node->text()."\n"; + }); + +Submit forms: + +.. code-block:: php + + $crawler = $client->request('GET', 'http://github.com/'); + $crawler = $client->click($crawler->selectLink('Sign in')->link()); + $form = $crawler->selectButton('Sign in')->form(); + $crawler = $client->submit($form, array('login' => 'fabpot', 'password' => 'xxxxxx')); + $crawler->filter('.flash-error')->each(function ($node) { + print $node->text()."\n"; + }); + +More Information +---------------- + +Read the documentation of the BrowserKit and DomCrawler Symfony Components for +more information about what you can do with Goutte. + +Technical Information +--------------------- + +Goutte is a thin wrapper around the following fine PHP libraries: + +* Symfony Components: BrowserKit, ClassLoader, CssSelector, DomCrawler, Finder, + and Process; + +* `Guzzle`_ HTTP Component. + +License +------- + +Goutte is licensed under the MIT license. + +.. _`Composer`: http://getcomposer.org +.. _`Goutte.phar`: http://get.sensiolabs.org/goutte.phar +.. _`Guzzle`: http://docs.guzzlephp.org diff --git a/vendor/fabpot/goutte/box.json b/vendor/fabpot/goutte/box.json new file mode 100644 index 0000000..943c61e --- /dev/null +++ b/vendor/fabpot/goutte/box.json @@ -0,0 +1,21 @@ +{ + "output": "goutte.phar", + "chmod": "0755", + "compactors": [ + "Herrera\\Box\\Compactor\\Php" + ], + "extract": false, + "files": [ + "LICENSE", + "Goutte/Client.php" + ], + "finder": [ + { + "name": ["*.php", "*.pem*"], + "exclude": ["Tests", "tests"], + "in": "vendor" + } + ], + "stub": "Goutte/Resources/phar-stub.php", + "web": false +} diff --git a/vendor/fabpot/goutte/compile b/vendor/fabpot/goutte/compile deleted file mode 100755 index 710f8e8..0000000 --- a/vendor/fabpot/goutte/compile +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env php -compile(); diff --git a/vendor/fabpot/goutte/composer.json b/vendor/fabpot/goutte/composer.json index 1c5e470..7f24635 100644 --- a/vendor/fabpot/goutte/composer.json +++ b/vendor/fabpot/goutte/composer.json @@ -19,7 +19,11 @@ "symfony/dom-crawler": "~2.1", "symfony/finder": "~2.1", "symfony/process": "~2.1", - "guzzle/guzzle": ">=3.0, <3.4" + "guzzle/http": "~3.1" + }, + "require-dev": { + "guzzle/plugin-history": "~3.1", + "guzzle/plugin-mock": "~3.1" }, "autoload": { "psr-0": { "Goutte": "." } diff --git a/vendor/fabpot/goutte/composer.lock b/vendor/fabpot/goutte/composer.lock deleted file mode 100644 index 28c91b3..0000000 --- a/vendor/fabpot/goutte/composer.lock +++ /dev/null @@ -1,418 +0,0 @@ -{ - "hash": "62ed4b74fc5e6c55b519cc3fa45208f1", - "packages": [ - { - "name": "guzzle/guzzle", - "version": "v3.3.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "v3.3.0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/v3.3.0", - "reference": "v3.3.0", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "php": ">=5.3.2", - "symfony/event-dispatcher": ">=2.1" - }, - "replace": { - "guzzle/batch": "self.version", - "guzzle/cache": "self.version", - "guzzle/common": "self.version", - "guzzle/http": "self.version", - "guzzle/inflection": "self.version", - "guzzle/iterator": "self.version", - "guzzle/log": "self.version", - "guzzle/parser": "self.version", - "guzzle/plugin": "self.version", - "guzzle/plugin-async": "self.version", - "guzzle/plugin-backoff": "self.version", - "guzzle/plugin-cache": "self.version", - "guzzle/plugin-cookie": "self.version", - "guzzle/plugin-curlauth": "self.version", - "guzzle/plugin-error-response": "self.version", - "guzzle/plugin-history": "self.version", - "guzzle/plugin-log": "self.version", - "guzzle/plugin-md5": "self.version", - "guzzle/plugin-mock": "self.version", - "guzzle/plugin-oauth": "self.version", - "guzzle/service": "self.version", - "guzzle/stream": "self.version" - }, - "require-dev": { - "doctrine/cache": "*", - "monolog/monolog": "1.*", - "phpunit/phpunit": "3.7.*", - "symfony/class-loader": "*", - "zend/zend-cache1": "1.12", - "zend/zend-log1": "1.12", - "zendframework/zend-cache": "2.0.*", - "zendframework/zend-log": "2.0.*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, - "autoload": { - "psr-0": { - "Guzzle\\Tests": "tests/", - "Guzzle": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Guzzle Community", - "homepage": "https://github.com/guzzle/guzzle/contributors" - } - ], - "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "time": "2013-03-04 00:41:45" - }, - { - "name": "symfony/browser-kit", - "version": "v2.2.0", - "target-dir": "Symfony/Component/BrowserKit", - "source": { - "type": "git", - "url": "https://github.com/symfony/BrowserKit.git", - "reference": "v2.2.0-RC3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/BrowserKit/zipball/v2.2.0-RC3", - "reference": "v2.2.0-RC3", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "symfony/dom-crawler": ">=2.0,<3.0" - }, - "require-dev": { - "symfony/css-selector": ">=2.0,<3.0", - "symfony/process": ">=2.0,<3.0" - }, - "suggest": { - "symfony/process": "2.2.*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\BrowserKit\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony BrowserKit Component", - "homepage": "http://symfony.com", - "time": "2013-02-23 06:46:07" - }, - { - "name": "symfony/css-selector", - "version": "v2.2.0", - "target-dir": "Symfony/Component/CssSelector", - "source": { - "type": "git", - "url": "https://github.com/symfony/CssSelector.git", - "reference": "v2.2.0-RC3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/CssSelector/zipball/v2.2.0-RC3", - "reference": "v2.2.0-RC3", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\CssSelector\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony CssSelector Component", - "homepage": "http://symfony.com", - "time": "2013-01-17 15:25:59" - }, - { - "name": "symfony/dom-crawler", - "version": "v2.2.0", - "target-dir": "Symfony/Component/DomCrawler", - "source": { - "type": "git", - "url": "https://github.com/symfony/DomCrawler.git", - "reference": "v2.2.0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/DomCrawler/zipball/v2.2.0", - "reference": "v2.2.0", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "symfony/css-selector": ">=2.0,<3.0" - }, - "suggest": { - "symfony/css-selector": "2.2.*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\DomCrawler\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony DomCrawler Component", - "homepage": "http://symfony.com", - "time": "2013-03-01 06:43:14" - }, - { - "name": "symfony/event-dispatcher", - "version": "v2.2.0", - "target-dir": "Symfony/Component/EventDispatcher", - "source": { - "type": "git", - "url": "https://github.com/symfony/EventDispatcher.git", - "reference": "v2.2.0-RC3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/v2.2.0-RC3", - "reference": "v2.2.0-RC3", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "symfony/dependency-injection": ">=2.0,<3.0" - }, - "suggest": { - "symfony/dependency-injection": "2.2.*", - "symfony/http-kernel": "2.2.*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony EventDispatcher Component", - "homepage": "http://symfony.com", - "time": "2013-02-11 11:26:43" - }, - { - "name": "symfony/finder", - "version": "v2.2.0", - "target-dir": "Symfony/Component/Finder", - "source": { - "type": "git", - "url": "https://github.com/symfony/Finder.git", - "reference": "v2.2.0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Finder/zipball/v2.2.0", - "reference": "v2.2.0", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Finder\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony Finder Component", - "homepage": "http://symfony.com", - "time": "2013-02-28 14:06:36" - }, - { - "name": "symfony/process", - "version": "v2.2.0", - "target-dir": "Symfony/Component/Process", - "source": { - "type": "git", - "url": "https://github.com/symfony/Process.git", - "reference": "v2.2.0-RC3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Process/zipball/v2.2.0-RC3", - "reference": "v2.2.0-RC3", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2-dev" - } - }, - "autoload": { - "psr-0": { - "Symfony\\Component\\Process\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" - } - ], - "description": "Symfony Process Component", - "homepage": "http://symfony.com", - "time": "2013-02-18 21:28:10" - } - ], - "packages-dev": [ - - ], - "aliases": [ - - ], - "minimum-stability": "stable", - "stability-flags": [ - - ], - "platform": { - "php": ">=5.3.0", - "ext-curl": "*" - }, - "platform-dev": [ - - ] -} diff --git a/vendor/fabpot/goutte/goutte.phar b/vendor/fabpot/goutte/goutte.phar deleted file mode 100644 index 8a4278a58ca1d42cd985988fd2ccc773ec8d588c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3625499 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

!s-HG(yOo67!%t~gsEC2t-nPgZ z4U73YRt`UX_o7XWHcG13Tz-osmtf6XcG-3As+*a<^M2f1y+hM0KQC1V!|&>dz+j-@DaIRcbSaLQ_Ax7c!Tc&KUCB2>pwL|2#(qJ z_J~|(U+pA4t#8>04lBmg3fU;F?>4j9*jY$G@B;qk{r#uS5&&e~0|@WFGz_R<`Zou{ zNBJ8*td>4!6>s4R_nw9Zq<{x2Yplp7SO8nnT@FvZ*w=i%iI-%Ztr%KPkx`1s82n!8 zXN%i`WTc<{xNO6LaQNfS-ad*@9{&5k|2tgn`iMjL?%DY+QiCQ}ljF%aA8jksvEuuN zuVJ9*CZD&S(yf4UwS>|(-S_@`KjiW>!EY$aFt`$*Cj}PyoDwGp?i5xCB1aVV;xZHu z6Yi(W=Qdoopu+J*dK6AZ?J#iuk8^3K%}=`VU9Q;xG+&Mp0+Plto|ND4LF^-xp~^g( zH+WcJNfYte@MOeyHxQP;ddEk_<;c66Kvg0!q)Y~2A48y;V&p^g2-RABDsh~Im8leM zQ6)lD)T+Of<@%vh4bQ<2m?V4e-E_pt2+VzUT63>n$Z59To%GDG4PK|7ls*WF8g0=r zgtEeVu@TmBEt0$tHIRXG_fLAZSi5+kf*ZvPU61r2w5Lgk?8aM#LemI?rDqGf={SF^ zxffnIt8IFBy$Du5C~iQ{M(MU|B>mVxk~@E_NsMD7_Q@bomvK~4(|>YI1fk@1V7x~K zQLJap%*C$mU?pSQPWvaUMq7GNuYl~TS!FUp=}vQOq+i{m-{J`BI6Y3_13wB)lGP;! z#moLOE{;;oS7(TJW63%F%`HR1YfME(>ON?GYOh7_yd_4-P= z1WPa**ImXsopwzFV5|ja5o)PTdSW?j^#slgYt^+vyCvwuP!qWIRVIzy5FIjAjrtrV zcfU27${3C&cpCtEe>i(=|Lq???r2|dhGiIo%I8P0 zpD-nh=0MA|L+NFFW0ob^gAC~>`XN9M)*#>1G?oPyR3!CSS-~^LzP8s)z0)ZO+qA*&Jyl>b4FTlfV6c)V*t0Tt|{N`h9-Iwh!x2 zb_;Z|?Cw^NFBl<9=hbZhxo4Kti&Yc_s!>tJRDpyn_kTan6PLX0+*Jk0J?Ajf7VMon zGcqzFGHw}33g-YBf%8R5?7_J)k)cU6_SXF^X^&7nz3Ru>@nE;jXo*-03x%yq~_qfo+-ghfz3uDr?d; zD*Vi7`N+<+vtd@XzzY!5MrEDpyg6l`o`y< zM{_C>6>~7z;BC``#N|>);Myq~eTam0o$k7MA(OT9Z9_cLjC+Cq;4n`*jN|jOfpq7v zb$2KpYjOI=t_){|bk`m=;#BF6sMG@Re$hx+2vndvI5?jw#Pym(1i5R9Jw?h_6tPP8 z1!Vj<3TpnvpGpk_or1W>D>LXCpT{5%q*mX7M0X;h(%m9i^q33M#Q?o^dqZKX3M|RP z(?Qz$(CXFLVXp6H@(HS_$-Nr&^KMpupR_EAeU&LaV|^=i+#_Zgq^(biYmy)-=mDuL zrSrz2F}cdmoYiPS`4%f8AqktUjv*D_t>8yG2(9!Ct{-JOu@t|bPR*NvaR?$S_d|#e zC+80y_+VXNckLAt+Ag93LA>e?p=<&9rkCIZH`_qiolLTjY?k-F6h zp#C%HchV2sH{Mk;8Ee{BaVQ4a8|uK=_`yRT*2Rfgn|2Z3>O2Eor)$!PO4lciQ*jVR zdpx|3nWNfEfDQ?6aG*2L%TF0CKlyEhgA{7=N!=wJJDowC+`WS^3w=(f6fUf!2ZCVB zv@g(AUwSYfA2kUg77Q4g3GMlE`FaJ=i)6lf0-nqybV#|xPQ6goXub=Bg6btA^~fW4 z34vsG1fHO;Bej5;o3TBP*uT^EEoFe6+Y%@~PSF;h*{LAGv?60G{u{oG;PmxP~zM+I- z33;S~WO41QXKs5wcz_XNhQ-DY+|(Wc4n|UaDglV*M`Ud;8SwMq_u0|6(Bb+YUPy$B zdslxvr?>bJO7nO3#hTZO zL~S5gIe>~*zW-q%%FhgFu zLwzl!DR3kscHQ*!s2=Xf3d3=~kZX2IEEz#_LS}{|oP^W^9JT{`iEVC2*uD_>v{J-$ zpgh`oy0^n;*%4kG<~$l=TSB}B8{Iy0Pvq7*Y--8#`P6F*qCE*=8^tJixAYS^M{5vf z4#P67DJ&A{ymN_DDs@_4kp&DbLMh@KG>Mt>RnggJkj*e4*Q6OH6b@;D?|gao`!H5jy$Z0lH-J0(8qT2HQ` z{bA~vEk=R}O0}r))PbW)7Eoy+baLKu!^!ph?@^LSX#4=XIXK`zP9MV^uZRTJ^!cr3 zZ+~}Z>)FAhCr@#m^}*kFpX~1>riCI#+jeaIt+@rrF*$0kl1~gjrmhnNA=P|z+&bIu z8YaH!rK_626H3o9CI^gwjYF+Do$#&ZFL(a>T}w}Kdoj$Prf<@5qMRIOce`q@NlS;) z%~?aK@-|mDN4zC@8@|(iD2+J>{_Bj|IT~HBB6IrZuh;3PTu%zv8A!9C_@1Ohxa*k& z$RQ?PSqCv)pk2$9M}D;2`pZ2^t>##Y2~kfvcaeiOoQ)-AS;3?R0ZR+!8EVvz`-8;R z3J_(!5wE`*05JC8mg=(c+5wTEm|%i83S__+ZYPFnTVfv72!poc7kiSJD*i24q_~&~ zyR9SyFbP^h3WjIgGJ`Uos30abo{`U{?)z4J24C=wgrTZw(ECtlKvzog+&p;<%LI~w zKM4zRgo~bdrqL7G73bk{lhe^9fCw(M2I`?kJfOQ-r~|((gAm!5J}EJ~`?${Gj7eQS z8p*HnQ$wu!i*NbGSweC)ej+S13)1KYcOygL8ZI3UBzVcO}2 z`b0chXo5=&#)O%h9%_37M=(O6*wQ_s%3Bl7PoodWWKE5B8X-lNW6f0IY}-?HGKsph zJ8&w~x^Oo1!RT_)*f-5Pky0QRR;X#ZToN5LuLKh~!AnTODgNQZ2NsQ#0+Ofw2?`$H z9!_q%oY_3aI!rgH46>DVuxyU%Dyqy73uh*(97cx&(pODI2QR`|G%))m*G4&bE)esav#;#CMEP>eS%^5JZ_^MB$oIiRwNT2VujOfNm5CgrLrW6 zA9B(2S&EjLO9CvI_Qu!P6g87SoYup{ai^VK836?Vc}&Cqi^ zL=naX_Kv}UN5hUS*JcnjQ3k&iXK+EuF9pB)T!LN};Kv7s$t78iHI(M4S)6&%3G=N8 zLV&6?=&^xFU|mqY@dLsp;}JF(sV@Q-brGRigIYTrQw7jwR+h~%oA{@Rk2O7Z`F(S6 z@Oc=pKk5#9UMdxSl-iMm8fd>F~>El+k%$1PMgik$1e|dUOWZPM<~ll z2e&<`d#zs6d`9Isa>zd#Dca&|D;~!^dA-ekzADm}UxO9r;Iy;1GcaB4<6UX+Qr@>e zM=ELfNEl59e8qZ5aU^DbC~J_s94AU=J)eK-7SQTRzIc(+Yi(pyHj!V_kxXyuu4uGp z3Y#Mf@&>k}T)F_`6tX9XBxCF@DH5nWvMww~*g`dd;5rQ7hbj6mlC~pUU9x;|CzyBw zxj5YJH;~a1h29lXZ@2pV40R6G!f8N<^meT{oG*bokR1+(cd?%%R#S=lVGuT2ClGlv zBKJ&IVDE!pz^`*{diO6cg(v2~W!MTAiLkIG)`WZW=?d^BTRaTFyh_Y2?;toGhPhyR zcG8_!RipChuB6lKiFYlu3b2)*r&*=c7vdM!1Xy$uo(*`z|2#(a_!zD!S4rfosc)}C zFQc6z7#~F#+*f4VU3g(i2FkO&r!JsXJ6ZQiiKG4eISv3)riM4_#w;E(xBUrB14vWJ zT%!(GvW2s~%tUKYnG7~Mw|_jMW>)Q*Hr1SX`Mqcd15Jd!9)C{SKx_*8Vy zR0!a>))6`+1W_RExuXc2iX(x|B01jVIT2;u8KT%MWn2BY9lLNWCdd9ba(>V(%vH^# zNKbw$u5!X4d~*f-#Ew@#<)`$+`8y@)$Scm@g=;#0mSNM*Y!c;MBAk^wkBd`uw9SFg z$HIS0B&*MWi`QPNE>MLyylz|v#7g`tL90YsQe{d@D1qvf*F{!~VO7HK0F@3BUT$Wu zJ1tXz6U8J~gwzF38?U?OtmCAZp5^sMl0*7lOQi$km5NW03MkW70GQ3XFiVCNNFAmW z--7ELe=HKS0@o4f+ZV7>lXMuZ%V{Cu{IPy{l5A>*jq6Fe{ zc};<0*F+N;pWQDJd!K2~*W)W;_lw)9SomQZ#gbUyMK;v%SCen-zNr?yel`syz!@tD zRZh*oEr?W$H>DvP=N7uj)H16y)VJDxPK}8MA@!s7XZ^|i80Mm@7(oFFPaLk(w& z?rY=gk)%--7$b zuzD-su+U3~$Kh6m~F^ytWlZUBQ4ercd?)^0fvmq@&fHZK`YA#KQPNzIX_O zn=^!1$Bt0qB?rGSEzym&zw-WR(@%K+isH`=Jnv{_pR2K@0Uq$QaH23Fe4>jP!=Ska zM+gOcom}vToMI@(fkX{DV*97J&Rm*Jri}6Qr2HXx^iz~=6Q>5uss{%GfDoPqmU_kC0c-HT z=2Tk>A=5F6Rurzqqbmy8+C=L{70_Kk-!eKGZ1#hA1z4>}vs#=*E6j&M(AGFAZK-kF zQt{VZ`zm^J`7Gp^?7gecH&jqj3_r)=DhsM22EiPkOC}_XVv0bzjPpr}AF$bS)o`}) zL$&8HZyXob-u)Q-A4HvEB)fD|!mLO;oZJW^@Jf@+yH9)h!zh#t9%|^63nKIp7A!0j z2}vXZ3)px$rx=iy*Em^+LPS~&On)yLh-68=-}r$thNs<2fY@Ien^rCe1d$0Ur8^Hx z@k^(8nG5e%fD5#&CYBgBb`wWcYl*(an(7kNr8iwgE6}NFhQ3W_rGsvJEIfu^u<7@0M@Lv2 zVWq~uG&oa>#vX;8reix-16yhqX~{%)pR~*xdmUKGv7885t%^RywITx+QAFrYa{4WH zDp!u6rU`05tLf864!)`?Qbq^`fX~JkCny`ET#D&(@e?ns*g>qp#OLL>Iukk9vB5ml z8LmRn{C*b6q$9sx?A^o5ePnj}cR{{~u?!@=LDJ&Af;EE2g2$nNv!xx{q&uf#pZ%&8 zv4Pd~yPJ2BJygzZ^^FUg&PyvZDxJh#$>oPi9mgV(coXpfN&gs<2nVFCVkh_y1+^~P zWt89HhF~1=#bLYYc={oJkVr&PA+r0hjNV?a;p>02GuCu2StE?W-LwNJWqFx&GsFSq z#EHj;wsU74Zv22b_H+(7#ILSc9T{PW9-D{dO)#nC`uQgZT7F#8mT{dW2$!?e34LB7vjtBSLU{03(nAz6{xnfdvh8b=fOt&pe{_6?Pp{188pdNbS!4QmhO z9P+QU4Ro^p2NZHxO8GJ-{$n#z=>uG<5Xh&+wowG+f3@uuil(SDNXjBmX42#)ayTsi zQ&gF2Tf~9ulTD4V@@Elp>w@6~@;#tKQaOLYlk^~E-mmmh#eQws99D@Y;b`{gR3r~m zi&4!Y$#z{M927`yEXj26pST|F74Y6~&T+8tTjHs@^?~whhewqt1D&rTyYfqTl`Cy; zG^K$k5bhR8pz*+Qf+JbbM-giLu zp;=nUJ<+x_>LjRA6&@#bn|xbZBC1V2l;u}a;(MbR!l4VE7Qu>;ZI+i-272-R%n2Zpi zfkOsab0?^2zF@O4sI28<)mbW?2XT-k+6I5Gf9GRJ2v^Vf}lSe0ul(>{fFxSxUC$k08kmMfvpg-L`e8 zO(DjJgV&PqkGl+5%;FzFz3LVE@tu@h{Ilwo=P#unwG4}naNb!omIzj)SpPcT!s1_v zPzX5H62W14cCw(V%Vb%DP7YUH>(E~Fl2F7~ zl|2&4`*Kno#Kx9A6*z#cC5w;BLwLn;{(9dPeq{r%T+&r9Wnf;>n(eXrw(Z7H%`!up^PD!$cp zbe>4voL?j0QqB^UUe8f_6s%aG;ru|m&_(6;?{IFM3WtP=q~qt1Vd>ky7dI4-U# z7^>nA@ds>F_^c$!FjxnuB7t;uzhWe`ACGXQflLp@MkKDF3e?y3Pk9PV$1$T@BOPWQ z*au}?BP0&wR)p)R^3^B(7I>lf2x>C)$PBVp320kKs3h~@cCwgJbS68#%KNr}e#x%| znbJiFuOwk3?7j5jS;l5DQ4O(#X)Xe$m~4d%!GWskB!KHyLw!3+;))i&o`KJtkXt|) zYVfr>4Et=-^Qwv%jvx(Zqk-z^X2w(`kBwFK5GE{B9A zL`Sk{kJN0I?SYCCb)*O2x?EQhdnih`h+HFDlQ*vm4&~w`KB^W?qTE=FM3O`sS1XrZ z7HTnH=o(3qogCJU8DLqkx_B3Y#qCD_!Hc-}VBbtm+Alpx@TG)r+wWsA+;T0$1Ar>j z_jMNgR-wrYsiZP2lGJd8%?5KTAZCO%EgREg<4y17i@p6@&C6H(&({9-<6F(cou@k} z)0pJSDH2e;MGM0jEFp2y|4uUF>R$vjb;Q&m3bi0RIYh2Yv6!&VVBVY{AcrtGr#Wfv zKKoe;WufLRZ{XUwL`ghc@O$^p9g(x6$%S8OQ|=pUFqzSI`{Eo`BSBSn@7({(w}1Z5 zRLz8|B`zOHAi!_ciGLsBIlHI|n_JiQ7^bhnAs0N(o|;i) zjmK+gS}B5X#lDz~QRwlUmsubWo)r`a;|o-i=86fy&@!ibGdf2(EvYN5B&3vr4U4Le zIdfEvjI<(Fz8O#HJFId`Z?y?UT>51?2oP?zVz_aPRMrQW7I$XLt87!>a#trbsH-g0 z0&ABku~*1S^qICg2q}kgYNB3B|Ezk?(gP13?Co#u?;Py!Zav?7w6iOAYBDkTd(pCd zQF&Qg7wa>+6xOL7f!?i99=5_exbZOaBd_}@&A(1qrK zOl4UUC`-Mx8~2{?5lc7a4muM=w^x2SzMV!QA!ERS(oZ&4%^EPEb8=|+m=F+o0t>Zg@x`2UlEuL_ z>{eg*h^c$0yvZ(56+7_@;S2;_0T^G_<5Ro$BT@=KQYiz2t>HS5Uu2y`S?XLF8BK-z zA{ik76*JAp#C4V0O-d2v3h@*ET!$X?%hcfFlUVdja{VY@t#eNzv~0i{C~Yv>%UdUy zICMejd=VYrrv3)iJTH9Dw)}y)B0L(1ftfvtjFv0_<729QM!-!ASgp^bmLxTi+jlqb ztY?J9;fiI9HdZ2TKCfg4<^D{`UMgzoD4MRU6y4UZoTY@A<%DHO)SN0xowyZ7R=CRr*m8n;>f%S3}bJ z5J<(Ua1qdBO0~+~tOB=$QFOhcBg~MrQo$k_<*@|J6+);rp}6g*KnWF2#V#sMqezM3 zgm*28Sm&it>8?=nl=YiSOq28p)kU7Q4`ic?drA;@dw?DKWA_^f9hqOjgl)dQ(sq-Q zWfwuNu3=(pKOUW2%!Y2!BZq`~|3GT+TV2-E{$+TLrTDhw6q^wk>7}J3YtYd@QZE6u z%H1d1`vEYIu4hP`0&Zz*3VCO7^j8fKax*1-n;5F zo^AbSHis12bd0ErecmnN#G(`ZuwP?6~5~;#l&!z(uvI!$#W{F;%&g$kff!I&R(Z%d4Ig!r7 z3caYgoDkjr!W2}XhFLgui9G*QO7(OO`k}Y~UtNYk$gonEC;~bIw7dD@C!-n`c=oWQ zVI#OKpc;U9tt7+m{vjd$!WELfhetamwzsvI)i;fF#c^F@1fc{yix<{m{$E}8zY?6hoUrtmLcl3iqR>)>1JPO}eNX~sJ!h1XnUfI^}CVnyKJo0J8 zP*hEL>#(}#h<$~(<@H*i>96lYK|SlkyoNT|m%9yKM3ZGv(-Uzp3Sb5!~QRF{RT zTN-Qka#x!a(ru*5CI;4GgSfITNC{d10hdTJbyOLRC98v9lVwRHU}7f-`bBLm)CZYJ z7eny_*(V=yXC-I#zG|n62&64$t9}bY(r}~9ECH2$R5g(+bgsFx95>R5^qb?i5ce7`SLL) z%*f?jF=%0nQ@2;ez*1Yf7o6tixK$TE3eO(wJl}rtaOYtna;oCSMyj~jvL2tkdbS&*cX0+u49fKHWfM zlSR~zhDUbUfqoq5fuBk_HiVtdZ_6j#kSb@J-BTt$mE0+2yk-C7DOSHDb8C7r8w`Kn zX|F?Z<1UG!Y3R|TZj%I}yZv$1F}0tr|E9`^w}GS=zbKi8V}qYIo2SD*ggy5Y2Zw6W z_cPO1&f zWgD4$owLB0lr{8Ny8E2>iv4?obM)ecc04?l2!up2EV>k&*PiQVnH5Di8!JY_xpt7x zRR1KY;1`RwR0y7P!GH@9MQ8%&u2jid;D>;gZVN#Ao7MFzL@0AB8& z@=y-l(rSq`q7jq4u$r?G{KOr=%QcECfvdYc;4uxq19DmOxDNwvY~X(TGkE+6D#W76 z81*Fr+90pfK`_h#SoHoR*rXiGuqocB5*s-Rshl;<|G|G%HgsTGdTM@Uu36qNw7(K7 z)h7tLOE9l0pE}Umlmlxnp_?+jXCd_@`2Ia8{={k8VTrZRFukDH%lawt@-(Cjl`P|~ zUGtiNLv@tOFG45H1h!uZUB0Gj+tWt$bgGyL6?zhWImI>PWnZ6Rrl~7tAs6k&d)M1m z2-WV8z$Md`Wp1hBjowD;vrZV^}5aKiQUO0aTCB}JfTI#+F!0x?S`pZd(&SSZQz=7?Yq^k&G~ssR5N5M=PG zaZM`hN6C_|HW-D1{sIRJ`@T^J8mlp$>Mn7yIWuZ}z2WA`rm*o>o6W0muP{o-LyzUP zuA-<#>e9lT9$d|J&%_~!;T}3QhU&;VDH0$EGvPH=AeB=^RJh zM0|*=Ey1Fe5M~4Rn{V#i-T3Cty)ZqQk;xNx>PQM%zxicn-}PL}FdO+M);+9X$8WI> z{DZwx@7UNx+Mbj#v#I+uZO73Aee44Q3HGbp;I_h`2C*Uv9(vCj&nMwXGfNI`0k~As zKy>35t#gU-VswfdZ1t`j?qI0CkGfpEBvj$VTG+bY;i95Wp-e5l?jY!;i60Pi*GMq< z+rM4Mt7Aok_orLDAt2aIU=PvxzQ*ouH=Z;1Su?f8a7^wZ5G{BPaz;`PoPki*X=-TO z)3A_47{jFG6skR15*0{I_$7pq}O6~B@Q@;%v_rrNMRvd?^9RRL@f z`?;Dra@#dYwfcolrjZ&zKnV*Fai5pH5z^)mDT?qbkIzS_aBN4C)T!<=+90UwWm#&y zj*o4rTn#)TqUr160Uhb_llBXc%$;c{K1?l%h+;`ic=}U_ojvjr~U zc5lUhtG;S)(18t!8CB24`-j>1Sk(I1GJaTH|2Cg^{7Zjpht$DL68njSP2pM)rO{@v zqLkR}X&1%D0}RqI5+c{xv)~dLP_BkyA!z}^_M2rBS_OjCvwyBa6$OwZO?Sj!5StLM zQ6hZWsG<7SS6&ru0<1rVQS$@5?qi(cB`T!*D1$!h zmdLUIB5uCW=2d5wjhstIEzs?I?WapQek|FI210%9GQu~gRP!xmiY}!#X{}%Q(idxZ zPQjZV9ZHr*y2=9Hirv@7)#WnaDQ~9GAf!0`b1I#wFbjGeKYvr)Ts+SU_$^W=k34j&dl5Z`M(7scFo(hDHbC=V(+lx{L5hO@Fc&=lO$`cF46x2Lcryea)ivGAr0RC zDq%!Yul@#<=nJxRK!$#4*#M|UF-K}D4hPZ6jNAqD3+?Z|+TkK|-BG)lB#pGK&`P^4 zVY&jE1wb4=iEu-*l(2Mc2thuT`+=H+wK|3(w*`-KDlZwf6xa#xlU8%F6;pCsuwp0p z0Sqap>L#Cl3M4K|pc`|F96LK)E?NzZ@>yyR6AO_dwC^~L4zC+O>g+wgZ#ly0I#F7I znH|Ly=~x3)8Kvubq36U6Qq;F^m}Y00#F;J*cm6*2X6cOz$ILz7aGG*AfhsVcPY2XU zLN2oPKt*MG0V5lNE5s|r5ARv&(m$0W*`6EXOHzS z)}c}3o_j2!=E^g%KnwsUzOFA1$}iz37@felc60UXXi*4TP{&;V+P}ixpOA^nbU7xp zWQngsj$Pi5Lt@cKl`=fjfe*a`He&03Pq$-4IVxZv{~C(>MSuKQ^z1ogW%$~@iUvmi z1g1=g8wXfYp`oYYox4-1#A%^Cq@{wurkXX6ww~_oaL>mP4bRc4iyNaQIdhdx74kj< zzhroN1W>mNYwZ5h#B;i)xUIgz?O#Y+PG9MCfgjl*vr(y!`vnk@FIrn={taAi*#kNG zgqt4HjWgM-;{I8#Hg=V@cdAyELkg(xP_~w;_WD7qWF@yoxHx3TGN~I6V`P-amiA+4 z6K4X{>;vp@p7zgS|5LS? zg2${rHYH5f>cd;+R-X6YQP6x1iiLRW4`e44y@UeiXwaW|7$)5b;$s1Ct{?vB$|vpnKlrz?z5iG zaL;4tE}?w=Say4!Hbs#eK|L8DGzZ+=(4R0u0pk<@FO1~cs8l~~=I^i!qx|f*XbL&o zV4h*0s`3nd+pL*dE`Al77%;;ORI^siENfk(QH8@1S%swFUXUn0GS02gC$Y3D@XDIf z3Ab2Crao$v`>w|IiyLV+m9;TofC32>Dcr@0Ckb&9j5UZmG)j&%`$S($2U1(Y14qRx zXj@-Hi+Z3{m=YRf$ANG{(vpiN0PzoX&z7>2-*E+c3RS4@#L(J%oGOhx5r9MKCu#gc zbEiQw-ei4_TT0)fek6zollzL_`Qz3EyipAjLX#~l7nQ>J%TG%A|76#n0-qX8|NJti zM|KkhQvO#Wg>8?vBf`mUz~Ua_qYnxy@@X|g_?Yjd2@juHQun=aK+b_<+h^KCh!wL1$%8i-ONr2PzGBYMA8snkc zdXTLJOwI$=(_?W@gi|!#>1HCSJ?fUZW;+<7g>Q-op7`cJXT>>HjH{3&TBYv79hkt< zNX01X7=ix_+pGfv!cDH`!l_ep8yj}$jc)Z~Omw~Zg@X<{LWsvFE4^!HyEw1J^z-w3 zo6SqmHxf*+ZHhXVsb3n4qm|0YxDC>p!Xi=tZDEFTy3D_GvFHI+lcN?#^$Z)3uPC90 zJE$Wo<%RzKSV%BGttOXnLbO4J6EmD*+xms>C5a)M4G?uPgJ02y;a(v1_s|%v7@t3% z8g-KBx_%f4PJ2^;>;#-_Fx@~bV`%Lwp=!gO$9>!6Em8=8+wFTkZ9!*CkofG(X7>%w zP-PQIR&SHF!1lem5y zM$BHz?;|Bd;K&0KO;SzL4}RP1U<%_Xg!S)q9%h>HMEJ34=vK-O(-Y|m`^|PI;QyQpM`{7h$RR{<;3dc=55LsoFraJ(=J>RjCn_Pi5Q~= zp}y6Cv8%S*!w07c?QBc10K1q>fnYTU(_*f1UfD+{_9>P~l1Jh>rcVMlZ+F@szh_xecPAf7qEsh6)#neD-k9jW&Q~MV=bnw=7(t~l)DiaM$)TJm^zr(OztC<;U1duv?q(!E-n zFWVVma1yp}N=u#EO+dol`Y2Z26-<2!_)3S`_#rI9%}1>-R53c@S*HEs@S)t*;T2v2 zfOIZ{%n@#g>y7BhPl%52mWuW*22OmSBacn^qg&10gj5nYGY4V$XJq{zv5r6-s^!Cu zwOG51+TNG1w1x$?rRf>2{rD6Z;-8G&V0mS(U)Es>^r7-X*&&l1e-Mf27+txC1z4Yj zKvLdYqulP`m4chu@{i<}6s!`WoL>^aZjKP}={Bl@?n#8GwG2>vLX9HO#QNWysO8Ri z7S^Q@@qAE!2@(sO)CqcMLBjfxyoC$=iuLC0_J1Sd^@@89CnwYA7YT$}mk&C-Oh4&D zV5~4q3&hqY+p0KO9nf9-?YLK4*2@>40-%PSpg}x%fc1D{$$vdum`4@tQP_GE0Rhdt z{y3}jIz?vU`33~nuzzX=UaxoYti_;$%WOg9YN5&#Vp5g5N{WTV|G#JU9!bjWbJ-gV z&GwI5=dOlGbJ=Sono~A56fZr(QrSb>S`!UI62wvveNDYHYJqH2q{M11!u%@CxQ%ueRK)2ivKRa(W=n;60d}&6o8Jg;a*0$ zY0)S?dU$~<25BPG-~+y{20^kP-OQN7^=IcSb9XWSfCD~eq z0Ib)o3kYin0?YUTug<8`boJ=(7lX=9ktj5uBlp(R{#(@L?>oARp+?n_r*IDlv@_)U3NLnECnj-}{K{1(?II5a zp%_#gonWUN3`g&o%Yj`|cS!yrL1>!x7bkCJwu*k?5nR{GnQRWw&0&A=Zj<&q51`~v zB_z~-4EG=k70&1Dx3Vq?)_6MM*nI#cQY>q*ZVxvHXojn!vzPdKOH%J$4syS@4{pI1 zj^jbC{?WTSGH1WdLB2tOn-$$h7e>O)nc2k-HDWajQ_Z2&gPI$Kt|inq47K zizr;?byu9i&kn5Nzus9mzEird%&TMTVj1j+RS%Katq+Y3h#PC1h;cZcNCk0caF=<~ zT#&@X_oXdCtXTIRVR!R}{m>cfGbvMzA^7%iwqS&#z$n#r1a3GHm#UN-+tBO)Lqf(* zA*b0p)=cK|umy)te^yKM=NAC%;Sf;Car^<2hemU5jr#Xvk|*_&DHnpVz1|MTH;_7Kax92RdP5P4@(+mUjQ((GB!g`)_Ig#McDq_8L z)@lvO5$PcQyUasA^W&*M;|Tp=ou>$_oR7Y}+b)sleehq_t^{>JA;N%ER^alFU_1aA zbbEex|KMoIi?0DJ-sY#Z+~ll=ivFy-)*SM z)07>1B8-T7jqqAZP00btKA&d+R8d z%vmSNtJr~k1~%yVdmkz-u^+5Dy=OoCFz|#~>2j0EC;3w(*1J z4D>{6J`mwOT!&lTALHAL;Zamfl2@F|fk^oD+Cu9d@5-6rQJjV~bA<641Bn{gYn>?v*NOKV$*@? zmu80{*7W6@*_#RfXD7niVEY{%rs}BNppK>i+@Sa4nBOu5A4lq=yz$J$Fkj&a^%3C^ z9bG@*8#R7H8yR!n)ZB&~UadFthF~mu@uO{Hy<~oBvSex;PbWqnJG0qz*4q&<6q=R_ z$a3p7NFF>mhH*HZ;aIgyoHcc({Sp;VV6f^ae^$M36 zGGfFz)>;+aK=dVrl>U|gm$Jmo0R&4aWUcKi9cSYQ2jiv)DOgw#{3#%QjY(8fsLj9P zR2$2A1}R;>V4M|K6Z$on1j_(MNafVS-^TQaS>yjgESoUcotG%N&WLss?O*n^Nki{^ zs`e0mjrC97o}Zt=g#)b|zfk|x<-$%QwO#ha7DcD#R%K`S!3eiy{Bjm1z`jHauMaO0 z?aRt_a{EG_1ofL;#z1j`hcIYo`hy}tw$<9^NUL%&!9{nW} z1|KIHXtM8N<9&4ocbw{lXVaNlPKlKtsYVw8y!H~!eC^S*tcg6!*gH|wywNN3w)Vbi zc-%Q()tBZ!C9y7l8v*fBL1Z@l;!APSy71EZ;&k-Ldn(@rr<=2Rlaf>cgoe?bNLoBDT_v*Wjbn+EkU3P`p+_+ z%kU0#aCvVIKDh8@uE{LHU!fS>90E?ffFLMW9r!F@;MVSs{z&S2iL9e8?5Nr_ zPE|UmH2n;k*lic^H`|)99nuX5bNOutew_1?hJPqtNVg>@DVc8k5O5()KM&Cew@}?G zhc2~;*f7BY)R!ld!T91RQQNGNE!i}jnmlGbD6?>>==e>599SIre5i8J1MR8eVV5KzBB<#Q3KQX)|_ced@@|{cpMyKy&=OR%bm6 z*icD;pKy3r!JPNR?x7lWU{o&F9qP?3^)y=60!Y^o{B@v|~fqqTv z{w!k#b$0QXXQuVud`yVgR_K6f7Fc~Lk?AzoY=d;SUhO|V_<3vZ$#w}IS>_l)!sZ0t z9<4%zlmzPJx58DCv;&~!T5d?t)KqsS7E7Jk2*oFxFp8m^Br5kckw^T;zEW4LQ!nQj zVpT3{i!ZR`+Ym;U2Hyx7@?H7Ph<-YT$!9tG;avh{``@z zWC=9!L$1l76B}+bF|QC-#x{34g{5iXWjY>aL!dPvnxhigi5w{wwJ;15Ft39fe$F48 zDJZSJ8rc3Mq$b`C3xeSmW(k6sV028v2cdFCpF6_b->c)n*;QMW1eEq{09>zJX4tz* z{YvcKdH9!xR{ZMK-p=mJzaurxrt4yXev>N9`6|b7NQZfMb5_T!qsOQ)4Ax-0O)qA+ zkT>i`Xs+r>1XQR8E=(j5e80@LYB6&dVH2X|N7*f;tJr;I=Kj%Vnf)s|jQaBzhyTs= zi=`H&wfiv-XhA}tz#30+6^7+!0Z~JarF6|V9Eo7vd^8ZRj)oFH@KA-)s*oS&NH+z3 z)Uj=Dz)wMrI6q4u4djx*L*5V~QT~)S)K|(FY9VN>M=ZAZ88CD%)|H=^b-exJ*~_Op z`#UYlGhs2CGIML!2I=WJ%F9$;A@~I>SwM~N`BNcOj&bufDFsu(r8yn6qM|pk9V`Ov z*fB}H##F+R8o8?2ch`+V=w&aNVkm|eqJiW9gC zC7B1mqs{;!NE%3Tqr46d?Fb3B66&b-O`up(4j5LBUGg28aW99_6^~tp#sUWBI6J4e z8j$3f5+A9cX0a7)?RlW;cfC0{L>F`f#>4Pv1k39P0x)?$L} zDUA#AZ^i}*V;mXaIE-}Hwqh4eB6@!h&k;eZob$KPxzlWVs`@*{4mI5>MdL;8b; z%k|@|X%=RPqPJk62VfrFMXhdG2=uHE&2~}~4_MYru9TOU@T3!J?k!ujnD3)L6z%pa z6bY6nnRcFZQW4K8R&Fk!g-Udn>bb0Js5}XAV@gnIkokd`R^8R$xaWukBiTHZ-65Zv zlOJh(`As+s)O`^ElGu@xb=&TDxEE4?f=$_h zb%q_AtSF64$f5Z}DYvf8V=4@ANe?%OwpDcVbnq@=OTjg z2#XgQ3j$SURlkGLl_?bo7zy4Cnzrx&hBC}3FhJrCa~`%>&{po#4!o6W0H2kbWsWLC zWw1|SNYL!o`8n$iGkIBR0N_F|9?>Kv@}L0oRzVt`Ln9e&G|l{08LS5>C#fBM2sF3I z5d-~1!L?21=${Oq$jvm6*RysB@GpA40UZ+}{R`Xrhd-?&Ze6ICB#0P)>#TIJzCFDd zA4$H7%u-AgLP`@Zoowkph_)L?s!wBQ5-+1}Q-*T{R{`W#+Z%m<3+wWENujkx7gQju zU*i>Q0o;H~oEHqZU}ANaNoN;Bi|pp+WIqZ<0Q=h=p5aV@6v`+yT?4`+yV)xJsO1qu z)G&Ry@xy4oHypmxPQ^{zMjadNdWjB0f>Fj*P8NkM9jxH?boy>IY#%6+#T&>=3b!C- z+#jRgfpZGRkqsJOK>Wf3<3})C#ROF7qXqIIWe}!9B9m+mRwh7Hw)k(d(qt50VyZQ- z?aTRkqBSRcVr|VLy*UX4WObCaQGlteM{Mb2VnMfL4yMuDSFfd1j_UOJBj~-+vc1V- zvrw1emgnn&idErSr`}k-5rU4(QCV-L4D3n;Wx%NWB$N8*_g>RJHSwzcwurc*GY|*B z?=9{zs*~J*#vl40c_$mfDZ|qdQmc3x0lSeGpGD@x_-M?zfg{3fAgLn_ZO=KJRQPkgu;WWRd0LQ-rvMsYVzA1Ui z7D4iFV=IdF;!#9({S%Q{Pho8hC*0@EV%xN{m}c)E9Be<`+S@xgfF_zJF|Wf~-MIJd zw||^`!H!m9twaW?z;}aU`Xv<_5-LkU4@_&IWM@w()u^J5(3|u2k)I3DwR|r7plApb zf6JWM)*{IZ_szaV3N_RwN#W`60XxyXY`9sCBWf0qaCynJMluzQ{37@cf zoYtf$slt}0KFPfMwWOENw^4=)5kZyJ3#^J8EK0bcV8TXz@Sxr}0Z)XV`iwMpf|(2@ z!9%J((X$I_iU-eTS^qen2kqkmM{%KdT*Rc_5i6oha9A=;?ckmlSxAy3%7_v0?Rt@< zR-`dZ-5A>x^9v6|dm(cYFs?bJ@tygQq>zaDjA)??r_-v1Cs@le_>o*AtWYyocqgZ} z_S!g|m~%p!f6|XIX=8cS)5BAu!$l@sly$FXatgv5M8hw1)yYjS)e|EJ#_hDen`HX& z*Y=Os`6?vEwn_|~JeOSM8Lr6)r3K=ri_X3v;9fmg@8~W|N(6E*ok#^_oq;&e>?^3m zTzzvp`i!aH@iZcmlOVza@`MwD^%tFLSktznu5AtKmtl<5Hd@wKl&PczV-4@goCC$v zWv({>9Y^gvcozqbo^0O(ef+vCz*Q;UK(3>kFvB8s_BDD1Ew6)=i?R-fD9ORP8i~p% zvt?jN0~c7PdAu;9w=M^qV6#Y33v#mQ6{Ux1ZMe`y%Te;pClDD)QwwpE+rhAAm)prm3l)8wSM)WIq8 zlp&E}(;Hs)xh#lOUBbB!NN`U7XH-m?9v|z`TiuX|>4dNJV>rdyc7YyobbOQO0%Nih z0KT8Z0=zEC5lWzFG*8YfCS^~^-QFtesS}^xx)Y}|s{)>y?|4-kG;oTA9Elq{Ol3SDw~=CCFF2$d>&#>@hdAJZvF(>5u7<3F}0-Z0uC z43xAf-|Y$=veF-UR8~N?cid8b>>R5$3AL2}xfl)45ihPFJi`QG6l_Re)QFWW*8d?9 zJ_FsKmeR7Ap*IUQR@z^b#{O0G0q{v8viK(^3G%B)rqg5dl4FRZ=fPX5M>30Sf*nh} z7b@;BSp)NN~*>xCRq(VDc!ddLhbE$$cf4xVoQZ1 zw^ek{tJnEK`oyZ zP%dlXJ<@Z%mC|?iCRjZk74U2f?`IFgqNEhGH$N}v=@bt9Oltukq$?+im9*R*3mP&d zKht8o7u!%1Uw&FBZCi@=gGseHHW%zU8rl^l!HTUw2{}ZJqGL#eDW$P?hO{~>8SzGz z{f!j~e1nn^(#-QoZU$0+Aw=9K&p(#yxeUNM6;$B;MM^@cU+#+QWjGAhPEH0nhSkWn z6%Beig!hwBLs>rfq@RJ&A*z-JFDZt;&`uvb2y{})(^do9aP)avqbSOi`sj=~1^`Xo zw0d{hBMlSESp6t2PjwopvF_4*j@WH!th1U8rNdQXN!C>eCfS0;F%p$kP-}yf2(_7a zdsLl`xMiu0!zn=$o+D340e`)&eq5;@;E#;^4v-Rx=K<3c`{6V7J0PqD*Sdd4j?NxH zMU?~NoxLC+&XeTptWyxi!J^msrh(T6B`qe+mrz}i>iVF$d*_baxx-tqzx4AfiNhFG z`*0bO%}0~MD2rac+NUbVTSwAStsPXledM3GSj1gQtU6;>QPUqFKM_I=`p0Z|JeGoI z*br<{MX7x|gu#F_190S^4X$$u+Ma-&4r%TiEHlko?)_R;!Y-z=(>d0;Rkgq}2wB7` zO`t%WZjl;OSdrK3iXLE<{(4-Q0NpVzc+w6TfPf$EO44%5@gT@!tzYFGCwg0D=QlKd z9tKou4JfnvXOSq)rvOrwmhnZXA*ONs!p_{dfUzY)Y}hLQ37N9^U7##aUp z);51&>tkzkE#X%J->O}gWG5OjTe8s@r=x&fKs|}six9%VTt}Q~T@L#D_goP~lv)p^ zMsDk=mC$W@Le~aS4jPHd_N{d4_;t$XoDdOM8#riK6%bimrGy9gtxQ6et;jXtOGq@D zz(RNsED%t1w~A40hPu4+>Vy*Gis3o-z#j+ATqgSE&!Ci^ic9_)b550p3Mk{w$_|}e zGlu1hgsD@kEzp4?5*^A_5SWtyaX@YgPYKG}XukdSV)9P**yw9Ekj0ng!fD?s-flok zgT+2Mkw`Bp!0Pv|b+K3elw`-1mo#%1wa*k8>0xlqa{EJG^v9f(X2_r`{L)^Tm~@q2I#QTW8iBjYjQ1(gHt8 zf8a*uPQ*F9<^&xUCo5H9uz=DZ7DG>@sew z@TEwKpSiBREBsrT87_!|o+MP6Xeaz8x?JTtB0XVbO{>%r8MKDoI5yDpGZ|V&y_KBC zsnNT5_9y3Z%L?PLkyT2ruO*>!9_@i6hjHGY4}w6Q$wF4e&%eM~5bWs8K_I3jHfAif zY?xoWr!(k*g&QDs6@Z>#H%rJ2#`MrXU2eG7>h@X@KN#*%b!8OO{}hQ|+dm%f0UuMp zbPFZ>VugD@ch!atNU`3tLT15IteQl|9Eq9{W@Tin1#&3*U@D+aDdd+fKBT(T&cWmP zkoJb%-Xm#fx4Au<91Slw-=3cq zUBSsR`-ryvV}yi7ZxOc(PvV~TXYZOH9k!o|qKfP_N9 z3c@FAsZk2QX~5mpJN}^ER;xWO>MVpj7Bmtq20KJ!ZgTdLh*O2G57}NHubMTe^ zmc5irT)YxjM*7wEi|5aGwxvh=HT%x|8SK?v8|l~L1mR2dhNQ1VAPJz9Oz2cFoakwc zIs{Sa%MazuPdpjBmRzfX)1KB9#k6X0d)z%6*UAIBVl9g&b$`@1B3ecXgUY&sQQ)VM zN`qzN>xdcHVA^|URoM1~9FfoA{(G0V4P(XG6J1M`$O%d_%*Vdc_A2*-WvLGr73O2JJWtDofo_ zwb}M*ZicdHK7!*`lyz)|9AhLktq3@J3HN{$lldQ7^H)!w z(ifIY1ZiKvSfJNL62O?V)QMB=?|1ry7s3pJ-3>`BZIX4+aS(=q6&e_zTzb01vjm%F z#EcxdUBGT~5!nHeMet?$9nD5HRc+tfI8ppZ+#8pHFHIS&l!gg4IP8hqxtQ&I@D-#f z(DqD%P>TkR*XjE41V&tcl0WDAxJmDEwhAo1RI9*ZD1`Y=!3$Hqg{_?A!_?}X zWBa3$FP9l5()%;5Ksoo|il`vL7lidW3;f%hQ3w=ghY}CddTZ{sU9Kj6yn>fZHj%=< z95;d_T?KVBF~H4Rm=_yX1J)lgz%~}5_R>gs`)c@5rQ59RtaG?^T2*N3@ za(=Z#0Rm*qMo8ioDNP9?o)*0j%v3Y6)wPTxYM~)Ic8ItI&_7dKv8A$Q_@!~Y498;5 z1^~U9Q}@=ww94`}WvHMpkgNufqgM`_JMB>@rQGM~&btvQ>~Yu{9r)f-gR2}-*F+c2 zsyRXwN!Km%ardI!%gbrpqKbxj1d{nlyVE^CoX|lYh#bf*j@LDPz4#YPr;zGVg%Uzr zzN;$7iXAEOwy3;i_o_-3irovXJG7@B^)2yGawti8(o`>klXE$e)8<$3*?dCkadep5 zo4Py&uV)2`+kmRIt4t%V3-?f~qruBykb?lEW_&n%wSdd%fK^$n__z3_x_AmI$nXRk z=I-$PV#cZ*TuUbN7^|`$|F%BOMWrX(Q+CSU2_F7rW!_Fvz^Q&-#Bu}H=M6X5^N*5c z=79MENj|H2^z?KePyLQ2@25#a;LluYS=$5Cv4mrkr^z{-%U9RJD}v+V401ynD=4_vNlD@AsCusL6Bm_Fv-#* zmVCOZ^jzV;j$KO(r2B6?#d$B8uFohiSFQlnNe&9BPlUm^JbS64jzs*F#71%ld@Mf$ zM?-+LPHm0QS7;EFFMJYAN6!h&Mg)xByN2EXd$)s+ad!P+#Qpc@oC`qx;HV;3fPJYVjs==X} zQWd=Fvrv?)>49#KSV;>9KB2`*Q7zwXN?55_ECjB*^j90oj(f;uVRYHWeOBTvl_8i3 zaPL(c=TeUKqk5!H!Lnf;%09WNf<}d=jKTz==uN+t6EHqsa;U@^}cIs4zdJ(oXA_!6$HR&;? zp2gL9JHqOWkO-NTYK68b@E4#9J4W!IX!R(MIr!XvGWez0Lh7eNA@#9h5wk+r^$}Q> z0$LhKfLhIZP}XS}FxM2MVwCnv^Z*)B-^-5-O2$5HZ&?jitI*cQ4zpVOP%PW<`YPEw zjmMSnR3_1|hKwsNh6rwEN3JV5X}hwlSo)P!wm2qMyd0&2wiZqu<0<4i^(0|fK1-Ht zm#1dH(~XK2WGEQaH(5UEvSa11GaWr}pU$Y_N!m5_5$Y186bj_RssQ^Za#mEJq9|9( zpR{xXhy}s^z?7E|t9(;l_Sa5jscf%{8dctTn#`NpJ-Au>mx~YgY8p&oLa3z6j^WxS z;At&eOp(X7V(Bd%r*2h+ISiXRN>MjjikgSjM3Elh9RGBtB3p9(xfh^jI?KYk z*fU`}8@=Z?!3I2as}1)76N@&=U_E6rYz;X6#-cN*dkEDZN8pk(OLyw|8Hz* zo+w8c{YOLN$^*C zwK?4uw2CsrM6*9S9ZoM&YQBHxuR<@N0Qw^luG!q#2?;3?o=D3|% zc&2$qbFSI{c$W94c((q)1-t#p$q*-|kQWHSFh3rZh`+0d*ORSi0vX$$(LJ5_tI3(l zGqJ98Ug>P^>BOJXxsYMxo=#IcZXUu`Lq_~$kaEiXdr|t#$iGy-|2{l?xb-XasrP;8 z(nk>Mp1%UG%;g!0f<=~aPe*^80itMlb#^lAbiex%q#{ns~+tQG3Qw$wPccsd~0mY^?SnNLgd~I zwci?NQ!M;~{S9?*v+rH1&E7*;HV_Z*L9PW2e0xWi$G)#H)3?Ut5;F6Yc_AvN$81o= z{;&Pns1ISYHAX$6=R;idM*joc4x}|)#DJ;v$6sY1DlMXB0=!zIfn0IChq|Pw50Ev} zrF%M^o`IImkwX zMr!qTeybj8~*3JTfBjX|G9gs!3Nol z4_m+|>IbrGMOa_~`pO2dscwAGLZ0HEq z^w@7cd%fPmFc-Vpr1_!oE4aX|0W#Dm&qgRoBww+|*nn8zx&RjooKu{wWRfOvAN9 zWi6YnGFo~PGgA;O>ECAIU1FYa7R1AtH9bQEYdRLYl(3LRPrHz_s17X%L?kwRfTI}d zQ7nMIPvB3O7?^d(^#Se@vlWtC>fnJPZb1V!N!#r3Kw#CaPgx@odFLn&lyR^w2fIq> z$0{z#YI85+b`TeWxedMw*3yQIm@H~}NXP%0-vQT+d_jVg+;fv zWB}m$ERv@@clRps8)cvM6lpvttSg32ewL_qe{O(!0+Y-tvZ$jhwEHnBrJ?L=43zL* zmsI!7) z>IA1Ofpk){ucB`2PwcyV!$FA|E5Q}q*`D`bj$<^iYnI$HWWF>&Vl6G~0ybC&dL2>- z_b`u^RQE=|hSFi)tC*; z3M+2I^7Z=>n~@p7oKd$>65mYt%rM-scvl0}P`pHd`p~{01RN(a?8t2$ZbXlnndyg% zu}y}kMG1MP-O0AIg|snNV%3li>Jkme`mmS>@5+x2x3Xt>o|5eNyB0-c{UT}`QtJpc zRCzQGst<$#@^I5}s0;M7*9<&TI{OP7n~T-)qa6#A(_L`PP=tT=6KYbwOB1h=>$N!< zp5KPE2Wc3$hm+fGM{e>y=M9h)v9^hJ)<<1OLpyp&db(o^$R!1en!}lY-*HD@PNEz( zvSlpYBv?K`KL^80RQpD$C;Sek*ZqNCwG^Lr$6Cg!?7pa=WuFoKNlQUPo8DZ=u1;*~ zgjplR&6dX@bAlC`F}#N*G_Y2ckg_bvSmm-Lh@(VQwCi9XuoQJ&BF?AoTZfSPg~vw& z+{$9`+>mZl8>xxAh^pjj8)OL#<$jX79OLKu)S|en;Vm33sOiI+V!6nAakbb6t1}1q ze9ycFIzcmEvPr-bX^HNi0`_ff;zwAa9x(V-ioaw-5^EuI$FgW#n`6ur5||Vgy@DYP zTerB#fGL1(fB3oub$W+lt)^MM=WHG+0|xZ0LY%(;7Q`te)5>wC zOSZ1Kd|e#mKn{@)AjN0R2PP*Cvfb2x3fZOE%R2P|)L?qZ=Lvnei!xLiM&sT72e-mf zD;0J71D(?z3NX=n`lzQ6O=Ki~cKUTGPJ!fBhSuPa&!3n|8cUA7*gqM;J8&&~Y}pKD!GRF_NRV_Aga zHjkgm6~HC)%5}iWn~Xs>n=jwY-b}uX*jVFD?(}RJ*I~tVxu5cRxd>nIqGco`%SUaI z;6P#x>;Pp?$HRuKp8&cN0^2;f&d$N1pR93vmvu(5*o)ipJ=2oDqCqQOQ=D>}4(MP- zn*4~TKUo>tWq>h}{S$bp493{|POh@{OSs=aT}EmS8-PsWavRVFi%6WQ-fpkqj3r9} z`CL@iERt@kNsQejq_=c}Y4ne)+P!X?WV9h^19Q#n(xvZM5(O3;ydLKGz}1BwAqhfo z3ev5NzzlN`&XKCX(;lMzO0?UO8Rm<#VnO~2l)|)Ru7O#4>)BLrdWx4#nuBV=`~j(0 zQuSGAB3Bfwn5N9^d~!}am9~X$wLP#A9XmLaFt`{aI)pSbiZTScJMe5|23g%>b9p0cdfLjq$z&zvij&Ge1 zh)#8%q+8y3DqWblkz9g`Wqb(P(7tBH#ym&*K<_IShdiI1Be4K~MQLeYMu}RHXBc-G z!|Qc93y8sFqq0E0GU`f41O)jsD0t79sHfaQ;6aqgflSoH$8{aa@r{1NbSg`wqHPGf zboyayn~#OWqDo z*_@Xc@Jq9GM|15+02v;6jq#RAB@?LAuAnAyWQ(RF?MnqG_|lPz#L@)4^;^K{nzf~0 zU4CT%zxwj~3`wxJ zTQEv4g4_u)!{PVkT=7`qf;m@&^MPsd1a5p73q^^XA|;&;d8%_XKLzLDUJZyX*)B*M zQjCm7pUKc+I0cnX-G66Zh6+E~c68LGyd*P4$nhK#U7e*e{CEsz0XntVB-8Dd<5DGz z@lmI?1CUw25?x*a>hR4nY2b<-5ra*A!)w8>41P`u+`6a{P)kB4pp=zY&nqy(mrNko z^z+a>MGUEeB1^bp3Hv2NizmO0P;P02G(sNET)wCZwnKd-3}y4ZDxRJ~`MKaOx9T#t z@ig`>h!^bOqEtZ&k0z^5+kv?HwEfE~Pg|2{mrvRhn@p!cHp59;@Wza7H)an%B8_kb zZXljCNuq1s=BiPHEm0kv$o1}$FMyjlIR+!2iI6P{a@zNkZR{Z-~e zi6DbWl0s5nTK74YOs5DuE3SUV1Z`r-(3M`h@DgIhkbcfoUo!RE^NC2S~z)M zm$bJ`$yhe=Ijn0u8Jb&_^(VW z0YhY$Q`kjemldoSRjfKq4t@1m@~dT&6yrjoZ7E;NRI#&xXb~DjVhAe6$OKRtWuKk{ z{J))#hW3mvZ5IfFK{`;0AUh?#mkZf(3j*tzhUlUM-_ptqc0IB8*8=L4mxaQAfy#jN zZqRCnJjO&FmHwp_NKnBJ7akYS#Fj3Fn>aA`37w}Whwn|PU%}L|ZaHUIzxZ!y<|GCx zgl}RYr(g1d6Zu&3pjNU4Xkf2Qk!^hjI~QCXJisUPNtcmOt5&-X7f3s1J7qe-Se-iA zdKp!^lDo6tKe^@v8H*C76sN>c4J@_%2cA-)^zB{%)Zf7U4?M{J%rI~y1-q8cf9Je^ zvikfvrwQ?$R&?#?(3RGQ`mw*y1rB_(jKonL3voM@JBU zffHQV<&!cER2`%A_SR${tUB?h{rUNZpYgjU1(23;Su2hO*jYiUYI;{IUzxiZQ&xMF z6~Q!@|1UUZr4q`8fg7^vznX}$e*qf^$HJaZ-#2&v`q%r--Fpx2fBOK(Cx3aizf=w6 zG<}w<<1$0e${2M8cGW#zX^E#li5QRu7F?`asZ)cEpPa({NavqedQmSjSne&my87#1 ztUBwLtlI{62hxSi?`uoyEBljCY|TwVDq*ljPJ4--z7dY=>)u8`x}7^gy^A5LIL}y- zx*4Jv(17;ox|rYMSt4HpUe5UnD9)FrM=B=r%OGK;{I^m&Cnr#+Qb31}D510X>z23k%MRwU%Ge6{A7A90$P)8qaFV2ttUvy@knYGKdpYcIDM&17t+aD4@~8@h#mAL%%tUf zb?~6!g~$WjAsE5-X?(WrYITPL8ZHYz*pblXi=X-swzLkZI}6lvYOB||sp?3rbubCl z-cz-Gz5?BzPQ=FGHkO(z%jc4c!!2`-YK4-e6oqlDWXQ_OK?H5NRN9~MocC-6k)E!{ zK18{HdBQtkqzD<#1w&-B1`KWn6A5Pmozhs2TgcfW@RFG_&?R}47!2(fFODXiJPAr> zKge?vfW?+_E7*Mo5^}fuJK1tFN4=sAb;B;jv`uJrg0T-)r5H3ey%Nl@X2-4arRP0FS;h>9?w?Jphn&Jsu)Mz{R z*_I?Kf2-Pq0{KMRkz9C(s!5_M^4fu>w{^x`0j4s2wNx+qb=1EC)<*qRk!IKCToG|w zjmy^$dhL!K1c&2eK4LLI;1K@+wV|%Ru|2~It6=S~e{G(P<^wPU%F0mNwtkh+fB*2|db;=D3#=@| zX7or3$7=GZF~d6xg%#Sa(R`Iz;x6(OBXZTV&T%wX z_^g-fO;Lra#?g9r7f)!(Y?7|}%d!Kq^}#{n>jB?~OW&$2^uDC@OzegJx|Ym+`uW^gV6J0sSkA8!_Da5k(F|z278ItE=p-iQJ+HT& z#k=f${;n2fd4ep4nOy0OQv_NNWgjY!|85CFzR&2^4o48xBG(QLp(S2-S3H<#fb=>6 zD$Ph^0S6Hd3i~xV-;q*W7b-;@(_N8H23oPGx{|Ks%5gb0l1vEj$?XRVd!hK&>Lh4} zY(nddI`UxCImVRyQD21EiZ z^{L}`98twN(In<2maB24{S&r_;L_bq?n!9DU|-c)8Wi@de~D!5*6x9In{S-7zBF_ z_6F>`a7UWgOL`}-G~>}R&J-haqz4?2PLWcCkG~SneoVMktLYwi6Y!H;?*`$1zJLEl@fs&;M1vTZ;W2dIwInEz%6qR(J6MFFg~-XoQ-Ppd{DILm7a$RCc$PNVShg&fN!BsU5q1X4(FCEfx7sOvnX1@;cCLJ9pVB3 zOmJADw6bjh(q^+Imjyd+04C}u%aklEfDZz!Sr!vI3k5wLX79#15gUm;>f9y5EL$7J z8rEd15c|(;Pl+PDbr1-jFb<~ULdH9}T5q&XxX`E`;{$BSldqZwRuwVX8InR^*o+06 zUL_D6+xDt1CAVPf zDC48j+_1@pN08m~P-!xJXW*<->ZUcd&~+HC!wd@0iyfqZRaTrR=|aRyR+pFc{D1ad zJP&A4Eu8|xCIU8-6Y?c~{54B6cvTOoO|thKkEeYn{7^!mtghb@`?b*05J#8*we*PmYKlHL%I#B3Wz|FjsYt$W|!pY7HYoIbsr2YtB^?Ygmlu z-)B=$_3a-#)=i-P3HuF+txfMuxPqctYn@iRAzfj@N>*z_sU=`(j-cO#RE0@8<^1#C z{{2T5xcN6;9WzIaYS`%A6K@{lic*Lj*(1JY?W*?(H_ld^$(G$j4DyNVc+{kh2BhT~;GQ*(a^pOwSzesqo5yCR@uM zv~J8ZovsADeWDVbwegK%On8Mc)&d?tP0~}m0%QG~qto%al+Zs1@@~JM9Bqy!-yChq z^H@xO{hO0}+KiZ=-u~v~?Cf4rtsC#p%J=E(KmVq0<$^>#m2&%X~iif4ZbY&{F=ve8~s6wL1IY@I&>3 z!x8Vg&00FBye!giarSNmn9t9Voq>G#ymh5HmkB(Af&-ACAHgo8!F&^8y8Odo6`;Ye z3+aQ4_6IW3;9@X6oTjz+*ZYHu^De;He3oPL$f%<)%hNwP8=Pja4*h+C6B(NAQQrUT zZPxs_x|+vuJ#COV@8*p=`W_vgZX$ViP%J!?aXRq8SDPZ3vH?cz=8z}n^TBL%mapaL z*qS<(!o@mm8<^ zbdvd?9q1WPQP7rO&8F~UW}nRaI);eIvoX?Ui`SQJ7^bMne-6JZ(`oY7zQPHqpPig- z%tt2^+-fw-r#T;3-(6!HHKjl%kig?0JsO?Gg@$^qnPcpdi3?jSU7%yt==kF^k&d%|o z-QFga(6?;LxME{;xp@MiFVY)%P}!|b>wTBqA~z7H8ReV7dt=OqF!?Q;TV(?iFfO^{ zW-TvGLUyd)Z!V$|5*Lyf%^+Mhsj9)d4pQIjqiMQL|5n*`yS_{>XIbz6R)Jn6Pye^+ zWOE2}@m)I9VQm%3Kg@!IRhezshl8_Gh0HHE^hGj*!=uXFFE?as;=8PAh3E+K{NrSB zI^H}w{nLlTg8mMnCyBOJ(g(!M`2A$C$p+~dZ%u70+aF*2Hyp+no74XMA;=i=B+BL1tKfKGkIbHJ7e_0 z-MjtMio78z2gpT+6Jmb8Il$@0>FM+kj0kZuIUZ%Itn^U}JvwaX7bkVPSujS2KDgiu7p{do>;9rQ)|HrYj% z>w_bclyGHW4k#{+rN^@j9n}>TzQadHv;K$n!ge5jfU^#8ZXtU%8v)2^p<8U;(%c;c z11RA&Ks+5E9U}xc%{1>p-45(%d}7csW zn9u|46!4Qk0oVk)A5QzZH)Sw>*Co%hZ_jY>_?&0M)7iZ1SetxU9z!3zM(`lCsL@+3)v7MCQ&B zBqdi5=UyyZAok87GBT!&jEr;wKPnR~jF8%_Oc`$=3+CsDDB{T@*dFs~4;PuN)&0Xk#YpFZV%_%nJ^+y0h73r`C!WJT9=0>ss`09II5?Z) zx`e{O+?x!hqk@4^p1`4CT3Af*;E>+CS<7f`=!q7@F=OYPN820Z({uh*~SV(hRDvi~O?$@`yId2di`6k%`^eNLoU|*O%H0vxL zNr5&>BUxQC5@#1~9?9zW8HwvG8c9V3&fAl5A6stW^eqYmB&5sRv*YbGEck2+#hI-9 z9TP(vvNg4mWSQ@;n0%-+u!pTH7rGz$^b<;+u;i*N2v>C5W^#5_kh36)-ViUMMjan? z<5$`6IB4i1JPzADH%Z><+aVrBC2Yz98FC)u_rlr; zO5jo0#zloh5X!YWMvQ)ch!RnSE6d~&4#_S){o?lRlvrkKWI*V5uY>00;pfQ0x1o-_ zPV4*$$F(-pk=Ie3siWb*kAMWsgM3$ZG_3IXY<@OClCEi=CBnv?OC_9Oa!F7jTEHN+ zK*eNQVB>xi*?pt&XEx3Na5la;>Cf9iJBg@hG$}~s8exu{S#5bDZY__Gkc}!D+O&u_ zJWZK!gm?gz^Bv>hI6iE>-Z^|g5u1(X1&PZsK__r$BzJL*7LIiTER;9ZM@WF0V~kJJ zo$OJ2FE2E2$X|)iOZURBUFyi+7=$w%QqZry>EB5l}*9F5{CWq^okAAHoOv>Bte+a%! zhv5rG026#f1wJ*~%K>VS74?adLcQ zMN?TZZm~Jew;^=S7n2q~j{Pymql3v{jo`F=zB!jjOgKNAv+)t!a`W}7$Jn>1qmw_D zt47;`2(~HO^kDaMIT|61KGLbjr=Kban+qA7n+w^TZZ2eka$_Ov zgJt}Vz}4;Wnl zD;BSXY#gtD{q;>I4^Qq^2>E0*hm$=L<|n2e6zM1Tjt9}apWLfAmAU^;YMu-1LC?=d zJp@mR$03{epP&SoEJPi@UxAD7Ax6N_MaXHJzLm zLtRf+rCW+u zsw&cBr*}WQqtm8BSbhhv;J3*#|NdSG2Hu-BF%I-(l3u2M$-{GFZv46P8maj(M(lr9 zwBC>XVDVcz*%NGGazm$w837je%h2isnt}c2~P&55RjpA~qd>*8C zz6raZRMrsCs=rL$M1=9ntYiZi5PaE7h4nA?J6``aW#%xWJpfIGGH0;DogCsuVdZ72y5EwH;ZE;VWmbq|9|PpPwN9 ze1t&5(>_Y2V&m1c;Cp6INyW&Ze>JNaTf9Fj8py1|4X?728&S&ri*?-cqOgbNaf%ZP z%-|bq)>ow=lR}4~t zGL0U1bzTuX#nL!@U0lKvZ+OT5Q<`EJXF zxjMpL>ZpCSnn$8^a#*3q4b6-$)O5*!ccxs*NvEfyK0~aa*sOn>2o_b+SH!4C!Ypv&ne{ zTY9?H;$x!5e=YdNYJ;5KxtGr$_am|V7!S_IqsRj@y<<*|kX|>Gjuh-PQSZ~c=3xmN zn=bG)z|{1vqjgn}SsRV~BH0ut)t;l~0piBhSzD zQ|nai3bs^iBNYN3w@q}TkxaTaBx^Tj9{^bQ@jspu6P!4nw&hG z9u>$}W^;rL1e2q5-9A04s2{!vd#^>aPSb$m>9BwTa-*hqj~azl8CcQ+CKiUc=qxH_ znyoTDNW-R$=;|Nt{wT;B&g?-!Jn%6U%%|A|B130Ra44QrX3bqPJ&qUlQlRBP&S(0Ig=(l+;m?q$e!+2Afu#JpwBjS)hV#kcoBlL*{!XVAN=8nH#caK5 z`&hLM=C4LQmJFeoR>s>-;|TNV)GS-IRtX8?7&PJa~w-r^|G_&p!gE4;%P?J^GI;NUgMw>cZ(xDAls2ms7}X45AmG2%sL+M80LmJ6VLWYwgP#$En|0md(-PXUHX@Ww)7O;N ze9HacWLykcgy9@_@HK=Cks20@%U*9r%Zby_6{O-^bvAP(b2Tb_3YUz!;KL}^JH$zF z_{{rQ+^@z9lY=CVLGQ#jj_LWQ*>OJPZo;oeBOq8(dgc*w^uW;CKda99qz49ugQH_Nj! z#YvT;G}H7f4IaEMmzOso4obVcM6pIYPUC3D=_TsDElbT}dW~sYz=cwroG9Y^2v8i( zE}~$%J{yht?dnZ@Om6B-2Q@{cWjqR-To)vdl*6IpBOJy_3XjW&;8_FrnBo)yGNypL zP`5-HXBA7Vyoz#x;sM{u@vJHKxgxM!G8Pv?W``9acRrsm*sP!XUrHfy7ri{2!K`%T1@V=uL%c~5Jv+gI;R*;zmld;#Tf+ux zK~n8(w1%|7hS?gJ?z32kpwjHK)@U}t!QO~DW(f1FOcXMcV%R>ZL?nP`vkK+Rc%K)m zwa9Q26Z~ve2>|nT5X={iBabCy%g1p%A#U9(k3fAWJQW+!@O)s#a>#eYP83WV8QAlI zQRBuc5s@NMPZ_GHmvFT6k_VGEE&?8sjospo3?BwWFfXkiIZQw{Zu>l#EK8rEX2n0{3O~1 zYqb$o7cSN^97w%zf&S}-3ml*csfUZ>NDD5G z3uZ=$D<=9=!rKeEu9p+c8GvQ0()qCybN(x+W24&V%($7%s+897Nq1?f#i4! zzr)5(OJ{WvM$T0FJyee6k4p&R$COfA(YmT6Q%0(zTvjsw5z|qHFusC+a8*#Bk}C=S z$lI{Oq##>K@l1T*$Eoe!;W=VP5Vjn3Q#y^!TIO_I;C<9df&Epua9?49$f$VQCMAhE z$u<=hwdMNJ>ImW}Nu;!xnSG)&!k;0Gvzj;?%rX)Lc@~XhLBZgNlCbUb-y~5eauMXy zD3w6E6ts&uB6=gR=CyMpbRYXFeYb|&l%fN@7Z{S=Z%#H6S~o~F;<}2!T+{+SV=xE9 zA-2pnBt%&(DqfYNHH~?^4d=|c{XLI4xq)NYsn{qn?`G65kRUuWP_in0WGX;B)am?u z^SIjI1NXkK7!B8^s>Ri)DxCSvqx)SbE9@>B;Om0w<3wb7w6v((yoHHA%ag3jJD%v4 zn70U?QoIy1T=bS}gr`MCOOgyBSb1FRqP>D7#*T38?On9SFUkT$iXL`doX%HsP-Uzh zO6yY7^aw^+LpjHrAB*-?c>{ni(iP`o<@fyq6Gi6fY~1JDD2Az+&Vp_`yg)!4t`3S2 zS=vir+o7VuB{Wf;^Ma`$b>P3oB=p9sUgqUoym7=PjujTC3`4jf15L5(&j_$SONEl? zP2_K>R*KHLzplwl-G`Dra`+bFP4d@=l{jW7j&+}J1F&9~EHDD6h4D5lT$7MCAH0ob zIKnX_9Mm2~=D=%{Ke`uQ+}nR$3y;O6oy%8!`S*hSA92s?TA1wSS{D^gx};V`^ITG^ zvRt{ORz+fOtQBXg0v*xAEhg)e6CCvFiUxFw?4Y^C#=}$`Er*rRB|7bUdO)Vn zLSfsr`*{v|Eh;0A54pb|5h;i^he!6a@J6no&LA5(V?b9Lv1@Yaj>0=6^Fat>>1^0? zbi(6tSx-pCpjh_842N~1)(Z6N;6^$XXsWDDXZ&|6CyPQ_#tVSuq`+HoFW46otE1wa5 zy-a|&hoyxrpQb~tC3s=5klsAQbHaJn{uE%|A zvR_@Remq2a3mgH;Tj20c-{9Uk%q6edYUjtjGW`E|kFiOAt72p?yv3lqpv@rto6r3k{qOzxHvs8uhwYsW58 zTKR|o!b-~Xv?0t3bt;p)u~K2(0W7T6NG}{~wQ-4de9>s(*w#eXE7&B_MApPrUa%me zNPl_3!hnheC$;3Kv4c_^Y@1wN?WC3z^;%9;=_kTX?I^lB1KI)JhYVK}{HxId=ZWB< zz@luCg%`C|ffwpR#stQl6?Pxm={Pq>@GPg~Vo4u8C#HCIk6-I9tO#vA^HlL&h>C(k zq;{^aT@r35hH;;ufb^2ghbpDZLzqu;$&DEtbWJi1M2QBIVe=Tu{se z#?f%y9ULKM#8QHB#fEVwL;^?66q5?MDdvI)^>{@R7u1$rtmlI<40l=WM!+r$VVLc5 zoypT>L73UP0b@e+erCP57-gndmGy^%SCzaJZOH-3O2%ce_p{{=Qq~8bX7E?UPz$36 z3EH8o%xV3l*eS>9ZjE4fEIT}i5Uh=kzErQw+f8>tNL#kSrLM`N&5LIf(mIvW- zE_cojUI*N+aq%HGE~7EjLhD;xw~Kkq(k0<}Ma@-foPAoms;9MApVjFRo{8ig;Q7#joqqZ!|?DdR}d{)B&t=QyVYo%sun!r zE%PPeQY>9iq<|R7K%%}&6e7jwMNW(IQ8u_*>2Q)W-#@Nm$Xi;$bXsR#yjAIRvvk_y zt8g@@wREb`9vaKY8~~B9POh@W&&Z~f-!fzsO4<8q0V6`JjDP`&^0>$<+U-MztR-kT zA3pBA9k1Nma9Ab#k$r?2LrcLJt6Gj798Ll|;ceK9(QSn({hm|cERu09*CPnBxTS&w zp-&M`qA5}h#XM8;^1qH^bi90LMHdf5fU}SGkb3 z*v46vyuh`hp&tTfd}0BtYMY$68-6u9Iz{B^Y>2oNm_QNY&P%7LiRDY`)ilZpLUHg+4NVUf;W0BIv<-bvj@2HgzT)4ZB}o`zEmU zamCWWi-@G;cP6Gdw5;UxmmF#-I34_wz>Did-!Q(s+%Vrp!<&~@4AL~-q@sPjG-)Wv z#V^@#i`s(?qFrw&;-cm1Md*dgM{v=@HI=ddYhAh@Ou!$%?q@=DZHqhU7_F_b4S-Aa zq5-&+eY%)rQ$yU1)6e!i*0qGLQap7~uFooKm`dr$2=zeNDTEka^CoI6gD)E2leBg> z9|fxdj;h$8NyVf=)e~{oW}74>09;rTRfI16-8LG;qjO(%=|T{{+e^|PSadvuFkGD``4L%+yE@Hqri^ z_u7Q_8?>mF`Ekz=%UD8P?TD|#o@&tu1fHInsBrBBPO#}|_;`ZsOB3e8?*Ua2T&2|_ySaeFB`SDWZW}~%!B^o}YX?lb*imNHP+xnVxZ}c! zUKOplt1drfdQl1tzJSZO7+ZQ#3kX0|CUREwhgrDQMJ=a67dBqdCsQmhZ$f%F zEm&k1yi+EFK`xrf8m*K)bBZKn|2%=yg$ttY%o;q3e83mT2cPxIp@X`SxjMeh7KKf> zhW&=6fw4=@zFpL`Te-ta`iqFfX~G(CN#TmS%fW#QIB@%CA6$y%$fjVKi^+x~bb>=` zYQu>@wBfAO#0R}O;3i0;0B+7Qvs~2TZQLMZlx#RJr{i#r_|51j1yzwqt}_(ZQw(5b z)lwWykws!t>!Py1F`q1sdhPlob{k&cm|4auc$l&BqOkn~S-vRbF}p|)ccN5!s1qlK z@_va=1f%d>C~s<~n}DGUoT7v7Nw0#rSX7Y8-ALvwlvo375Xb#gsC8qdQeMDRL9``` zy};89%QdD`&6XE0#W!6b>M1L^t_b(({MRw^{P!=`x%77auTb<90nUtNE-E5rE4jn)z{q zordNJff}t9c6Gj4j$mic8r=7M?4NPV;UTUzT_U01W87}O9NDW|@-3$qj~aNp;D=~% z)9ld-@%{}~+mB~>h#q%tNWr&S4bYB{o1G8X$Nl?T4y+qZ_nsq4UN>Jhv(dRc-N9g4 zf}h`X*!(j9J!n>oTCof}%v8hN9*yj9Hn=un3Y>B6-1y8q+LuS`H{2ARVz^6Sw%PK< znr}DOa?nY&f6UgCN!)IPOOHeXwChp??R1@`2({M7h}m21Y^_cqp1*QqYhQNte!kIs z-E4Z_+;0fm6|olJix&{aBWe;%5vwdEh>|~6b5O|)bhR1*>keL-g|w+E`s#S&e6X9H zE!T4eYle>)*UaO=P>rtk&F1NY=ifj6@!OvccK_G&-5;Ml{^`dXMvA}v;kQ5h+t)}@ z@`pdLOSv?-`40CMPe%LSBYnyKUwJm`!3i#9JsBVr0o=N7M|p{7LLPW4l=^YwYK&S? zKlb^DjU4iF)Q98PV`ch0%nfm_Fe0=K z32WYLwu7qMHyq42+{}uQX+{&wmLi4^_=&;5aI+qD^ie~Cy?++5JereC=8*bs8Y)D? zV2%a~r9rNP`FYz6*9-V*z=bW8gy;qh2_{JivOrPzui3po=*VPrzhOq6`?qeP!m1CN z`}*~lcRqUk<=uer9=Rs}KTCYqr8gD1q^#erOm0SDLDhdMfw{RPnO#8|J^lVE1Qjx9 zH!ptV$jd;=u+7AZb>o~y zA1-b~3@ob4Y|u)kP}ezL48}{u#3XQSzmr5RJ&(vA$ibqj`CWw9h8 z?Jkw0j#sCHRWojz!;vTzr=W%ghX*Irs?DA(MyRT~Igypi9Ld=^QwpC|es7cH&zBf+ zvC&4;YChY4IG;?g)q@q!pUWnloBa7QH3B`=US2bjnVoqkn0LmYo{numNL(yJ>dO7Q zM0Ye3eiqFHu&H1<#1z8J2@0&{SjEBgYarvWloaE%ABggB=4Bx?Y+-UbgyfdwH!xTo zxG%`50QSY+lSZXZb3R_3HaJy-gXj7rnpyaR+Eugn?Zbn6fBNDx2&QfP-SF>iV1%?A z*sP_V!d^CY@$FB0KO6w8-5($R^l0}HdkQ@i7rpcI^BzyZ^n5GBOF(!?*pWX%h#N6r-z7w2uVudRZ3UHejU+NFfz>Lu0&T}g|dY3JI?l;Tx;AZX<7M|NL2;!Lmpxn zHZ+{N8kIK9-?B9v9S?APuLB0~>k>XCg{Olh*n1F@fN7qPlU0ydxAx@}g~|Z42~-6- zh6YuGj@rx%U?M$mDMgYx^&4>+uFAv~cj;1b>orG6Uyyj5=nYaJfmhm7x0?^X{E|RH zh`1(F!>n6wzPt?^2W0&9c3Othq_z+G!+A8cXwBVh?o`bm*76qO=)xADA7KG%W*KGa z)~mBcu{$7e)uKCJ@k>@j>6^{nq)P!$mYpUt;l$)(cT3v9utL1BFh3l(8w%>)Yxf;^VL+?xz+LeZ7-2ixp8!GI|BBmSU5hX8{2VRb*%&`n`iL8zn4?@j^SN{OH&!d>Jv8cOo7f ztme<8SkVzXnl4swq^Q%7ap2jUSXbK+x;px3qLr?-1CVZ53hDx9QU6A-4Bo78q$S{0 z&n4D1QnmmMqep-sf<_odELvG(v9XkQY$b-ZiYk{cLDH0gaCQpm?O;aX*;G2bVWqmk za8MmI+61{YThFneh>mVtDJU$$PdxPF0UStihb(jnP10v*cvUxHda$H}Zo-4wvgy#*T_k#IvWD`FRm%toPS`E*8wi+X@WzPf) zOmDn%`5%f%sP z^hM}jmge4Sqaeq4I=xkRDOMod2)~SqLP95OkbkI^&g!4cC8t;jCBf8n@ zjNj%dHYw?q9#s7;O}6mG8i{JQQ<@Yr*ZT}dFfiV{ljjHvWPU!rUWY6#V->vxBY^uu zWHqzzWl^Bs)DAoS=38KVf<2|9H}BjlR-!GIr#I0X95kL5c$xD8#^|8I=Kh4cOeg>+ z4(=kv4ugC7&b`JPMBI!}3e(B-ICRV%tR9+gkh-kd&vw^T7u~<_&@*~LqLdvllYedv zZ9CR}sMs{^mQOoZB1^R|(xu6*TMgVA(X=^eFi#K)Gu*AzoWr(2mx?+}I~DH-0nMi> zSKixpc(&S03zLp&WnqJH-4r>K!p(Hn?X)p}1yG@KtzDIkTHBAx%#~pLusph7fgu=5 z+?tqu1|@%fs?I2&lDk~0;$^#4HnT*F0kfy`HJloUqsWt#IT}?C1v&#;`MUgPSKzS|1$|67cF^QaE^iyf8=qg@7r7oE<3M>@`6@*;D zGS~XjoNcbAb52#5OChJ3oWx0WqOor%vR(Uu>XKde%^f5=1C@S&UmZ!UlX4`arV&uNgdhs$PLE0s7( zQRDXR1XMT%T_B>#)g^Aglnn=OqlH`$K$H>)EU?EkvjYD)w;h=d81a%Me+DC7om|fJOqFkw$yqGqkx93yRU?P?Q35Xl!*3C!I2Sg*AxCqB;^PA#_2g zfVja@*s=~?ya0iKgH&A5XtJ{e+N2~U2MZ?e~vF=KNDZbB_)_lap7?K7NXxGs@ zksbloqzgYA0S=9Sw>SzX^)|=bL3LUL-R=x|SYn+V0Ti0D=-1dX<&doj;W1kwaEr+fD0}$n_*f`@&J7bdpV<~A zKh<@uO`L>8okF8361vd`i*}+4Qz)p0csO4U7S_DmJR&sdN5Mzf!W{Rk!!MBF0F2BS zHOd=9g9hnRj{)7Ifg8fcK6E(E(|L=t($s>$#c1?OTO}iUr0fVS$RRnZOO_IIUi)fQ z+|<^Q2M4k{yIdcwcB&`>Z^?||+rav=xt)qJpcw>s|9;rw77-k%V~>oRkx!1x)QGgSbcklC$s02>DM>oed|AV?H`zM)h)inCpuW#xTZO~8hWf<4@RVsKO zA_sB-O5t$6#vS(zl7PH01DX=Fafl8G|N2-CIS|m3aS&PdW%F!z_umhm?LJTCg3-M% z2n4#K5u!W}14f??E*$C{PXyR3q6{Dzs&1I%vpF*FeT__?nT2JIQrwE_5u7Eu$06+- zRV~yJPB8w|X)cr2^b;QPCLYm|ItR7(oQ$}_qFp=kqEJA3>k(@77NF8$MaNH^SQ#5I zctZaw&_0RxGQ0_%5=$TuwzpujeEnfrAPiU$*MODVK0tW=jAJ@d+ z)x|ei7=VZfOPLI7h=->*5yk}pv5xyrsEr%kXs6}_78E#hAr_jhs8?dV$ech_sQLB@ z9Did_Dy$l%g^r$StLFM){2EDEeJ_9Crkf=*L6)cY>)?z`d^o$0A}p zfDkB#^S~x4?t)u`!44L?aZBM#t$%uLZHK@DHFwW2hk2wW7SZ{`A27Q(?6$vW+1@vm zz_vw;lWul;re1Pa45Zx|E|TKD#GYQ!v!UWH@Qgbh5o7v%KK}uiqow|ShIJ9L z3}JB+K zW#bZOakt<7?9ON0i^Rzk9wCg@VA`J`W`267EPcMFa z4qdzLK*LcMu!RM=XyG3o{I3I7;aOA`+B7Qp?D^hfG+HjK!*@M44*^MBv9S4*Xjts0tzXW`wF@nMJ%8eQJIW-9cfEev?oM839 zol|mqyXMhXk!YAPgGbrkqEUnRN%N-sFu2%rGY>HTm_v1`kWM24VN&`@9m*WHnKf$S zLcJ`JWWw|c9&ue4lLPahhL+l%&x{G5@eP9dZr{Gq9onV1@pZwpGrJAJ*Lo<=d|y>- z@*%F@o;B-*h*L3gG|-EF28UF|{#Zifr7ySIH*CArt&ASqDU@YO?hQ^~QfvA-mxv7h?mm0F^Sjl0}6EX*C7OgZiK@R zTt7Nm#UFb4h9Tv5#to@pGiqG_pz97zb|1*kolb^67K)3CDKDdxCm5%g;WFaFA{eEV zZ8aSJ$s7ms=(9M5#e$ikB# zDjsaPqMBl~TP{j*-zNG|4VD3=rve;I_Ik%x<5u8Jnc*OQ>s2sGzzP1(Aa6A0}d2;o%EDdEW7KGLzsm^Dc(M|ujcvS733%u)^MgCiH$?osWY^kjYY?>j+@d( zPlC87&C{P?qsZ|b{&k}{!=d3ht%P$43Bpx(NGCCd0OfPnZ?%o@;Mk~aHrZr)L(|hc zY2WdS9wKwVdEMufWZs4+tfu+NEy|Y4><-w#{lKpLXN%T|@=&Af1gjKLbGBvbfJmAl zeu16tvo&#YylI@!HIZIv%C~5yO*X1McREgjdK@5*6nu4D{=hTd8yAXb#?h+A}jlwZ$C(i+2eictEIbDdDBMkidJ$kvaLqVRVxPxM*eyN#nHZ#_^X{Q}xe`-+Wg6Zm(W`ulFQ`T@aR zbNFPIUJ0`aev1BqLfg`)7Z}~-#)ij($@$<76J}_fUW-_G%z>#D`uNlqcl-pL`Z1+_ zMvCPxsOq5?;&G}%-f%CqYsgVE>=8I1?%&6OVw}H2efJ_JDq~Og(s^PAhwXf_UV$n= z57=?hW3dgE5hAL|(TGqUd(O^mfiYn3s5mK7UyfCoWt*u})nsFU3o!~X=xWW%x&`aNr zh;Ha!zyIcSld(7gB4Ur7NdRZ&yo)3#4#g-v6$8Rm7244%8R3}A(hpCX0NCvu?27S$ z#<7gSUI6G`wqphpeqq~>G$lGuq^v_Y>4gl&B70qs&o%EX{hJV2= zbBJc&G~1q9v^)K`-)zHHhC`d-06?Z7_i!W|;S?IK!DfCWzVBhbdA>x11oLYmBg_#v z7J0H9DqX@aJ@8;mTkUwmXtV(^!Jc5^TWfgdMn7*YU`CFqi&_p?(+sDSQkB-MTxe|5 zpA)%cn9vJ1yw2dor$-zo>P1J4LwF$Lby`9uz$1^>ZGAxXbXcY_T74H+Gu}JF%T6h)IiF zifyMf{Rk-q2xkH7uB`N=Bg(3YQ*#^AZgQa6GqyW#<~E3AJsQFxuU2CCN@~cFC!)bO zdri?(bA~xV%oREH+6W2hmIx3KSv0s9PuJ7Hrw^-NJo&B`EGZC?uFDlN?-H=pu5oE$ zwQX-G>daFn03c*jf~nCv;E zc^7QfVGQiUG@H(K=S)K=JCPJfx`ZPh^xtD&lNRe3iJ_Yzm6p3W`!00t;-C_|ml7q-7B!5;PxKoYhsv& zjzmWw_Jrm$b7JNlCAn2=zL8ayGk zCGxHhqxWPAy6B8UT>JzhU4l1A2ktaJ~s zRyhed5De>1kjYB>avN3puGzw>qxqKUYFHPTfdk8Dh(jxQTRx0uN`^B;7?WcO+_(x8 zvU?vhy36ckqJ;7_rn&p~u|(~%xU2XO;@sIrD_jVnqMRMx;V2Sw1nb0dx+C3-)Y*8Z zTV>%0F%)X+IFXk?_>yZe+|Y;=PpJ@&-(x7jyu-mBWEG1`Zq(nBW()zuF00nI68`qj zFu|-D(tP-vl#SnB`f*}h*#(F@EKAmieq&=N{B46RH|EG5$f#Kte_4;QmQg|!ngq=4 zi0913_Xp{~b&wMxL!m!84-HeF@ebTmg3>2hVnT32O4y#3BuDM#26#~n&Wf8#1i9g$ zdBC*YB8y^BQVucNj@ZXcjWt#v`F#V29P0~sYQpX^I_J=#5N#lut;$aoiOy2!+vK|G z&dJTU;O5p9O|&pOWX>fk57+B`i|8X^1nZN$bET}jYin}*)~%o=ww5=c#F#a~!XkAD znGIEo#?Y4=RVpqv8a9l9(p<6TwNl=E=ecEFejH%U_BYA+0&Il^T^EY4V9CHjFb`!f z0n4@t?nakI8`+M?(s(<%%cu$5;z-^?S@N0AnkNu8m?K%aI9>#?B=<{k2*^dyE zxB1+GtW}wT?+XNOBkU?Gj;jER}jQIVC>TEY!mS>M6R9&9Ma1G zTZOE`W&xPfN}!b)uc@J(`bOr&w1Z(kmb0!_ff_ss|4RsOSD^^9TYdv5eQ#I|%(!mR zh#duQwDAv-SV}Ib!_+J`&SU&>T;4R#Oh>8!L3`FxV)Vt;`D;sbD*yVP%GD&$bsC@u zr%_EmkpA%wjZje20GDi3@<+81m~jL*|7?j2<@2W$wbcgd=oC(u2EZQm2L9UF_WuyQ zZwcTm=OG)AB93$30TM@P&9}D9$f1es5+4Z_o!wO>0IQLcj4wY`8i^$4q~X1LLfmz~ zhzR#97`Gd$d$r{O)+d<>q~0y3m7HbLv5|S>gc@NU@H=}c^Gn+SAZ9OvvH5Xkg*=&w z1ro0LIB5n$Fcd$mt|bcb4_sE=w~>6e`XbecG_ZJpvM?H?99(2L8m*+3%Oc!$-HCMT ziQZ{U5Z4K-)2coGP_~#UEjzZZ5)aE}=NyuO*;bl@E2C8yb8)v9WN)O9latx}BeJl) zth&_v4#>QkUDh=s*+jj4ZbQ(>7vutVdwn^~-`O!z5y%1C3Gj9&Kq{xLPZ0+8u8iTX ze<{|{PuM~nwBc5Na@j}7M)3k|n+zbA*4a=ULnOt-Bo5kgERhr=1BR`M1ks_9Rq)v+ z8-_*rJ86Y<85WV@gJ6>wZ(CmzsxAU5Ag|_Yb^Rr+J4OwAaL>A;Rlay;6D=~wWVCrh zD{D&A9I7+Fr@n+4LNico(ah$}SX7_~s9 zM5P=8JUAYz?~#!DKJpDS39%esOpQgO3K?uBV2knyJ8srD6$K_2t#>)X?=$x`TMJwn zB#Vvx1O+I&&?aOTTMmVsr!qs6v{;icj$371WZ8gYjT7yw%S$J|AA4G5Q^9w!nS{TZ34yP~Nak#Sf z)V997cbZ+o%OFXd7{=u`rmu@wTx_eoKP7rgtnfjIJD!mYk)XINJpH&vr2#GiTI8Sb zfbD4{8~@}+->v>F4eD10W}&EeQk%aNL+EX18+9<9bQ2>%txjzRF!a0^V$vN^#~sk| zM0aG(_pjImUBSF*$Cw0P3z<2UkU>TUiy4*A>_xcF+QQUvHOn)4zGh%-aI;mqe#SXQ z!6fs8ND^&>A|%79jQLoT`yJoxJ-|v3PovYHKfDj)K#R(zroWtF+Kqb3MHHJ?pGf*&qF$2zEiwKK1QFC31gPLrT zK@(jEWx*4cu;bZX6}iC&T%O42P(2sXNJqP12}fik4nyQC>8N~Or0cQslBb~$Lh2b&oZdDIy8s_16Sovi%r(ij=zXXECW>^9_>&o?jo#wM4cgJ ze$7j;9kZPCg>+u%_g!Q?HNQ3uCxs}TEiZh$Bi0uUlw~-lm(S+a#%^uWF1_LnCVn*O zAVTmMouL5K0Ckh(JXDvlL_A5p)(f}a@V=Ae8p4j7HJOgjCds{~?cx4@$4PS4ld(^X zyLP0?rSXH7)(Mv!VkZN!{;*vrM zcAuo!Rmuv$Ge*#D9kb!6?z zT?S|@Gkq-w&3jX`YiP%BkyT`-?;0}G{e4ZD`LN52h#&y`hhrh`6ne0yWz6kmCa+ns zXJv5{oTMK3Mx7&n*)`GNgRaZ`pv34w9+g+o$uCcXAxAIcDBH~HQ!lBItKn<4U&JeSAQc!UZ=?E8#!>wCUGe00p%lKEk_h6Q^ zNqU|DZU94IW>A4tzhRcFhdjoPM7obp;9MU)V-9d_*=X{E_(r*uNaDAkD#r2T!0z}c zedqTfZaeBML$f;@W(I29p(82*IhcY=6PR{k12g2c+1X+gU8;7CdXIRM>H*JfW4$2d zcz#mC?(Wm4znbei1lyi?|Ni!^o&JrTmk)aX@$(J(Wj@@xbFg(6N2as|W7FKkzB=GX zh$2J^n+<>iwho?#jye3lK4OiQZac1j_yaEvdVGyA6@M@HrbARlgAt>8x?~nRoMFPv z-`zQx;E)OKoZ#jKmMsE@uy0qxx3Ym-?Z^taN0vOe4-*GRz&=0+{$ClgWgPkncdO`E1cY;M_L?`-?oj;#b|?eSv>skytp4| z0~966H{2xRjw(r>csj?)s|xn?0F!6eFi_Y-SQ-KZd;|s3Ya?Z~!2VW80Eo@`&3 zq*dmz(OI5WK501W=%1QEU8{IsMQr2q@ z$I_S0V%$S*7N3&%a2Cd=gXQUqA*=vU0uCTCn*+isC~5BA{#Un~CvUkV)8l8y*z_^+ zV_!}RIa5I^JhzKF^_OTYbZ%8rsp(})z#ghSQgOkFvjuI)eOmZuMzJ~;2_-~osYgs^ zb)B9%(4E9m5ePKxG;A9;r{C`14d!1h`Rm$@kKE;Z-cqF2hnnxf8wTfnr+b)PX^M-M zF;618;nVbTGFSmVU1B|>H9ML5E{nlL{Z~M$8UY5XL+?Mu4DbW&)R5t`L)-hQY}XuS zhx{>!X9i=ecvK6Jbz1Gp3SOtc2?P1wQnQ|af6oXcEFz+r5s5%cQOYH(T53-#RNK?; z(4Le_+M~lA~4J0M-; zyA12C4h}=1u(2YU1c}xb)P7{ORA?0N-a3FGJn9h>y%JlPjqOqY8t- z^5ZX-tCaTevv82v$;^Gvy(Q}^AM5{ZR+6oE%V<|p@Rm}9$sFx*>8S8Vv`f9n9NMT@ z;celKxma?^O7UZJK|i+V>TSe6AP>CmQq{H1PUCh z4;V4-`eF7vYs3TL#lr?yNH%v*VQS*&Hgox(u4llT=Bc5%GlRRw50E%|!^`er4srWM z3-iPv!GdAplLI~EtI^OwiZe;Lk`&eaVBMR1=DfRso&#!I$-pIj#pvvO4f1k>qd~RO zL%Xi;@}{beg#G7BBs*KSlA77$9G4Uaj~%uQSZB0Hu7fQPaU-Jy!A$8ptPOR8qAr6( zb;v1T>nSzCCju`{a)+>kI?$g+b-o>HJO87$^0~Sz*>RrWsWSzvS7pWb??u}w_aTGv z>Ny;_(!F2dfbkxa6CBZo@$1}0+1VPSncIJcHPHNexby6DJAaU|gVAco39w!)~cY-RlrneD2moGU~vQclEjP9VUnix7Gj_0e$}|GMtpV z`T$qEuWRE;GB*x0E_EYm$)R+V;Klm zRDx!o5iF3Q2I$pfABoSYy(m>qjmb!uPYBX9f z#grTX;et!Yl&uFXk!39)hKmi+UJeHQ=2Q?SoeA=g+kky1$!jgYtKj8o2%b-Dx+p|D z9$#53L6_#RHr$=<=Ty~huv6Zufh=CG?J!Aqw=?S4&DEmhx4++?-*MLz(rjjX!zNqU z&jF)d4(O}$jBmYr$B>s$|C!R@hrz;&0?Q&K=8&+Jw|!8`@p;F*?uq-p68rvl=T#K} zolr4&FO5n2|5@20C=I_>6BG{^ia=x|@GT>Jq_iP=uN$$2(c-m`QZ=lZ1HHRH{w7 z^u&%fId;%khs0;_@PI)6WD{XFDo9dVK9c;S}^tt9ZsC0yAy~Vi?OJP1VcL~vSOqvO;qo~?#Q8aOqBw|tEsW-DZ*10 zLvowi6QC<2!k{}KTM_B8a7Aur!;sXHzum3EY%zgcweBw$Ighm%Lg%|B4~$)|BE~>2 zaxU=da=SViDa3g*sn3p$@%mn{tniA)Isg=oww*sK7XZ0oclBj=81O;CplqGeX1+Y= zil&meTOU+2jPGn~H_hgyfl?!guA5H^ecyGBl&(H{H1(cb8!HsIc0jvech9X}9C#UU zU21eha3$RWJ#&d-QA&e<&;l5rcrr`XMj#AP2z#S8s0L|JxlyWOE|nXRwc-)cG(U9r zApk{ID{xni$SxjRxR~3dC|t6x-yM2aXs7K{uzt+ko-`T2Qz&%1={27#@xn*)je?>6 z2~d%V-=^869EPm{FU8bH-2osxYJ@=zva;Mk!Rr#urZ7RE73weW8OiNz4-vG!&wsv$ z2YiBXwzPnuazDMhqF!=$^A&CNihFiNM5m?QJSqZd^Z-0Lvg8O)?!NM;lW-VgIzj}a z^Im-`h<9`9#4D~If$I%N=Q+WkFS&$HQ@6^DbJmaNG^uF2vnM)F+WQcj_zzS6))KY- zcAu&WAIW4dm)F@F*QGD77df~JVR?O%R9LmHsCMvt47ywmrVDG3r+mT^JQCz=bOXUk zs>R-w{Xy^Z0}*qWaaoW-R}dZZ)K;EcK7sBDR8ttHz>LDfS45D`%`<} z*ozL2^EGY*bLBuW@;iaD*^%=hpV;Y;Pke@6u&m4<4+*$7h+rOlO4_iJ94U=;SDJ|C zZ&!MXxF=qVrPr!J=N8b)V*#!{d&8jsT(1p@65gq8WUvDjIB=d*5AG?R<(WXHC*QrDcoACT_AJehk<2yy6na-^(Q!$7@z(TvM^()qFLW z_-4^Ce}}i9H0(0$imqizeghdkYk9h_*f2Qg;1sz;;MMz>5W6Hs|NG?QlMm)^Zg2PK-TdmC@FtYK=Xqx*O6#Hiv*y}Ul)y{Jkc!QJzC761|#vF7;@ zWp4e!MU9I=tMV6e+e}AMqRpe-Zy&sP^8Dc2pZ0!u@EoSrhi^TbiEMRaeF0x-?*Z;= zSp5d6`|>TM;?K?ghi^@$v8?j{Z_QgLP=34h)(MmS51Y3_xl+(I`Vf*HE%u&_W+$uD z-#%39&O!E<7vBYNePtiqjAOI)8}1~sk37`j<7v-6cq*)B)E_nf?E9bgf?;plh^{;! zH=gZ$SuI=37CrggX*W@pAShLz(Ly)2Ji0Zz(~N~4B4caI6{IV`QLERhaqAm48oFlO zG256p(glK9=)QCAW4h5IO{*Seikqle@9s>yuMb4g_z}KWKZy;)zMP%sVpM&_4H)oM z&FMt|HzEheJD=NtVC36h*T90!8`X?;DJZKUVb4+|4~#|_BI-pC8%cvhOn-ax-CyCw z!uC>?;W^Lafzdn)lzyC%$MW()o+PKZ(186Z>Xa=kM@J*1f^_Mo+#FD$sKx49(JM^l zmuMUN4HubS25BqjNVc-HH{WIXZmr1|E*#{g&yVOvdtlA*Y8WjDyT~qucC#c7Hyf=V zw3~N1TD5WJl}WqM)+(mEa5|5!4u|UV>52r1+A@@+MRYvjXuU5(01g-4*egSvH&@3U za&nSG5UD@8Cq7(mD0d?xcDHZ6-ETjZ1AT+uuLt|R{r>IVpML)22A=+QYr7i&3;WP+ zchL=2Qw%r1Aq?v;V8g1{(GvdD(cWx6QkXdk#XnoL5B&`?{DW7cHwU8&Oxi|c7;p@R&t06$)T!cmC zoZhzSsBNrNDxa>yE`O!f$^mw59O9aJ3x;ry+_&pj+4kBUYqj_4SxuHJ^^C!*#T9t} zcQ-FqtB525z7CRrTGO&m@E6!Za$#U;QXS^5f>g1_t~xZ6oCuqAOwa+tI0N2b_+9|5 z+AD!_GUaW_JKIO${<|Bs`@VGaYT{j~LpQB5TwUI#;Y6-meqY)(RLhn6%{WK^c)^R) z-;1Kvq`eXd(a@m{WHJ0+-8(b-O5JbM0{jI!@jb zAa%k#6(7v|gJk{-@lb34j0THYHZ@bgF(78pYzwO(;t8h_<~tAJ*yC0quGaqX$K8j| z51v2%VRwVj3X-Kc-ExiIU6ro??P#={I(~Q2(m8zo^U(SHr{@oz{HG%`80kL;mEzA3 zr`-lrX5_|mGirm&#P8De_&e|kwDZB$#fdF>3ZVQr|DAwQN6(co;}DXd=9xH3-v=Da zj8nJ!DL3G^ko#J~Fw>#ct9N(rxa$MMUhdopv(z{N z<-R-VQh~62F9=ni2o1hFh#5jki@AIe$c3_s;oL}aOUKgt-{SRe;`Q>t7`tB{^g_SZ z5Azuk>zwSvTZP?EEZQwr&7O;QaG;SsaOBe8`wi0Kzw*bLP7rvoKIG*>x1Qmg%wY8D z)>NAe{l5AHeYlx2`uZ(2Y|7q|n;j@+dOgU4swyu*e9Z+ph7yK)+lJGYN^;nD@E z;dUn-`ThIysKc-eoFP31r6iWdqnd^O{$TIN$3K1-7P3ciW4n8MLfb)Oc=Xd=T}i0-l_!tVk7%Lj%fw%8O7Cu%(!2kuQ;Ngy zTmSkiZqM-{s~Ua-r~RPODokOF1_D;q=h|*pv99!*oA38_ik#oy?rL;YqPjTNc^30hc*?y!CIt8-LNC+z+ zDrEa99|Q%EhvWeH3bhP$%=Qn13vRlGWpE|J7BsoSxn?XUgm)AKI+zOE7OAq zFYJ%Ux(|5wGh1Uh#!c~l_3igpz(RvcEjS4!Qw?^Yrw5bGto!&Sp)CFvlQto2q>^j` zX&*5&6PDmcm$qnm{VWuGfK53`a|T{$N7FH4a}YJ+Nos2`#*Uk(wF5nfW}75Xr90c$ z$(ka$p}!^L&-h`mOR_`X6o7dSAY8yh0MO3yc!?ptI$PY(&`ftzJ%U-`qDNpxJ3g7& z={I1Vs~2pA^01_WC-=sG;Fb&e3<;bOmi#3$E+*?2GqjV-l>!4EfZEO2gwbUgwQ9nv zeoR{uRBwzJ=iI=ZcHBj3yA35Ig_LVx4Licb2>R!|;!8!HZZHU`lbjXZXG@C{x;3<*d(7`*LS?={r+>lXNiMfXY9EYi(a5nN zMmxS<7=4p^R_pq~^A+$H_6*`Mt%_gDM3_b+b$W>u%{J4@`meYyReY6D5%mI@ ztR;7}<3e-YiB8rGxS2mOMB)o+97ad4B%)(BpCJjBaF-^*a6e9w^#Buq%O-_9BNP&3 zcS@UV_tG`y+amxb$h zHJ;(v^WAcpcwX6h{3M_0$B4wRnU%@piRU*saw3xoDGqIi0Fs+LU(KU0#$gODVM&>F z#{E(7n8Xp`auYl?LUb@f4pDRv5eDc>yX-fQzeO`0ZFS@XVS;!+v~mjCl8(piY@5;S zTJAwmtuJ!~9OhZNW8K*6&RVTx^d6Sq|w zw6;)aBXB)cqM_Pq?VPthY0$a<4E!b)<9=E$j zMh~4Kt;M$wo4bGd?2pU=awl$5Z5beibBF-~&cB~xR~vEFm^VsdlaVxqWK~#1l$oPf zYR1Y+Mx!FqCBCnlCV=!%9~pYci%KE!SZsOO)$D<#&V{BNVo6fW3kALct;4`$EN-zC zELh(S+SZ;zuTS*ivDX)>;R0{FtsHq&2Dku3l3+}5 zXijE*Zdi0A@C^zNrcQNWlSm@d;Ck?Uk5Qq~q`X)rFu1fUnZwJw3PorXl0B%OP2-e}*^;mua+l{HlPkh%!_q>fxcuV;Ku&lrOin0PU)6 zR@lxL0DcT8EG1}o*J=lbPBWUcqm3PEbD7b9#SXQ0+F@#{xd{k>4}%2*bBv&Bo+9oR zL)6Hoa#|m*nESaaCIDGhA+%4UZUh-AY#f234!>Z(&m~IQYqCzv-lIER#``995ig8n z{{)phjB2f>Rqt^9A66x53e~@CKK=AwY8PU0`J+47$l&^4qd`fL5%X&Ys@0B~cv@6#!ZF3YZ4nSMd z_CN7==Q^wfRTZSH=50)~blRc1=-CKb>VSx7t8+D(K=f6#=_{-%OdNKa$Za>6{FYRk zz`h>D1M_1kBATCx(RE9r-~6q zp#Zn1YR7N0rP7>J{(;{tP59EVSof=%mIC2v$_eSxYZTJ~iENgEiSlrfsDe}f!z@$J zc7!mN)Yv&$t_~2oFoLkYTaeRI0R700ikByFje2pNHqnuuaIFVM_+>Shn`4lznH@{J z1)<_B>Mvm$W0e?{h8$r;P*DHQ&kWYS)4vl)fil$xu#}>4x4M4Q<~nxZJn?8^S@&8b zHbxGw736~-FKVq?q)ra;4VP%5l^uYhm$Ch)$9|JS1|?KHJ!AGODdRM-ma)#=!=IDF zJdUVNayDp%<>AksbVABA6ufjtC}dYiyeCS!HM6LM135N=7eHy)g%djZ#)%w(CNL+j z&A=*a{);)-iSr2#&~T5}CfQFVJm8(Hot&nsw1hoSPyuU2qtLqPHbc6e{Uj5z?T)+z z&^nDtV4)jKL}(F}V}|1n;3&j_>;sD{CJ}FzNo4oZ;O`3GXPY!~yx4YMBd9JXe?MUB zF6RN3Fq6QQ7!@X^xtbN%(#m-X6akrU%9S@UpE{&`t?R5w0D3#J2CIaw;`0g5 z;_GHyWbr=d-~+@ zb40H_dHln{!v{~Fzt{^Sw0TI?Qu9J>Ndz#5&R%T)NjjBmypp$<$K9obWb*ywOYCw% zo%<0J9RepBP)K9L^oP8LB7kT!-F`fj*C$=dvM zrnder9vKR(aFzmUlw%zI8_8wE{h*`M)Qo03-CInAw@rB0pv=n6=3YR%te{o_k>pHw zj<3A>k`6=;gpJEWN-L#1pHd;*{gleNbtC1}0qyM@EvlwXDDC;Ad=QO;aJOO^`g9Yc zNEgy)RE(r6Ky=*ALi}`CV)9v4CQd3`w~tb7Opo-OOitHzVmb>@_$P)z6Jytg5RpO>u?+|BvYJX=SzG{hn=|yF zdVQi^O5-+hwjzCoIsKDO9n&1bpUVxNJSo6N1Pr&La||sCFxW7OPJ#=uU$SfC8j4y^ z_G@%9pj5-DjCVcM^#WcA{AhHyk7pp9v2!tRaMosPK9lmf^7ojq^{gAg?~Mv;{=Wnl zsrmda?&znZqe(=M;)af53t8lQxOF00{J&#yFFOcefOdpbZz6)+8bjT^qjsM&gY$h_N<4-6|5E?s+H5%j<53DTReD3UHr_SvG; zRZ&|!DcT7{ibE@!N<}Ye4HfUU*z{<5L07yr1)1wx{~x{1ydp7$;xW;59bt%q!hEP- zB$=^}I$W`LA(7g8k&~p70}I*47h%at^0Y#>awce%O- ziHVB%7+G3Qu+CrV)*=}n`BX(Y!^ugl6yzZd!mFQ3Nmn;_T}u3PTnIPFFeYw={ZE&& z!8D}lH@|-cdq$1|xnj9aljg;C3-(0?B;U4M+NO=;G7_{u3&LV~7+N3+lxEPu4|X7l zTd&%M1i?bVx!_W9^;X7GKhM-9>2)Nqtxo0reMQ{W&Xw!W@;|=?Gpd$1VdB+webZ3!?-!ANI^ zG=03-idh*GzSxk?E8Rc9viODV1wY+=_yilmkA03X#~Q$wPk5-f2T>7;zW;;CoB-`? zua^PwWUE5kWk5h9uQh!cmzIsSjig2sEhM*a9>{Jvnw9Ppeca#?ChzVSQ<-7peMI|GLkXZh`q7qqya`rcHMWukn($6eg|6xvA1ZjjL33 zVM&SzP7M=Ere0EWQvo9V6%-^F0Q`KsY3`dwXMfq)QFRN@3h5wf%w<5cY{O~*E^!Mi z$!#@8;3jVTRiz_D6jd(Mhyyny6lYp4Q;Mk|jm{VCwuU~F(u>j2_!y^l4MyIZD4B>nYtR?fMH6Y1SC0!v`8{9fcNG!At` zAGk;WJa|W%mZsi`u$yoG`LiM0wlm1;DsL3$V>5R-Zn^ZJW1yN~d&1nVUj4SWh8&oV zb}x7r71VcUxbI#pz-w)!hFwx@@UD4R-Za+w;J2sOVvAcZh{w4&Q zNXRN^2~yM37@=X{k2;%k`{(L=)!4}Z;dKd3eGH*buAU;rBwR==VRg9MEi1d1Z`b4? zTgz@@3FlAd-j(mKMCV9JJ!$*n(dxKAU!L4LT}>yqhReb6s&@kJ#|16(9tPs5xOe-D zfRF=fy*?4kn$u)&Xj_}!aSK^Zm*LaNZd|+m%^}tihHZH|=(#I}eAtjH*E%$DH+DXch_alQ}W6m_v@du#vg&ddL2|2L)$MbgkpkGklW3+}mX`g%Ra znXow)K)mG{r~K!y){A6`lXU0`OB-2~%=Ra;kmU(H?7RI-_@f{GxE22RbNJ)y@W)5~ zhakAH-VHnrk46*3lEKv6Jb)pKadTKVuXN_1Z4sjhkQtDHP(J}4|Gea1Kl7h&_|FIY zXN&)Q#DDg=p}M`pe{S%fkNM9h{D+6ews{&Dhj6a|`qL2-`D6LXtz#}X1;(omAgqQf&VjQrJ3ZOL%Dpi%+cMF$qIS)q`~fg80XOb!jfI%qoEhD{FhUr zyd*>HWN;p?Lh)LS1~Z};omxa~>asjISXY(~Cd|;=JT%w@elnI0{(Si+;S|e}+yK&L z88#P*$Ouz2dRq>14~)VX>JU50t$u@@B^`RSv*WoW!H;0 zzl*7i*ewtZ2`aJnTyE~}lvcj!Xf4E&-cOLo)vn(iWKMA+HdVNO-YFxgOPtU%$%4t< za*rr`owOy*aMsm{VAyvBDKK9Kog#D~cPNC-#$~(NXD`7!0N~<_yAg2hari|)-+ z{GqT0g~$Qdu4+&Z!?&a4vJsD?WGzxi%ipONPoJV$jc?F09Rvb1SPT)qM<}GCH|R;; z>oA^1!Pn9d$Q1$facji$mamb56ZZFVTN;TXv8`DKRCjH}9mGvc=R+*jM@wl1&}=G; zu<$V#8&X!o<=qTfzg?#Yya{KDopu2lNv$3NeQ?YGYG(6rV^}}l2@=$gpdt#0q#j^11mh3MHR$S@{ zg}-BcLrT5|c)FZpUqlXEf}JA6&_t7SSgBCM=7ywhZ$t`X^@Z?ax=XxzNd|5HAjq#iT|Vyhg@#J9nR%=7`3;zX3_Ks^u_ z2pZox;$la~W17s?!^>??65%0`U*?DiT3%WV%f-L0N6RB z@sH9x3qC%{J1oO4==Wq(IY-m!N;lgkM1GcZ7xIJC?Fo^sk~%&RVGv!qAcegw^~RYu zQ6=S1YQ(-&IpwQimj}v%uHBT%*t1JL5ffP;LRpA1R_=Qv8>oTko?uHPhBDwCsfyck zk-TW~=0(aN2_eS-(5``Z1WTaAtYVvLTDg!#2Z`)`MOc;o$E_S1?;y7a%%Y-$3d9C$ z@Uw+9OsG*bPx!u@WY>sHu7rgm*aZ)>DP}c(L=YGZr3uke1VJ+FEC=V2etd=bav#Ui5vECnsA8>DndmY;EIhF*Wv~=Ic^GV zx2mb<+Pf-EvAmTH2xZe$xE`<)(i+MWFj27E$D5*Y1fPqe;RyN`yS+kwv^22Mj%9LZ zEV+i#Z$mC>td=_x>2$arPlg9_UQtaDA$y6{Aq{Yi8rd8hu+PperEdq3n`ZJ|pZ*&B z%V%|>ljbvt|L7o>jl5pFjx%EQa%zyTM_+AG3&Eh41o3-ja@#$O;`Qk9)r z0LnyHWU&YiF%=Ym#VV2|z@&};%G?p^5qJ8*j4RL)lkJtK_o^HPzIcQM9s)*SaPmk8 zjcx%_BOlJ0=xEI}X7UDFO%f40_%;7ZDT2C6R@cT}nMyaZ#WhBcd?j$jl)N!;gas#H zP)3oHp}=;Sv6JZYLUnnT9L>0I;2Tnf*F(AMtC>1#I%R$oh=195=7BqIPk`%?c|z{2 zg&m=Bcw?r+;RZJoqW*Ll`br-oc_`SirIoFF4wt?P-OyrrNH%5$qD7wF-tKbR3gHtP^? zx`0b*+B`+hD*)AxC*3fD&Rt3W-rfby@kb-PF(l&L$`0=%(U zV5nCKdl!nV92t9~DPl>Hfg{}8qC!LjGi0%t(HI~`f5bhzhL_CS#gw0j*7%pksmoTO zu11e3EVxTr0&jpfICv^p)1sU4mh!sRsbCH-4~+a=id)&eYq2eN(|lLR`o=v+2u5ql z;q1TJK0WN~&;Iy1BDIi$8=E=^iya&xbJ3MzNOoo6F4j)C`yLoUEpkIl#+YNLKHNU7 z&4zQ1Dvr8+JKnwixOr~7c-${iA(2#5Di_mTbVb|z&D4~n90zrEcTh_M!M?q3%Gkj` z*t1u5kdg69Pwa>v1P9V~sFC^f z`=`jC$tBdP2M@C7L*{Kjeo40h7R6auGxjO!$GyMgbfh1*qMA*+Nc)O|yuTGb^eBZP*H(>z$>p=>p{B`@MlJ^%@&5+zuo>A^nYMvrkcfp8R3jLI-no%w{0$Lc#ffUQ@}r0aB>w&@WXSQ@Uq zAP-iI2KPcz<=B|rGaM+7BgXbwD zEn;oIK7^#@nqDPQU@h7i=jF*uu#VLT6(Gc-#300H|GB(gYxmt;6{_%J1$ zC^Lcfh0`e;&63IbWIWq{(7u`BXjUok`V6@FbNJ$W94qz*@%HQ>XkNkxXz%lqcK=HY zK6^7gp3mOk4BiyU=*PtV|_<1~R_aIZNm zr4{lS!<^!whVub1N{Z8+b3LpYm`gI=r!w}?U=kn-o#w|mFV*k1sqRcQW*+qo52c?r zJ6mV`EOuoQ<6y(=ACBnBIzR$My&{I&?ep1R z@ERJ@tVd zFFFNR5GrcogfV-rVPOn*1>S;HkAP8{qdprep)unU2DKpsff+-bCYmoDBRP)!2E2pC zyY{*@B30U}GOLBi-wA7_rX1|F-5}sF1D=ur*Rwbduv8bA2L-|(r{Dfr4#5zMOtpyf zi#!$sp}Mo}+C)SrBMB}+sY4WuatJdV`U09<3x0_~!N!?H5=WJKWT?RuSDlCumlV=# zc*5mKB{ruEuUB)2TP@i9vmz3q1*q$6wM4iMX@MeB#elSes7d;-NB=K-U;h@@ai#hD{uS3= zHjNyCC1>QFXvU5)LbfLQ8bD5FB|oGEE$A4!d1$btNc!LRea}~Y+)7qlN~&w7 zSc=ka&3zW5186G9l0ZJB_Uj9zkIScfGt}y&W`o5mzhO6RUB3cVXffzeai0WUqlC!| znV&q>dzha*+ueJ#!(_$hC)0%`h^n}nJgYUEA9Ss7{ps|mfsciH9HWhrwOZVq3*fDE*%=N0!y&?33f zwp_N=`^MWE&nM@^lw4(5<)QTW@Wm}eIXWaSmuv9nH9cFsCVGPkvU||ZdR2{-0LS)n zaTx#L&!tw(r4<5Ws0mMg>0A%`4bJ8K)EqNC5k>VUd5rft5T(| zG-nYkQ9LRhG3t*W@J@P zeIMbnMOtRI*T*l%i>?>2S?+kJ4CC0%1=UwE&9*8n9!LkYYKBymH1)f4MSLb$KtAplClyM<>6>8-VHS9cE&Yd9d zwidDjCx)6R3DN`DQsot7W;O8ccu;TQJlGf7Nx6Y!i;tsIf<;Px-E^<-ASPyO*!7Ax|!B6h-39pS%z|#0> zIE02=1Lv}eqGlaI)sp;}d=S1vy$0(Xdz3sc4)B8WNumU0j-18k(8)?*ds~(&_ePzZ z)%aaWq!|8zYB&J_21QMu(V0ZyhWLAb%ot0gfCx#(+j4yi;X4`rL~l^M4(erukjd;i z^H`<~>`(G70rfTiy!JJ_oZYkW&2naA|M^2l$NUc0yCo_WZMCGb%dBB1CdJaK(kg&S z(-i|Z*;+z$%Sw`ZUX1VcUUqvR+5>Gyui zvIf1U{p~IJ`}NTn_c@|~16W^cc_ciq-(a^qCU@B0`d@lS)u0W%d~ z48^hdaSnjG9#Te8RUl#PjtrA7RZqQAh|)(r7NTWQVWkhP)!gKgLz5&`2(M_5QY<6n zxxowb81YtJPAn6&^%ICDlL6X*0DwK&RqX=KFsi^!{zyOYu zP|_`WX(NBd)<3QLr8JZ!-1^4zl09G?;cfU+b$!GIxIa2Orv(6M51cZ{pf1Ub9K?ej zsL^Uxu3T=h*(O@qpfMDfzj*5X#p?SWgFurj`~sSN29^Xc$@~zgjVx*dz)!PTEy4gR z)dzqTCv9`{07)Eb{WsFUrZ3wMb&^^NSL;Ii6#z z?$D1i`0QwUag3B#p8v}fzPOm6LT08BQ}8vSPr?fZoej|~dE{H7L|?^v^MWo4w!vr= z+AJ8?PASP4?{p+?6V=2Ls-RO#@61fI>&0yxT<5I|dG{^^>Z>90gwslvN1-$QjygIg zsnWOY6?03(2MSJ?E**A;jZK_IwR?A_W zk1W=Qx|&}DQM{AsL_>Cklj7m@@CE+gI2fM7YahhfddJFo-k18tc=P&#gcuz@Gjo3E z76J!38y_C>GKUl-GJ4jKAlMxKYZM$tYFS6+&@T(|1g&A@jj8A)pWqoh@=z}Zq1h_q z^9u>oz|n#$;^|a-_swiHYU*i!fDHPqc>tyA;6RR>yDW2h?e12>CF-{u9?zz@<5j?4 zb76W{xIhxVET2V^^B&m7gJ7MkMoH?Au+unqod|UbKew@^VCNRT|JH z1$$KCU}(iE0N+=Ow2FHOOp629w#ru{P+jaytOHIC+}pap@$BL5-u)-rk2ZF}90t$d zozFh}*u2wQpFTA2;6DC8}hEKLt5xLvEGphM;6T`#m#}k<+J~Ie`j~Hx% z6u3Pi22bC~eI@>hl8f&!B4LBb-@*hx;5eJrYWaG|-BvBZTJ(d3XhA z?-`;dJ|lNV*L(>01#u)h$98Y-pS~(vx1NyEfB^fJodG6;*nWAMC}vo*3S11Lv;#84 z*Q6qc4qq4# zWG6!#H3lq~x!e@t(XLl*p^)j2dY4OZC|K^@yW3m4+yAw<^~2U<>{Q8WFddpZ@vYYi zY0LB-^Nt2@g#J%YI`ARH2ENfvZN^igm=Nj9d3?=Pg1E5bXf3dSfju+*v!V|8gm*2y zIi(EOZdB7;V&x<})zQp$FjwBjmzFNH>!sV2cs-p2G|!#K2bWf+VV*-s3jTyX$vEe^ z1%fRJ!h(o%ryJ=YvRHFNJ2q)0>9w!%TMHPieVyS!|4c4m!q|%JBvY#VTFt6Kb&Hud z_aJ-OT9mtTJa&rA0%0y%TErsB{;V26-WSneH8OleefFawkZ<89MZeQ=i)&WCOe=G< z3&o03dR3u;6~U%0WWt@l-NJ?OD0wqEtnJwThL?F$SE$_=qq&kU_6Yj^xY8G|BWKJ~ zzQ7`e7w1z5H)j1IHJVF`1Zk-2Pzv)aY?89~vWlR!wH)ibws#A}UqT0R9p>T2f9*Zp z*xq;q1%?PJadY?Xw-29e{_(-%@01;AD`lqMYH%t+$=SNiVO^#Rbp%;FR?s7FW<0p* zZq}!=7&~{fKNinTMRz2+c~#r(JV+x^z7Bmw?dRSRqN!-A^+JWhkUZ&NjdY&Lo$&}) zfE<(n;BIw(sM~azf2l|(?N~ND^x@K-HJ5qj#`Y3(oU1c95@`wh-+gjoTX-7|&(eoG zL(ytjf)lOyjKeOHmWhJ{VLd4ksjVZ57SU$mE`oKFxoT|Ij?%&bi(*7?6o46u zCA}G+T%5p<$7^gd|7+FKJP}8Tb&E;e_*OMX8ujazf5??fYfRixTk@HI)%-5Wq1N=w*`ingDYmAdFUa?K*ar(kB}Fb>fTALaF1xW00{`Xv-iAD?)h5v1ZsYCRICEao5$;R!lg-noBuxb?nO$`ig?8ik zSQMfKsk&OuDpO#8MXfrBg?NGbA_jh*!dvLpUD>Tz0J0C?3!Ff!bgAAz9Y~#2hDr8;YUN)wk~gI zR(J32>~8FC?d@)FJl?s#wOx&4hL&fP7t<6KuRq_>z=9nEZsCx$IXBpgk*>X`pE_PN zqYHCmhe61^C^|j}HIb8ea;_bC>gbM|2cm=lpM2_gFRU>cRzAhPA)Z}Y@bBI@eV;Xb z3LZwMB;CCrJW4p^b--?ErZ4{rf1oiI`{ioL}E zdeFfIGYxYc>m>Lo0>Mt0mf3u46S0U0F!sr4BUp>&oWceA zx~yY^QD0jEs?HRWh__-35V$PeZ+)?tG6BU;590M!mGI65L#ej2%=GoRVjP;Ki;LK% z5O;`e$7*pv;j6aVdD8R(8()%law7Q_sleU&JH?drH9E0IKds)Xz%O%mR&=8zS;^hA zCl7ORDOi)IymFAmCzx|5LaypwJ6!u3k&}1@aglTihF$pV z&*f;pvE{Px1-p(<*m9z_e#Yt-n)eD?OvWo#HF@<~Vos<%myfzRD}z*=7h^y0=_b05 z7ZRo&oA(H6GI%u{3hPV{k$C zRFZD#xRq-Sa-PxW@RAe9Ow>hSGjnLt?xK{e%y?8xxk@U}i%kXTz4$NQ>kU{Og2`Bj zxSStNrF?}>p`^1E%-lDaOe4uG`~DIp6z*=USRN(05PiL#o7^{?f8Q~jdLuh$MeeoY zkT#3v=sKa)FiDIr{RM@{60Rl6g~T=pG)*n;ni-djhdjKM&CQ3YRx`M~=FG^byHI53 zrVB-vazoP$$qJ}JHb$A+YJ-$$t*q+Y;ThOMzP!VIvsWM)sNF75sym;cjur7w(prta zTe-*SeyP3*tPY5aSW2%^=zV)Ul2}WsjhS503i^%zo!R!91?7{aIZgt&k>=leR}#0- z*}UAQh5oI`UtB6H$gM{sz&;=HoKa)z#=wvg_o{;vwH_5p@=XXYbL&D8u)oY9DsIW( z#V{d(LpjhORQFD44-12xPCqD@U=REn7o@|#?a@YG7|@+58uFJYm-3exv*_M*&AFFI z|3e-7`V(`zmCtqCU^CqF*9uzD^pVR!q$P8a@L%&Mtw3>?XG3r-Fvu2EM6J%)D|5_| zGQN-Na$p4I%*o7S!Xc^SlC1<=Odu3&<47Oj&2t+S@4zG*m z8k05|$PMkzz@T6?OnXHEyEWUj>Rl9f9v*W2Tkz}YT`9P-Ji8Py)hU$-JvJ+ca#Q&V zTejlUOEHS&+O?Y;;_BNk9 zdwB2hE?Ty_BPaf~>K6tc+iU(WwywT3iLkurnm%TBJy7%m}M(suY24LpnnX3-XGOMVnTGXFr>|GPNLuYbo$~5l$jIAKGA^^Skgx(dh7g46w`LzO0mR9C+q{Q& zZru`}=$%`?v!hL@A8(=}muU3jRD!BSk^eXn4YRu0U`qd#EZ*(8b}(n>2$dn5{qfoU z1q+Kb9bRC?GD{ z@zwV|s%wW`3Ck~vsfp1y*S^G6Pp55VElZd~GT-R5wp}sCm}j2B3uUj!5Ng7IjEN~j zedQIpT2`igEfBfAbO|-{zole$7Zdy`W^U?=>z4mVw>B3Tk)>o7lQNgeQgm@RgRIum zRdB@X9ht1yXBh;z&lp#|$dNpKiC4LVvAGQjpH7}0oq^D+4fzow`kJ*zy5_I29m2=- zt9eNaX<3WpONqIBo#qL;e>Tw;8mX3Jkir>A8&|1zf_kjrzA(X18^ey!r$lD@7zfnRlTC^*+lm5T){&Q)%wYDhWnGZJ4RnJ61BT13e_Ei zF2YJ#R`b=ONyewq4?U`>JKf_%iM{bF1ZVzfd5y7?5QqQnNFg zI085&U#OHbm@YoWR`zK`>R^IiWsRic7xHg?=(k9f@|+AFOziyPa>*Lj-4D2*2pNn; zhu4|Mp|iU;-6xVq`7GN*_B!uL(cT41rL)L_cD%t-A@ZkocfDuhMia@*5R)6*fnh%A zY2R(_iX-KF_`O}KpimF89P|~dlOlzfSr{r0@G&ox-7xNcad?E^V;m*_tg$mi2s}+xIt{ zFTT9}rA#K}&+!Bt_b}W_Lzr&kpShEefHy%&`ZLfT&AB&k6$IpZqX4Pwp3iua5MGP% z-*f<;M)1~B9ox{dPrh>C&Z!5iy*Y#V<`t}F4Z*teuV3DVy8IVJG>%7W<5z3q$o`9< zc(jIC==mA)StSdH)Qbde7VspZq=m5-$BhI|5LIQ!hqw{VoUURi@Pim_7Tdu^I~V&$ zycluV{Dm$vVV5i#v%_n>&a^DfUwC5f-s2rFoN^=A(uExD3}iMhNqCNv;qzFeM1iE2 zE|#iD5YCL15O!PguF#};x3Y8O4&8>Oezr%FwjxUwg26^W;WMVR=yJNxqHn1D<({!N zhZC8UYmsTZCz2-~e$FI@ppr+nBoPT^0RaVjE$=ah-O| zvE;{M1bgS_#~d;n&|}oQyK+o`Vp;>~CJC{9ktrj<`nssQdgO;fY>3PLk}Ncw2jb?r z#nq=DoaQJf0tu?Jp$u$F?B9I}MvioBzZaK9eR^{Zb$jkgRxgaN!aS5jjo;fjQ0eu5HgX?)V624|pN2zqr+c#{eB@ACjQFlrl zojuHv)Vv5sa4SEOulbh>#6% zY55|l{D@)Ql)arFUrYGw00(D>zF};16DMdy1&|vb5S2PJhQ!wPvrKC2W8-eZ)w;>J zCg40_)`#i_Ys-r;*lQ`h*7D2v98JlU+|u=p3A*)1MsEd(x{J` zzD}z?1M%6~b*@3^R{aa$21bqj(zf{s?9YQCLqr8f!g~csLQ&pvg`j413_5-nc;Yzx zv1QK2>g=xSExO6j4L;S{DxE6uygg${20^HK2mLFSzeN{zPxCa1P8u{+RGnqaYdbTS zJ-0sFA7DKN^R&<1jHQz}#R7D_w12v}p@``w7daPn-qfmwei$RrRgItFOBUP~d$}A- z^{>KNgThnkjx}b8_)Uk`bvGc+*{hC+>jBM2oZk}ItbK9k&W)5&N+fkv3y}l+bw@0Q z0huzV2XQg^oq-*oNFo)wxYY;3$i2E&ORWYWe5O?=Mpx}c**rq-5am7{E0!*XqY0|l ziw!lyqRjMeBzJEjZ6B5fD$48eZr$KX-`9g+mp{>;7UCn$^#`{>FhxQDa`@SAHu_;a z1ZHONL{83Mtq%Uz%#JvUeER%<&G2Pv2l|6>J)iDRkIgU6o6+pgyLW%s+TKAjGquea zRCa2`CfB}phG_&BC$U>PvW6h?trR`4ppL*1Bq&){OZIDx2pR%-BXyqv28R1UZ!nOh zh1Y3#J`^QTitpO#6P|1k6~%BzHvpVe0R(zE8BQ)B)Zb$98S2e~sMso;zIx9N?y>)X z)zm>0GaMnwVbv$oLO_XptJR{nO~i4&rc75<)7x<^~K~x0w?t)(bfB5_7VgE;gm%k!xl~Wab~ihBzVq1T}Ck zL;)mSg0fzbkmS`jxX^*^N1?o@v3tPBR&Doi`EJOimQr2hH@_)pX?ezl!wAc^)VXF< z5DjY&L8%duZGxfM-UVVZ;;p%K*HmfKpCNK3mR{}>$kb395ngzwR&%LWqY9VH#y3h{ zK(Q83cFX(BnG>Uc7H(2pe7xus#o;5!HP(b=Bso~Elki!#h4^td%Z@nsjLF{QC)imCua4FMfhi!2ZQ8T$Kv}=xU?4t-)IQ(-U3Dm0$M2n>VJqdV zSkzNIBe#v!h8?79p!Sb)6x{7Oe6xn+48N*b%G2TG6JO%v$dgwsGkPQYaZuO3hUqK} z$TEfQp`zXXIj)Uc9a#6!iED*6hdmX0OosNHzG^9I%TOJo%6Muuce4)a$=8$9*LaTW zK7c)fmC4KMWt18M=IJ7=g|b2-5p7F(8e{iVBz39|PZ6)FE}{2Y4@Xj!74R1tmNBH! zXf^a4bU+}mPjFfd@c()-HqvMlA3xU-ESeB>oaBJk~9 zqX1*7=^{I0$1j$=ArZH@=h9 zGA3nB5l@ohI;k6TIif+=n9hFvO5imIaJ_jjKxWTm#Dr9y?;kQ(l!D+jy=Sk+qvL}a zsvu8)!f8u*GXdcA4Ed{+laYRzxipC~{$QT769oS8CWuvTb4H(z$t0)rZF%2>Bb9*( zg1Y-W-N|7RHv4x&gVWY99?q#l5NAT?xPZc^sVioAcs{0rxrWIDL^vIHr}k&oj!84N zs?bf&dC5Kd@862-9FvC&^QZAC$~d!E`7=6YNn3XNS5PpM?-bL>Wbi;iYXN5{pog^C zOaz1LbULJB5b(z?Y9@61JjgkaNe|i>;T!zvXP)}K_rtj@?xu{Bc@O+;(ffsfm{}VW z1QuDX)fYH$liS~=I?K^2Q5Kla#DGmaL2Tb;p||C7`B+s~lqylO z9=sBF+>*MM=vk4}o-16TY_xlIanrALw7U)3q4530#b?nsG#q}Rz31Q5TeEw!Wki_^ z_`IWB6AXYz=$-ITZR~VZJB-Pc0OJbC<>{m08z^Z|a+3C*0}_K@b!u%S&6``#+t)L> zcIQ{0-4fh{8D^9znqLY&aWoo2!pgad6rWKLYS%W5Ws1D?qoFv)J;X%gK?ZBNyanBA zpa_XUf-nlJ8D9Ska_gfmq7}!F=f?;>ih1~cRH(&Vb#?g9Yg&SLO_0+TkukHvXH>Pi z*?bDDe)TR;{o&Kh1)FW!tT#;8VfZCt<|ZujoRfNA<{U*fc&9#L;bFCfB~00s$CTJd zHqSpRlGh%3gn97&gI&D}R~Nz7pcK-bDKw=a#To0{`2=~88a`GJy*d%AOO03T{B-zIs*_4ZK@h3q z0k?5}WO}DMiPkHF8k$TGbAm~{pk{D>n;gv0yB74At?75ys3HzIn1h>n(3_FQK+4&9g9A`Gpz0olo9P|l{ap!Hi!aRq* znuMW95LDx)8$^^6!XN^pJFhbkzLRKR?8vxo<%%E#w5F3$S$yxk&&8x=Spk!P@=B-B z?dp0DH@@hr2i`umy|})>JvyRJ;4I;(+S1z85(9cE4&$ntJuZ7iZ%$8%&7hS(ru_Eg z+nM#BRc!AkIa}LVvYrEFh4@Q!r!%zK8kS#4j&^7V<_I0l)_ zDbpYbe5YsxBeT6mC>9h)7lYsA%hlwF*KoMjUADZO%Jv~>AhsfwEIU~Z8AgL`!DcK^ z8AQ>Zds=#UvpVYCvk#qAWK;0eh}0S}22s*^+JN@;rfsN>eaM6DeO;^E>+f5?pVPVc zvzzWsUV+Av5IvhcpQy)?U5@wlU4pi-Z++c6w;4CzTpM?(C#!Ngb8b2kU4jb;Y2W24 zX}n5*RBtd{{2DNoaZVkHdJ7}*8mFZ&b#0fc88ZtA z(am;KR)7nb7E(|L_Mu%g$j~yV4+aZj&o3`DrYe_AB1oKQ#Op7>@LJCgVz1-D-mCF3 zqsxL#T0kHMmLE#3K^!O3gE7upNhllYtLB-d`bYv=-Wi-eDCwj=bqV+4s%L0xvk`6z zo#HBB{KfIkv2Wl&xj@auW((8P4@_P=XSN3V*oVP~p5pCe9P>v|odDu+$>dO+`!<8H zYh{|dj9y=yk&p6J(8cK~YE@%AeHnct-(a8-f`NpQ2iOW{ZwKqmeVm83_&t&Vrq-gF zUf}dShef+Tuic+c2j-@ii~&CTc6gSaF)}Uho}(o8ppniUB{F9?&{!G--5LCf_fHk3 zuVjdu(&@ix>#x|;rU$iUh6E4r;<33Lx}Iwf7LBch>K zX~#N47AqN`F_qF!*aL$k@sujf3hp_aVE291$RA|ZB6*Syn7!q<$9kkk#EREbqrqNu zjd^a$X;Exd++{1bjdSw>7;Y{=)1%htd8EC9<%EE;NRe^b`Te% zz-SG+H4x0Z%FpW{5l2}$9pl2S8Bn0rA5Mm+s{^pe6O0uDf5m~N2h(xb(tn6vJ6x`P z;gDcUq4$?#QgcSTDWeHk+7;o~n|r%v;9V0An+=XFBE2&h>AY5KZDdd_un$=hgOA4F z8qMk$S9$i*!(t=-C%OFU4F`crC2uP3K(_;s+(Q0DKq`o^{Ui&$@XHl44%{8691ph# z>V_z%Y@2WJ-TxUh>&?l*9Y8mHU4hm^mtcx^DRpd3kP`Qz#9-_1_Q0e_<3;xw%&zjI z12?&@qHN37U7~EL=t7&vV@T^zfiI(rmr9Zy>rKvAIYrYWIW4-8UN%qd;;4s+FqxrM z{t3|G_Mo!nh5_NRTsk@6tfbSf?!3=dJ)&}q$VNF!)HCbr=s+D@yXVI}y$Mrjl)&CTmAHnNN#iki-PA3zl zyH6)zLW4h!MyG2V$4GwXCmelx^LA|ml{!HW<9+Cf<ues(iaI@2; zw#53oD~(Ir{_zXau!xHmevW&69;n#=iBQ0tZq;^wxWPFY@qr6{I;{3}(MQ&!^9?~} zhQ#Id9#Y`4kvAFTUC@`v3JJ_vu2wB0ENa)9L*mF8H_l7>}Du~MjFLK{*ajCBe8P!04svLWx53f+X4P%xtameVSr zrom{nUrR3%*CC}0%4%uJg9VVIV*`7@_rWC&PY&?MY9*WQ-eshF@7~7lR(^(?cqnI< zZy~Jx5T|>BM)@{>D5Vo4(`Sv!vE?B2a+R3ed6@(>Z-i&?}EnS6j72QU2n`bC4|JT#f1qj@PIFr-?Ek)S7(k zt7tt7JUf>Og~=V6^c#Q(58sAH5pFG>FsSk_YOfiDv<9h7eW=4;rRKA=Kk_nc{3AW? zW-O+Ix_%(~V<_??{NQQdm6w%O$H;ty1nsXvOf|V}MO^pWVHB8%hY)5Wt3L~+BMt{J z$;m0PtxRwG83Mi*M_N!RJ$oJsa@)O~l<7aF^oe-C*{OE`FVcdn5EX$&e(4Q5O_5l6 z1AX>r!lEG6y1waeTEiK0hQbL&SjU1m7%HD^YrlLGXX@q+rRA>sI?&wZj`re-Q?NSm z6G^lNIxv#075V#Tu5NbESVVxq@A|8KG+>MNIt@0;epVEGJdrW{z5obv)d*BODd@?z zcC~to6x#VH!0o+M9Cxa;HRf>Ov3+Y3Fp%eIz8EZ&U;LdEL=#+&v|a_-u!8UPFBdI> z*DEQ;fx=OL21!@4T0PD4v$s{ID-;IPsYK&9=_q?G-^k`5j<{r|X=G{xNn^#k+x9S{ zsL}qE`tanyIi%B)sL}q4Hx#`l*MR7G`r_8DE|sp7?zryh;CO^ry{jDVdYB6S%=J{i z*$L3^ZvD%$0O8eT0P4qWQZ+w-ImywsE|!i8Pc=wJx{8>r%_?3^1fE$y(9oYi8)sx> ze{@Q-y}XbDXYN#4HzZLA*xr^<%UEg{CqFa#LzAQFDLkT5U(D)cm2oF_SsW46`suI6 zZ;(x?YzZV|i=7>0Z|eo$3kfi!^m2HRYzip^KRicfCgubdFRaSf+4x??{xWQZ&;*8? z^dY;bqwd1;TDtnMS2d)NZXs=aQFI;Qs>7Dim^Z?cWa_e989uXYg$5kk9SIK29 zJckSC{GqHZt7s!IRWR(lBjcd-uj8;TFZrSNiPH*Wk_7G_@ioUeQkknD6{{Fz6TQhE z*XzDx7pU!0?{PriL%+s)*S>bEA=Bo;s%3+UEWihlwtRNhb)z=iG)ZU0t_373>N9&b zg&&fbe7c|;s#!EigMk7eI@#sp@lci|EMo0k;yQi^ll+8PhXxiZpGL#+3tRq1n` zNPFWN6ulIwDp;3TXbl8_Wn#++rBVd-#f!4H+?Vf`yC2pMQX|glmxL@*P^o%1^8-A1 zwf2bN@A2qhZ3kz^=@bb33q_e{!L&9GCbWH)TjyKn!^8G%#>FJcF(1R#vG#~eovzAH z84xH()gJK}U-t5Ba}y0Gb`_GTWX5w(#)n7e2nD8_xijj+Gz#$GV%Xw_zcFuVL9O38jM4njN-o4vaiF)Uo@7WsmTGoJKgoMP+>GN7`>3|u% zLOM}Vuht~a@N-IDY%@qnwpR^G?j2YpE<}uVIO67t51U$->#T;Q?afPw!9IGrxG-eQ zm6VpDD^tmgDwa@tAgG{g2Ej|Z%V;vY5UeAG2=~&+F)iLrlT%L+;6KWa=-*Vq9BgYg zPo&5TG!j|sr1IIEVrqZ4y_IYCSK3?ozVqqT`wd6ySeqQwb$UG9ADIsr=BicTHYfIA z>&@vHeNdE?f)5Y2c83xfdpJZ*85ea$ng#agBbH!J6jLzJhKVIq)uogQy9?^=*{PHz zA`o#ly;H2!8@NsDT<2u}0K#oWfv@+G9sWki4_uT7`3FZSUW$z@n4V*bu`c zgrr;@d~qttl5jmmvlYpXgL(k8XPc1#roc+IKn$f!Q2M5xXAi!BU{h|iRo#qZVA4cUz(An=}2>v#29}vvpS0%Ncc>X3!9Cd%?A&VI)7k>uxx7aP0>HanZotT+`vXV|aCpx`%}9EKDhoQp;Uw^=hdpZ+vr&em{$9~JD(Y3jE$-$c%_By}}ktbgI% zZKzQJzJQh}oeE!sX84Ow+8h0;mCyA6%3x&6ieR=pQ7EPPDL z9Oe`^D(ew}=~)#?ia4Na$|jyRkA`Q6DFXa9F2Cam2f8)6{?r?-jbm&dZBf7uS!Na9 zzA>R84eh(y0yj9qtqWE7ftu_DNxNOG)qE;SpJ?LsN^1hOGT8SX)Ki9KCBd2N$Jy;k z7V`elS$Z%!LwPC%Ue!kV7dLC;@h#kB_(g{SEPbv1?q6=g(~SRbQ^^4xVvePU*B_f%h!F@94r_*}FJ9mb*baUg06198@LDiVO!ou8lXO;HY)Z+SnlyK?`ih2(_D;*5Z7M$f54WJU-x za|glT+IoZ32rH*)>p*@B?;xWz=ND(JJOUPm0Ku?%_V~e{<#r%Y*U2fJYphu69!G#E zoW?+*m97hma&@%M)IEmBUc|0uJpc!%d-pGnnVLa8%mKozlEF+8u)bi2`Ve+!(Qk3a zVS)n`9fKwNGYiTFOx}-x%H!D++_8K%-gl35KAYC5i8eTprG9f#dx$)A)E6ZB&Q5n3 z^ML4dkz#zpel>HXM#V$URV8VO2NOFs2~toWm#cv4ko^vg>JoEV8Zi18+-C`Jo-3QO zTUXo67aEn2OTS8D?AbINaauU@oihnlWadr+6eyEW$BMlAP8)zqOT^;Ud%*3gP6nHi zBim+dMSY)ON}e#Oc!hwC4>sh2{wvixPS-3gg`d>!5LisQTUeZ$mp2>(H5LYI?Y zKfVy<@-CDVYqW^IRi@2F_j`&Dd&88pYP*5H?}=<&3h5?B7h+xCGk2t^lr^9w_UBG! zIgHypR+MWLRG^}QU4KSc*iAzM_Eg{bCRmqE0=PZ;Jmx)iOm zJDiroze{4BuM+3dqz~f|z~hsP6Vwt%hBL1BD*>i`2L)z2Iq0)cAYzxIe;4$!s(qW3 z0_S-scnenrnxNdBp$_@EI{;wHtqZ7_iwMM<{B8{s6$@v&-2Sk6@`eYDwd6|SWl?Fd zSk|s@xptunRjQX{9#KWIiI}F;vwcp+Z(K?1@n3;ig$A_5YT0nS9Es{!TYR}lzL+4{ ziX^5QBRvSOkH$DHo53y@vTBbt{L0B>9aAUIiazTmm)c%F=auMv$;ER7VDVDZK4e(o z%4(O*PDlI53qj@`{H5!9MDF)r-k}rxcF&}iT1OjgDMsj~%))gvGPCz<@N$9kURKLq z^qQS?>O%ji+g)m{d|oTo_mV4RZ;SBP0-|$uE^I82<{3Rj%mR@}C02x0Bxut0@Ee;5 zb%OT`OPye^!OexvmRce+CFibC3uuQ^Pdjm}8uhwlk`uCGQ?T%>o1g$dnU8=`XP&nw);{G=yv|)R*<1ECA)cW z=c{Prz=aC3?O4W~l;`z%sfBe!tk~#FF0JE)%Auli?y9P=5D!n!%Bh05lu|+mJzPag zt)07-=B`}^UCH8WSaUXs;{*za+eP-VZgZ*C@Tqy1A37cIQ$7q-wQf{#0rtyJI|I*xRZFP%lcUyH{C8V!#&! zf6qq-q^o)ta(tu(W&1w$gsuj6E^#ptnn8}fl!>K7lp%VsBGUjYB#JQ50kY|P4L0$d z8ZGyl$4}Y&Qj08(*}1DbgfSz+Cn&k6+{EqqeHfJs)Vv^%YcLVFkFk zYueHZOr}_!ZMv1`t24`JGE5!eeQirEV{&KDUCXNjp36fHCO63~5{OcDoY?rN1r0>3 z_`pjpXhI5BHQFw_Sx5BW`{tx6-7|@$Hsr=RVwxxfH(G92a=3mIP}mB}{Hv8CL22aT z(mL?eIr#S%0AI3UI!qh7TV3Q30P9l@FaUZaAoXBCl)L2|Nr8ved463%DXVksjo$F& zi@uCSRF6M_dp=Mc-9S;#j>pfX`yWxVlfd;YIqA1p;s!^Kbe-y{cHpZ(STrmRGEc8j z?3kCd5kG7BqKy}>=S@ihu&3R89)hVtCot6MyPbm|q)i7@>tQjBLUFdrrAsa*ys_U1kDa9=lKwAWR491EJ?DYCKh(21COVnc&8 zbiZNl)((@8ml0F67v)d~wi2{8)MrG`-MJPu^cE?%Mo>Wv9U zNPoytVlZq^;omrr^_$`MWMCNaY#OSy>&H`6`AaxrQ^AuCv$sFJfF*^@V28i}MYuP| zTk*Yg*}n9NT^r`AG-!U4p^qO4gU?i_aI;y%h{vNz4h@!uw+CnN)yQLKSdT|?{8h;U z)4q**wxd%dtiROGO9ZfuLE23nX}X;ktFnE8zj`LfYU!LzMg_N(<*_UNq#WuDQEhCt z{j^=|K$QIxaJ?~ZI1nYD?k|_))H`dwr(#DOfBd?6%72_$)-M}aOEXFI1ulnwd-N%z z!C(R$9Qq5F9=sA;cs$t?QLVicywYC1jQjw0)cHH_oR!VFTOy8U>ULh_J_18?|FmQ! z(9x_n|HWM6`%BIM!gP#$ygCQ(%P+pXGiSNpV}~(gZ@cRdnda8%Ibj?Vp3RW1!+mNA zXLB(k;2_7NWkg_WQs2Y5W8TtA4vutOp0>tiIxJXh*61zm9UDOuD%M*F6tR6?Ab_kx zdNAFNsVPOi2er&To<7)3As4>ah6|NiWk<@Uj6X4t*lAe;Vq^wJ?w*`>w~LG!hszWf zju#yY1B9S>dG?d5otm-+qUlHoydk$Z3SX@`pl!$gnR&Kl8`!&zoGT?@eY5^SQi+yc zJyG(C<&zG2)=%DUC+z6sCFZH4wSengLKU*h6C+lAqxtmKr}X5Kc88Y93Pw3Pn?MzD z(M3{bVk?MS94pB7vE!&hWRh=tdN%%7A{nBQ+R^!GNA@Xlw-Q0tn zXZL$8wrg0d4K;6G7-#=f;*^QxlC(c1@pC}iH7 zeu^L;OmbLXJe6PDqeB?PXDD`)zj1tVIG#8-QSZVp;nGROV@$=4DCigF;=m-q6LGwQ zwHqK8RL#}oI7_+C4kB#Obr;yl)9T}4%=c#VVh0I-5R8AL>vL|N{lh70fF5*sT}=!G*ggrO%5`e5UzuDy}8~#vG{XTRFObBc!-puz>R{? zWP@o7iFiIo3rrmfr#HdKWs~Lb=`IrpSJI0`oQd(KqqFJj0veQGt;ZMfhI$`Bo-~O# z2_f@kEg6E|8Nj)$gvnVx@SEi^pj+WXpaCcx~6!{;QHWbU8Ou8W4d*Da6=eW^+bw>MJX*C~<2_By2%+^}H@>H7*X}+pj$8PLwh^*C2ZaJt3xJ9$Vfjhu5nBOD zk+V`MCIJB~M{7Wc(sHQh|rdr%&^ty2`f+&ummitJVsA99;`{HeTc6xN#kUyEr5_rQY?&Y(4;%J^+82~*5L1@wU#=P9>{OD#Z6S zE85KHxYaP8_ct{ss4#_mNOgF2ZAKe2VfDJdo(xH|n?zNRid5uouRrix@R)PEn zJjiNv$Uz+tu@i4IpOg(1>;F=USNvFGB#9q81r9m64>4}X`Pt8Gd zF&W9pP$ydROQd=IbvB*su@EY3RMqBq(!AgN>a;b2^5fuR5}F^NT&g^zwyKtA{x1=W zeMW_|Ut@R%rmzf-yDf3D6i1{U%#|fcQ_*AOUp0b^102Yq!OnaV11!ykTf<@+{Js^v zC`k$mh2S(dV>$(RcQZNkpO!+pat)*?*om>)uKFzD|aO}1Rpg`9+ zW{WayIIa7VS^LOVr(>`ptQM7nqZ<8puZ_kOdu)v&;Hdj)W^-w4l@2NrEXUXfLqONF z^ImMwTlt`TsT({7dF;KG`JSP>?6Hzwy%1kY57rf(-N&s@UVaCKldPyLwbE0RdTtqQ z87tQsVbpQ`Wnu0+qjMvcHZgm3p1O^d$;-)_tP=Jb%PU}r(m8$iuEff4FbP#z?cNi8 zV|Adbnioc8Pf5wt?+te9nEIfL{AI2J0xP^>mSvGt_Uk{$5mQ*#zLwvH0qY#w!x{^Q zzMsyJ!(Kg9l~U=}d-dOU=l0%i(={3P1-1EGDBC}wLYoVfpTAHY zhmy8ZQ(&Sxhfhqy$-(H2nuj8qYI5V|O@@Q}CSXLBaMIdh#tHl%F5HZZ=`k;Hxa1St zK^mbuZ3fKwopmQf8Fd-RFgOTrOvZ8C5B6Na?UoWQUVZR8>NgN9$1!o8; zGW#S}7V0VFxR$Up)dG5LYKQD%Tn;g7Fc)O0(X)scpUcgS!^5-DA?u2~6M38kysYZA z(~0?i;dnS2!OXIxj7>q40fS-dfDGIxNWkNr0HpmB94egZfeBm$4fX2~)kP-a+d%O& zQQbsIe~pWhN9l|SQ~20-(>!?99HO=}3vYSA-#dX>9I5M$99U8;$}i(HG>4t2o+iBk z0Vc9use))?SI^kR;^hoLZ+3QUii|*R`C-t!=q(YSjbJK`JjChAj!`jxIGu1uq|XO+ zYQ(p9_ssLM3<*3rj_W1bK~fid9|*$2H1n5y+v%nR@ah#D;RF&? zJJ{T6P~whn?oqbYbFA)4dUZTJM4fl>4k4ozarAKTIey^&N3%n0OWgQ;fxUS!eU1HA z=g575Guk!C-+T;evq)SA=0?XOB>gaFtkYy}SvFT%U5i9ea~5o5%up{@RJ3!CWVnxJGM>G{HLdATb2s63 zcW;4EU!{$R2Zlp$*mOy!nzePpK454^bq%rk^ zt(aSARJCXGUGj{p=B1p=G>-*P_o#VMm({K_!vYFZ>{&u_2iSMr6TFm;**!-x2CM%O z4BA$)2CI|byCUsJ1G;L7cshrR3ght6^eM&MG7XK9N5jVq8_a7cyPzFGbm6kQ{cMXn zkpaD6k1ipbV6}ck$a$5|C-2?%y?|yi@czcb9qAr-mGDMqXFD}sZO5wj$G2>Liqy8h zQcab3R8>l%3(iIHV)+7-_fi4lWh(5>)p<8@PCyy!LK)Nh&j>HOxYACZ>0`@*WD()!dT!$6kP&{ty ztl#{MmyJ}}VJ81=7p9yv|GvGq^kyQ+PMW4AAO+_#VsMi3EuveH?WC~~sa?+DE`hu@ zZS*2RM_lz-p_LwgiW|bqOm9p7eg$n_M7&-g|CxrFRzRuMMq6>d(kZy}(pLyf zK;8GrhYm-574?Q=;2V0)H(?3zV$BC~i`>rn&`+=!PfkJangmw|&om_v{1%tZLGb`! zn)R;3J3N&yyL;rVi4iNt?eoX0D?RKbD*&+ zGxoSndv%nutEE|yp^=osMS=A0U6c$7<#I|7|6Hr1m;$TUQv#b`Lq1N zAMWa|OIvoy%x-Y#EP>kP5Urgw@*g;C6id3Nn4R;SM~ZN3z(^imT27xOi#M4a=e6}5R#k#Xq-wz zsi!1@7rbR=wEl8LNAMo63zZ_!`tD#l z*;Y6AxAOfCzh=?!J9X`6?*|=pREkdhpoeqoAvlR~jJC!=vuzo>+H~&r;+0fcY1hD9 zwCIZ#790%A>E7ac+2{>W0+_+YNK`^uG@LMFg=jHg?3e3^vShekl+0@`xE)Kenm2B# zZazH7QF?#wi|wT;DDx@4Y8)L6=+be+hYctTVkL>-$NOY&xJ8w|2r`i<8$6OU-G|OFWGePivFc9v{}&KU$Gb%rKRx?C`c!AjLv zxqvuWb_~!qFckCEND`9T*O_s(!53lAv#gU$7H^{-Lk$TP`|(6BNAD&JLsbAnlS2E0 zMWKI4@OSCkg&haYF1!jgTF6&Yw8ON~z7vPF0?(pf1``fX2yAVzJ1;F=!hu_?QAt%C zi{9Io)m%|f8U83}?NWs4FW(!{5d=NC_4=1Nv~(XE}&E@02R%*FGdyX!N@A*tXN zgP=vo6N#w%7V?U1koF00WrQ>qa`3I2eVa+)0_IDL;$PH0MAn%QVZTXeR9cvXYq#g} zah4Th9ZF)93QTA^W-P(V`DwR+y^jL2c^$L*GSq-{0S-L>Ga^S3wA zF}UFo4MW@x3JY$VZ;ikvVii5K6MGWjGvQB~XOq6uBqO=$Pop0WI3=5~4i5rG_a;GJ7)~)k-Z#ZPw69pUH%(P-yQ}L( zF$}e_chl#beHF`==8z^<>$3)GxTDGqWyim5#yuoa1t&nPmK~6`oj=O=9TA>913_V( z`$${?g6l3%fcQYhGdaj4FCp{x7)AsP-mcd}LSM(&n@7~Q7-b_aL9$J$}&P zmhe6m3z0O(ZvEGdp04Z#L3dMh7lecb)HK>UHoAn<>3ay)Da!yY6~k|t!L@GR!cuY@WSY8+Dq$2?P$>SP zp&TLX+|XaZa2ARKT^#DIKc`X$s&A-(GCQPJ5BUrDcnplB2=b6X3hzLJQvEO-A2p10 z>ZH&JP|g5PiDpBAYi!$n2Q3`0;y&%ooh%5f#BLQ3f**YOQyrqc8#Y9CZ=2fER`g9% z_7&8VtM;j6q3pCcMdxj9G&uMZ3b&A5dmIv=5ZvDEX#6TpWk(<7SQ%qg+GTT7=VT~n zxAh82LL3$iJ1IL}=%a8k`(bL)$hFxq0fh41nbq4O*LYw5q+<`l%t!H>zEN zDj#jjE<0@xM%qMS&h~?kS=z+9y~)te73dn=9RF)y8<>Q!?H#S)p)X?IUb3FcqmPS# z^g|(i;Za7m%O2f9>g3SN2ORtkKD^XK7NJSY=e)o$(>LJ>t*7x52uGqDw}xo z1^(YS7@oq>|G>Tdg@cywSnmIQOV>qa1Y#n7I)E>j^CIGn)&`+8nf{`a~ zF+hv|L?OjnjjDe1mQb}uU1up04ey4eLR)1|M2M%akr0N8&(jlsY1aHa#*rSJ9g@qz zk?lOz`iv}hKR&;ZI}~j+Ilp1(!Ll5}6^kLvGfQ25_%n`=NOJ-;ztcST44o~nzxU|p z=%c2&#vTB>!fNFFDj|M-hR_ero)JoBc$VzSO3|+1TkD`lIj>2$31W`mm@Yv=wz;d( zHCMJ8cX~eBXX5&bw!-%58CZ@QR7FjpHoYFpNk9p>l$7*xdN3Zjo3Qr!t*{+75#DHz z7h!iSGo>}qtV?CE+b`F(@pWqzsD5O~j8(C7FCbb;%L7gvPgSQHp?}{(cfwQCkNT`z zIqF1nA@CbCT8(IDIS6_2lcCB_jj)snbyi%sgZoR2wRT}2G(nov%_ax+e9&Tu`5#_h zyn2Og2R)zj&}D_dL8&HqgiyF>1ZqZ>)$$383Ihi1TDff1QklIB>vpCj`pD5^wFc$8 z+zaXobr1@jc37m?YK{PVF|8HeOCR7wkopqfIxV_Dxrg+krcc)Itfn_Ie~}HD_5)!{ zpZatS>URiFB|a>?9p{meXwPC(DKqD$vm*H4=)RW>9`VCL`&O8FutiLu13Whhv0uK) zf;uzUoE$aPA01e}om1rJAyq&$ZyNMx=fEps7{!jNY z+GztO+#D{&ak?l$j8A2=0oF#2GB3$1+k6oV$R>@|@Vs+4sq z0g(MMxxj>Wori#5f)%a{mdflMW=#EwL}HmciK!5;gR(sc45`F)4@E99+aspH6k;a+ zRLu>&{c&g0{ffBroPHQi1_1h#gJJzJQ_>(&>c*SBYoSqQoQ|j31c4`8gcH^yCUUSI z2UO$+w{UOSris0yiEerH+P>=c5+Gh}2%BpmAf?v#Fl35hk+MbV{Zr16wIz}BmI=wF zyovdXSBs=c&S^1k>v8a-m~K^iuzk75HXXUae7yFxZMf(U6p+{IP)}6b!?76W>=;gX zaR3Huz80(tnO_R+$^m{kyz6+ELA)%(QkdTa69AE$wj1>PD`m0^QL6JZ+<3#RA@s@$Ae>Pme3z0lnb^*Q$UnW=omaPn>0h7Wrft5 znTBY<35I; zS$BMkTwmW(>F&MPvYF4ZKD(+ML(fq~*{7BcyCTg)X>>MCcDA>Y`ySYajO;=(rd{zi zzpRgs-^Icv?#65YPkYf#b`xad{t84faZ?^5L-4|vE1lfx9D@s!VUCEG-N#wO;2ycCHoxgC6UvAV4e+QmmD zobKlGlw}iER%EB=l2sotsij*0+wfPAy9sdk&2TcniM*s$e<~bIwzR0F8AY2=c2btF zsT$0MET@!KMnaCQfK6MpfYZlIK}RJBPI57;NkJ#(L!)I6wgB!!cP6a1g9EkV_i^g? z5F1$RxFggIj3rpX5r-)h3sl?VL=_0~KyG9Q35-w6ufRM6>-$6V@X2?3FkWzFE&sZ= z_3g9o(tK7N9Q3GyEDYSWul3J7an6THvT$bifj`yE zeH~kxxK2~F|Cn_3k`XURgGCATQ{d3K;u6Ukj}GpD{xjz>+~P|lCNB_e*XQ;1B*^dy z(%(Bo-kco3e{}B-%AeuZBS~vDr;f<2$YB)n3*#99{$e9OKT4P;xjCMK8%pNH7h`#i`KCk+`FHb1r<6mR@7lqbf@ zY(GY(uJA>qPqElNFCBl&A{){3-_fLjC@&@!dCs)u0FCe(54TtJ+0ti#flX(Ih5=!Y zvx}1kbP8^0ObN9mE$M5>5|k2i5cVYISIj$9EkphD?yZ9oyggT%umfL0QJvC(Y}vtU zSR`)YT!nLU4h}@$=LdIIX~&v1n<*gdKN&fhf|z51gkZarA}*moqD4`ZtK`k-SXRB7 zdA-~Fr=I2naT}h{Gw~RMz5k#LYI>%E(dH*I)%BG$xog#2Hch38T+?SP^e@pu0Cka9 z%*qs@A`ZT7s^|47HtGc7ZiN>Fq)TDRb;Ayj0&aK&@k~AVC4GqqMT4-_R5KzWDN%1R z1!xtk2Sw$EgpwoRt*RtSwQl4m424UexO1-lz@p#3U>N&A;D}6V8Ck${r1AUwkaK%+ zKSJqYirOQ~67`8b98C^!P8&%yFW;UM2~#KUzS2Q1*tF&5#rgErs~#1nCmf7z0L23r zjq_5IP&n6+3V~QJ7zj{k7b5qmHpaW8#Rvzr<-IIL6|;l7fs$H%XR=eIs_cr}1jl7; zy$H+#;=vp+la5K?0H#5&eJ=WUs3+W2xSX)g25Dk4Lk(aa83n?|tOxZH?ji0Zf|V1o zc!takcd2o~z1ck&7Q@}31Dt$UogX|?hS{IuIy_uU%IyPc-%*V{$_B#WeyIVS>n+4A zD!p>|I%1q+olHEG?D{2_^gT(ui$MG6epRUc2Iu|yXpB-ED%gcn_~oh&FiIzHOgv+H z(Q@kdE(WxAZK4v}b%*eH()a+QB9{W)V=M?(T}-|EJVw71lATPTh4?fMMmY1pga#yo zk3e9EmQZYxz#Ns`(V8v=+IAi^DV3$2IG=x2t8KiTji_QK!aRT6Qk|X`9=<&%$hz)Yjo1RmX}P?3;G3$Bgkbgl-jw+s`+Y3 z9o*qUdRtMkZSz8$wLQWbcu$L*XV?<`Yp=usf?4w>tKI>Gdb+CK^AZc6k6ee8H zGn+bz;iJ;_BdU$K#jlsLVhWuCDt82O+e|OM^+= zbT1HY95#8JuTeTW*WMGDmN&Wd)LsG~UkJAX4sa($LZm?WOHQted)CyHv4wnf!BX@> zID%R)Y&yc&$1O`IGUxp1t{AV%lNab_A!dj!zqWN3Zl#~h6@FW z?Tt2RM>LYYZ!wsZIF*2I&QDGt6!g`P;K`Z|LaAUpfJzGBy zO)V_Y@@TsM6IAHTK7)Mfc2xTpVea+Srz*0St_{Gk_f zb^DRbP8=>{5-xF&P_z`S=SV}hoI|Nq#KHU(tPvE}`fNdFihaX6)jfuw*42}}b1G*9 z)g+`K)qWv5<*Jmv(bLrurfarMK^ecAnn`B!5WJ=Z$JzFK^kcVPaiZAaaGUW~hk~J) z0bF33>H_MLp@47Sq+v81Kn%{$itaOf6%!$OX7FAxmc|8lAt+7&!M{O}TUd}<3F&SN zdV%`Ou4mP8npoYj!|^cGZ{9gy(Wjhndc)P~?Y zNy9F8x#d%`!nW-)`{jGW!(~!`{6342!!-w;=xhu_3?if5UEPnFFuu~!zuAv{qT7R? zGB7q3l@Y1HZygkdWycaf0!|38-t}I`%S82O*HMUq*KD+c4@q(B1G81AT@b>a?`pYr z={IerOns~nqlFtR5r0)+gX=4+d9Dy@SMAlMKMaf-b|!7OBu(nITrYAO8m+A zzpsw(MzI>sW(!p&?It(NpFl23UYR-b~xuuTr-`w@iD(Kg!HApM_4X# zHnI)pYxNQ@WP>^`n2L=n4f@c#?Uw_A_2)-wSwHLMBuQOo8;WFW9Y()~ zUT#QLBjcMTSisOP7r|%&ld%I0_gQb<80{7@(&U{s#QF;}ND>GR$v8XXL$)}Bv|;ra z$>2zhTQ5>*EyG5P!G!wbe4Oq1lLR3@g}8(g!2Ke3$|jcQ+cy)Y8RM~?Aw=NC5_J7c zZ{-NfYzjF+s_fpC6;s2x_-*<*s25Bkz%L3~=n7(}1HOpO#Is0~oITY%@ z5t#jIzOiXZC-$&=MquCF^T~0$_O(o_kMBh6Tm14M{Oo+39c%4@kIZ>4c;nfwUy0Yk zcnM)>h<#A1YT;C;r!_cd?RE~JqP7Q=BEzZn`94cp&R># zeQ*uy<_3O?<#eyp0XqfR^$yn~T5yC63~>KwwN${m^8(efw6s7jW|i(|GxL-{nWjz) z1kUhzd~hU4@_{obyRE(`Od_+wDJx3jyaQ3_)zO>8XP&E`bHD{&jat1=z=8Tjc}-3h zrhj1VJ>f6Xzt`m?(am({LYZV!IpnzC5hQ~qs+ZD(A*7&ypv_LwxQ~`|T>aNuzyC5% zLSQc+y4hn+`+WqTIA8FRFwSiyT?y!>xmU**v!m9w3!PEh_|-|&R~3VWOSFk zV=r z|4=p%8c73K5PaI*j==)#i)tvvwS9+RQ+{~{R-n5p(j@Ay;u<8qmR$SX)OsuNCDKB8 zXL;F$cp7j7+D`57o#H^ro~+9Zy;v@gdmWHP#2U=a(ZEUXXe7|wK?mWHj*cK((y(Us<0GoApx&u_hLk{%T5}PY*Y8~U1 zdq*e3{nf$jXo$h2K0?(#bY>w9`zMJa=+vs0DUsUu8O0cV-|VC!JayF1!#G}x6)?2M zaIVR=6~e#2H#~sgwEYC<<%$Zd-M)3}mXb6(F_GV%jA@v5P8#>x!h@w-TaQEa)c?qp zLn~kJx|MU4<&F4IAeTJ@K!pqbqmxsrhiYZP6x#KtR%I+xb6hK&uTHLD@1e3t)+b8+ zL!*7n$Mipmx`=LLeO4&ranSB>at!LJTswyLU6d>80A0=5hUdy)U)mIuk)UpL{?3mT z{c1M?Xdy4yjXdpqKlXRDNy7qj+|?pAVv^Xhfn@wGJ=eu96qM*X=QP!fTJLnvDn=}! z^kwawSzAb_nK?rBo$fK6O>imnr`_J)$$BV=AT)C5Sawn&D1?0us4fPTRJ_+v_3~nT zd{De+J#~>-v9Dt&H>x{mvd=L5mZNGud@;7C!}C1<0tb>QdmV!|8?)II^#RVA*sQNH zCX(YKQyq+L*spK_s`J;Ly3#uS8M`w1GOmETWRaHm-O4W0KZVKVZ^j~Fe2#(U!Vq01|Pdh@-y>A z8(p9XJCM2BHQLSQ*3D+^i(VnI>3K<_UkRs>QV&M>_0oyb=>EeF&ti7n#Z+&o;c`Nw zb2h}zgAlYg#C1lj_7^{iKQ+Pl>8oUN6UkOsR@I3TQ*;5;=WoT!jxeDGd)lo=7QE9$ zX?wz*%vAc#$k1TRgwMGWqbgnVIdgJhC=uq=qVmysVF(w~cW{LRDCsv9g_UiDf4W`6 zsyB)g;L$L}JFmX{mp!9Ts*rnFhO<5DkM8Gj0Ai7o&i`X5i1>r5mK|hK0o=Di=urKVtScD<~N)fJPIMmKYr^gZ~;Fv5Nv zOUbPm*(>tT97`v57B@hA0C&Hy0TC4MY!sQI95e?PQe}gY4v18ENa460ox+DBHT{j? z_v9Npf(8h(5Q%FC^2Xpt$@ACD%PKUf8+0a7&Q)7aZA3YTnD5%xRbLsi&UhE5!W15C zL>!MZAr*VS7ES0BPUgep0}$?}EUiWmdlj!JP7H``rT$5}x^N0kd?w+UbGi zOUc#@Cxq$qov;W8{m+GjWljB^uBctYHwnT^;CR+1Pj1FxO; znK%1Jrs-O3+XMl@n1WboywYE0Z$*bm5`%Q@X&*b!-DEaQ8-&`w?gPL>yh?nI51<~H zR~X{Gph;CE`j+au5w8??H<895)Q1T>5MdX=8-zo=V$+GaD)MrlW_)E(n)$f^519)x z@2r}+b?F%u0TtNZAE4Rsv(xds3J!J|E!cC%d7djB+lhO@y6zE^t?^mo$5NPX%D4y% zo{V6uqlDAYPW>QAj+>$4%}sgnp}dy|HuL8}Ej>|9^&V|_P8o_|U^k+!HQiHMa*tV& zyy3k!zUgh;JL?=F+wuz?`yLOGSyz!C-keFsNUkK{f~N_&yi=kvd6(rgDh6B1zsF6( z6F?M0>_Ylji^Sv7SwUX2r^EVNwe7J?hUBx!PZJijI0w%M)7AUErnc4|N!BIT+-tC1 zz8j!r{8wSC#kY!Rk){uDA;!hQXcmpLc_p30cZ)U@SD!b4#5bJVux&0*X^d>du@2P; z5s(9t?K+std7*5&u_4;*Iq^^uCd3)ET4kz@2dX7pu%IKU0 zRJjw`Jt0nN_P(>8C&q$+NeTr?_>wJ?WO$9#lkuB~(z}1%ZvhF89*nQrf93EUEcGFH z7d*R)5oaKRm{pX2l`Yu($Ig?-%ydWndcm0;)-%$JTw3RL$`7ZrMo_LaS{N4Z6n5eDr>t4{7IHU>lk z6EvlGadg#^J4?uiPoGWL2@wj9#srtD`sg1-7IPF(T7Ii)rp&M4Xe%Z_mdBeWa!&Ph zWB2<9kMBR(+xqkF*5jQAPabE2M9f5K3lrq8NJe4Vg7g`QGqtGm{qt2rp1OB1lDG+B z-Gji&&igp{DT9~7z<*#P?&5OG*JN!Y*QjW(eX))@nSyw-ms~KWI**)Y8%6GFR!Q~Arc3DG)P4=F7^HL23 z$LQ%%N7)2pX!&v(wvrRfKP*8TOz1N*qCM^YsmzCF7Qig=pwM)X}Ms zECYsXMO;_CGMDLEcK9qvC?O)Fd63W}dJaMZ;p;R5v4uz~CH#W5pat9Mox0LZR1Y|# zzMFPY;fQd#t^F%#ZS6=v6QdLsX$hh+I{Q_M8>zcQ<)7EhixnXBr={pMvyYvsc31V_ zx)DQ0Pr(Tq+SS4nTr-L+Wz^tc<@51*zD!dLl|_>g`^2a1R!=VT@BVPCt_mL#m;25X{C z`dOS%OPlyDpE8-G;@1*%a!_IBuc7RdsBmr9E4?LU6?zreJ|Du3i=7S8ib}n#t<|HG z$h*+2n^d%IG`Jd3vXScmGKkpp422@bNKUiwsCgVn^$0%H zQwe5y>2`2k8ynivzN5%?IeisqNCN6ab=n=Xrfe6;M!k^@ZU^uq)D^-fyoXCckP`=0 zajrkdI`lbJ!Z6zPc5WqBkoSQuH`F(D;KT;xEJt?HWcqbicAMecgwz3)TGQ&QcE$ zz=Q(lI@eHEr3+JY^2S5*DrJ|V$*(hshIN~Jc

    2UZ$(yOE^km}lIH#i6bV^yVap{=X&Q?Wb|_qa6-|==%nS$#)Ix6T$XYZ(G5Utq z-X?|Q@No3taDvk}JLkhQ^SEHS#7I#H?%pl;R;}1{zXkP#!RB%SblbbY<4n{KGK zCI>A)r=Bz~f#UTTIA3YFfpo3W5yDnbov}YKNNfmH$Hk)P<%5M3v6TsmDSS{ylO`pN z)!LM+t?WXkI=e&rVFtIUSDWUMkouwOkZ^kBrbnih*W~xXQW8PmSm>D_vNsY0?b2T4;5)?K9OD z#wO|=r2$b1L-igXl{w&$hH{@h18`kM#GVQax2M|*G|ojs96=lIkR$4hpl_m^#+*%K zXwelQ0+J&Gi;r&Ew{$aiN$AkEE^tc4|1|&LJ8cRo>sf-_J(RUB&Zcxt+=^CrPn~X| zBG#WIRjxSComR}Gb$;2p5Xe0tIE#&p&UB~tvV;xQ3UFJ2)?o`7)U6+s+rnUW2`JQ+ zPM3xVf*q)xt2WZBj97QktIchhV8?eVZeON-4sdb+=d?{U|@}EbSOLatwL_v#Y~A^AWo`9)jj0&_MQ^eUg&0T zU>P(&S64VxjWg@2a1j(7?YT6AqX2gwcMzm~jQ}^{xH6jyjRC+appb{6>1@14al4*+ zZRVEDyc?aM*U}$iTZ@C3w_S`b$En^XKxHDUnMH|)pXAu-z=YIp)3CM3My6q@x>}FV zt_ZpzU0-@W5NO~|qR+-!#zW@m==ybdjo6=oZ%ZUtOt9p*tQ;zAn-rS%r{qZ8(JjzY z7gq<5kqc$}13K>6=n&;fBwG?JlX<8Lc=8h&>*Zjwg4sf2>IEq(_d+a>wA=Qym9s8i z?i`OxKb=5_%y7k&_t3EtWmb~ z`8Mu@Z`;^PLLpooB0S^H9%n)}t_el^<;so8U2X*VS;6fmm{B2uZH+_%D>JJ)*(@EC zp2+XUPP<{ZWY(c~DDw1Apj6ZJWxRJfD!?>^3g)Xf`|+je8#zC=c^TqtPSw<0FEO;} zOjQ|?4$H>#=JiaIGPI+bM2d`!icqwL-^1Nj)T6Rj?50xe^brJ|W2Bg+CN44@3kh!@ zNdfbmPeSDg@#sQT3fvF3m*p6-dB$ zUh=QXwi6wUfCaiTh{M6Sc7d;44QC z{)c5%+PLn7AQfG&=YPz=DZD46%4ro-XglhaBAivK2bX7oLup%vdx|=y{8RP`%pH0Q zvR;hN+C<`f*y@sCJ&}qbN*qpIjvm^QP^6_q|8ggPWiqBlhI* z92YKMwtTHR#hoORK?*qthG>-vMTAx3M7#Bw&V+?|tWk*bLpYH7ZEh8NgFr?cKrTY%1Qo>p8`G{R(vHj@E zNtvOq$_zImhnZ8roE`&gGtW!det-dw=$BsYrXaanno(UXypj@)Qa(pAQ+yDyP(;eY zi|`ucm- z_$(;I_V^Kt&eCRLV556Wn<=KlHW;?+Rwj2ZusWaiK;sG(iS#NLT(l{0=Hxl*m`Q7T@%K8#I2!>CrHLxEI(Jx zINR{K$NEHQ(S7`~d{oH|kd2xF(K+{b0Abqvd8En3prja^P(FZ6u6V$S<`1$-vk!84 znYg5|*uV%4$NUSxdH_jcQ&F6cx1<0ySiXIW+nr?d+)P+NSqr)25eNL4bZ|C4U@;q3 zNF1Y%AD)`f@fKJqjwKxb`S#}#e?4<0ns!f;6lnZ1>xf4l3v{T35g6dODI-CM#nSlI;EdTe25V!6DAtLW3QI?( z=SlLvB4+59ufEncO$sx*HvxDU2eyVj(0A__(oN0ItTAn{)GlaqCF;tNY3N^R^VkatGQO8Td4%26y0}M0A zYG}z$cp6y!^WMJ2JFGgAD5q&Aoo8h1)qzfXkCEE_v;E(F5q+ojBrXDwDKi@06O^od z{c6O^9N1wCAT~9HtY9L1&Yw=M(;7!%Y-P;3x|$#rC<#XuC(qXsm5Xo*sDKMMoGK5Q zEp_eOPcP$4HEasU(?{LN8EKy{z8xND6(tn)JC4W2NDn5jtW^68`*WJ};f!B*y;*c6 zw|8!8W*=;De$-Fxw*r7kJ<_D=7yicsh*65mO~&NsLE;Ts zEteYiUXr%%n#&%=bdnr5vd|oS$-^AIfi)x1@O@oPBxWNI8<%XnbfJ!9=x~=>2d+dX z;wl7r8G$ts4w;B6ZZ@AhdbIKQ-X70DJ=y_FzGcbMqsfEkJdWWf=S+Mitwg_m z#AeDJ=<8suxt>9L2(oW7HrXJ)S|$oso&20$YpUz({LBcxYS#mKo1-=H2wP1n)HvAu|De6EH(Q!RFOF0kBtVsZTDwR9 z5)X%_Ac)J=Ss>9A-Y2;N4Mk7RsFLK)=j_Cd;W`RZ>Q*aPVA)Lm z9z7*VG2 zZxnT^$$-rWE%7pT;WkPMRblAhMK4EmVC=!60IoDz@D>ZW_q{TF1xbK9u6QHB@tm)= zqf3~9@sQBUv1ooRsRIu;e9mm-q&9*<#&F2M#V4#f0LY%|gOIm}p%4u@f7?3bqK1hl znb=k+f{}_mzbX+uXD0@NezhARLHHhqXNR~485bcR;?|G}t45`hI0B{iX|1CZBUO!V zZfEC>Mr_l7>BK;`Mu=hCwpqAc%u(_1%4UEG^nb~F7v{K* zBWv)lv=j)VsU>N9cK6!}giR9yDVsAQi3KQm{E-d}2sFta0cdVFK#HdH-}jt+)$3M2 z08;jN5DF3KzPBnXGb`Vf1-ov%r3i!7Dob8+TG{N~Rsqz8aY}FuFKGPbV}u#$gd4Fw z8W2BQb2Mdo$;EJ`&LG7??{<1e7zGSiB**s@ZE2w%;sk|p%2}fETsluYN9GF6NAW83 z42b3jby~(hlr-iC5{Ob+IX7(*UXaTv}(H3RBHC;SZb&P5ZDP{0$ zRTL-HRG449G%~Br#4UB+;nEaIbS+h}NK5K*f~fW;yX-+fIM!iGkK!$-)V1ZYiw0D| zBuZ;Fgl=VL>yB;_ADHf`$X9}@UT7N5j0@hEXPP;x$;mdTg{}O;#QxoW6<-=tN@tL? zna_EFA@{{c&GL0v+@Y0rxvFpV%zK`2MHrOv9n03(j`GY3_@fbGpon<7jtZ5LCliRQ zWDnG9l{b9U5_ydHjP;OOX+1XxBQvDPyN?EEM#Bjxde;iZ3eS9vKSIKU6J&7zee$6n zInb9N;%%XVMfcowqU8Jg!~8de75vlklk`{S?i)K{H{vuYZ>Q`ibc@mGPPOr)3OBC) zs4lj!6Wu8}apaKWxVbo1?oiW=i#-yh|l;l+)%Y}a(;g{{Fx;RdwlKbxcg=p6?F zmyW7OTsa79F9up(jwx5~{}QW$!17r`oW-eFL-Nz;J6N2VotoR9zFtpQ77{|_XCSKC zkwDjLlmI&jv6Kb6$VeW?&~CSYlSIc32AaDlhi!l z7qAujDpBWX0rr$M{y`RFq|n%+RdqJ8t%#@9F*kWKN=+d19*_!YE!mr))`|bFq58HR zI5+>11~BCd^F?(wRE~YN@I$3sLPmE8iRl?GuZyT2)|yU>@nHmErFS~R6UNSogSHk| z(t`rW{P`lh>KBJ^&or-ahyWOlgVX8@X`Hl^!%FRR(%|f5NF@^*|AAH(Lyo!eODXI^ zX&I&mV`K_h%z`W}tkEuy$=F!FKrCPj^P1B~Mu&hqwkl8QTU<-#-md$uro-IHh-aKaM|Cec9-G z5NBYFl7sa15lS1trl_JBc%kA=zL9LJ@~@0X5@OPrvU>ZoUVWEMv*5=tm!|Pi@}}^k z+Al3L14@_zw`^)?1Lnb7gp<+afEnq!Uto|~4ceN#HT}n4p`VO69f7ICL8(R}OL->t=YcRz$*oXG2A9CU={3*9inl{G* zCbmD9OnewyH6~AEWILf;XF0u*8p#3$&cU-SbFJhz43*^(qzK>NC$BEw(nrGuhvX}Qt!e6xMM`gBRtSrLl0HzzK=bYFXzs^nB^KP zi#%W+ck6h~OPAX5lBw`g=z!d66y=)XiYQ8#BWYs~Z!YCVgVH9cnb3A$ z`4AWb6BI=o`A*z>gIntx#_D3X9NUq)@`M^hR#syJc+O`RF9wby7UduISlC%8-9gxM zdg{5Z_@a2rCB$&i69qko0R&DkBb>hacAu}3F*p89e>RpUa$Tp(?`oo zP%`w^6B)O>s9BS1HDKzm2G{EwzbU3!j;8Kw?WA50t3*Ne6LRwvkNCnG#M!4cOKH+; zHF4XzngIRwXn-Bt>R5`46bQ0I^>@*fAJ)IvP<~cS?oG0D^Jsv`<66UIy!5D{4#eKK zqh6U^X5zyN?xhyhf>4-SeFWZM1-F2?q`P!|E|63EfWJ_oabnLR6DwKR7Q(aH><7Uv z7j=QGy&r1&Dqa@V1MKs-zIF(rPsO=8CA5wLpmR^A_=4dv(hNOi;h0{a8fAFj%Hc4& zLl-M@3}c?yRVuibq$Cwn`LvIGE$FapXQ2}mPj5A3$ zC=|`yy^E-pdrF729>~L0--edRH^592&@xINn%!c43j{<{q&IA?DA`R%Wa=fjJRC_x zfVJ~mHg<>3m7uk!h8G8GH=A}nH@IED+ie@K-^{fo2w1PJT*7xm;0MTK92#aN)U*Uo zty0bzxN4vfd|2$!T3<#6(zUqH@@a@<%x|-f%Re)2fr3URf_D(hycrTyS-L@*1D3}Q>bg59xEn?0CwhT z@k2P8sqUz7ob221Q`d7~#Vvh|EOI7w3JR`++&T0zg4$_517+6U*u=;R7*sm@1la4Q=7 zI^vrw8SMSNBBLxj5N;*TrTppP?t_O1heuEMpW!Mr#H2i*e%Hpb{uPL$R#S5V*xIuT zP(}`=doeC2cNLt?^z_LQ%J}xbefaEQJ`FBSJFx+}Q+X-s@x=!ocE98KL%c{2Y9wB) zuy!`zgGYzEUw`}X==WrB}PN$4UD)+APy11^HQ!E%5{tp(7H4>PuYs zk%4f4E<#VA96mhSKX|(L@bK`_lRxH5cLqYey)#+@;=%Nl^nztmSWEiy`cu%B4TWsw zJdMl-1={dLDf;X$`wx!}cK^(o=Ev`C#O%ArPaiz|mfxN;lG}d&PV-bwj(5DY-R)b&d^gotN<$f~y$Z$R@txVMG$KSJ634Oi{e-}vrL=rb z6CRyO)nC_{`sV=ZU^Xf%_;6>;&SDF;5W+O{jZMk();86?wOEV-x4uSn5-Yg1+-EgX*%^)2b{I*o%rOh|i+~}>5&(g_e zf<%9rU5Ucw?hF&>Zf3z)yZ|zE^Z`}G1Dm?Em?#im9-sUW^by)5F<7!(m}c3GNEKJ5 zOtyTzpc=;oRPE$Y<|VNuX`hBMhnBbTdq$3&oL+J;jq)n{Hq+00YL}jzF{}P^f(D4w zkd|H1!-tz}Yb;B=Dj=q+){P7~jk5gP7O007jHjVu=pn`U=YqKm*p%pw&MX}1Bi;b+ z^STf#-9&sydW%{vi>H6Q&vaAj_9-^&&W_n5wpCmiR`uXVM~I2ferVBQ^BPt>E^U-* zm%M%_5Xd$rbQ=7Z6PEH+U+|=};3ne%4t=TK6t+K+pV09 zKz(2UnJGp=k@LXKQ58%pWc;Ya#4IZEbw6tqtrl?!C3`B}!p9$P?|P!w*S^FSheV>G zfT*L0bsi;F(QtaVgQ*+?ckU^4ckcO0WH)}AJ*Ym-3cl6(Z%zp?t<9(Z#0K+xQ^&8vNdq<8`U@kZofcP5b0FZ`*mDHg-i5fZ1MUMa zvhC~HtDPN*=Ss{r6WAOiGvN3q(C}n-IemrWHCHcLbMlgz0I$o^{Ds7hsl#05A&~HL zLdE9DF4k#aD)H~!%g&&iQ(54e7)6MwVLee`@Pg*j^nO5!KbV|NUfZ!r;=#Kef&7T7Pr3K3 zTMNFl=10;RsQ}*Q(euCqD`VdT%gC4ljm!*4o+32j2^J%Z!dO2}GPEI6=*!0e^RL$k z!PXT@AHe=eGD@qu8ze|+%o-p#x&fa$i z-&)e@aM>1%wcur@S~ZD<*x#Ld(lL9?4>kX~vjY}eO!xspyKFw;jl}ba(C`8eH6oE%iBn}A1@muDo zy>sY0hFN@1mWw|!shsmbkM!%?i^*eC3DUh7+GGy*wzB_VD7dwQ9$g@>fi?flFM`li z@c0c2r!_~4SSwum5bEHzqQ9LYs!jiSs1Hvwv^o0NPQE9Zhg^Jl=1*o8wmd;a8>(`7 zAul-66mCJ|y~Z9j#$$vlJtXCT<83Bq#EJla6lbkm zB(Ii0cFn-33JHaZQ zA~`z>VAJPyKw1TEB9K{bT%<6gseA(SWEC^pYi)cS2JHjAv$+$OBPQ!o z!JE0)qSm&m_T(yN989XJ8yX;6#rjK&wXvbE?sT1oTAu3hS4 zr(>zLc4sIAKv%hI8a*&EAzEa)u^9zo)Y-09{Pp{$`wWR$^`t#v#$c;DAQs}KMt|s* zQNDN=cHwZIIKBthREBb;8xmbI{;>s^#)`r8*)=ZZ@Y9wsL>Yzo6 z8)=>O3Ur&dzPp(Ghz^@DtbnVl)a$9J9bHkh>oudhC@Y&S&@qa$kddJ0qXqzcfbaog zxU=_AS>+)=sm6pIs%8*&Ix70Gm#0WH`$aBDk8@;N63(j7kSHT{9dZ}oU6k?s(1|p}rD~Yc&sC zby&P!-QiEGC2Hx9JNLre$fIt#xU*G_e)?(T5nBH!D;_$i`kK|YNg{O*zvJyaTaItB z( zlGKCAp7;RTL|o>tq7w3RmikZQIK06TV7EfgjTDsc&Dnw*eu5MrdYoRBi)~8#Cq;>n zhrW1S?%1ke2zG&2{az!&DWnM( z*SsmDWUuCk>Y$|BaciBN)pv#n$D)VD|c-@GZB7$Szs5Gb~j<&&~b@RmV zOUVGs-WFWp%7GeSRHu(?6oYj&Cm1BLk!#fu-<$O_#Dy7um5gWzTHdT5a=|7YB5+!m zWl(RhG9BR;T9Hn+Vo7Zb(4Y$-P11NYYxH$A*T0=Ys9`z9V}>QWWYf+GokBLi+Cxm$ zZc>R^J}+^lIAefmeeP>a@!VR_f0g2gSlv#oax|*T*87cDev><%L`%CzjE?F+V89<>i zEF=Tl(69A7YC$*mhIDZjzlcmsWzrbMmu>P~X}~$h0bN~-3u@1VCshiEoM7>c6Y|o? z(%__%m>lAOpe;|dLRe~%CDVH;nei;aGX{EQ^bH-lQx+L?4Lo z#U75KSii=zSL=;w(E)!)oLP$v9Q#D{+Xj9#=UQ7_Kf5&p#vqqTAJ{CKz=2Xaw0_&C zbQbJ6;7f@BdOwXb4OzkUwGWwBu99$07$1d`BTs%eKPx`mmjuiU{pVov8hxDRABrd3 zH!^g*_;!Y#)Cj+RKgCUdvpEi-%bfnNeLM`psGaqDkM z=%HR)^mQ27H&ug{I)a4GxYA0c-Lo=$tNbEfYsa|IBUCeN?FclzxZ`mO@igid{PED% z>@sQ09ebfwy`%dlh`I045P=AM^!ftD?L%9_po(NO#8XNE$_rI|Of&PbiaK0UeT_&m z(*^u=T%*2gt6}xgHa>P=1ztTI*e!Z6tH>50rhR)?+pYFz;eV(&+Bp# z`QR~#ZB63Oz?Gn6kL!k_vcrpV`=wTDa5Pn1Ht^3?z>#G%iKF(NEdr{`-b=w6O#3LA9n9~b0ohKd8RCyJ=21Y;$>Xo-G z#5^!tC*TbpK2`W7<(fr?mZXqjDbzwI1(xyU=!IpDT+QX-L}*x)ksy2O7A9%T9|n$t z&xmb|BtZB^Y0psbHDKfLhw0nV_SJm49s8A)v?s?DFxaghw%?)R;S38#ji31~(&J$u zfm=a=#ta;{UM?r*4^lX|wzkgg@|%?3|l`sVG%m&On%m&hYao~bm!EXmN1J9%xEDMd&vmb z0LWRpctxQERa@*f5Rvd#Z8$r{ZlXV zp%+fJG-F?^+ltN6SpNbtSJf%?+2zAt(Ga|t&$&=*84ut~*uf0&q ziv3)nmH>;sTc^E+NUT=p;j~;|2gy6Z8W5>+S0Zy*4VE3ww2G`iNv3@@JfRSj}d1f2fB_e9m|MCkeyhPtx}#BRrnWtu>PJ4=Nag zt3}|WxB|s0;0?He-yJ-P-4I;9oM+=Pg0+l+iw9%%h)v)!8ufA^P=zan8i~b=7dZ>I z&FuW;6ulb2aPUq%gi*P8GK@Ykre$;F`+OVKrn+R=yP}Vb+i$64;w;7o*DfWhf;67b zu7ewYdiHFeSw=fRCJTx(>vR11=J-qxEBHeTC^b4fEaT8k{U49NjUnvYLkU~pi-&r! zC@Y(ZNQcg;7)sUZ40Gh)B-#H_D3K+0KXDME4nBB&n=hOe6UeRnkYaZ9*5k8(v^YfC z%-OcI9kphdVFQPc`0>8HLAOw-jn)msR!Z0P5%vj`jk80pryVtT49H47Hb{L^pWf) zsqwUPWVpOh!Q!CX)Ta73|I8%57Tnf$U-m5E3E7oR1T+m!ln$i@ zKqmT3A=-)!4_$=wB=4rD3_MI>F-zg8S!&qX5n|uvx8GP#=PaylAI0pQV7fNy-d!wa zCx|Lc8Rw8&0nU%#zGVQ?X3T-0rK>PeE@h`)tpYF|8rm|@&3DMQl_`M`7K(J(@Pz&9J4e=?QEZ7ItTMb|c+!nX zfX-iMZchy_#goON6mo;6=Lobnz>*xL3eY8sOtcN>ojA(DA$#GzG~GCm#gQ9hd)Y}G zgBX&O21DviVT_Um^wg`kv2Y48qkGVcN@K?lCm)x{B)z?=lu9_MRaXO~V229_P1r9+ zSC>;9;iTAzi#U`SB>os83)Cns%F4~;xVLQg_3ODD?!P_4%1~lY#~IfLsiccVE*ERn z1t+$&h=#TTE5L1Ki97#pK;x_r<6xGBV)t}qI5WFa)MvR2(hbgW#DkPDf{Z-7Fwqkd z$XF{g%?tT4kOwrcWKV7%)0qNuE)(jlXn8I6RvkE9Ce}t~WQr*%JS7_~3)HtZNE%tL zi)L2QcsP5_2t3}(CMgU)-%kUh!5l^G=WvB?LZ3!s`yXO zk9OB&u}VhfBEA_j(B6_~`?k|+L1o_;yDp4>;9%S?*YFJ;V=L0OMGa*k5J64V8afSDBAZR$ zt5r>kwAVbrSUWD*#)RLfbqpw1uOT0LHC}(E9k_-e<5T{#rOVoyCd0$O z@_%02pTGj;ksPu>(+QY{*Ejdr!&)9{f){a^%wZ>CkH%e%F)xp zG6zQB6nt50tC|F6vMEPFJc|(Z-Iy>q=xvLPIa=TjJDdxz2Lf|WNF3lJacMUOcMqRY1Dro3C-vDL%H!Q>nzJWH0HRVPwU4`ZP#Pi=bN zz?8t?nKuY^FFM!P~Ed4{5rnYW`;2Oz#B>6`$)hR)glmG;>-ShMZN^ihE2PjkW^gV3;S z^&AZEq@ZfLtG941z#!K{i~X8Cv&e3Zq!O8^ zyoz8*<7F7;T%fu9l9OUQ-W7?^BADWjt9htCY9yTDuxe8^8#|`3B^u?!c(d<2#8X^* zCwQ|*=@Vmft4^>K&e}9J4N_@XPeLcV^~0TeMlhd!$QKumFw`%jt39$Qb=MDVNNm12 zpl>+WFKa>6^(fY#6>)IC>#R37P3RZ9^hM&yE+A_kPaTel+7)0ZTwZna^U#wU2PFyt z=Al8&@VjrYz{Zx_bxt&5S$0cOG0Fm{ECA8^iFpv>8)e_Ldz9}pfiM)mEcaMs2O{() z-`8Upj#l@IK)LQK-YqqBcZt`jl(8KOG@G2idZ2+dRJaRR3-@iuc+A3OP74)GM4un7 zn?VvORRrBQ1C~0TBQLMEwD_#B@l=CrB_IPw(Q}DfW$~7` zdHW$`y{81Ukt0266vQ4a#M41K zQ~K8EH;|)w*D>$-ehYO#zqviS^IN!(cSm^ClqW_@d?PdV(1DaLihWWR)vyA;N`D)6 zq`;dDKmg5#kh{1iW`2ZIRA(UHczcA!DBxEo?`QMV1rvDb>%07#&(ti9b%6)Yyz-{7 zM?nFzWyCY98q3jRLl+~xgglTi}z_%yb zlH`C5swH|^QVT^pA0+-Gs$m-E{#T3t#vY7;$S2A5%O;G1!f5W6d`3umoO98f|cvDzgizM(~TOOlhja(XhoM8&M98Pz7vbDRTe z`|SmWujB$C%tH4a<7|iGX;RW%@Gtd+`=PE(t@UXg#mTp+*S32tK-I) zrFOneB5;047lD*~`Acgr3XUSF2S|Dey(A1($fid#Z<>qv#idM^n|RTtD`K}5hOHS9 zJsa7@lkM2hc|G$s6g)!a164j@*S6qYf4{V2#ZpVbk__D}V>7Td*fl7OtCeGgO*Sx+ z3d$t_j`HM@=a}-+s7mIxV3E`GC$kPmc4;bV2Ln7x3Xm;gofdI{$-)EEFtuMz=jcH% z*WB&vA?jT?Z^h7jelhV36UTAvQ9lsC;g-)+Z&zJNEuzm63!Gsrg$o&ZH3jn7Kt~?+x1G!>#Xz^$v zuAZS6kXq%iEhV>o%WneiwkW2Wi`az6v0hzw%5cj8EkjmJmeJ6_$-bKF*;la6dRu*C znDkWKbzr(Z3Yx$JCwahxdWLQY+I?%?GS(cDocn=3pj9E)oJcgEUZyP>j`ZaGmPh~@ zR4TgdyQY(iS~S|IhqPJsqi~vhcF%FWL$e%Om)lVY;wb$ju#^fQ4833o#4P~%W0@bN!xDG?m30eu#%JB8LQ9VFb17ZkPhc`D00Kr=X3gwGcq#Z!K4(RBwfv?G& zl75N@mZiuZL1oIXw%*msWC24^PLm57MU(IpL0d#d)QbAt)&ijI9bJmEj{Pf&3q898 zOo_1(*)s0FULFokB0NnPD<4QN+8J&6K=S^dvEQHI&05J7FUq2y^Zmbac2&LAegO~r zz?rVghvDzC62Tm<1mJ)*>gpG+P+5h8!Uh4~{Ogk8Q!Pq9PAatV4Fz)sm1J`J`0<&c z5P5dosNu_Z8z@!8-VWY>7r`1O}3 zW8QQPX|b89X4~HBH7o$vkG!sBK#5KC5G@QYKk#y*zP+T+JiK7nU_@YRL!tlT>L=6m zVRsb6xiz+yk>?MuFx}h~gDojX6(Cp<%sd{w1QICgz%IO)Cr>=4aRdjFX}W z5*UHV;wvb}l|yUaPA*=fJlgV6IK~EcQB>hgRC(i+xHO;AOS=USSV$4oB4;_m>vrVE z9`^NmcJFXNT&UAO<`;cyg2}Q53?cSRk%u8Es_A1WD3!^XHX7Qb6vJDJB(5A!Cl1d} z^$MCYL4uQE;*v-ziZ70{LGtHR6@gI7Q+C46UkB)EZa1<-?L7dqj*UN$l!0(eFnNt| zk0G%O!ehVBPML7g$H^DGIUZCe*TJ44m!#DNo$^ zBZ`~I5+$T1e&mGyvn7%Uf9Zp|+iU|Gqf{em2IePheIKLzcgxl~QnqoDf{<)-V1wD# zYCVOT-PT3K?TkIrN@aDVo=C;o@+2ej?grtm|I}yxvz3v&O-zJe6if;?=7Kg=W)?UD zVw6MmS(c~`9-K^Es5O(e)wUIbdD1*Hw-jC}F2vmq%@HFk&T0~bH>gaZNFIO97Au7R z?Ti$}!IbxJrm&~MKPd4=oqZ};vk7!dD&36IPGW92T^i~ke*2sM>tFxx|L1?Dea?q9 z6vp}VL6ZljM6kavP@OiPo)9G5W(MUz&ER@r!K<}~ME}XvhMID*irdT#VPUtiCRTc29X(QKjZg z;jbrakDsK!Tu^;tn~rwUjV~HlBRcj=*kj4IqG97QOH^lOU?@rchnX0%Gm^8V&bIW5 zF~3^2Sb6~J@4C*PdB2bV2%@2~XmY9;N4dSpRW~&7Z*A8M9%u0Pa{ca(4;my-#Ci=;mlD%vUw7v{n^iCwSOf|g9X<8X3u zxm%m3J7Y(3K1=`np3&2KdBY5@b#r$|TWKI5F&`$W>CdDcHqV0m@^aqEUiAmJ z=EI;e4dczf;N;mUk?F~e`AyX6ohK3i{RT5G!%)>*YKfgiqG5EW1 zy;&ik`x5ZDvrIwkib|@bV-izs75i&x@nNaV%%u^i zUL3wXd;0RfPy~92;$n0f9?{eD2H(tRpnuu|?W}2P3NQ>?bVS1zziTHd;va~8u*1?w zTZ=c-|13DMI;}~XQ9Ik7Xf}2I^5WV%@H8pcsGW@)2t2Uc>WD)NmJAWgD2abEH9-T^ z2?+VC(IS3N-eOyJ5LO}&Kyx(F!-FG7@E~8<6%}k2;tlucSA(r4oz#+gcP=YjH2_w6 zKn0sAl;g?W*LO!X3t6%yX+4WM_D-Znq6o8O-1#TFgR_5_HaSbLwczP}4A()n!s*Nzkrlu#IV8hFuD` zaYaWGPl^+^C1vtp88L2onjs=)803?5`q85aAv5%Xe?LbKL1auJg|L7WTT|)GSMkH8 z86E2Vg9?)`lBt0Mu(mbJ#$JQzj`UjQ)aDSS%Jgd1YH^A2{s)^Zqy49c&rmBkIYT3b zh+nmgvT)a;AlxF;4pAbwTSJxy6&Zq_ar~qQ6@n zO2jaW8N`-y<~rjgw0_U41N%?HT57;2pRAWz5n-qg=Xq<{Xc^`D{ut~dN1f%^GkLZm zSWoX4bJ!zIqNxXALqBa3@V^q2SJJl2Blx`-#D7o1wL8594%{P>@QgTtUe087?2 zwqs@go#mr5PbZ(gQ7xv|O?qWQI8Kp;hu&VOfHB#w6svRg+>tyDY< zzu0cXrtx4H6h>y8@*n4C*JY5+BeaBoafeb~q)0KpYXx+QPvqwdT8S^tCC?9%Rz$ip76Ado*q z1xs@K>^1NTq{o<`d31HaN3@4aI2dKcYyVt9*1?tH>Zk>FL4iNg=a_D&VT4!?{4q*n5gN@_P!nkn6sQwuHYjf~T^ua0qh0rw&HhbBR`c|>BH8ToB9 zO7q0OmbzV_NRaP1c6jhJ8rRs_&;Po@LGSl-94VsHB4YU>4XNwLnzm#hY|fcuC@ZhU zh9zvcCjq5*IkcuUi4;JT>KjG>O>kZimwfYt5XgqQ#uI=tJ4aRAsS*&wdev)!<1~8> zIk?~b0Z)yPU|3+B-+%eryTAD|>whD0Gq0AVXz4)j(+u1olFxS+6OMei-+#G{#ye4q z%O*Ve)QOLQkhD?^@#P=xeOV$V<7iSst}qCiu}3!uNpeevB*X(=RUf=Z3Y9fL3&`WZ z6xWX1%q~$B&>+%y2ofgMRmqa;3xA2Ds?N>+m zw-_a&gc4kfY^5i{T(>S1qlq-r=OBo@;1Nwm?PZoEuyU-qw{;7`q#XMJ{HgIa*z+6Q zb_nl(a!TQ?1ceC47jk9s-W#w+Zu6y}f41MbP=T$6T?#XYK@#Msk*S2*CFH1-=5+~* z1UDJ|?^5Bg9!;cKah!w0W@YJv02$&2w{s4WmKP0zR4qPj)4{m|*}Hxp@qnIjl*co} zXul3p2IcWOG``kk!mh2v*=2c<%Xdf%vo_Y-#mXG(Z)F_SmHI>({bRX-aaNpt^423D3{n> zT3~naj(?=DCwFTI#U4df@Sq1}gPmUR1PEW4jD2}9O zL==K7&tDXq<1;5PbS@r()Zd0o%RXr<4W*hUFJq*gGrlDyjAqSvk%&(yb`kLrp`@GT zI&>MOIJ~ih8<2&4(Yi8q0h6(04hvQfa1hvr33M`<3ZN{-p>>1KlWiL8zbzZ}t#LDc zKlw2!#Jo->i^YC>RLXaSi#apRGIwdP;#Ul~;f=8T*44~|8uV7wSZ{R@%oMJGeC4O9 zjH^U}sS#QG#0R$N86fjt<1`KWQC}gSK*) zwfhLsW6`28%qg)GkYWPsHIvi3ew%be9g-hwsy#f>tDptSTM9>8MQmb7LF*Zg0RNt~ zTlfX8n6N};$zyrn;06&~D|)7tAFNU_5=*BoSr-X^u4|(ZGJfEr7UGKqao%KgJ0V59 ztE6Jz8ag4AX}l^+=c<>eMTY_AI^_!u0_#UIQ*yy zEon^lK#8kIUeJw6nsn@@2Zk*A{&s(p?9{!%JV@-_sj15gneC$X}l{o+(=oD2=g zE!S}uTk8ykXl$Z?LEz+6j~a~`;Mfg-6X*2jtP&nw&Qb1yi_cH(kP>$0?EOMfq-(q& zhH%{{MpDnkqN?1FXd;h?V5wl%F;I!ZnB()e2%UkgF{~UVyPP8Ibcv6NPELv7&g279030#F5Rw9$og-jDQ`8%{5fLw^goBw=-+K+CzoGhEO+*!ef*k05+<2xn zd8f$nU=D_mnF6LU>E{}|R#!vIdKtIbcCZ`ER2bOGg?A~`G+mOHP>wqi8`10J>erW~ zB%BBMudr5RC1k`V0m0{zWus6-bpL9LLDG6&KFpux>@HHo0=Hm&8K~qxj*)m!{t{24 z1UPeuaC{#ntKNg~H|+-G7?71u)tx+k$r}>SU{Bs2y+==(N`k8W&C03#_6C@XJV0%o zVW6Mrot{q6T_PkVXW@^)2}VM~{Zj7+%v>Anefxa4g$xHs7|%wb{b+wK?a7#gn}uNo z;kA6@H2F`+yZoggk(a;3-<2UV^mC+P3goZ$dBgx%Di!mQN>0hY5jw1ro%su!$Dlf`D1Qv!FoDI zT@m{%yqU|zf;aRZWXm*TB&XYeWMq9Lk-R!lUHG@U7kIu*~19ut4+*jhKCvev00 zRlhQ@{?8o|oGM}-N{J*6pR_8Z2Ga9WzC4hU0JA6t$kKiod4x)%T~YK`IU^hUWLD^r zna98MfvjP#YE@dT3-{mS+|*jE;l5`uM+h$RhO+Fkqfg03w-LO`?K_1HNKL=rt_= zvF!L(VO_LF#rh$)jkTOen~y4UAnxEzA6j=RtdD9L22&n!G;=|Ftk|6{{G~ zwfyf#j4B?X^cve{EWbT79b;$b;I0sMOx4&P8XvDQaV1!i!Sn>MUXd`k z%QZeQSV@|}#I}5se^WSFCNfEB#UuYkDmQ^4(Kik zw+82MzpQLBDw}GJfGjv=?-+-FAY!917w;z4<#8eO7DayV;;zgBFHNb7CNeJ^aW$_gb}?QJK|Wl8=7E81kQ8JcavZW6>E zQ>@i+bQ2(CU(L%3%U;m12Kyq3OTImaY!udJ>bO`qFlE~)i#87g`(=D|L^03!RLlg+$vIw6#U3phYq z@Ev0CY|+eH$ni9$*YkCae)r96mMuX3vX2aW{#A$y3?IUTi*R7@;I%;(!6%z87c(q% zD-t_d7DZ6R6m-#kyR~u*A$e(x7^x8-KAAbED2f<3GF&MJcSbT7%Xaw7^S>6@;P`2u zi#*6ftQ|0uKIZ%U0ahQW1kWees|?;8pGvPq8Ql(lp5rD>?ik-8G^>Tn8|VhN%m`(Ayg6+Too6 zp~I>{PtukJhtS9=d0U$(iQ?JoAiIw?n6*tlU7mQY-MZL{>JSM~`SU~GqQAps1_&ZB zQTe222;<0Fd#ughF6|@4CgPnm=zyiQsv-TGX}l9$qS9aevF9mmz5O#&l6329l9D)SqK&l~&I2Y^&#JSO?HBF|u~6$_!ar!_DIdjhDzGdvIjiP42kE+jJPKw{-KT_3*dv zy#&Z!5eZ*hYqiRtE!aGlO~HIRZ>Pd159rt%m7$U(IQg^K8r$~+V~g#-Cibp(iqp@r zDl@3u$oRH1TAH5-D_FPlM#UHeJ6G$^%hv|A{E}&^(OV|FcJ{eUF)%Z^`DH`(k-|>* zIqyPevHr;Y4)*>cB(OYQv}0+A7lReC-fT2KWb@70hxe1|>o=DO5S`#Ig%7NNmBU%u zYW7m@jPv%BG;<;nEg??yp3K6|26YVD2AA)@!(lG=-X9&pNZE1hDZTX`O z7;`ANo@>h=Z&QylxbCV4MN|$0^D-68h`ju()SQtrou#}ZiJG$k8h@HbEnzupK)V{JX5&N4&{@vVE$6zV@ZQNwmLk1=6SA(cl)NqQ z&@z169Vu&FV+I!nD>w^@khG9%ksX?E5LGIRs=cw%LQJf6S70-go8vk&EZH13N4Yz$ zGe>uK*bKO2HfqVV)zjJ{#PBpwjaIUj%|!WjwP1>wl)uheQg(J3d^GtjeP)#Pk5Pu5%NSVj%B)aXDE z;`m&>nNd)6q)cK&hIJ$A_pW$*xw)gCz*LCFyGC5M9qx|4o#6bD)Z)XWu*pT|4EzsP zmeA0%hvG5TCkCpbvZEuUz>$!-I=R%|RoN=+41mn~QRl|2<^ekg)8$XUTgCw=@QgaO zd4scf{&WxV!k?uD7mfFv`&p7tn?xRknQMkYw4{a5{lafh|OvnRv4wWkY) z&N;b!4Hf@7W6jq#iQy1C;NK@7#$n+}`!|1cL-eTF{Uz|DGi{Eb;=PSAWNKwC6iH{G z#;Kr9E+WpH60p!p&S`d;hQ;vl6V@1*&@_@6k9fgc$r8ayEjKb<8r{cYkW5-FWj?%G z&NLPnPwSUYW}}ZX_Rk^4aTOVoOQ>}xY>1&C zl#gdP@y~gGOwN*GQ~ayg%yRO{?4wG3>sk}MS)wT4*>~=#Sdfu?o39=Fg1De&xX&{ssetHGi4&uF4Ej+mY@BQHFDR8LxCqG zGxt^MzQEA1wv@#Zqa7}j11rj`bS8&Sv0DgoH1ih{o-Er-Wd`pMQaQ|t z{4|4XI1hnS6;_hTqu=@K7>?r&j144bOvA$IUZe;O5t`g%J@ zRtc&__&S`%BjcpGQNtz)F@!2&L5D)_dFbvAdNw66VVzj7g5>aNcfgBjmtk1 zYHZ?K_}RXmTXc3`q0{qsfXi@0(U9+J-^v18=I|!O2_0e0JLxyWUBw02DzXucy|PIR zRoBB}H75{ReKH6|7oXM3^mh{M8={puSNFJ#nyq*}v>NI9D_Y89a5tJahdu9LrfTuE z4n=bByUOXDE4K5cL8@M``7*1hvfG=ly1w>oGy#ab>2TMt@gEh35L3J2x+++Mi zA(bq)t(82~z9e7hgbtr}w(e@;v+I=!AoxhQP~QwM%$*w?z##%vayh%+GZIFR18h^?fLQh?RLp>R3cyTSR*(G z4-faBJ~@1Nw14n)@8RL$qbGla&5J%(5}bSXm;HxF2fKfc@wlVoLJ-?^k^y#(v6b;T z{vaNd;W%ds7SV}LtIq!_%l2wd)lol{+FL_fxqU3zc z>k3y|!ea8;#fI4AwS}JLlVhn42oQ@m!Xyr*lQUz-Fs@l*wB;FZ`^GcirRWdg<&U?P zYvi;$Z(1-tg5&K7)MV(fMGqLKqAhh@hx-E=;k6WG5tql`wNQa4v<H{r z*Jr`|TJtGdvIii0htBa%Fdb%^AU^&|5 z5`=0M`S6iA*wC}s$jCr~(QoL4J3R+^Q%t;p7(kP2&r84v|kY__>7HY7@&W;!AemCNl77);~fZw_PYQ-CLB{?QX3 zG1%d$Rzzhz^b+gd*?Bdeo!icfgT%vnNGPBjTeAtgoP){b)f{~-j~A$COP0TdG(){} zQ_&e9rgcA=Ppf~Rp$oskd4|?eH{ctM_g{&|pvnbesc{UJKvjXo3}dQDxF_&qNTH3Pvf;Yu0k#CZ zoc6->qmRocH2+CfgPn#G?_(WF@Go)Zj3_vy)y^Xmw2tdO?)ye_Q}#f;SnxN|*Qj=k zI5&^iOKqenSNq2^pwKYtvM8=XgyT;^7SN8a&9E=g@s7u7*wccQ2lgU(WI_6VN{fkzF>ZViB^%F$kAsL7l zHdU}yn0*muf5a?uqUp1kD`Cy(7~gcUkcv42{t!^|b}lfsWNVxKBB%Qe;;d%KF(XC) z@{BO2=;wVc9Y+H}D)Rsic$e$U_4ox(y&zC3X^DJt4lD{g>_Dg?eM|;-t8lmnA$Ie# z`SkT`xND@Z^{9eZ{AMN@Ab$92I>(7DS)&_~niql8W8y9V_BD!JwX|V@n&)Bm4WHlR z03|ZBH&XP-tn9+JG3+PHFWdGG*V5td+_Od*rQikQ4UAN#2Gd`elLO2OOwv@#4xB=Z zU_VKxNbyl{tdFOekdeX`#eq~MTi{d33Zr>yuY<6OY2ZuP=Q;Zfaz-|UyQ|n$u`B9# zh$cY)^a719Wk0Dyb)4#h82frVIhnqi`lDORL4s;{_;Q*hRhn7yU5g&1+ z#6A4Wf1Ci`E}KY+BcP1?LoG5(OKT_Fy68SHB#UxJAJ6_JYGLn*XvL+IB3K8lIe!mu zNCSP5M2V8s5g&g#`!}SQ%yon$J`7x&P(&Hi`jslqUYB1n`QDq!$q#N&2>07&0dxLv z!Or25|Fxa<;Vuu?E@qY**8N5MD?uK+tDcO13+H8<%(j+QN2~&uBLHMi^|7eHeS0hx zU;$RBXEdT^n?E6-oQ3E0p@Lr{-BJ)a$yQp!+gyr`riP1(6^S;OH(EZ7xgi0rrgC-25rKRv|k>^PYY1_N&2f4 z@Vjh#ExQlIG{Z~_ej*hfTDhie><_aDK8JR{CaqNs_2}F~23sKtF0>orE%bL#E8>+h zcVR#T=@J?WOF<-rp{(9^9??PM=M|#&!LXU0&d6l`goz%d{|0SxVUJ~z{wn7o$=ooZ z2ZQ!zVZNv>O^j>d`)70p(4-Rv`-xSt%p^BJ%K%1LM1X?FJbn+uShL=K^1EtKTIHGp z&^GoSrP)3r$ii5+!lT4W7P|oAZbFQjJP2E>Njp~L%-*|)BQVti8jTKgIWeL=HXKa! zRAG(S00Zo>NoLEa5tD0znlaB4=4uohxM_mj3Z6Pme5E9m%5xgbX8lhk$>NsM2|u=8 zt70@)#M1Bf7)%NnmJ-SaQ=O z6!PdycmC^`mvP{4i-j;Wcv zc6yj+`994G0&G2)7~0pFBdD_u>%Pb`9;GS4?Yiaxb+;4*b0+EE%+7@ENrUMH)V0PE z$rs=`UaS(E6TBed@uap!5qDpt4`Xk&f=qMg(qzs{$b5J`SVejU_N6qf4G{ng8vnp5 zqDc=PezW`Cx6h9Do<4rO`{coqcKv_{il4iz@`W=QtjZ1E2=$>Fng{97vL&^>=d|K=$v_#HYk0 z($Ki9KE54ob3f;Q%Z`?7&GJtt^Z9IkU=SwgWN_>?`FEJu`|f?YYOHCa{lsKOFquX_ zdP7>Koj$co+1N^CVB=$u`4ZwB>>;NII`G+GqW{$&Qe3rzBu-d9)HB{)#Hb;gv&~_p zDWM4Jds=N22s5`&B?;J@(cWA>-7e(xg@lLMm>dB=TnCAb!4n!#aWdP>$(!SMQ^;?C zP|V)jDOa4!-3Uem50)caETVA@Fd;588kg^Y#{8Gw^ZSd_tp>Bh5XBIVJ zcHPDiY3CYAZdsk3;L3E#C#-Mui(2v%H>;q-pInF(><#x?t42*`o-uFW4qP@J$Xli?n)7{oP=5h+!JR|f9pWi2?K zPGk7xVs?f*J1PGRkr-VhLN$JjzK82Pu>Zj_a!^Xf&n!I&l$YFu5tA-X!|K8HTch3P zpcKuiP_}Y-E@RQVc3>>j@z3%^#u2U&Ft2H!G%0WuD{-l|v692UqFjn$vw=T_I>Q{b zCgF4e{3lRdn8HP-2xePOOyT%hCH3#3eY9T93Kcp%N5b$Otj_(zgFC;WTzPvoMGIc% zuC!V5-;|eVx85dOO1LQ_qk}2(wFdKs!aTzQ6^GL_u<#T|V8D>uu{4|(-4=NHi$IEB z0Q7c2uWd;ZQOJi2K#zRt#$&$v>~|0B!}(@+(yPlEU9J!@f z$@1B~8G#dH$k7;4MRc}Bwszvh|GAug?-#90l^>dQs4Xoc0pBa;yO2w}C*Z)isf$ty zdN$EhvEo$Nz4*Ww6I3^!QeAW|E#|=7aOK6ye=|9IJCZONcM;-ddRmn{n>4F)66F#5IIvnV>jg`bQWZE6Xp2b z@$~HYCE|)%U_$a0sTd^-=~fmE#*Yl0EcPhoU`js)$@KJ+w=_kp<(4P;83(XV(p9?O z3hh4f4E)b5?-3E3QnXnX&mL7}geNJkafDv%oImV5#&XokV;}V9f#3_!Qp&IAH;!%9RmBF*H!%B_+Pp`cnSI0tb&$<2@m~wOUnS_h(};W{|7n((+8FD=i8cJS#J{P~Nf)&o#OE5Em99L*MmsWRFn~Zh zS^1cC%7FvJ4=N{g=VSu=R>msVWTDu^LI zp&FSVztr7Y>k7SVSZ+%d8ExjL$ve^cOa#ilGgrei6m_(b?U@G60!6*q` znbx(0nGL0n*w@!$OC0-d4Wouheb#0V-5dZg>Hq-kN5jTib2_VmkeJOjeP*TQi@Nzb zfJhNKC>R$Z@i8PxK93yth9sj=`03_+f)Ts(W}Cj@S=%-@VIa7FDt1+i46nUtSS5Qy zFkqVF6F}kEH*wz~K^F`G>94oass0>B{Sv46S+3Y4+U_axlqnEL5knDH#`csYB7eT` zVLRLVNo$FOx>3748GBsMP~)Xxi2VK>a@F{jh;KoGE}df9MHTigX2=bOL8kBF%tU>T zwn&jIMVzJZgyV{ycmgL`iwK;HCNZ1`>TNgnilgG#ioPuf)XsJ_?o1DSe-SGnxbAIY*O&NM}tGF>>Y@tuSJ41!$=__=EL|v;SPVm@#~@;uV$;;O2gOa zH`YxLP|&BpKBt@)*KY;p#SdPEbXX*Lb^x~fN}1uTFXMBEqLi!{ghtbKc^=5uwWUL= z9kk2z#CX8*IT5asNLKZ6a97>A$7QcVH=pqs%v#JXFL3e|Z*9Qb9Bo*h7(>gPKrH|L zoH#wyB83%f90dv7#;ut^>9KJ_C}e^NO}i-*2jr}3;;^ovSQ^^g0QJ6NpQ*#z4hLuu zs~=>#9=mNM$|Xs&f(Vj6>&>PlxOqiLhbl7nNTBo*(<&Z$Eg7%N)~b^Z9du^y1QtSl z&aLpEs-jv!jv{k~qN`<;A@54H%nU(V$t}V4jAMdj($ev}mS_SHn0i!zp5>*3nj7qo zVk`_k-qJ}r^ud=!?U^`Q0@dfFl?NtOPt~B=YE6`Sgi)SdMy2cJY*hzRPG@P@@`_Ij z{MymwuTm`~?oWL20=FkxGW79>$7~=)<-o)kZC3;~arHV&5Hvf9B;lh6kxB~smNK+h z@rVIYYA*lOUW#`&;EfXPj6S4l$C?O3*e7!oFDW^wRqXM>P_BZChjPO9D7lf`^#y6r zSmyaSI9nO_?#)dp{Qu#+@buLO?((d@0#zek4ObxGE>80bb+U;6dbx6=pZ(*-*lrm5 zBtm>&rN-DZsOm9VRv6visD*VE?Sv)ia|?!p`24G87%$Vk#CJT0FAGnFxcK7sg-8Kbpw!6X_|2{Y0ZtcRnnZKOb+GeB+z&B=?cn7sWS!Tu#cu@ zXjbUBNvHv1!?Mg?zHx+y>)FDv9VBx?U>E;>KOQRy%{;fYLk^G9a{vQs`x zjJEE^g9}ukpG7ODFr%R=xiI`9kaYN?B*t?_sMTb!$};B6bv!6ejweT2Vr(z}lEvLvQKYyYIfPbpc1Oyv;|3k{o+%Cgl@7s%eE->3U_*>;~jcc*9nc zSv$ndkps%gqZ<frWVmIc-bkc+{Np_-9m{c0pBanf3?y4!_aoT&s5pTr6*IiD zZ*_v7esY(yoEZJS&0QZYdqhQcYA#NtyX<+|Gm~S8pk)uSf)6LU(x`P=MYR&M)Q7wx z)lGydRo#T~l4@pu^()6hmK?ux57}IaMAS83g1V+F(MqVqw;F;7Sj7FZgR{VedGP{Q zt$zW6ygEKx;QFCNR<3L1tm608vu-*_xS82N!d>fhDtVBqld)S+=<4?Z?dcKYXIcyt zH4S)3syA@To%N#VrpCK>&@zz01Q88-#@LE{c+yyQRIcHnHSCyiCWLUPk-ViNKJ_z* zX%aotz8KX2*@0td9GncU-R`zXF?%kK4U0;$n#b(>%8{-Q0w}h#=gmF$!viLKvRaov zS_X5`c0>n`n&X!*CybQ?k+Y8cTvB@SQ)+SKr$wu{2a>bx`_V!$gPOX8R>F;;RxQy^ znrNJtzjzgNUWnbn!^#XfR8TwZxcz7t5`;`-;tVHFNmgAYCdLTVz<&c|NJ=jMAfRqu?0`p3Lnrc$M?%?D_E4A3RJnPQ1n)dTM$-qGn zm=M(zQyy?C+Rwwy>)q77pI z3YHdD*d5lo3SNO$sJ@4!8V#;Q908ABR7mUVJ;b zczyY%9qIVT-Z#^WN9amnX9TjPW0K)7>;!o;hbGsXkNv#Z(^t(`da|gU+WY1lUK=Uk?f+&RaTlc6v7`dWTs*u``$D4KKF)93c~PXfxVC>MHnj6>x-oowIV1_I7sPUg2! z)*@lb+an8VqVDPCf1%@+l^n=}IFWu5^-iQ~@k3Pd5dMc-zyhlyfCnCK=ZZm(>|m-K z6FsG<;eNx{)Mk*jdUXa}+w9!H-O*oWSH8|-LjFM{tI>6Jfg`UPeuh^GN?QvnJfQTz zunTdm6hZ}o z|4hY55GdIAB0zTJf0$j#8Z}^G4NS#yP4O?G)2O`R#}UTPCMp<>IjqkF=ERIe|D|9m zg5YnZaZCs~kBvpI-HHZ4JB@nIgy`9B=>W!KJ7?FMZQegw!lZ6LpJdWxtD`7^!m64KGA#sPK~ z=;q%k=bEiWMCfruXi@92 zqdOI14ZWOjAB&%ZRg>lr)gzqt)b!AMsOGzQ{p9TtIs5$h1B};&UvbwgmWg)jxjH(5 zYGDsNT@U-gW}coEQp%n{dpr@{Q~_txzX6;RTq*_VAOKLC`Smf8p;+r;*=`8YxwxDk z@4TAL?z}vnLu_!f;vGS&-)yA*ew>cT{upoH;DHrvsyXrASd#k zp=|z#24%TOw4KH3va8o`?v5U^J&Wx&kt9B6gHV-(US)>xi*^}BJj%1rltZr|$<058 zp(L$2`6&DEM4NfE%*q5S>YC94`^WCQcA`1+Ohv30qOF)fLd0TSg40xo1Z4Et7jKzI zkq5eyif^x47fb-9u)VW`65Pq%*JQ;RYINs2J1>v_hP!&;*Uu1CH43@(gW}L~J>j<5 z9Q%mWP%GlhjxB%HAlZfi#e^ox_l6;#;MluAFd4`6b>}@PghG(v*v4-SZfSjlVj^=w-thdP7=@XKz}O1VH3g$UL_oYeRRoFiB;TZlaiR0~j6cP*I*)fU+Ahd3VsEi2I%j1W>{qnNJ~< zEHy~m$*w07(}^vp6KoJaP>4h-wI6$fPEV$Yes!@0-GCd)AeOOX-Lz0+L%tCn5OYX1 zE;O~q;uN`$zdL+JA=_Opty;J;=f^N;pJB3_EI9yNhTjtMKu9APZ1WV%t=Q#9 zP5?HHA&z3y^oXt8ENgB7d62GQ7aQPkKBN-P@rfa)IKh2#0*Pd@ln)uB_*m@CC_w?I zX}kMPU8?OulPy`OV!KU#^f3Shx2Um`=v(O~mnLIa!e;{RHkb^V3K)rEYsy_2;?D`% z0xx$)aI78?Q#QpI?%l1?V~uW@&&Lsz;=!OI9|U;`P>)KKBWXNj!;w5#qC=H1p)Wnc zC~85gRZ@VUv6SLP17Yclx?lqxcX8!dP)-99KuGg`izylKsou0Hm%d4J*k1!-UCgrs zTqaViIi1+f(71G(-qQ_4_)EIJflqIfd!&^Uf5&YJ2|5jL#4O>=d?R6x@H|dt$3F%W zVu{|j0KF4Wc*P)NB+az!J;(F!0Y`s}!!Z{V-nYR71*9;MfX^^7+@gAV06=s`wZ6r1 zn_a%?kA4WR5iPf&50trgSS>TTb2;UqEdC0~AiwkfFpbXN>c{fL9Ud1?2t$GBt3X%g z{T-_P>qoNGAQ^~us(+ypHdK6JUckJ>;(f+O8mh2yOHXw%g^+kmjst)DzD!|AY=)8# zwuE!+yIuDnbU|wAkjD~F4+HL+~kvBPmG|&}L)*f-k z8}|g1#zxy@B3De2hP-os;|(cUc$fw{o*S z3Ldcq0*%3_1n~+riP{`PB2apyukj~X_!2d_4TiYF1~)*n2Jy@az(@!};6fi^4fXr{ z>dz}gsu7=op{-A8jjXKJ{wJ7r2v^~H`QkaEqWk~AK=$k=7>}i92fWw|OZ@cq2AL4` zfy)>GB3PQaDw7m_twhS!Y;Faa8#IkHnUf`OST~+=ss`%?C)!}eV~u#uqLWbun&)(~ zH-w;gTGY%fuNvj2R`Zp%cvQ2S_btr;!Ut6DjMJeCiS z$`4_V@vTASkRdjkY*1LNoO|f43Y6XGWsxKo3qZ)<{v&WW!a8GCELl^ZLzxhHzTFuD zY_WWjL40xKWV#GvZ;9kip{E+;046;mxRWhhqbThG4hND}(g`e?BxE#=HiFZxS~ycyL+3>+Gqa|%(#h5< zc%((5ldMfzecXcqOR1%gc4!67{EY-Ypo|!D*32|-2{=QV>D>fHq>M=-Wi1YZ=W7D5 zndDX6)WX4-;ZTCIIu){hJ3IQc(^~(E6M9LiW?~AUx-s{)o;0&a$Ph3g$bxyuWa!Dv zza1AftVR>Cme{{XC=anmZ;!rt^zE~U2S?xUe*5Ub?z4wSUq5~N?Ze$CnF1(5)!Vss zpvWExZw-NK&(#0{E#{u+Uh?5+H|X#68{}-#Bz2#*=Y}5S!x>hqoE&%`!bc8Z>7G!R zogaV~Vig?3e-gYpD>N9BZhxgz|CP9WJuo;3Ae2epIvo5r_>A|r93j{_KjL}MBUPA2+2@}5{42IaiO!7a zeAvO(^!{aMzOfBEub7fF=yn*T{TNqN z)D$$>?4LN!rX&FV5bB&}pzPggF@$Ku{XvN6BLB8YU*xNye)4 zNFY|W}%?oJsQUwJ%6J*D_w8QqHotoAJqtv4!9k8jt?W?X# zIIzIVicTj!(=ys^0-@550J2|>12J^B<0cDU=Wwde#l}AVdxv7a=q$RJ-nr)XbAw*Z zgv~Y~V-Bn6`9M9B734H1mQj<;wi&QWQxh13m9bm(lME^~LT@f7Z8$`tb^H$fe0FR) z`}NvHiwe*U<>q=Mi_uq-EuLIWx_ERY$T{JPcsojTW0a1JS!c^-qmX1VWS4C51a)2Z z!Zpcfp10I`pP5cN%PKnQQ!D9oJ&=P=Ko<%v9_uJKA(1VL!}UmH zpprz#KVFwaMrW`4X-jB|nApHxvX8n337AcjC#wkL&#ffUH9-y<$?pGzd&!o!d^hPs zpJ+c>apdO2T2Ju#d9_s(^XFDl%s17Ba0kVTT{Y5W-)wUQ&6aJijAqy0VAb07kQG(9 zriSRNc#)LYkezk84p_O}?Bw8T+DU$CQ_^h={xA(Yi(JR}fNa&w*mBV*&&YPWKItk! zv+>%^6$I&4Qq5{KS5d7vFWSZg+~aob?NWVX$b)L1T2?ygmKh$2bl0{#yfR>=sca<5 zoSapp`gV3AS8A>xl|!&uN?Hw5%E=I;ZX|nH4-<#>n&L}Gmz0LC zr8^IiQ{3%d(q>UV1#}f>_;P$Lwagq~h!nas#A#Fl83>Qm)+h1mL4Cz*Fo-R6S$NZy z0LHjRfb(Div`^#!-wzkF_qZ0^GUDlIr=URk6j=8t2@GnHUp#GJ-POW+78~2ymJ=A;N`R#x31j6^+u zx=ter=t8M+k%2$z@Ca8j@$`k#u*xHpMaHu< z0n?KiV@T<8#q!yE%9je2lzkDd?DdAP^-2VV%koApXdSh4ptLE z?SZc2eJH1NSC}bUq0$3e>`6O?Z`ptbWI4TodY@samE|=rVAU|s=4b@~#*rG9&MMd8 z9b4a)4%;zKY|d0ptRGy%J_#=kJ5E#5JdMmFirR`nR+=>mu$4vFQTF>Pntfx%$MtGT zDd*GYx7c$-_Z@;rmien|L9WEpcP(GO814EA6K~Tjk_Y3l(7}ek0aYCX<*YS6Y@_;W z1}cv0attjv)fZ~5WTTueO3MW(ODPOBEY=wb9& z4uEq6AInSIFr*y$uLo;|@6E3GX^|o`e$;t^4jK?iC>w%n42zXv`dlALB_56RCX(eu zko4T?b*vh1?~b19k@UY>9?F{;gas!F0jVM?>w8$B%~||su((4lqoVkzURH+Dbbp7E^U3n=KEEg(Wg49W+^U1tNECb;C&dv)ZNsI<1uXMGXejDtPYe8Dw@#$} z$YBPhMXnWch-8W$GjqFUX14+MVZgzy`3+nFhSq418o1>R+3qSsa{#hs9wj}Hv<=pz zydy>)|EMnkGr5>oTqax_nj2|vh)ZsnqPQH>Yh|0^>QgSw@D0rkj{N8f{ezOky|?I? zOx{~fc^4>nF}nKp09>XMxX#`@ckX3^f@5XxbyPymbhgGG+oc=XolT-ymhjb(6}u6` zouk{6agzNLX7EbO-fmVN z9m*K(2f#P1oPlj-V|^G8Ow>~?G5z!Gpa_KC6KsR=Epc{zl^G`eqh+l5DbY>YNEL=f zT4$mRZ|X3wsnY0uCJDEep#oYrlMbr7WclijAA+_glZKuh6fi>%ZY*Pl23bbSu9z7b zsJCa_S{r)DjP_MTRKYVq!_ih6b@Vl8jQe-Ep(N>rq$*n6;e)g<@Ri50pmXI+hMfM< z))|=jWr;r>Kr?bg zVD|*pO1X|#Wtd!2>FE8yw8;~HY)gKrExY`oYcO<=bzS~&&h;>8N~A=gF;mx+enbkb zC0cax%T_-qJmj^FrG>n84Q$@ICvUDosy2(3LpDWdWVm%{Z9|C3s`0u z=QrX#@HQJMgt_-WkeNMDa?d=%E zU|(y~#llb_9lv)3QF?&xQ2J{_@#A}kXXNQR>uM1w^lo*~-{`}|^g%)X&N9X0TT5?0 z#DpsdO_)}Z_@;0xjT6}D^g&GQdg#>gf%TJ@JIh{&y0T!I$mSRprY0i=3J{k6UX!Hg zOI!CgOFhlt%&KK3X?K!V|3p?5Dp#`Ty|w0Fc7^4>wsTlPVQc!ZipZaOCHcl?*hV@} zj1F>q^%lQIw%wQR19vvCPYWUk8g$k*y&T`V*qdw#mMSUCeo(`yw~)1{_>By`f`~f* zDjIGEWl14>SD`Ua%v!=C*Jq8ztjAc^S1dIhOWnnk7^5a&y3P*P`H^xEtaQj~u!5@k z+ltNm%ib9AZ--BxjP#JR9TLYWXK%Pi=!!3P5UJ9^?{iV{6CluSy0D zCb5wwgq;mnB;e!NtKICXO=|T`tf+>-w7aBwOC0DugoXf5z!?b6La_Bj>ej5ZK*bcA zL;GX3A;})r(%nY;>TTO~1dNW@PiA!Z8Fr_ZpDNe=>MvA7N+Z6_#^oJqtHxe`#APFK zTdy|~d2ZE6pwRi-^@o$kmyJpH7w+vH)uHPRY%cNc;!vdW@bH$-?-E;CDUnrU-xeFl zwp(12@#ygB=wJWWZ+<%({{=sH9zVYG;K8#uZ+6blcNUBPeam>2+n7RD+BUk8a54Js z*`9n-Z-{(L{zS_dx9I*9qQcLVlNqxC>p`4-yERMF3U|*G zKai$Nz}|OH9{q=iU(sd=V2E$;BK>d4p0l;Pg{0fDFV@KrOOe(&UokAsIa;A^hjB&A zy(`bZ>+=`gC!hjS+4TkuSu0cM5Iq#xYMVDqzSon>?~?i3_)_R>bN>V#VE1_K%JJ*T zqt_Q`r*p^#stN=&mn3U-ow+Gp+lB2D7G^BK9&cmKjuzT~DM>yI%fpM)ri8Mcs>gKu zxa%DLk|u~wF0YQy0^cs&&~LHEx9()H%TLC0u>>hQ6~9BqX|0HoS-HUM$DA^JqTpOaMTazkmFL@xm5)@@KE1>H zZ@6b_&df5`M47FgWxg`ioqGydxFwmbnRORFLd1%9j-~k;7;WU&=N#IHyN&g+(|gR9 zfs-oD}R-6tBMRj zi|RL{?9%J_Fb40$4T$xTCigvR?YmGHY`d@*OYoQ4K*D{7B}Cn$S{`106mWyD=!d{? zK%XR2{cvlTC6ld zP=;o2nhvBI3zmye7uB7sQ(X3E_)o&InNBZnZAVwlcEZaNd3_9YDDoRU*#>IZS3`QJ zq{VPd17hTnP10z$Tyr@j^(Hl4;$M4e41nc@Wo?qXdatK|?39n1fgK8sBx7Xd^O<=V zjDuflW&wj}W8`!Lpd&IEkZH>G-;rk)>uGlo#Agks6N z?DselIOafg+{tneJtQHf+4-u6`;YhKn(yf)ZbJ7`)nTZO+b4O>S!B`e(XWPsWS%IQ z&u7@#1Eq-e0QT|KoJ}H;us@kB7E;c6d>*kk+dm`}xm9i&@_I4dVLkmt6xKShI;OI~ zT^QA1=?zY48cGcJ^i3~z!=26WrNXt2&~TQ#Zxe~o8QRssKiJMHlbX%!+EnXj42IPw z8xEWR=+fzAhUFca#-IsE)%M%Z%CV$^a#UV-T-_d4y)6M*;@3St3+G}NClIjn{13e( z1b^Yc3-347Gcu#otGPA<$Bv9gtEp@sb1LL<-r(OoZG-D?@PBF&bni4~g`yG)jjPMPS$ZmaqI=r^_Gf#>nvTUvv{-T(q1G7*3x9W-P2lT5&z zxr*{c>h2k>BQYDQZKYrO_j&K%Y?GsDvdL}9y!qqakSy0ZfC@;7d;#S$lfWUfWim0A z_zjM$#?XKiA1SbQ7uMp3>07*slHsel7$=6s*@dDT)TaCy%M840z!oKKhkf8%BXlUv z770HQ=TmVPVkLKs?v;c})~j~wD-a-E^fH?pi{C|J^!%+vNzSI{IG9XSz`V!Z!(y`0 zLB~3^BPbWlPNA?lc+P76|Fid|&21e?y72e;6=(;i0WYE!_uP1|?$~aMk}O7BmWHI- zF(Ww`AbBXFMFJcE)MB;&`+c5VYCCnXkd&tT#><(uNT8OitlTRrYk2gAdsiY5iY<{r zByrixotapskmEj{N7O+9ze?4c-}SzD`BAUC{`y4(G_h59r(jJ{$M*6Oip-aVX*2{?3t-?xmokYN5Ssz!CT6+bb24dpuZ+`;U5#T{8KHFvvY;;wz zyZJ4D+9aM6Cz-(b1cX*uXD%a!w!A}2f^tG>5x0xf8^vBs*R6{^4gh3v$sy~$_l|{? zPbQb+__it)3Jh>Q-fRs+NoK)X3sD>xHlI~UPX>no30eI$K4C}xM5UyF;jIYR=&G06 zl34pFGBS>kVY<1(`*nLwHoH4cc7?+%ykOjY-MgC@5k9K_TfJTBU;4ir_KpNLkj7B= z8rfkLcx}A(K;_^dh-YJn9YhVq_ECNVjldRqM+GpsxI6BZ`z+0nvq?TH20jls@e1vI*_%;T=^bf$ROu; z;Q<@41CuZ0>O0R#d6%3yqZ6duIed+W=MiqD;*0}CF(3(Z7E0mTlAjIKSq~uvyT2$~ zUs(~m0m^7Ja6aiT+D#-#yyYA}qh{liuo9vZAQRC5wZmc3488d2p0Yt;tEVb?Ph3vQmasxgPUN z!N+JD_OlB_Q|2dw{=d#%{_E^lx^Sc#8naez(kSNxV+Hi&zJW)LMJj1`kuWE$qq+TQ zMWzA8TfJb7(`Q8N!AnPZ>Y&>lIOl54#c~o(K82Z&HQ-DE4)x@Vn*^B4n?Osb-h$`$sL`=x!oMpemVtPYaw7T4sCqa+mt}YD3NQuwjmeU zDPbclXQzmf1!DHI4Z*c>J2%%T3#1F`Brl9DA`0>$Ju5D)1Nc9PNFlEt(Am~n)=>*{mpukQB($^M$=neYJMz)AyAFUFi(2&`eJ!IZ^lQgk{ zn<5ZL?5FkETg1fn0X)Q(`WQE#FzcS%e{pkU7{)4YeXlWktyf~}&U@7(CHeLSY7OqX z@27~pqxq&&fPZcw@k2;KY%RnTPej#VhJ)XjGo`n)w3JrZVUQDTf$62>k3;70#7T(4 zhrwszG#0;KU_=s(1^O7s$9CfXNk}d|4;x78(PSD0mh6kb3z9)uJ^7U$so?F{LqPjD zzSa00I7P_v%htB(P|~mCcudGL5`he=FL^4aMEW4^X-o9TXH9wpAsL>J*H7|o?R2x+ zN;xor=O)nh2%hgFH)+sk=@}^H@X~I%n8FH*#F&#(NCx5rW)&YLyGNVO&*aUL zMa+|8#84AM{&550Lf|D@9@Gf42T~#*fSmU1h@XTe`kGg&c;Y{T3ooXU*x?Ll5?H+}kD=2UOOxb>YN0N5hxB@1^Yg^_O~vt*)+f_Ok zGYMm8#-(k{M!z-dkxGXxnvQmam?hjM)mU9*!ild;BtjjGBO}UUltAK;qcwMuzG%;! z6GQ%2CuuBLuu%q=0=meSeGRfG7l-ZV;!YZbbAk)F!s^0K*9gK?T3?QI)&3BpRk9~r zcB?M5COP=}i-|_F4!SpWnJC10zIiwth?@rcBv^~0Lu4m|sf?7wk+c;h)0qA8l@i8Rp6~&AMx~=x zXpDe~AyzcC%of|}zlw(qS=@%f`i1VcWS#2oc}56KWr2@C2>hOu;14E-H0EG!gbDZC zCbG==QD=r!3Qlq`A7u{u%E%11&Up z(7Z=*6&8-!Vf}-H`DD+m#I_C3sohAjd2`v7GO$3W69?$T9t&UqxE5?xBhcrx(U!~^ zLlqc3o3TV=x*qMdWauD_fI$qtf+ymjd(R~kkl=7H(p???>F8PnymwnNx*f^-==SF- z6L`<16Cjo#)~6}ef^JiUOWa|}ct`|liTHF3eqRg`_^B<&k~r8+q=`Rz&)3>u^S56J*GLYL_KZ7-F-%W}NOS%uXiDVvpP3adJP@mTEGV(6X*i1Omh{`0cvaSLJj8sl zRic47> z#Y62~o}VM5#nbs0fYp9kuw%!NFQ+B`2_}x-hg~pAtA|>VelY^u)brD1h{wWvkB3K~ z+YjMoTF{gHts13cVoOL&-%8Zs7Nd%6@M3y)oBzVSJ?$8M!`ih6tEE=w=7c}Y3nTqx z^cpvwc&h-W0uw&KfzA{NFa)YjIn^NYF_nWTqVNMgAT!UL_hEj-ha(+r*2cyO!?_(2 zFCJtW;fBv(XV_?i4PAysg(3ujT`DQ1YhA2MmY^G0swKN`&}v8L4V6Z_$SO@JjkYKP zCl%-xT(xUWd+Yl%kZr_^?@6Zt8!rCWp)L1GLVPAT4f#=k>SkO{Ri?N3a>1PhB_toQ zbNkE*V7b#Ro@o0*JC_Iij}QiiBgk0O%ymm7%yNNFh+-7lml-Jr8pL2abSotu$;7iu zq)+)WbQon496&($_U#WI3fY?Y@i%$PC}Gh)wu~Pa?M*D`;IX}ZTr^Hdr=JX-d>nxJ z630I7e(_}$3e;$Z*lJ()gTR>eS%fsmTVHFi_-!oYD}{>WI7JJkp9PvQSjlkJ>0U-1 zoa8~#`PT#|fRnbE>y5WM6Vlo6*wKa#19C3(WpogG=T{DC~g}^kCLZtJ^pPr86Pxb-a=Ln z?LhCJ4-6zfcyIf}FUEm2R^>VsD{6bVh9UqxsZF$0lCYkzGvfyPm15s0E)Z2_s1XzV zu|`q22nvoHL4gd5BTA+vbxNC>`mGBO(EbBe_ATjQ63Czls-6(GalL0bXx7Y)tQHq{ z#TL9Df$6>2{fPreQer@r$w2#O^*Ycvq2-`3X9jMsbnJ@503Nkp&9LE;Q*0>lwvn(F z+EbAui&Ec!a|J#X(Up~`59q+z2>F)My5!f2SZmdvZ}VA;G_Su(WTA&u)(dbORUMzW%g{)w;_kIV3A!;re;~CK>0KCJ zOY}UYQbrZm<8mEsq84S1Vchgl#D87T!{c7OnjSWc?eq|Kc%9=}MU9=HyS z3rjqyM6QO|wxy~TDOiMcwk1MXiRN6j*ind_L=Q`V!QB;^s@y(^@V_(-u1AMdEYIA- z&e`LQNHc)z$CHLM+Gv%^k?+TQI8%+?LfD7nNeds-v6O2WLFXf4doo1q<}b-zkAa44 zPzX|_#|$ZN{m7{N%iI?Jnh z)abixM-^n$rk55N8cBO7OR^b%su2P#X6s0@DkL?J3)*`(e9d%DiWB+p$IIV-J8Sy5 zOsGy^z;GK-K_A22{kE-Rpe8P&!J2f65GNLM)c@hsU3X6s2ZJ$~U)SXoiL-Y@5SI{U z+zJE3M!;*N@;%B@r2(P{hkcyP(&`ewOPCu#|ANf?Au2tnNgadmcm)I(agZ84p2Js? ztSi{fax@S0>oxDn6`PcFB;z-Y(&aN-Bsc;l`&bJGfG#S#7&}(>F&I-$YbhMR2A6tq z=#K;`rt%;L^HQVsnY)XYb{USt186O4mqYSrmBL+i>>2lj++2}9NYD<{uA|5QZuSuQ zVWLB_1dk`hRw>{4r!AUF?*4`KMG|DUF6R9aK_gnli1m1Ir68wpscymaVb6tG^g5dUO8Ff^_t1%n&{d<_2=-C>AL=<-ib;Hs7>F36+}OY$6S{+Ly~i zlqM;X<5&lQC$NG1!W-*GH64=+5%hMg@{HRg1b)pU_~JkbtQAB6Ji<26+kWAR$aBhO z%?9SMy71tYcdD@xc(sx2d|aY~S&GZ&C>z7cqbX6K=Af+*;Y zg#=G=CHS8vu6q@7$WN!B1lBy8!ypMkb0K{Du#@Rz=H=v@PAVi^qH-lNUKx9nyUr|}T&z>mdH|$@P*$6fykCLPTLGMQ>*A>{9Vxc4VQB9vwj-A% ztgjjv_&?Vv=(?w_@T;vu&@l3pw#BdZ%p+X!?dg`%yr9qgD(3VhB=vx)K+QCK2Ldyr zNJkRCpd$O=E-gsav%YTO)Ie+-It!v*?c`%QGjg-CObIH33(K z{Dzhz5sclH9Gt3GF4771?BpVO+}M2j_?bkk;-3gpi7k>_{OM_53Ie1Pqk-ZL%~tBzZe|TqgZm z2P0?9`6Ejqk3F(xjh}Kfo%C?LNp&Z#{d`oUS zAYc^7v}Ks>*%qN){H%cgQP?{E?u%&2RvQMnO>K_cm`q2nM+`Q6=M^9*a#BVncT4g* zWLx=NWY`T@z53kdcRkP7Vr#iU4$&1`2H70KcA1cq=#%2EIo?)hs1(qYkfsje2EE)U zdbQO8$s@*=7VO{v7cEJIxKd&z}mvWwZrN}QtmUs6`HdKL|xe_M^{97{H;Z`vI9={KPXf9IucYk zYp{4kK#@*&3ht2z=sMpWO6 zP{H7fk*zRQ2o=*}sF@$R)aLQEpB=GofTfcQ09rsD&LL|?K>i}8>(}!_2@5o|N)otCis}cjPk@3; zKs%eETI?B~DyQF(J_8UgN>4Ax=!8l@M;f@FPA*@cO7n2JPLT<$YKA4kQFHiDD3lS3 zy8A**YdsH13%Goa`~`o#(H*&>40eWNS#&X8t1$Lo{RW|}9NPr6Av(+zuTU1-TiQHf zx+DbF3jsjpRMG?uC{&jf4ynv8v?^{LqH5>GRgWS9=-@6W7+-gnts_j>&s9c!6-O_1 z!4mI{IttgY!ndz>ajzR?m%|5GqsTARiIvb^_#!BmvPbXZ@;67rC>TD0hEKyKusp@- z>1cmC9M5oCm2^pZxc6z$y|RCU)WG=WaEAV>M8|69z_*prMRpzO5>efS1=XiG*Ju!4 z4UVXd-2y0Jq7JVKF3_<(TDlS0-G*%WjY(tHPYbq0)=*d>iGu2>8(3bhi*!P(r}w=M zU`5H6DZcf#s67I=&~EZERzvT=W^cmh;nr8lxxDUTpJf5e)&(788`J?9)ISDXEi)2_ z`kH#iSy5y~@^+p=0-haI#(*{+2E)hXZjR=!G8%O8^Qy`!K=TJHd z$_cMYk_@ZG0&ydiQJKN(Z_so^qnO4vvIn zEd7b@{R%W?s9%X)S|rg#}KHfI^c`Cd3JUfFKovRAWW z7P!qpjo+X_vkG8lpV-y~feUb4waVjRM{b-PPvmrkSr;^f#GGZE>F8{f-*Ml;jVt(Q zC;>d4Z_Ah6rc1fzwzu`?c+K5FwF;s*@U~}N0tgf~;colrEprC(rh*v8p>Gn;DP@qk zCMvUC?9O_gG~<{sNs<{4LA0i?R22ht$k8@{Ve06n!z=_g@83^{S2(z4{PZ6I>#(7b zUUlpuPYg;t1IvnHaeu|b;tr0IeKHi9V5yF4#ZooliS4bXf(a?u(uI zjN)Qf;~dR4>eGm%e;>=BK23jh&dFvGKQP_tQQoM{x_PF1hGZ z$eVK-VuouXe|1Q$uoi3P%pm|KcAaYe@IYFOPLwNIN9P-yC1|;Iq7XV<%lQL5H@Tc1 zv8qVo=(lLYw87T&wbXVAbnt)DUaN-({1BO;O_?4~FsK)Y^8+o@5eme};hzKshITp* zIm$AzK8P>D9l^)t2s1>ibef_`a5vftc)HPSk_j)xOndo$?!a-~==lSJh46N$@7DPkKtxmJ_JLME~DgZfhW2jFZk%Ol^7(7<>tQ9HRQ9~#C& zFYzM?dkNR1gqk3LB=0^&A@5RS+*EKFwq&yqL8442!XZ9FV^>nL&}0>>^Zm_=UOZiH znj;l*kM*-4xZ2eQKc^&iWp9w)`d(4sTH+r=szwdbLY_Pkl-0K@cb_4#VXy)$pa{{a zZ0KK3-SYOG z2-?m$O7B`q@C#Ma&qhZh9($uC{RQ_~EeJVscP*h-IQ3M}mQRNlKK_nbB(`J0iC<#0 zFV>Oe3#tLU027Tdfl@6o`LlzrP}ullnF>Xd-quabx?G21st(aWAfS;1T%{&i(Ummj zil$w`MbUmIAP~kp$w|D1L`;!)ED=%t1c3cA_HQRzIpb7YM>dKTdt0OTzpCWBB8hf~ zuM6Ypr{kmH6t*&N3mqd-&z`HX`=T1u9mYp#h~YL&oFf4y<~Ui?^v3yBnV3Qi0hw*Q zT7aAr#0;v=brMs5_1x1*umM62Um@2}u0h+a9Inu+Ibl-xZSI&f^ zoVR(eCa`e?vV&s-Xne5)&%f}2Si8U>*`HlZ2|=T+m#`+cX+v&E@Hf2zfB-z}*JHhi zwNf*sGx>FZ2pHdCFv#}NIR4cQ=W;d{kV35Mo20l~G93=bk$lv_?lyufE|Q$-uLvX< zG5&#idGxcx+B}oG+iQ(|E33853E|~1ZoX>;HXvK}9HUEO%wcw2;3_$Cu2?`9?Ld`l zl_$g5!_f@ydLZLyT4f)z92TUm6z&IFA;sR4tp;+W0E^`eH*w8G*0^EC> z;nFF%RWlj#&4~#x#`hJ5;vrLOj>n@Z-e|(ebC(!h1AEq^4bd@y`iR??$fT1i@RlwO z86%OuPCqv^=oohd0QV=jVh_lxKv_yN0ucE!!L=aI4*-DUgR%af-p}$n2}(q64#T>u`dX z=&(2#f=ojO7Kjg%a{K~gL-oVpz=9C-GYLbO@PoJgbd?A0G;AI=bQ2GVmVSP_g;peI zK}h2I(+p4G6X`5Uae$^X_`Q!HdvA6+xnyx~K3c6?3Fa5;W@tC=HPav{2)t_}74Pl* zdi5+Tr(VaRC>Tl?MG}lrV-owvttkrt3i-AjC72d4xkHT#w^ni9{+~EVKgW5U-Xi}1 z^y2P*;Lf8~9%XLjFLS4_b_Z=skGq|5!@7M>_OzYq$PPt?*}EG+5V^oHkDEeofhtUTZoQrR>? z{>d;AO-{+Eh0`U53llAk-L@3JJ9gp3Di=znxeDIcKAYf8I}t(Z6O#Mhu=EoWCh$V7 znU-cJNRZtLjI=dv@Hm@kWMJ4#+`_6zJWdlk+zm_)qcm=EtUsU>iJ7y4^>O%x=Cy99 z-&euyXn%O7FW;a}l$hmmi;)Apw9k3#4+aAvs+jmhr7c|SNtn;H-prMN6YQT= zQRq_aL(^jgmD#L0yu1C04^7D(Ie&Sg;ts86s4IN4t zGj5Ro8E*L3sSnzJQBlDbCldCM>rAE=?j}Xv`d)Zk>J8de)vhhyBO3f4W-)h3D3cITnEv24wwKTiU-8D@LIItujZ9)H(M@)HTXEqs7w!?p z>{RSB}*yzBRtM#F_fgA7+l`r|lZt z%7u%8V!}I@rTnwbVN+5^y^9|y%t#gG0$jPJexHF9qFu|Ngn%*cNpQIoUhy=gX&1D+ zVh9PqJ7&t#lHvkRBpPF60uh5dkc{~Vqx-#7v#A!MR&A{otgxeASX#5&UG7QgaM7A^ z%k4WH{Lt*P{qSyPPA<_%RH6K_&WuNN$12mRU-0H=LOUP2eCUZ&g=fXj&g9s~mnrVC z4Bo|B;!G>4&wBg2FCO_##)36DEo2(%EkO}I-uh|p(Ly{+(-xYIgz+%Bs1^6gale_5 zmCI*AqUZyn@>vj5$!8&iWA>TilW*CDq13X$tA#$D(3G=2o)gs>wb|DTB*D|kTS;Gf z#{(1)BqMQ<>+oW5di4%kic&S= zZ`?Gf#0PNUG6V5x+>ex(L_cB_%&?f{;Dr&(^WkC$#JsH%Ge^;bs-m(uptdFTfKoMR zAZGA3Ho});kpv8Ij18wj-l7AClq6!Jn@#ysz!Q7pEp^dNqz)S+kk3s}3@1-cwB_79 zK`-%^ugk0|3(*gj#bOjSc?5`a_7$0vY4W^M9=MTKVFS~5lEQ}>WZ9KNcE*m0K`iGg zF8VaM5^ZCbeJzp65e(tpcU7@zlkZW=^X+xf9wPXimPPpExF?n#sjsP|8afWT0m&Y@ z^yRet37w+W%J`3MfE%2xj%nOmz_5pxlqo5Yx^Bm-R8U9{4H4;(f=cf6fH()k55}Wn z(@mxGA=fAn0=mfdh~#B;EeerY&B(BoxUBsSf-2=xPF&?xgJ>&WXG|k5CQjngGZ5J~ zU@)~)dS7Gz#kvV!d#p8TO!npv@L^9Nh^6(8VvLazw+Rj#)M24N@782nf^Zn@j+D;G z)k`5e682>ugYI|%hbCc6ixhn>1|@*}(R7;j*(S8P2zz0WpCLHqtOS1{aTZxT)CUsR z#4&=#j9rY(x{L&KZ!z%Y6z?Mr;|YvzdmiHs0SH)#Vfrpxz%U);akp)#bCaRe2bT3% zXc$YfLY#;TGp5F7j1KhVA$ooig@{tq2+^W*9Fxma?~J>iQoD;WFf$?g6`t{d^NqyW zv)<`sY{SNhJpAA$Q)Cce6b^z*s$;xA7ux=NGLd1={z)zG%%_VBF}I1>!ssHKe9z3o z3x^b87hn_~U9yh+a}TkUo`oo^)EJ6-Qc1&YrtpkjSWS5TPY_pH2tWV`rgs z4F@=F%!*{O*qH3$Vgn9}ryU#(G$Ni+wMpQOww+c=QM8CDIFu3AAWHv*PI{qjlem@O zQpiq-Q4LKVDsA?jOeSxH=V19tW`Jg%g^Mdrpe2=SOm^2~3ioP}GB*(uau6!{`h_~b zX8ut%iy_OUc)BwzE~_aUxB&L(*_M$!al2s0!H`DIy{`j*MGb#Va; z2Ob}MyF;EPm`BVkAD$Xg`S~%}ZV}en@uJ;O6+mD;Z$l;!NFX~QSYUC*OGQ~GNk@(o zA!E%WefZF}xfDkm4!=1uN$md5%)jUay=y#Y;g0dh_k7TyOpO4M%=J=i_tkOq)2RX0F`Jg9(EyQ6BPYTO7hq|Ex||hmCvPJ;P%^zjLW2>j zhp9V>8aLBDz~ybi=`9%?>Bc3~7ekBm{JXQBZixOja9VHMMTWlh-P7`9#69=a$uvyt zGo*tp`JMg>EJ_vSW}NuSP!G)gcb{r;BqTkRb*$_dnt~*Ym_ta{$+9$PT!hh--`-ylVkf?>fa_ za{~wti8W8QWfVTV^?ha6(*07K)ju&!K$68ntW3-LuJ?fdns&Z_-!3}1WoN{VyA6^F zENz?FFE9xQOe2-Q6V)9N(W;2#8}&jZVT#SDuNs5S}G ziQ-(JI2Ni14P(Mpl_!hbU-Dg(BCpQ1B`p{r&fO(BD9Uerk0d0mT*{m7$u1_&mNz{i zHqxM&O(C0?F?E6u6F&tsUBa~MY|5vgrDl@N{z)BV`>1}diNM1HQtc`SQ#ReYP&%$# zlJp9&?uec;Cwobt#OHN*uj=LOj8E)(#Vh-DG7U;Lb8~7fvj(f*y7F64jK>Ib&=%1* zb2=5i=koEvJT)8P`7mFS5mJ~Oe8`EPD`Ge>uj7M65rl>Pk9wP5^`;XfQOG5ziy?~g z=|EJ|erequC_B9ii15kDeXMg6CguwKH9j|}!eC?0nZu(sM?DBGEhPg915SB`9X8)K z?rfcHOEp7SRZ0_>g~xpt7qFSpN|RTIhern|lL_A%+d4dYJehn67rWEF+a@|3@uhoL zV%^$xIC^U4{eeP^psp!L-n}won!}?`tm(A`&|YQPB!aNb+4H-hVtRl&kQ8*egVL)kiXt8_ z5_B)AI6h2`<`mrI?#*Ht7GA0f7NEmK`ksW$S=!CQOb3_a+3Dyc9Bqb`(&h_)q&7#YV_gRboJl}s zK?EW2V6a8886qMG^BQF!o$lGqjdVm{!!=OJIt zKzVGO>X~f|Y78e;ajJdKPgUnhAC@ z+j>)zk$DZR1+i-^8aP#1zf|MlvaVnA5&=c3wnob$!uP0xv%drByBuwujBzUR1#f=JpaR^ zAvE;@4XYVi$rs`UFNA)WAQLl(MG8`8fx<%NeT;=e7|jI+!Hhb2EI=3{{3Yn$^yY^sX7fj*|;m z=%V?eW4VN5w|zG8l&ajHxx;<-D?rF6ku%bA_%vduhp0a>xj(;7Q?k?5WDL$uWo*AV za1$uh^t1Ga4)G~O-GxwwL;X8Ru`?MVD224mkSUiU(Ls(U<-a~$?$9Pya#_C2f1Zm8L2lbd)Z<-X*!+gVLKQfN z;d2f&!H@R$6iuCldX|U@Nd|AF(4{N5=TDxqRs@EMSNmg)O0kPs^CJ6xW}n1WeUx>< z5kpL2Z-4jE*3*Oi|9t)k#&}-`Kj35I@DgYfX|rE;x1K+Lv>V#Jn=(E!Z8zN6JNW6@ z_SR1vY&1JKn;;&Yjf4i6@!{5kpJYO`0l3H1Ze_Dyc6auZX78pWdF3Z-w)g1KU%bt% zY2Mg40(ru8a@rki0K<^~o$qpR)>z^~_l#&L2cuNsF@?KI+E~0>*b7nz`tSo@{OKIL z`&PP|zXs&d5WY7aB7#lZHIy^~zNH_X`|9d-RG1qmOie5iaL2r)KoY-=d}C`N5onph z6DCtK&UAUvwIDkmM=gWl@h==nW^$kubf6Jgx5HyO*HCD~7sPQNIkkwdF;@~tAn(3T z|C(lhz0dwSO8zPaJWR)U_jUH?H2?E`{^wEpXEEwLA2s`P`gQi_`~1(N)b5rPgm#i84dKCl-sw$Md?a2TPSmE?gnMM&CZvd%( z>g+DHYbYU&!@}pV2PxL9x2F@3(dB1D3>;V_ZLWvwAk4nmd&cYXtia&uiP8!F6K@nE zVRCY4Rf2-jS7vJ&p7wlWmr4l3o3Ph+m{E>H|MoT6TIvcci(+a=1i%E~h4D!!K1JQY zM5Oh?{t!{^up*CSAxY@)8hla{ihrLrXHX-Iw;$s{9F|1#{Ok@_{NTVFw$5xA8WMG) zPJ|!k>6ERQ&*!wr2_rUnI$)GZH@11z(?1WkFdD z7jic+4W14*PGE9Os9#C+DGV#L$AR0?CoG$8OZeFsp1q#vU!v3aCluW2xt$E1AOG7o z2;Llhdk?P&&X4Q_I~+#HU9T`0Heot^_v~_hf&AC9oXSL!67YQw*|BI)$}z(nNBp}% zxoer6desIdHs4#3dS^_&7Svfwd}pu6)PzDMy^V_cf@Cf z*Z>AL2roL7$V~6?C{Va8T@~D|M$JtoHEws1xzm%8K1w$YH5ZgW2W;nq1om?;Y+pF#jAV=JSE)& z46UZ6xQk6z7e-*>r_Fr$5b%rB0#K`E;E=R7%vqnG9B|z^?^huGgWSZ&4N2~?J4M4TEdK1|Co%^2dx*c z%wH2I-S>U?XKUal@$_#7H7};4m8S1sPDftB^tuZN#kS@oOF8k9vj2dqry|^ni?I22 z<;0&biQX_wj8!Is@Ri+0p1tHlz|>^oGfQ~GZXN0wIs36KhgU@l&PX5}&32$i$T>Q|?VdL%-4#uC?)i&#&d_vM&>bwwB$9c9W#T z{-rES=}9c%vt~RPVCP{P+J&e@#HKyO^i@^PkNsyc@v+r)SR-{J1kE1!%c57=t2-Y%69`YX_UA|bu64T6TAtV8UQz7aRipG&uP;Yn3o{wjjTC(i7U?^ znCSZ3PVJc7MZrOcZEM10PZ6F>w@oe>6k3Ycp>*n6~J!q!cc0Xw}P zdKitvrWAw0C;2R2LTKYw(XwhhtJ|>RlWaibyq=$~4tFL#0lJP-fNq1{9IO(slt>Uo zV?l!I+bIYI0|dVB5ah|Fg+woHNSqDCbYk-s%QFeB%;f~6i3pM{^~yD zrx!2vu;SO3*&uxucJKfC>(WUAfiIavBmRqLSy-f8b_^sfM^s<+o;}n1*T^km4XR!| zGsM|VmanoWJwtG(k^;uu>#13QN*EYWqRb4Dfx8!&efd|Eqcjd$fo|gsW!#+H76eq= zhg?6xQmqrO4e9}XovA0mioJ{GXmm0wx`?`F|sJr0A%(mc=_KL3Y0 zP;ok2_O8;hc+S$DGuOYzuE6%PrYdT(8Y2> z$jhkLX43daeeFXO+d0Jh95|RcnvM=B8A!-6$*0Iw$dAmgg(4+y4TRKzBP1_&cW%@D zmDFaO%@t1=21H#86!FcwVPHHUUpU1lC1S^{ICrePOjU?PayYGTC?gpr;qNTZ6a>eR z1y<^wdB?0vQ$bTtbLB~?;ub7*g-L%2zU69@B6g4CR(W_v56iB;-gw-$+SC#*lE9Gb zqqhtoO`CJ1zuQMwhsL5u%RvzZ&HcW>6O-3Ne)KTg)2as5CvR#rZYSgAg7ruqG_FzT z+M&9iIWoyGO{KA+!o5V50rqKK5#~;6Wf3q=sQHmG%m+7l$qkc6ZM*<_bp>7Z>0bfD zWR>QR;>ZuF#2nc=l3GxAU=)tMLuXT1a(=jL$9z&NGM?mxvXBhQ*~wq%e>NJwfgyc5 zpI_X+ef!%(FHp)IdAZ^RCs*{<1Ed`5Qf#VTMS5me^6Ais0E|`iOfcetg_PG!@JQS~ zdiHoBJ_rQzb=6OAubo1x(Z!2K?&5x3xyB6SEvZgX4j3Vqh)_?%V=Om zET-|>A%RkiF{%r#4r$|XQQ@3i-YQ?Xx#6H%S|yrwcX2^HB`F)a1UlnpCb|_!5AfyO zT*tY4{z>AgEDITx7n3QUJQzGW*g{3~zxN&;;P_`}d!L3vQQ{A&*T5Q*aHuooNnX4G zhl@0*zotpt2&C~zV2S0V2M@<1ln}-JwS$9)JG%!5a>eYnkG2U7_@*BYBaTPS;ERWn z6RyLBL(4d$Ud`|U?!Owp8bcrwc>$rK#CSNFuA?Y@IUqDm2z=LTN zdQPUV}z#6L!JPBMJWJCEu~vxTA)FdiJ8ygooJra}MpJ^$yK{&GwV_C<+UN&TNaX5;UAMlZbXcl$?Kv|x26|D~gG+dG6`Hvcx8 zjDc)z{)(G0d!>KycV6JWf1g@jXR_KO18Z)dzOs*B<*j0ck_=F($_l(bog9x&)V>+n zHsg)A(;l94QMs)39g*{)g^&IV$m>0xf-&Arrf>cQR{`dyOn}jJ&c5OHH?+FV|J;)3 z*j+rt(f;ae^7<}M^06@Fv&4z!8*Eq9Hl9CYM zk|gh4KGG6yWS_5)sEKT;Bi`AXd2YP6@p5qT*F%=(8KUq&a__$0fFu#FTp5{EX~rU6 z7ll_fNB`&3$$Ln>{fRoj$IqmaRqJR=OLt&j@5dixsX*Fo_(5puTXbdszp z7p^bNH1%iTWoH5i?4y|yz{car)F+S&!NH4Vs|f6a&joBmPpejqA%8`Px3ua@AN3;A zL>$970uYF)KIS=E8}!jlTvG@^h%wLXWeva&++NB<2gKWs&uiFs^3 z?bes+UjPCtedu4}akMT_va!oCtd5QKT@<@kK`z|TDI<(Dmxu}(!%6u`nII zW%*Kfk|_Sj#m=!UVPN7l=d2ZZK0BGY=$P3U{pu69CB;hfrdaHnJZ%$IYAGtRnq4`f zB3jE%dNW!kuu5Th&w!Rdal$_}v2IuD^=|uY2SRHIE3dVtjl)a4-3*(!vzS>2i~5Mq zPHOvZ^vPGZY=Y$w!{nN6d8w=lpcDpe3CT}ww!xPWM?L^*ZQZ?t4`g}@Top5gpy^zN z)a!yhD|;c!;6$q}BHVL(aCvglRP*A4HqG}pB`vPzPzDI&K}=nFL1B;p)D@QY1ocNI z)An09D=vqR)`cOiyb>GX3gFLvp3Gt5UX`|RvxU7~N+PrE$+}64R;qzB;+vcP5CVZf@?`PW;8_*@v9;6lu+kSY8ry(CSd${*m<~f9& zPDwS9g0*UgIgLjdR!~4YE$mY+*}%Ao6|W}h>#MDaZr=^um(e=8SJ(xIDGYHPVJLfT zBRO!CiJFqa*dU4?;6Ut>fw4mhN;r8Afnyl1ey)NS&>_;>&JnvkZa-SPoc?^?FvPW2 zZX?~q%DYR4tYRQq#ZM#MRqVvPM`z#lUQIT2-Sb;2qx7+k*|wDf-wD69xr1e5 zgPWQ!QcADBn$3^R5nE1^#5N9mg$LSGfk6@4)ahRBU7Y;~|IW+}Y4MT?IN~NHhDh?w z;qW&`*n*9+Xa%l+dV?@wZ$ricOUhZ&`&KzuGuSIPZ8@byY{ZL;H*_5s`<5W)_G)5O zA)L~GFr5B@USM2>hyvV)gb#jPD29PToD5;oM4iUW>&n1$UU_H$QxlX=k+ys z%)4|jnSXs9E@LJ8c3i~>+$ZSqJY{YroDsHsk4G~6=-s00A-iqE+qsao-Ah@UlgbY0 z1EO1Aj~n+1ml%lbR*>P^6r!GDV$_~mi1UauqXr%YPfj(`H4Vvm> z4D%NkZEjSBR1QP-ygWNgIIrCzJl$1(mC~~g@2hc~8TX5TDE1=QigrcJ%M;7>$H5<2 zHvD{+EZD=B&U&o|WF;Z^xEQuo_Ku(Z9=JhJz0k-IxZ9{ywmROC4GlqEiU_d!AtLwk z4@5$o)i}7s&#mwM6EhAP9Th#Js8G~q%x|2njf1t(LYdBQ#^a)uKEQ?1*|V{Pp4M6P zCs^UnAV<&ST)d!^6IXWtK8KP8DJ-J={w3}*pNc{tg z2)tTV-heSJ)EE=f@)iHE-&srV=@H0Lu-y@&7m_K!XvumV+c|n&Szn`G3*gA?v_fz( z>DgFU+Gg4#!N6VH7i-l|5+j=TL!78In@5xLjB~Z)y_Gvg#>GftsiUjvX&PQnj|Nc9 ztNoUV0Wo6?ieTNO<`lG!mE;T)WAipfET;nFM_?(XD9>}z;$M6B%5O-S-bu(IxD@-({*V9~E=*5;%(NayJ`rLxI& zzkJ@=%R9e{0jc}>^4_n-@l4tLPsUJ#BTReF-K`&Lu0vJRVLO#wA^6=+T(aLv5dK0=NRGl}rrZ_z+V>4LA6j zGZv&Cqr@{cuP-6A(M?+rcQl_KtmZ8CV%ETa*+Wu+j@f3p^)R4x{TVc(DuSpAe9Afr z-mTD}zZIV<6xYc0QSMbn$@GBWDzU$F;zUUs=NHrjaUpU&|G9_~X2#ePBxt_UZLNHM zIX!!|jsHAF$=T5=wpcM$X^RzKe>z*tVSa*uC9cD_DfXH)Xtd(fNCYb&N)E1ra5N$6 zRAVf(h5@JqwbE2m4NjBJ-CPpEo=IG5M1UN&&PLzHMp!ZwP;I0?#YUk1jz<3$8^w_# zlGah$xG0C_v-#abjYxmB*?fHqzx{UMw|`pr?Z2f?a!d5>DsV1%bBm$kQY-%lOiF1b=gCgg8>p!rR8D7U(KU3Dn|+4e3P-O)K}*d( zo2I^rCc(4BfIN1(LgZrwvyXm7Aui-*$LVA?zkm1Mx0$zSG!VJ0#feBKL<$j72l2!L z95&=MZf+vY4n)Jc z>;*c;Y<)a_inGyv55Ypz*_(gxD@f9{=Z|P<(Q^jLk);~n7PLDMG8s##%iNars09Zv zaMuqoAe}ayl{w!2JiTR&gQcAG)92A_OkGbNB|oRaBQBL;&GHUe6{o3glgEpCky!K8U+3uj8P}tk)5a|D;<2B(r!g(ehXcO z(<`tgd*z9O_?)@e{Jd><-{`@YN86KU{+K)u*o3+o7StmKt{Z2~4D$yJIwiVQ{&qbT zRPHLadP!<)(^p5Hpaat~y8rnz6f5Zw%#ah~WPkD>dd@6+{xPT|B?jn{5GM36ifNUI zFHlaVZ%l;b^qsN;ee#gqp%bOqze~6XzUI*cX-Oed+R3$3B1;C|u3iU}MYr}ioL;t+ zXIy3?0p@nF*wTFniXY9-K7fUztx8_H^}UCgylbwwkM+&<*6ab5$>i3yHTUB1R%Z59 zG;lmcQhNXE@C?}pYSQa}#ro_J9@IdKNyjio38-sr_eg2LewU;9@H@m*f`^fvCprOz zmp~&RDbYPjGrQBZ*dZhZpbTkqEHZ{qr;~THAhnRkPa6=Y*N8Vg#?fGNEaI(AWqfBA z*Tm#Cb&>^tLdoASo-tjNmV^G|$)re#a5`#{%%>yRfLDTj>-%@3l4h7tbBN>n z4F03MSlt{0$8O|?<rtFyd+|PoX5sL6RR%n{(a_!wa5<%IFGUkSCKVQsZzR?36hY zXa`XYuN%UU*QiFbKZG4p>m|}gM`9fe?#resi9WG(sZfftvA;1bkku$7p4v$hc|DJ8 zTWiaGR-V=n3)?ND3-&RMFJkZD==5@oYGxuDz5yNP1K^3~mgHMSj=4;0fPVjd`OO!h zy!;kR*z)=GLvfs_Fp~(ZUyzVor2m-i=H1yr|B)pI<0jZqBk#whBKLQYCCs?qK&ajY zO>wJ|$v3*t(}$2E-NfTuidzG5Z|z+Imw4#yI6xnsh_fbM9qwn<$vFvaF-W{>0@ zI9bpyEG8b-{%AUdg^WCwNoI7{!uu z9amXZ=^(&R2gHg{L&!A*r-%~2-O?o%m&n3wj6?!vpWmR|L(Q5oCH2#$na}o5fr`_~ z8D1X|GWr;asV(M0w05C<3&ER2j3tyuX_ZUQ+OXzbMyVM_Exg4{d@Yc1%GVw|i!iKV zes+q%ZkM_MHXxVKtmmev*<6!>!In}|Pq^II{J9NNGf4|b3VXC$t8}9?QdDZ$iXb#u zoH0!ZHKbR1$MA~6D;*+{UFpX+A-bL-h`~U{%m#jTvcnJyLWRxo{>0QyDZtv&AmhK~ zLa1W9gBoCobGhaPx+? zU~n@3!D^Odgf6RVY0||3Vv%=i28Poxs`%G|_x;JJmb#3_wXtEo|3RC?t7(Ow!h&?A zhL+hh#v@CQ48!Xy2~h4-tiaWYIV`AIX4&gXomBjC3mBiADL^Y!|D&16jJvU}<<1Q8 z{ZYjpb-swFJ^_0)be6NrCl}{#Z>>s5Y9%=Cm!%|bvluW)Cb{?_AH9Z73cJ&|MlmW+d_9;!83l1?*zJDN_$=gfey==T(*;TZiM z_U1^BD@rDYD}6yAz&5;WU)bXeG6d_M@4A#J7# zSLemK1b;Ou3Kb6wtG!C8g6m#DzzNmK==IJ_7T!{Z>DC&>1)vsRa!xk6s73ZEms`Qm zQ#`|fhvX5T1|@GIaf=tN<%v`lFO|}S$Gyrrd-|MwPSBNTre&8iHwRS?k5TAMCU_6E$+?Q?7BW>gLm5?s zR}|9SG9|~VYqP=#xj2&1S3$Uo2Flr2K3oc0KiiJ*hs!gm<5ww_B}3E)g!z2L>DoG7 zj}_C=9HOoT+E5aKk}17JNaB&}@w}2}E-1VSIuiSvytfS3Vei?) zxYx;XbBKbMB2kreiwgoRUJsKlr@uu~!=|O^uz3TJ-DeyreXTJ4KLxewvT;3q^+Et^ zR{~=Z*q9`RatX?7BKz=KKugpKKbi_}nW3vnINKn4Of$KcAI~9qOMeX!*EvK+G9=8a z+y1r<^-AS*hD=eg$U};r2Ol14-RKq)H{8ZrNn^M<$yKZ-p-V_uyUV5wBJ|2Wwo89MM{7ed$Px zgL_O$q(H@$bLvwX4rQM?x{1mA_YvuruU9lYf6SV0A&fju#DfN;j!5VmLGYYye9X|JJ*uqH z9*gQ4M!BzbBvj}~T#J{Ym8o2E10}F{ zaHC|X#4P;GM($D7inV10Xm7yG&0;DQF?;|1!2!5?29iFSD}JkiizNZ_ZYR4a2aHp) z2BMI6^xOJ5U3iI$NHfN*q4CSUiGq}4Luj{?GD81Ony8<;wY6UjhusL-Vzj};t=4Z} zfDiL^u1npkuO#sf$`_D?u}~MN#bpSUuVk3Z0JDb>054|H#sLd$Lihwm>W$j!%el%m zrm<8vIc%RcM{j03CxV=9z3e#qOY@=Iba(Ht+u4e|;(}662CBBI1A1L+l@(`~J2}e{ zr@XurZ4br7pUL44W$A+tz*#3DeRh=jgt{8XZO6Xcv?HLUc7&jyGh4|vWt0(Z7C8fD z^TZP&r`)Fk_BTozeKrvYZo3Gh-O*NOMp7`F5tn zPV=SKE1Av$0julP40oaKmIoO)mcDlS|9 z9B;T!KjdivIzyPFWQh#d(Lsug(T>r6X6Gn@_{L5EYN|$P`=8GqtuE#NT`RJ--2dPD z>wMl;^9l>Q&x$XyI$xewtzY=**OTGw;b?~Eb|DOqYD{Ur_u>3xGXB7np9|Ci9M4}p z;wZ6M`8Q_P{I_J#Ej5SN73_($E*;nfaLchBtOnoLMM(ocl#ZUo6Ste+^(#?9115Z{Ei zg9owzsVXDKHGkA=RArSLTaFcb!If2c@SN|Pf==boZF_Qoz)M`HziA|9u0rQX4nQb& z6z68H_L0IdJXfoh`N`o+XDb=6Q~HMHY*vmHPmY#f7h6Yq;-2*0<>BlIb)y1m019G1-4(2UE?}pr2|ky*bh{sbBm%iX(&3g;#`6Ia05L| zK&;nF&}5slY8{#Y>zemFi^F(}!2pc2T*vTZ+Fu+gXR>g84bLO+-8lIc zS?{`5&4acRbn&B7G-s2BgunngN+M>8*hD|;JkN^SB7z&u-BYl zpkDVo6kox07tM;m%@=({&@HcD~ zppRS_2Ah>ky0$X4sD+|^CR)qskO|xYpIv(s3$w%#a=U9XA5z@hi4+-2^29z;FcQm< zSKeeDtzrV&IICG`3*SJ;WYt};8h)@^oghM_JqYR7U&l{lA+%iDDNA7G8*_HCnXe+h zpsSZs2BiDe@$p}!bmIO*?)E`f;>>dP;Delo%U&)f63i1UXvM9wRDNWRkq6woV z_|J%`J@vgCn%Y2-y}TR9AEU1UOaAIbg~GD6xO@wxM=1V80C&OSOo@3Ms;kh+c{6?O z$*U`9EQNC^W!ZB^Pcb+sYG*7)GGtFfg|IidoF3IGK#I2&Q@L~&G7x^+bP*k>@O`eb zDh$*aE_}~~f zQ!bz(M7_*VMICRT49_GOnCT9npe9K&7!-Ip0;bCuB_tNof`!*AWIokUtUZj!RhqMt z&~nB3(s{~Rxp7w^S}B&KfVA)bw9T?94y0DNUjT8)L!~K9IFjkJ=^ijYIvE{NA}*GK zidtpWfS^E@i6I4P(*8at+weWvI{X0|5#Vs4duCw4%7rnG-1BMg@I!BmUqkBz>9@Yu z<;Q%Fvehb7+qJayK!xwOkKK|5nM6wTJTiHgmH%-NELi3P;yZWYw`gx359;<(gr@OR}_}K?b zh;PjPy>Tcq9H+8%so|Tf9F(`hg0ratlSh+fMW%}UN?fDUlBuu43#UVptFc1&LEX0H z1mIK`&AXJUYNRX$Q7KkuStg?brh;v^OdMK zF)^rW&H2_KEcKBJ=3ZgOjJkrbSOoXlG!_?qEy7sQ;({d)qYHMtOp9p7mXzRX*WymX zd?GZ`%+?kUrG)Tkw!cWYq)nUIJ{gPtdQCJWP2X6oty`?GX&q)8tJ+6dN|ZC4YOYs) zXL%QSS0n#^&ULZ@zkf^VR!CD=eSIunvB4Ov${V(X|2`@^Y9Cwcs2y21&Q& zrLh*NNSwLrM1~m31g!~6l-idQY$kW}{jy9jb4063>KiWzZcCtS8)I0M1FSM)jq0v8 zB+dkquv3dcvO)2TuRYq9!g&>KAZF^)9o#xTelB5|2Opkl*r}}yG;XunnaBzzZ^e~g zBfu2M8)hwl*Y|FhxyNd<*JDT=1ev#dT*~4CGX@6O1pok1xk^cs@LPEZy3~pIU6)+kG;<9NE#}@B(L7 z{Zb2jy&`Nls3RDS2lvqiX#;JWe;@X%6;DNV7ZyvNJ{fk`K_q5E>_sz~*(O6`3mV zP|w=r{e}aQ5yMp|zg+lw$ieguNeF+qrnm|vo)0h9Cc~#7ABdf+(xD>YK!Xr>i{;yw z%INp%U#cYjwu54@qKh`Y;M1!R%U4EHQ6a8GEDFO7k;*EV`qLsz{qKk=fTXb92=Po# zP7n)(J#Hkl!YPw>*;~KM3l>dScOE(T^eA3;=pvekTl6Njj&O!`6&nSUp+rnxmAe<dS4&f} z>!iEvNTf>E`A7vMb-TU1??so^PHCpCg{ReV^0M#d#t;n$`2XR7g$Vl}hrjCw9}j;A z)mD5V?q}cllKl(Tl&=rnEJx}{wsO2klKs5^j>98|`?1l8nk(@;@} zCoBkdWEUtSa>&C)`luxoZd}~s~`!E;~r8&R;cs{!Kf`e4*Mf`?WI;IOGC6B z;n@en|57fzIGsd3>(*n2D;X1;5<$83eOMr#o`3c%1nEgsndbE&ICb|BhkTpQXtHYv zKS}C<;sKxZy9QaGgcAEp3D>XPFRaRs-P#URiresE_+?5f7rltG&zghF>6vca>3n{1 z|Mu;7@7`@v7i=C)&Tl6>SyctD2Ht=8t1#78&@I(Bb(KK*Wmw7uGBT1JDdMglHTLt*{or$GXx?=NSYkqVqi@5$XY9460Caaon_*<>1%w&O}RjsR4eIFnO^E>{{+dq8MX zoxcPkf9wBRtUYUs{fuqT7q?Y`n|8q9FHwmK>S*C4iKNCVL}2IO0})SgfR2l%Z*iL# z%AP0b?bFrQk!FKFOEPi|8j`Z8Y{ zq5qnoO|Zbc9w0+UDzPDxa4!T1a#03j8Lt64Se!TvG(?@gi?&KZt zK%27I_12hjn|IiIH#$2$8cvUU$37!!^iIy+;?YO70|BGc=?_|6Qo6M6!|^Xz1^yMI0z-i0cn7jEJi$9rXsh zc{865M`t9puj1lQFQXfy#!BnzLT3W3Z_>?! znrt8E6XQ%i!;}kIslDVU!?)ZQyj;7&7A;zI1VT1xO)wPmcv@gMHlc(+9HY{Y28m$cct$MkQTotC)jso!lzciLSYaPg;n z@GzoV|5x#eki9g0HyzCz*26ITbce*Bq4g9G6VH&#Fo)cz+2xLFyfHG=7Eba3c@Y1Ykd7kI#-ZslA-9Xc0vXPhQfB`@iz{7t!gk*2nrd4 zTDDLA+DBaDs_(R!p)2F$n`U)dLtG6UAgx;7s|~^9b8Vmq%0#>-;A^&YCEBSzp%_|H zB{%Qeu!fW0$h)BIl z0$@U&bqu!zf<~%rGawJdpTHId^34Junvo=}A(15a%af7hv^x`8>E=rmX`q{4_Ow~q zH_U2JZWvrLwi8Kf35&)KP=%3m!lV8H*C(l<*?K+T!zMRFv)DwhpJH^_tzcqOns-@H z++|&2Nza6~7|-!J!a^lz>7TBh?EHxQegFO%Rgj=g=d*pSn$(iewQc$ALK-BXL>*c2 z*7xlaLQAXVYZZe~_6&5-iinm-^?=oI<2$#nWIj%Jf-eF*q-Ir>byWwXb1B<4{#<`UEeHf5hT5*7 zEU}6+mJ5*XP8Fzwhw>}0apiXLNUSDXAIY${>Og{oDo8kPe><97!WQlV#bm1D$FW+6 z%GZbL$dE%UO=p9yYJNuA%z4aCzr&8lcF}i14>M5T+c9wbZf*9eS)x8{+i&O&-O@sh zzz+HZq>M?`+Q2~0?F(Y+)tLVUF1`RGU=)b)r^xfhixPpdMB=3Vl?O9eLg&Y$ zDW3yb0i8$l*%n?RgPQ%P#$vqp*Z8Vi2#fx@Z(qPyG$sW1f)B0cyBvi`y}}*1JrpUb zU=ZhklKUJes*4csDs2@kBE<1UwxZ_VszcuE9X zhB$A*ya>`mmFJ~mpPyagqT?%SfBBF8olU#fOy7=<8ax;`Dq;4otp4vS``iAk!?w6j zHZ!HlEW-Bea0XEPK?5`Ew2ds7Bm1|zxH^o-E(77}xGRhk&wj_(=Hhqy6TdyS9E9^+!|baMIn6bYzOmgW)*7qrb7 z7FP@@dw*sB^!{wxTX)$$&73@2bQ+e@#x2PTYp{7>cm%%n+ojY=^552^KQp zUV)r@hnG0!1Vy319_6FI4DI*P0?Ejw?jCn2GC`0^xG!VFSOXt+723j;xqR3`{%3m@ zJy-Y`P?0P=0!KT}pz6W}c?U{QsY}yAX-JeJe9-@S(ponvwP39%WQ`5!y&VxTEm%^|c_9HtsJf6ZrI^Ur zK(R)KV(s@HVF3W4Hh+m72^8@^CUa%QrBnkRT-i zbsT)K9J+5blpp&fq#gk(seMCr-*-LG%7Oe|sfABju|Yj*NtP^*FdOiF-vbcy^nfti z5si+A(;3p9qru+#L9P$vrLG$z#`?w_8hf-c;&FloEKBl>jpKfZfhfBmC0XTBC3`r- zU**7~=Ryu&%J@~0No}yvz~#a{d2o4xsty@$v04C)SIkpCjA-(o!)Y^oqtxmj@!vwO z2VAtt-|CHEmM?jM-|9lQMX-vUkX|w|TTEncg&Bc)mO z$rOK}We~$JmH^}JJ1H7-#_e2%T=NbQ=Nl8V1X3_ljjg0XQ)($GZ~1dqSt4sBN+B{x z84$72+ebx+ZT?0EWEbHMkB^;jjcz^FXJZ1Ey1YP2Lz6+!rkjmPmyC2}ea=^jkar`F z4AQ-zsCi;t?y*t^EM!gZqG+JnNa7K-Hk+Yqq;^UrF95J!3}fsnFWgH zrzIVjk|rSDkSdx@yO#fSIDG>(UagL`IEL3(j7F`lo{yHL&RlQ9x_7LWVAa+b z7y&!X#Wlw^@}P5ua>W)Aw)tl-A+7>6iBL7POY1I7h{%A*g+A;IGl+m3lxxW)F9Wo1|oLxrrGG?>1++UXHXok_u_rF%UU| z!*%ShyZ@`;!Q0je*!M}mz@fu@I6i8yA>K=8FzNAwQg-&){T`96VF7sokAFS}=w4dyk%P?QY@M-lmRgPE1?3P+|wn~k}gVJWXbknmMszHK@60rU0J^}?R3N(4)QCH3>{myzp2ow1; z`_@#KotcX3t?-3WWDt;)T zRjw&22(>3(_I>Eo;QSqs280Ge8@?uyeL2CdlK*(mlaSVs#iP zFF;WRy8&jGf&`^Y4QPP0={?!sf8INlm?>Bij|sr_(DLz!WSv8~UtW+$!4@ncFJ-Y@ zmw~CZBP%PPjNXH|$v3_JANr6-I4Z?+0QwjY@{|zx!;^kS@tr*n%ARoSN3X}ISm#fb z#I6DhWmEqv?-deEhpZPSZ1)v&#LpNY$j5O=OoRxR#FAJVM4t8JY=Lt~L49DvFjeo3 zpy%cAtku{05RIrt4QVob%>!{qMi|SsO+fiOeOah2l^^gp6hIR|UT+TNg?fm^KHmCi z?-AYfF*1B@xVlg|lCXGVAPzzaF#7;fC0j$wTGIXutDB_Ij!I1Yn2vx#0Pb@-jJ;Up zl7abV`P7|+OUoMQYsRc02a`kZReG9%Ek7VNx3|Z5QWRE=-oEdt3g~EhI{X0h0lQ_5 zDJ?siLgVuEulMYNMeRT(y!d+wO>19RxB8ak;O~s#TPu{<42J=~`Wz6@ydEJ#Mp0)X zCLe2n_01=^xqxRhZA|1Lq#yeD%+9n4Odc&g5RyVY*lUUl^+vRG&m$Z}%s)Js9Dl%< zc7{;A5G( zMFENpq+cu@>EK{K0V3rDBP=NWaOnup`Y)!Vd@=IDDm`@%+lxp)UuB$MrmSU%GDKkw z04sdB#t3pTzBY<}v2-LH2*K1C9>SlBqog0MFv2fLt#6GGKU`r1&;Z>eTt5!@7_lae zeYnC1Kf#5HJzO)gqBGRGQ&nM%g zURriw{nO+%j>#u8s5<<*bv(R))s?k)KAgf?dIf^t$19wO5j5%VS<~zg-;Ly~g?c2f zI4l0Af7Ke$((gLmmsz$^Tjdr1^AwllM%fVhef#L&5b@V$I)jQ&RNHGD>|V$@4TE(- zajCbqu8vC1l--*QE6t6FN+wun*-~LC8zOwdTf~#&X3+25>OuDfPfI8G679ZtHU2^k zLXOLy81naon|7e3W_ReuNN5LKgt{xirpsT@P6*-tefZ*QHD-Y5#njKD$_oYA&|uiS zb=^v2w1wqFFXmP}tF_4<{ZJ2HmpSO4#^OP*CzID_jg}AU5;B%H)YT1}o_PKScgS4h zwp2_M?U8g1*tEkf-2wK-kKK={TnJeLvp7ih?2Fu=;r#^)#sp&BM1KXIZwfCN)UTPe z$51#s`>S9qs+o2)6pS30!EhFvG&?-809JA zH#N?8;DIGj;I^m}5jg>nKzZv)t%HLjm??;L{$+uycj7m-`*_>mdKOCBHi@ug#0ox?rwGzj!R{K*tzg#3b(LE*nQ4l z6QF%Uc$Ljrx+9O?UmyrMOAJOWQFT?qO&6ZZ`u4sk7YF1BSzmc0{7S6crVV2{#yau6 z59tqkesgmZGv9uD_ck&@Zre`BeZUQ9;K&VX&EAi_KBDXI((xmDt1bx;u+YTt4FbH3 zPRThyJX}E(cLFC7uj66H5%>?mMFxbmKqjhRB<4~V!SLQ+onnX)U;ldStO9jc&y0WE8??+FJ5)&78|Qug8tRY#nv1_R6GeY^9&W-&9lAi)UMFj zJZogYqLLA6k}7M|jFC}r*$lqmamMYtn|FKn?%e4;`^&58t1(0egIl*Wx^=&Ihad8P zU!?X+)qJi^g?VAx2mLL)eCF;bG-&J-eXW}0!8l@L#H<{y7UxFk$xawJ1r<#EqZ}cd zjnQMFQ9WZ+@*~$GJgz)WK1cNpPhfgCv?w+J$3R2fp5z?%9m4jKo)LtGXJ>G6bwW+o zm&O>=rw5R#ldjArfv|{cv|-j055S{Yr9n0q2Fv9QFvqHCumTvp$ zBbfL1&5tx{e!m@9I$)SYq!v%`Tnf#eF@NaiTrWhJBEDkSLo{!~IOFVL7bEU+diGt8 z*vhQIE~UBzg0$OWAl9RRnpj#W$M^yf&Y(;T8QCl&gstP_8DmCz$g@z2Eu)5I)^xYo z0gfdc%F=S$g!5YHe&v2Zmz~g(Eb!Am!WWwpX`a5g6v#-Mq2cz6-JhO4-#?%f-FmVA zBtHDdZ}`cG>GHC5wcw){|t0F^WBtR_dWdBFNGnE7V_L4McBa%0Pn>-Amb75LpZ& z$XeP{Fk1GE8{qxdV?2n5z1bOJqN9@$Qi>25RZK5P|leE8D0c{N3M z4f0UESfz!%y`K*L`e=9O@qa#l^k_GuUV)vdV@E^HZ#(IIm|RNog(r%F;H!p=1e-c= zLoVS@&>aU81xq8+I-4QYpgE6p*r`BjTNoUK+3akS z!zwp62g6I`1Tt2y!33QoIAOBosm#(EF0T4v8eoA~)*x3Oj$}dc?H(d1yn~|p2am#_ z{vf=^OJ-&C-Zf`upLR_l3`uDC@ zwdk8AVBK8sO)W(hg5g2T&Uko?fDi*YNRbocPVCMPPbM=2i==YmKM7$`Sn+3(G;+H7 zMqC^H@0Fq>U@S0R#YF!f*+ZBHqhsB-=S?&He|g{fADWrp#9dG9UO75}WSimnwE`2( z`yo;>BuAhlNYx#h@KpLu$+%q{XUL*i6-Pf5+-<+y5Tv*3G-0K+oRQR8^FWy$T%>-! zqSKNE)_e0~!7yB!gKl(DW~L&((EX^xB~4ph0Swz1CdVHy7?x&I4UYkDr^N^_S%zkn zUO)Wy-QA?4B@R`N#`L3&OPoV6pm$>X1VT=v{ShKf# z$)WcW2)L!4YY&4g0HK>6mdxy=-#LJg_f=;8VTda%IK}!7CnM7jq^%`;AS}2Ljz8u@ zCJ{^ZODjr)#|JJMdWn=!nb@kqo#mO;g5=$i4ymAnTwT4@3BiI}30x9>!`d-5{tG@v zY_9bAs-B$p?edvT3I~e_!fe11h_f>o3dm^XY)CB#`5fx5Fjg z2xg*1dn&RXh4aO)_G618H1978j_}UO`_0q&dHS&6itF~FZzqG)*HGxr6{CFXQUA7F z)dcy=Ip~aK+$|D~V?f+oUyTG-5fP+|V9_94qBFx4#>xK;p2IqoXg-05HiWsJ%EjUQ z_^(1>HF9EdWoqd_ILJ8F1wDN9)1&=IS6EYDdoJZ5YgWMYxt90j(bhv>oZf=8$71aA zU%-iDER9fR)H&#LET|Zl3HigH%NWW!`!wt9aecx9p$j+p`HQPiZ6Dp1ZZF#upd@=6 z(3|p50*!8oW->9BRHQPw7=*GhF$m2AnW&Fw-1R^BG+9=0(WrmHUMkpqwI3m!fB5h3 zR!|4o?g_@R^d%ODnAdkP{yoQK#e(Qmk&>ONSX^vJ9OId4;(wrgctyDKdHkb%&9KO4rXsZR7FiRY-u=G6%lROVyUDy=QUvzcIJ;!Q*J~Uk2yDBW7Zu2hZ5w{Faq{$%^_TV z`4FU{HHV0rzz0#HU2_;DLhL;Ic`sd$(bk#+;cRmINji+s-Fk!28g@c}i-z=wh-F&K zngtNeUmjZUd?U(W7oAt+}%TW$01ku020gX8N zx5I30K-UwcnLal`)a`t1i+oW(!}8A&?w(H|_gAzutBPAQh_M|ti=OuOvV8rDauZ4m zUaenNNn}_}EG1Wvf|;+tArzzz=54#XQnMy0t=2*RQhckk_vrir*VNUeZ3}K?h+Gz@ ze9(oPWUXnoTiSIAiqdX{y(5M|I#fUxOclQ|DfbJ)AIO4*mCp32j(&WDcYTMNH{!-C zDR(-S5M6T7autIHHu^i{kY z8rY|g#9aK*=ek4uRurk;l-G20L`igeCn!4wUr1NXX8gJJ{kb|@GFZAHR~bVgN!&-% zy4^(UQa;_2P?{%z>b56QQ;wW4&o1KpbuCnoqwP z%P+FIQ+ya{(QqSCS?MISNU^Gw0b_~j@EvJ`U30Eo^mX}WaM3$?elUYU$qbYnX2KpA zSjFQA3!CQ8BrI%tk2xw~DJelMPk!gXS#Kk|4iu(?<3@a#l;{oLsX5v4rJ6rrbCy^E zvx}CDOq{_|5#tp_o8h;ZHKP9Rubp4r`!%d1y~~<0(Clh4F^-{wFU{8!7TSZW6By_- z@elWoKLL*>-2wqq!6o*`0$NO)xg3IATbT?Mkhjcj|1tt#{p;p}NeblOd7aweaqx%oJ^MAVYr*um{$Ikm^*0%QAMpWm{wo+=s zhQ^DlSKiwHA-x!wsl9E5F1zDQBVu4lbJ9dg6ux0s;&bmTyKM*B{+Sp=3A3wO@wwOG z@1;BUA3SkH!5>IpJpI!kG45{?SGUQ>sP;j{6Qf5hLeA_^1+)U<~CAO5D1v+Am5#i{`KA+S=%4k;=AF$-uqt? z;s_QnD52$-RcwQP#8G}|BHL@Rpn)OP>4<2k2I`2c!a2;xQOo5D>PGRrz#x!$y2A}QIH>BuofQWkG4Q6Z@~_gH@TfWS~h1Of~e zZ9cxA{r%O_+f4V&V4AEoB*US-i`|IZlk0R$}GR8lBTe*r1KvlDYs$3lV^&Yb{q z-KDGvPe1~=Q>7BH2XB#FcJS`>&FEl|Ur|(dGu@yYWNl~|Bv^kTQNm^CvV;1u|1xmd z9WtbD5*XH*u|l9Mf0w-Cn_n`*n<%aDhB)m$G$ic1nT^!4GHrgWy+%$%h@XhKXyGdn z6_%mJg%>m1JhRb>NVe2k{ov%7 zySc&Xmh#3%=ab=$jczWan@%vF&W9DEac_^oTFBwjgu6fp^LGlwc|+qOoTbc%J$c=o zV70%mpV~Xn$NkUa>?Uu~;=KCz^&>hM3co%=h67nP7zYe%e~+56K1UmFEy23IrW^2E zM>x_n3oXnda5ypmf-Grn7CMl{>D)_hEvsLQ16AY{7SM%J^WvRfW8~DVr$wj*Wc=g0 z&~m$_6kzOxq{JiKCWjCj2+hm+_EChiZ0lclU#naBs)SY9v%0WV%V~fpGg^UN8b!hT zkV&&W``omtLZJ9Shz>dXu&Iyp8L}6e>+-S$lu1lg>pi{=4GyZ(z|^RYH1Oq(JzMIq zEKdPxYODN*{S8#fE`m5dylJI`(&*j=9?$g807-;x-aZ;l zkUM!ey)aP=cYcSoeCS92qMkDTfuzFwN*Z!!2Wdo35Wxn#=&(Px^q1Bzx2ZiP8le_G zVfq-?qvsm$5X0D&po0_JLJk}+>!9dUaZ<9P64cm#BvY;Vx54y`BHCEoL&o3f17)jc&YLOudanRZ&wnPr4xrrn#a%xKg`-UI8|@n04;BSF39ak0@j{RiRR*o53o2$F8-ihJc#5?66&7 zk;H%59BNpGZ-pl}QZTnyv@eIdo7xzGd?9Yw*(s;Eid#@27x9Y_5js|6#9V%nUe9Yv zA4Iw+R&}OEta}Jv>?5JX`y9DtDdsc6w=AMT(Q`BJT0}yDrbyyP?*SIz22M>#Xr-Tk zY~%{Z%(iyPlrE?U&+opmhO{VL?exf6hc7gy73d%{ONPN8=`oDKC*wv1obPE|)rh*Z zYR)DoEyw`0ktzIFrkZk^yiQ<);CtB{L?OKZj2y2E~Fq0ZW?$#4U+rQxw1BYE>}0T#|?KRH?;{ds@L>kg#c6CmPw2QPH zk#9~&mMPWH9XCyqi-`V)$k0c`;U5&V=@mjQPAL2v}Ab11F&_*VRR z)?3K=l724W@_%C|tq`(<(rP~}{d6+@2NF6yg+OgI;wSOm5$^DBK1$tGX<%k+i* zBgrv1*Tl%zC~4JVQ|o+?yY4hv(g^8Usp*1L0rarQP?BhD$*P>0w;Lra)IMqIqe_Ys zo?x;|8ABpD4w3e<{W&glDA{q_=Gj(BcJ|~1;R=NUYD$h&f|galUCdW7{>(&eee1@pv+gOM1d4l|H-u2kaEj%YRUIF5R zv%RC|Kkh$0#lH+X0RAk?5_1w`~)@D;sd=2au75(^h@=M!^alUbo@SpO+fh-Tkq^zg%OH|Sw( z+{$B&u8Fyo07cn-&ki0v0+AmAO6pHg`VAFcXr?mlIV)Az-(MTkQ6o963)c%y0UD3j zVs2MzUR-k0SOT(&2;U!aq}aR|QPvw!#6IQRe?rw6OD3c^{z(VWWwBh0H00e_vw3Q` z+%q*?D9W4axL7=?yA`Wyct+Et2Nkpu8NT+oCI(P>U2NDISP1~b;pI6V9cXkX)I(nB zx=r?hA88`Zc{xld{$M`WiY`VC*6F+U8g)`Rp3c36)S-3@lUtdb7|t!%j8>L9``|s3pLv{J zjPO6X#LDQR&;$!9TC?x{WRm(}+@vC&Hfiq4QisNV)E`h)cC89P`sB{WM)3c*9h|{G zxbgOCu+gIuBfhSnycATS9z&4m@~-bp9M}aWkjS3zxn!-G)BuCT&DuXn`^N{cxTS`z zw=xt`ZG@j|{jQFub-};3O>OKD?jhw$8SAiNf6$T|obcRy9b6|KOG;Q9z1&f6!yf?Q)=8o&G5lFYTgv+puCQ`d!b&B+kt{oDt_+3GHFqg z?46AK1`e9^IZ?}eI_SYMm_`j{4`LFt;yRL5Q|bNeZMLq{n&UH5Px#A#ixX)M-Pwo|1V3{02@tM7aFbK%}Bik zT@{fY`%)1dPv3n%7(p=8`P<7r%6atW5Ml8J&qXaB8xq430NR zkQi$C50ZHVy+?-!KklEfdHMFiyWhWm(23B1flY){vhYwuL`Xjx-33cMK%0C?;;-Ay zucyhc3qo|YoPY2`tiqhOGxr8N;p5Psg3%GiLgshT&Mva#0wIz^cksu_ZTv@ETm4r^IBVe; zr-ga#Yur1agqU#*MjR|U^*n5mKmOg zt>O4UkXSDmxyQZ6X~6zSk_zF`MTd5a8SIW+8KTbrBfBoq3> zS^h6_3W|C#N{1jewSwK1A(1!_MZoxNc8&npUT6I7L3H{RoQ8a%#SS<+6|vMJJZ6Zi z#WkefS#|YzOPml;^}O;d!Gi_BkSXf(+dn3wVMr`6f?L1dy6oTDxy5M*Zzb|h5$zck z`w#QN)X2tvck_s8rp$sYj6$OXLg`*eUDT-HO#I-dF0;n8>m;$mg&Z`Yc?NitA-C#N zT3P16x`_!Kd<rVEf!2|RGL=lk!i}sQ{ia;ptqH5`~LmK<91gi}2 zXmBF@PnKXMO4~8a5mFgZ?|+6QD?voedBb}VZvEVdSS$RAi6X(}GqnDKb>; z>n(b4<3DUz8;$!f`$%q~P{3C3o^P1jM_S%PFM4{!vGEmc>^mg_@MC`I@8T@h%m~2> z{Ks4-)krzj3ymk`3uRQOtH{%Eemf>>U{Hi_fH+I6_Y4J+++eUXhOYwju-?bx@Zkjc zcV0WUDLrvUP6K2NSsVRqB&f5_e<{Ckjy3~qSwo*)b*|ej_r8?267Aq2_&1?%XeWO$ zLXZuYlx|$PuynUzd3Jqkc&^LkC^sGH;I4t5@n(RZ442_$@7k*z@05^V>vd-UqAWfV z=VAW%M>hy*=HM~xE@k0I_3FRmc=?CH2#jztuYZ^A@e+odAVk7xc{FdqG#EjW7x6g~ z&frxnJ!W%Q&3^xTS)%tX9oRHf4&Q<%%=7Hg&omGb!vFp+A(Q{gKuess2;mGb_K?kB zHZERNywcyXgi|kDfw#oVBokLMkc-y-NG)ce30v z@?!U5Fq>TZuia7&=Xq1!NlBgwWN2=;2`ksKftiCL$(d|49K6GSa^yOfI9G9lD7$2R!Bo(hIY+m`@R4mGsYftGIiW{s zYYKT+xuMCZe*U#MKqD&&(eFzUTGT?OuE3-sjld(ZBoU7{IYCCyKHNJ!n4!~AcZ3Xd z-2GPzSc}2N&-T6dJdrmOp4>D;vqUiq&>YF_*4D;W@ZPoBGE;#2qZ?HXK8RUV4)TFg zR@9R|Wo2qIF`sRnZIObGm=mVSQt$0+vG)9WFzWOs&ye^5XNWSMnh4#PWSU3dZX1D% zYjA+t5y>(MClqxgIAxgi@3h>nk4>Kg$(HskV=`=$+4yWfw4#^g?N|V{))R*1FwNgi z?_3X16A4yrI#mR8WNZ=FrcXTeQx>$3YMUuDnf)<0E zeA0Q9XDljNcaiGPDM9uG1_$IPp4OvgB+N$l#5bUGF`h>2-(7Yl?G_zuHq0aF4Z97J z{}#zkHroje>Lk&Ps5j_G$QKB2DAPWP?w-E{P6!wwRRA=lAMFBy^(&vcQ;37$ZF*{B zbKi_f&G?k$pVw4}Q5%MY(HQ2OziuP{lSAl2khj587e+&y@k$yS^ zeL-dECqUr`lvq`g$2{HOMEhWZ6E@tn>L{Dx5K3cy%;C!>pPtiFVr>C#Bf&#IF=n%2 z1!OY*yd_4cA@Mm_#&R7E0r_Kw2q^%Y{`g$-Xf*D|O8G`aSm}uK@1Sj~Xcv`pQOvKX zG*$5l6@iXE7J2F!$4} zkN7#t>Sg=9!q_(`3~9hH(xvLjB$>5Y0uGF9ii*pqWK5WAsSM5@$xinqdzzO>&4?w& zyKUO(^$6w)=ZMO4k8(nF*6K>wNax+>+5bC*9-y;rhut{0@$2vfvJv*De|AA4@%iDm zfa(s-wTOwR>*XYW?CR)_#$zNp9JnBom1_+=n)!YALFe7?wzp8ToA-!+`xE>JRl7II zbMU+EJ^pC;yX~*>$7X-}yStCTJQ0(Mxrkt3^?FQI1s0(20VGxMsb?2{P)0=K4Fr|cXD7E5C0?&ma z3sUhRS6JyADy#gZm-q`wed1h=)8_Z&S~u{=ulnAF&)#p>NoN+_EN;=i{LBTcjISlB zd>I!t0}4Cwi}If9*$Hvb$1f}Q0uy;#MJOz#f76B`mN5oA=BGl zn93q5Jdt9YO>hW(m_HmK|Jncv0b}O&yr;Ejn1pyal(amqw6HQ{+d4OE@mjSm`96I^ zicT7CdUW*Tk4HcKc(lg}@C(nT?Z5$R8x>secO`gwY7AJJxAhP->o=X-Eh^jKdy1G_ zl$qM*u5{Ol{+vEnGfCN`!!4|m^4gi;gJ9!+H$4KzR{*-CJJAG;u@Vc|*b(cd&tZm2 zj4+O+fnC+X+n$sQM-d_h1KWj+m*zZ5eolz)i~h^mnA1ERi3@ypoS(q)y8L~?f@ywn zGA-K#CNzyw7QzpCbv?*8aQ$Ur#p=S!zxc7hkX@Kl@^<#kH$D&43?j1T0zTR^2pn+4 zT)oW_DD%_p?EcpMEr05{S>9(nbyt4#4KXRlw?x#qWxWsvhT>96mloP+SlU-|u%`$` zGI`x&Yb$_u@o_A6%n&!sNm8v|bsl)|e zAbO4}^BT`hxi_nNiG5yiR9U$fo%<*q z7G+H|mXk(+*qMDjWqToRIc5dCjLwe;-nQzu(Tv;M2$cqYIoD^(D(*eyTx$GN#gp@J5tqlfvy zkZOQMu8f^TQ;k;Z+2JT!og5getO`rL9$p1ZrlYF>B79W-)g72WE@ljXv<}s6y8ibOyA*=-XoDde9YS;s z4M0nF2j8e^WCdNQ5yK(cW*=cTC<8ZzKU)p^4`Y;62TTB@4&#(9=yW7Yhl$bak12Oh z+x)AgIuQE3k?kKIqsY?H@&7$LIe4~mIf4P+1sBp!99V$)s)pUKse+w_Hm^J|g(h zDts7KPeI8;!gREfG-R=HyeonEmQlact;(Gy1g#=f0~3(&YUt92RTF zTbZf)6man{IUV6Mdipe_zwDzg$U^h>qeSfbq9?5UU0A;zC?!o5)^-+5DC25}G8joK zhlRenaMx4yO6RX%yxdm_wAGSM@S}`@drJZAgsNEL1)1Etv8th`N?0O87*DM5dM@ZH z5;ORS22FfSU)i#)GQ6F9JY>tJL*J3jjR|K$f7P^0yI2=K0paIe{@`zvI#m`~><&tE}2Jk0Ut zcnHVZ(FHt_NXbbqTGE;~;*^XavPsyT^HYWZny;^gEmm=KVM$5;>iKDY%DG}ZIZsqC3B8Tv7j8J5d^G8wE*idK+P4ZIVp9>V zwFEGHDkysjLp#cA?@r@nP`6&b?_b}}diliwsd@?#!4X^GlhYT4^?yprqvXAfG6bO} zFvJYU$2Cc5zh&L@+h@Oh_NPB1-~MNx@nPn=)6KPh-HTJ`mdT69)9E$WPluUInS-TX z+>5=@)zxVD;((s!e(Qh1?GN5k0WqAAUp%42_QtzoKMs26Pb`nG|Iv{? zWB(Dnp)bdy*|p7aQsW-w&Y!{R_^dlXAbLjY6JP^vc&tn>lqcB>MVHJhf6(uH$f@+1 zT%Y;gE98Z-T`c0=u0<=Fz~^!QHRM3Hc10-GLsV+85{~0TiO87fVApmA0INK~vvE%O zKX3r2H{!$B{qbmc1#(0UXi999jc0t8)kjAgg&9Xv5F0XJU(AL~bb$Nx`E|)Yq8X6) zV@JRBg1&sifNn$hDV3$+;2uYsGMu!bMSrXvb{kl#|v{3DHrv9%#txm3B%(LP^WfSW>+4%wqJHfE~!TLtI4SN^d|nFYOlaJeuLn zDp|+g?)j?RjFz&ujjy*07CB=qU=*m#Gc)KJ1;U`v9KTlP2I06%!niT8_7$pt71C1W zlS){@rtb}MM=0fWmxxuHIP^uR&rgDbL|O(!CUVv2`LfUU`xLzq*m);AJGjSGHq06| zHx&sh$kH2~-4`L7&(2Xk(((8d09IWguQPUgNaL_O?Cp`~BNp+&AT!);HWGmCs-9hW z5T82r?7O7{>yp~7Fvm=>K)pYLq7neLv4%k~wa~I4Q|Vu9L*u5}!Zn?U?)C3Fh)fRs zV7kEV;sW)hsvnR3ax{7=;ple)r$JKEH%X5(UWIC9-J1# zWabp|DpI?sIVyvruw1bBJ?~PM{oeV>qNu07QSInUIK$1c%J!k8wQ-BeHA> zEH5F$y;jRfl~uf-K)A~w5iv>vDV(7Sx5fhLLu1D*7zKhNbTMR*TdP*NddMReD8as# z)7ihMDr#~##5FVILmo+~Ch(wfZMK(rvT#{%3Ay|I)Q2$%-)aU*;xwc2in>gctqvZn z8h<=5q>3yc+asqk7b-OoLWr2+nx{EQ#QTfpQW9KLf7K4+YoPc#%svQd;<{#y%?30$ zoS%AV-XFQfS^w_rY&ydIB3~-{@F5Sa`eysntn(7Ds*${XFuYi-*2>HmIb8=Dpy?-6hwn}N;S=STLwy{=5BalA<@oofpSvka*A@}B!rhxRwH6cSLP#T1>?m)EejM` zYqq$>+hU10rQGk7>A6KD+u~H!rrCC~S!&%4rfD!maFX-E5*wb(h}mRs)Po(z``F&R z7n>v6F0~IlCQ#MlhvzBM!k7d3unzLft#ZnPH;I+hhIk4Q;63cwpgt0J$|FAFnB5w5 zUs|_BJtNkioN%ZMPZ-Z^#OuL&$&j|w$-!&*4L$mDwNZPI$C*&`};8{LlqcePQ#U9E(@39V`5deIzze6YLk z&PKKNxDIo-ILv%XR76`u%Pp%5eT{k7SHIKoyFvkgP$82n@{gdNIJ)Tc2kq9A=#3iN z$Wz#xZ(uXyCLHFoa5ve@3M9yR%m+!x!!Ui(xX6?ktYg`?{(uB95vgX~T+7E|t z+*5TJ!e-72%zVOLMjF8U1cFxOJ#sB*AX;v`&9=GQ0a-r9!96R7df?!v`hprO5Jd4B zQ=kNC)1}%3G3yCtAyPE6+)Z08+{ag`3u(Gw1x-i08`GOUrI*&W0;_6OWBPXIs>TdB zlLsXp!>u3@mt__c&6p$_AO1?jkjJ2Y8I5VdH-0>ur?ite69n9cb28oG^1Y|wEUV1z zWk+YwpStXaG>c@9q&ZOBif81 zJGJp@>_Zylz>uzXNxLh!^>{oQPmuR$uLEaAvp`v6`}uAOW9UT<4Yn(4^q^5wjq|34 z*JWGVUvF&U|F(9%x&QT7!DSSapbk$F)sYlSC2F(HVTur#5;3!njt@>ApJ_s&Qa*}s z;+m0;jvpSd943rD;3JMR zXK0s{DC79A6^v&e272xZXOeWCl^+Ci*;Jo_9D96xA$5f!l*A?#8N!{LyF?E1~b_gwEB z8lLadVqdle?)PQva!+kYikK&@kgC26SsSwk=g35QF3r_K@R%844!z!wl!$YPx6RfC zq%n~j@E*d6bvEb^>4wfkg|&GYm^>8c_(evS4sD&dXg9$slL#lTw$_Y_RN!xTo4~m^ zhsk-w0)$1PW7}{`tf(y0)N_zOSXr+B<||)45KQnT**)|>iagrFtqLK@{4_D1f&sRd9pLV=1KeA7 zfG?LF;Hw1&_|%>ZS}HKglHx}rVm6cqA@PLY*%1RSCl;qi5RXiZD^!&JigJ1NBF)Zm zi9zJCSm>Pk&GWeE?d=3lXh>G6RHI@^d{DjW_b6NuFQ$>}8TJ!9o3g=ZbPazM&fM9E zZgXunyCDoq7re-JilnD_Eb?+A%TB4B0AB%1@b83po`$AKV0PwZ8XbujJugSu?Al$B zu9cm0H%zb2AbSo zn?Z8G4hEpS7CTMQ#6L+GPmXmBd}tk*eJ^jN@}51=XUB+B?O)~g1K|^d^_80H@rqqV zV4KgiWrZ(*Ev1Padh(Ft=uadh!}4rdw+dWAavTCLg+6(iqLO!4k?0e za2od4WtI;}6eZ{q=26rML_72SM-ni2K<*uTY)sQj@nw(kA-%8!;a=#ZN3m2VR}uOY zgE(#lG!W9rl+Y!Ib^&5tlY;LSFV@;omJUOkGhZ*3udaII$;;m|KBKeuFeu zcr^B~L&2dOIbw-VNp24DMGr#Ra{|h%bDcy)`@$|xE0UHX$_foW=Lr|oK$+UDv2#Pm z*pi?_$gkiq^#0&x#CU(ohfq4DTKE+Xsh_5}{J^9e=;X30{&%M1q(Hq9ugoV&&h!p( zz9{dHX#Lc<*3(o zLs`jZT2Sz_8HKG-3m+D#&N6Fj0RyAuX#o4Ui(=ISYW8KUE}1O`{d^HQ8xUq%NAHjF z3BnytK*YwD+t0B!$~h%@dXRspc&|Z+;m?tE0G?Su%jBxjTw}Q10uB-pHJ$M*x+p(+ z)xW-`zR#}_)CFGx?Bu|Pa>22_6IZE=t3t!ya88j`lh9e0M4i+oIiL&nCi!|WeOA)Vpf%IFQMPNJPZUT%&$*=VK$ zi}+^|qu&nY8(cB(5<{&-x5%(M?&C!}g`bdn?q_qFXh~6GdV6!l1qSIji7&aiPs>Cq z06F3puv2n}2_T7PXK>BmSv(SPdg^uX!KKX+=xOW&3`==dRen8IDo14%6@Fe-2#@CU(#10${3$zu;ojUF`%E z?hq1^mItWCZ@A}E53KvGs^dB_$9nR|g%jSgjwyNXG0|~JSvYm>9-);ldX_O94Ea^v zK+0-Y;VuYehx2$4^~6~+e(It-cOR8Ly$Y`wy)}oBwWzMb0W9y&Jev zyb0>lK(iA4k?fsL^Q&ucYj!8zJym*V^9q)=akYM2r zbEeR$E0}yrZ_b2k!xMy*ctMLbS$vFdE9A}1sS;H&OjK=NzUL{_FAHaolzOr(H_qSm zaiQ(DYI_Kw$@>NzSOHWGLp;vcC8#HVi%=rSaC;IQ4FNR)+8J;}nU&}fF5CbLNtN7- zF;n+4@4g~=3~t5Mmu#Wpy%*b1lP7tH^bEqGojLUg*@ZC96S_d-yP?QyFNSB#Ah4i= zv^vQp1U)#8Nzc*wKX5pv(*`*f2uf_M_g}um6@MVv?0`^a7nJ`EheWvz#B)vl014rw zE`{~YL^6{RKNUa}Fqa*iX`ZqnP9}ZScruh^mqGioG354Bx48B1`oq_wSI8E{JH3s= zlBe0w`!7R!f`jwtXl%Pj4g}tU3Ih_eJ~?~1yMOk0_v!wR2TC>t(v;)E0av6%WLa=h zpjYw!?(G8~!n-Aex^se~`BSK(YvP68I)XVgvO;Z{4kfzBp@mni-))fika&C>;~U?F zFqoUExc5Z|0>@!lY>)(?tX!8eCIK3Fd_H`&EGDjwJ8ozEm> zl3)5RnOe)9{w+&`Le#Lf)|#1^YSu#&5m$pdQj0KH-5EJ%JsERxKHJcfUIv`1 zrF5-ru6zVwM=aEs!Nx=b4+1s!>=;GW3LFOrQ|1$ox$LD0OJ^eb5Mj}f>|^uTo@&gM zk4o5rfE)gI!GY!$3GP3F%Ub~iD@l&Lwt1_3SO$&4JBS7I(uTId-|{ilX@Q33oM|=L z&$M+Rsj7a;FYe|@s~Rh_vDbl(!g;IZ^+=Ik`*>3Vx*}P61}_&aJqU&BYmN)FAyuv` z+t~qn%tK9TZ>0-_)ZQRRPFFhfli9@+bZHf~4VgAaVy>0!F8RE@X6E%#hi(#yJ*8T1 zZWN|n^G&;@+wjd1YHJ!K%rR^16r28ys_M7}nR}G*T0^KRAZu*lVg%AQJKaDSx&A_@y|z2OA%*{z#f$Fj%zI|1-WkmEpU&PE35fv$|0_l5{ zPB>v}E5)U-Sw#qD6REz7Q36$BxAoZL=r}AVhKULZ7({8NQVcDeE}LhpR**ra=%BrE z(3D%yf=%-4CwZ?=ukITNJ5^eyhbQm~-z+HfM1#1Xb|aIDWXg)hD5@ff3L|in$^y| z1V+RXvykO{vopLI_o?zhauW_#SIUh_X$8Kr#!wk6Yo_P=cLr*xF@rf<=k%X0{Rhd4 zJfqRq818Z}xMUFmGD?HAYfRUPCoqOIZ7su?bO=wW2v4o%#mjncOAJ86299B9cb#!a z2a#>L*Z#h6m~&eOhvA;I(v;nkwLl`v;I(2~{vv+f`sL@A3>}nG@w-cgR~13A{`ysm zMsTF$4`I&rS_9b83emn2nSj-j%-uTpxZDT+hU$71h(&oXgvqubp|-p!DWUj03&`Vi}M5r!}$}MHL|KB zMI(dRyzmKuBs4Fp1<5Og%ON2QW+9DnCJn71Xl8GLSttZlBlmdAqS=WP%0|;)XZiTu z3Fja6Y^6f+4O3Rb4K%MURFkFK4ZO2+Aw@@o1WJ z$HXotXmm-GDr<I9KMs$1vj!IQ8jAcvbs zE~P=81%zY<2*Uxvaz%M|wtskhc9v~qtveeV?*DOfIUDw;8*i@$8;~9Jo}dMN?Ub)#i!zkm%tIZ>hd_qb$~{TdFge9t zyzs`ucl-H82bZGri4C7@gB=@7?Z$Z6TBsEg+GEfUzqp&nA*xzJtWEPr&<*OVEP1*r zphGSI&lqUS(Uec{T<=bfBy})^-THu9I<+ADrTvzLLgZzyv2<2$49JbvL_j%t+UO@MO|Y6-G(A+t$#;_xC+2S7U?Sr*T=JvX`e2IDQ2Ct&7<8PPY#0lNcF)y zNGdeXHjs4~0txO_Vx}GyPYjH&(jx1YuZyO87jpxggFt%(#m)t21|KUjhA)F%Mb`83 zz1H27r#=ZxBxDe&ia`E5bsRHGvp*sF3xG{YKEJnPxmp{D-zdcw-gMndlN6*0MJzX z(p$E5#AYk%kjck+1Y-p zOsrhMXGP6Sj38*&PvJ{v0AdM*72zz;4o-_1Sfa-{?lGm}2OFXGyV(%?6l)yhYClGo z=V(q$?6_<+%<%tm56Y5-V)rPZz@(I6%eF7U23f}+j0d7DI9MXm)xbf{Z7Fz~sOcPL zG8_u@%1rhs%u2*g(+LUL@mN|V4mB^|vy7lOH4wM~l>{6teif2wmNcq0QoHqj&_CZ$ zDUu%8Cti=ar8jO-x%RIy(@TV6tX^Kc<7%<(oiI*g?Uc@gCT$unkKZ9h5THoV_2cCS zo$<^3gg*ozTP-&W{O5oA=9c8}G+@?YnS_ zZf$?%@3Y~d)EhA+KNU!8Ueh$F0<8PUag3Il2XR#MO=X4z6+g&K*#*X(gKu&@9P9Cyq_XG+SgH))=Ui$@;{34)&u z@%Hsq@$8;hgQ9u<1BJ7&$N?mbVhV*v5a%m(?mqG56-j|BoXr>nbpoATFXC%qfeIQ(MxOpM}aEQ_4&g4=jNFOuQ zuYz&+C}Mpwi#*$}IFc_;4p+S|YfNLts&DUNk!-X&ydw|}ItRi}r4~5HJtH)sgSI&# ztQbd#vK`qiPIg_aM`i3TQ-9;GZ5nOfIq!PatL74EvBhI2&*{}jHNggg%!v&HsDBFz zJ<0P|lhcv8`g%5+?9yS3_sFPqGOkJv_>}6K&`M5)3NBiZn|$bdpL5`1BJ~ zsP2*hTWJv0*3x5`lSg3oUV96MlF?f8OQP@=D=i{^$fqQZ@ebwcA?#PVh{A&A@<-?~ z?N$D6i*p>ba1FMF?X>X8w*6!~t+S05p%ETX=igIL`fVG-1jf(8iWe67F+VYS1mkEr zhj&LFCe;dC1Tc=?;L3V39bL&pbHOkYtMrDGT;MjSGnnL_(I?K6(tg?|sT53ZYNFA` zzsEfawrDQ;2R1Vq?+QuG;!9@o%U^bA(=&6VS#(6m}R4=(>L{>hM5sQBojhjYT!!Y80|< zubQFKO1Jj*TAKn4yq3j=^fhPY5w9kOs)+Bl<8TlAmlyRI%*Iyjl7ZeQ2&9leZ+>A{ zhC4YeO-dEJqNGpqDWY5vCdsyo4(MaYKPQ!%J`JlB1RNqxgd9o-V}p2QZ1FtM`Pb+I zV!xoH5uSQBYPK}(w1p@xzk@E&^0~W`HUJVNw>dzBe8ObKi2M&0D0?7WYKNK&;zDSO zfY<9D41US(^Y!oOQ49EJWh8H6f=x_ZIb6lH;Gm;&14}<964-uF)i#!65q#98=QLU~kc1ZJ7sbxz+7?^1qiKKj}eWK6AI3d_Nf-&h$D@6bYrDc?L z%m60BDaD`41g4o~1=HUUT|?z#;Tc0`Elgvb(r}HoPQX?(6Nr#AwB4piXQ$9D5VdrDG)!oK#`KpCJ(o>e3RW20 z-Tc}IAZeNy=Ir*oSmas^q~224?Y@XjMW+mNnY0SJwo9)iaK+3X=cFzo#{0BP^f!hc zN`LC}z=uVTw`aqZ7Iz;VP2y@PqRIR81ET56O{xt@h7bL$ePAx~_FRLeCN_7>(&jh1 zbo?&c2!|tjLPMAR&Sh9_VaIxS=5_4rc?}Dw-zn5DZYKCJBB=2`>>)82ijL+ztduZT zd};*i_W5<0enh?4&R|BjXDepftxGsnMuGVt9qAaV@;A0gle^Q7uOy{Hu((FDrup^K zF`O~{z$Ws7iBAqV4|v4s)*>eadizxIG=~T%IeWWTcxue94C0{eR6Q{morp9@I_q&jb9c}$jgJbT@sDdbk=49>6#ZZ zicFf15l^XZEMgWxW~q!9$YidoxZ z#2|bF zHouQN(MUoB8Bm1eP4s5^{DfpM+O!N4*%slOJyg=J-P*Z2t;$i};Y;j9hWjELaEpqEsicB%vyY*=?0a zSdw(XfwD;1m0|bU`Jmr*_5qQuTsKH#1P15R-HC3m7#F;DsaBEMzQY&omwps(pmgKqdr$n`k~CK$3p#nDz7vmQKOJrv?jXsTxESOr(|Cs?k)`CcR&h{PvP- zNlGYfIT}Y$4>2XA`FdOE%mMF+c`N|;iN&Fy07W-rR0JsZ>>SR*(u5}jfMkD@(J7o0>?Q;_RIwn78R5}fLvCnZ@u zjsDn2e3QVmLgHD@=H`efo%}%gXG-GE$47~*@OodKlMu&S>M>%9hafWn3Kd z)Kao}^72|iits>3Rng;4cK$h%8(2aUYTwCxN>9-q!^d8)E-8mDJE~V|@q>`0YRM}^ zr(rEVmh2qu)}s-Q_8!d!Ft*r~c4T!>q5?;jG4M`tw_SkL0`tj(_|`jG-VMwrpizRT zUNNmC0-<08ju=R9+E4GWBzZ_mf5E#_$bzb-mcFFwKsAY#EEuAv8>bT=2ui{U8fi}a zOW~y!mXAk+-h?xtQ6$`WG}!M`R>c16Jfg-4sP2GAe|eTZLN`zFxS^Bv%m_AO{E|cT zWi60jYbE6H0@if}gr=*`+x5=N`~hO0>eviTK;SYYv}bfLZ8IPRFq@2!!e9))BP!~^&fh@QDkMK(RFjxK#c%XJ?F8vG@%n4`+2M|m z{~z=p8u)TLr3C*IZnH6!E*vqUAN^x88vgm84=(UtedlW08@<8v53K@X$2ldhI=zFt z!m*810lix57U>LBkoUBz`5$O?XhG{#+L1(VnzXL4&^g?A+B5CC+aJMCg!n>G*Roo@ z38xswzy(2pR2y+t<+wZtg1S<6?+rgUqEZ16+8mQ^3-v+?M4pHeUt z4~ZJy8gT{aA^-5?X#M{EFTYvex;>j-tl$6kpAR-SzP|kj`S%uyif{3s$N)rptz!4W zNsin6lTV^L9}iBW;+I>VgMnIpQE*3S7kUPH+dLse&)arAEqyQDGT$af$cO8*$?bf| zo1!G-m3uO+(|f_TvS0)Bae(ZL*VLnf*zhllzF`=Mq zDqK+5B;MaXqW2W3&B;kiBDU+e&3C~piSRNr*NUhoR4fL@ZefFy-7(bu)j52r$xVs? zu|}&!TuEPr>Mmm1Cr1Ko&>8n6tSj$*`IQXSWC$`^aMNtE*%!*W#7qa#gaR>=bNJb0 zE4xPjwvxJ+lprsje!=RCR{`5RJQ0BN%|0_Qq}L(U|6P&S)fJia>x{FyZR+;N+AD{pvW&NyD3gNN*d{T(vZq#iFgN3Cz`bY?^MP)>A z8_Ob1m!$F$|Ip4z*&AM)>Y*^g>!nq*JTzl?q85H!AP@H^GH5os;JcIyR85C1lns&0 z(+b}hJw{BRsC*7LQ}8G_9iq~jc4`)Dr;pe`};boKv^kSw~W8^-L$Va8F{w6A)6K_2E)YDy;()EGO0A9LKNlZuL|Xyzybf>mP9 zh((%E@aJcTqHC9gePDqKHW6h0daHA5=hpeH-y)V^h|$s%5Vm$a4@tq|43byHUQ^A` ztJtbMzNQckt4~B*ju4Gnv>)gE5Zx4IB&Z#tMDJvRFbd12G770Sg$S^%9aU@>%GTj& zJ)#s*@lq=(`qh_SMxJ0x)h`$f%^IXjsz z3*N3{Z|jJpYHq6JQBm`g`Y$ zD>12HIGJp8mO;H%zOUH$93wIjYSnOe;KMdX3>(gM^1S5>&(w%FawNfFw+nF0L0n29 zWY^FhDGjT`ZYgwP6~>H5Sss3L(Gb@pFv&5KD-jYqG$J2;eODUea?-bd{ zC-BRzyKMc*L>+P1*Bt{Dwcb)DyAgv*9Zw(8$^ACAFM714_s6E(0`{k^3ofSjfy# z%+#t6kHhyzIo&Jc7AT-AipkiMU9ZB{xd9S0haHNKO*xR#-XGnpiC#zw3h^i}OJ7w% zb1BaPydcC{%h1-GyUaPUJ13PXR0tOG1?3RTDqaDau>1pHo#GiE)Y*03( zV|3PmQsXz1H{a2_x#q9d>|+-F$V~5>l~^5C`D^4 z_wKqtm;Mf1qnbhG>_Jzbc5OcD7mT&25Yg5!UWUvq_~xQcG+rHXs<;5KB!QYfh<{Fr z@5SUN@jyR(d87AToMx79(8{g+O(}7igI{Sx+m>iEMu{}BXXFP#3-le4rKQmT_mq|P z=$ewY09w5EHUjO>XY}G;O$XP}*Ck4(k<)ByA#t+fErqd!ZbCW}6Eg-&wlrn#6KRKQ z*KjpcOYZWsoTh(4L3vNPM3yh@zz@`&+2|1ofa<#9_H=}uzMbBY;v04VHJ!xIP{WS~ zp z5x&Kt0rAY8@w*2gyk>_VaV+4T2BrSG&yRnU(th9-ey(K3GZ#23R^3h%Eu?TQM-NQZ zoLDCJANY34Bv`Vs@{5<|wyGP;FVyFz6AeWmRE5zhxq!`%bH1soy>M%&+AYTuD|-$N zlHm~vL#>>@jDH)BrWZs(8%X2rT)ouLsN|IsfGj#%R9z9rwzWf>0?mG)1Eejj2#TJL zh9~^mh9cy5>8al7hy>#5R9)TmXi?pHq%2wcaq@)i^uiWuy=erb;ipwBBod#*#o>@( z_56A;>Ohg+h_5bcx~A#dfXrzEQ7YF1_!UWZ*{;EfC9Qo4_Owaj<(k3m&~eRd`hPt9 z{eS>;ia&PU#Tb?p21mG^)-?K zc8F&Fj?e}q+QgBHJ<@p(f9%pT)ekACz0-mc6Q7AJurzblc|dkPZY}59o0HCi^NPFL z66-5*v}$jNi!Kcl@~5IW&1~;DXNSo|GNO7I^o<9Dr`uTq9=Wgs=Spx8%&xXu#DN8un6RN&8e%vsvp+g>TwA}hV=)DaBNG1a8jm?0qA-u-lwE4Dx!u$HES2O8m=#zNaZ9k zH|JN?jity8F{IBa{E0leTV*Rrk-7r%h-eXGO8K_WW_I+Kg|2y~&rt4Y)Ey1}mX9Ym zb+=nv8)16VWeIdOv|u%WyJ$(v4e|3nMU-03&yDB|voMn4ayr4p_Jl(IuGm$D#t4WR z+(OECO4RM_ygIIqn9p@1I?c_VLMz#!xk_;YtHD(OgjyXd$l{mI;wJpGFx7ImM~frJ zALJwA!|_hV?c%bRRF69S!Q^PD`MYY}1`F6ob-b6jB~(VC3BAiGd%QE)y*VCO$farp zA4!y2W|Dfu6Xqtp7yQ)N$(_H+(0~Y}7diY8&!U3A(E0_B@DR^_VQ^G3QS_vg7LUlM zY)4sO-Ve{T7VkdOR-}B2+n`b}O7BsWdKMx>E7QFIg#}jQpG)jWX+_SN+(ly%Q&(Kj z-iR0}-k16&w>67A$h2t{X1S%#=xs?baL4S@tp=irDUlZ68%3#&0pPCyA+9hm%{kvw z?)IYAJ7z>q2&j&(ZUu}~$63a^ilw2o@hOmWx3NjYR`e6>O&PP$T|EdvcLy5_+K^iG z;;VX7A^}nt*dQT=;EJWZW70G+i=nd%i#xyQzomohF6UY^1oPqPJ8q!@zw-3C!BgC2 zX|O;SdYc{41(DQhu!Zv^c{ELgRT@(#+7Q`V^;HbrfUr`fBRak|_f~Q~JRSW{J|2A- z@nkk(oq;<$C#Soo2WO|pyH8IZ9US{2BEt18s)*1mpiVZo`a`|E+Y|TU-fTL$xL8Ir z0U(W>Nx&Lc8h(3?iw%GBJtRJVc|+-65~eEFY`mxXh!N+&;K`$pMJo@{tqi+%$#d>w zz3kd6Ol$-qu^IgOHYYs%YW#5PHuBZO8-6uj}C0hwSd}dK3s4IDLwputSbj@=dJcC8r@7&$*QI&U?I)IqzJZLry1`RTZJD zBxf+c8sUmtAjzX-QexE~R_K7z#f^xh&_Y_#;lum{+}X#Yi{8;NZqY8TCFgO*mUmNm zQB!#KMz(ur+_}P9*(__DJxZD|lGw+Gd#7i|2m6P|2YaU{9~~8dJ;JrmNoqVEcV$X&%(HCSJ$?joz0{zQ2jExLcWkbazbGs zld7%a)Ku){RkkmFMNe?&%HdY1vU<@UpvVZEzfDR=STV0kLKcI%A)RUWGWb%=@5nKn zdbSF;1)PfGk$=9YRPj6qHn7g{`YlSCa?FQpAU$7 z+V$FB0*FwP)_PVs0uojReX!Jnx6`pnn>it+bxnCshx&G!2F1?`79Gq>W1=8&u-DLS zqAebF-U~GTPZApCf&T~~RCJ60LFmleeRe*Z%CnC1JnNj#36Rgdt^L6{m1s{Dxbr%t zaUa<&Z8v~q(1wbZ1RntB`!=qCZ+2CI((>?g^SFM$7)aiu&~#RYOk{sQ;pV*C8TSxS z!KIC^DaqY}yIdLmQnI4B*b8!N2N-LNk4JSN5vr;4LUo0my z{!nn45*4=2h=<3*{KWaH((MQR=AgmVZR9O7&RK03MdsV}hr7o@Bsi{=MaiP7kPj=VJgoKB68jgPSKo>caQKBznuOULwH{S#<6)EgdIt7Mkt|g2o^yHlS zPvFfJTZn$c_pw?}NMcKUHI_kCvW!QDZ6xk9NL{Lwj#!);UD3 zd;|L6k&3yOX|ChW8?A(b-*&m8SLw#2AKLSRt<2lCY+zqd2kmbWt|49}h0_Z>o5H+)!9sQue4=_}GJ8Y07QX;i$uCUT36 zTCwY=cq)KesqdvaOvHI`*?{l_6+p)2`ggErWWYKJ6C=n1nPF!XXoJ1cKV_oBbdky; zG32^!5?HkmW8>XAeh2!X7tLaPq=^&;utFekknZ|-wkU(U1siszlhK%igIRvNZ(=m9 zOAriO$%C~(7a0v8BUB)ppAnD=j|U=B7N|_*bK$$}+W|_DoQwz8dp{pYHSGz}MwgVB zTYN{s_)HP0@gGrOdYiD}7IdW(I9cPbDAwcA=xDAbQTs47y8<7FxQ;@6IJxguhzOMn zckMOtrGaV1QrL-m2-^bpY>{Bxxu`-|!PRN_4obmhz)OY*{k2y)vPylIt?|M6 zi_9qjM!yd9Gd25#Sc{uEM)@s{$BLkmvP7{%I7XW2f-Ar!cfw3C?-HB@$AGlTHtihP zwY-TH1E;N`4bM4HzwnH(HQ zo=0b~3^5Z(97sVwrZUX=y9|#*Ixs+Ohv+72R!e2m-Q{N8-T*IuZ+2z}a$X|KOs;d> z!5tDklJb{sdqvl4oS8I`VV@-Y=30CKF?Jbl@%h#D6bTnOJ%s%_vC390*(|d-+HnOJ zP@KO|G8tJE8G*DG$UJf~qvya)fqR#E_Z5`m!P}0xYff-?3LUDT)7e|X1xZQ^R8!E6B%0|~y}4t) z44!X49$?w%iQ7H|WH&fr499~6#{B*BTISigcBs_*kqMZB>IpytedqvoNQsxgfhbBd zDi`WbAYXw+Cr?Nl@SQ2x1-e86e^7A>D1pY}x>tz-L{3|4((bA5Ud%sTL$-UDWBiT0 zPE22mnNX)@CvwvoXYyo)Bh!X}wak4O9eq7i;a9B+WF{yZR`8)1uZV4=7PSj&YKe=e z24UKbla;ahY>;(KaqXt^dp8Wr)760*Xfr%Bc20F_gLGvT@<4>aUH_wVyAZR7>8I zP96cGhbSu5>Ba5x3i4^8!o=tfI354960iaZtZ^uaDL~#zKreIwH-bNO>mezNgkUzt zAhlV7u%4 zQ{=jOP)Hpl+>QmAwdlYVyHFYk68j8tVszMQFf*^OW44+cjd3P$sWQtc1G=0RQze5w za#ss2=!rj&5ypn`dZu*HY-Mlc=(H$nTmSAFar6|?<41g(gpo1qcyW7$7wr1YJnzIW zitponkAuT~p#TwapqUIo+x4`gC|>t)yhBHyt9816_?Am{KDb3>dh1)dh2Ze-2e*tY zCpEl*G)%YR6E9Qj5qAz(qal(Xn%khVnUOL-Kr!XU5?)3Te&z2>7|(I;r!`EsGutn> z@KOc`Um`vXWo%7ZOY^UM>RCsLx{hRQg=?GF{_%BUMMP3KNl-{lPLx%bPH@oV6Uizv z9pORPWZD^aBOa;?9Fj(3N(){wUD6FK$+~rn+tovaB5pw#NcA|~e&u7DitW@xkAp)e zPxCiFP}T^|7E!XN#_~-a>|D*e9}bG;D_)L9aA{Dn$~#G=Zjg6$(QaupoMwtQtYS#` z5a#0;*vLHzkPJeV>w0PY8Ci9UXTT2 z3pUn`Db}%e9+`-5_0&Y-I0chY+%w4G@xF%RAxt-k5E4%6%;Z+2IIZKrlqG$cv^WC3 zVBoGoZl)jK2nkG{&C*g2gu?pHRG@)_1@z!ZVQ!3|XeTH;!EM*DZ~y$y2V1{?{a_od z$dikT^6euS&4RGh}q2>vhgd-*)KmBWd1tK$M5tus3|SoIA~U~d#B3H`Mq*~E(o7_h^{&0 zF-vemZ4neWv0|sV%E{a?PEp9omD4sw7|r(J+w_L@(0ophC@;EEFfQB|<~oB^7j1sx z)lXZA4!hv^fbrDi2$;)@KA*`bp$M3&9E*TwEhuCBAj7|t{A`A6MPvS5^}Cmye6X{% zefRrN^6uQGBMO9$mxb4_txF;k&MgqqRRICLo!wla-}@XNKFP2YBN&$-laH zmJhpB-k{}4eBUv*c76%Dha>zLSL*WU&=X%Y2VM z+{Hph>h^pk!!`*n@h_Zxjr|0BQTE$;+7mwGWEFq=qGeZ(9nUhXdKVEvSC zEB>oZVn(VcBJZLr5C#7_cOcQdeZuO*%3*VqU?Iv<u2!AR2wv+2eC zGFO^W;W)|X6(y$cR#_x6@Pk!+{NLLvai_ydQOX7s*Ni>u+Sq!wr@RJAk~>k7^>Wy={P zB4KRHo6QtL9Jt4Q)jPk9o5J8?wJV*xY0Pov@D~ZTse#&53xlll1p>5T`mhnRMKHQ_ zpa0Ki+ha;lV>m4ora4sr+H&wWs9Qf3Z7xH|)xP<&$z}wQ^n@ zivz*FFRN`?)j;0ORJGtRDm|r@+nL<^sYScw1P?o?AT86`4`F|>jhRlCp_}E007w;# z=RgzdrJxTd>aw8UDedfM5+UeYuCF^|W3LO@nuDcFd#T)~=1{S-U@g_R%Ws*q>$M&8 zVm9Oiu*e)eeSTe*k|KtrGi)vn^O9Fl%0cryoI%XIqfLJpmsowKv9NjVcjxljRMN=P;>N8^WF*IFrr zya2mgl}wIqrA?J?2Q=U@gWpS!donrcXa`k7j81`fq~({Wv-j_jh6H&32U4h3DXn?s zr!k$Ee8#Df`!A#GH2Y*~Y2+p+;h*p=(FTn-X+c5&nIkmw;B`KL?UmxwqjZNi$}F2GJ*C zi%JAa3r-mhLa_qe$f2aUUU4ZEWKB*EK>IBS!sfwRg=N>B{=$u$y?t2mr1XI-hZQ99 zVUYd^RYXgN5JD9F1k&g!xX@M|6eWjfylMoO`!vU^S=k3h=yW6@@M=6Y2~%U0hn(vw z|C;pNJ;zf-Q`Wfu`AZMEpZHAry6 z_kDMj0dS>j8TOhLBI3$kRCs^`j*JAtl}0W)sW_aDhSqR7E4hqGR_}+ko`5+r0W2$4 zy;r_&#lCJ+{ckRdd0Z)-7;f8iC zr6Oag=i?(LHF{_ypI5GRX+ZC>r$yo0OkGkwNxxSbE6OU9C!Ha}u%%N(r|AyW_oJPP zE(Y>=kW(ShZ$9M8){0DMMJ!{~LeuV|9rBlFxcj3^h8_8&%e(glI>@Ln*@7l1aim2? zIo;`tV^j+0U**yK{&ksexHnxj>~ zu>P5X*njGeweW1x50Er|+`0O}Mb^b#`$By|X{I0D)z+f!ghf0zb6!nYRyMqvLvC)!qsqA6ud@$`B6lY>E8lc*adpSc?a3$22MOHpdN*6$-<7NN4(S^D3KG zE8t=rr@xT7`5cM_`kbv?A?RcI#2QIdW*eb$XM0Cao>6+2$ZQ5rBs1&+f=zmo#YcQu zX2|4bK+I)fLw6;}ZrXVXOZYZwCcmP`9g`VK>h-6s2~raEQ3hptnP(Fezd(9J5u~=e ziV=}OW?tUAnXF(&n2$>sN(tiY(0R?j}%1<{kY6AWsW@cVjKiOMx$Y z#%vH24fla1?1!`sl;=(_$D=nBYf>J;t!eM4%M#R(xTP^Q9qw)3Th4TFJfqBPXJCFQ zo(GzWBelzwD#RA{D02$tc7_qtkCi1+`CBqtihZ2@O5f0r&P_##+pUAQ*HU3Jf7{Kk zsW2)RRhkkKhQ0~)8#15a@SC+gbXX*1Yk8?qmM`Mcbg$=v7p33{Vgsonp>$!54B3U< z$3o_m8Cj{tc33}D~NU&*> zR=UZiB^7~@EIvJ$QEIRsQc{@$Ap3MAe#bMh@eH0o3(1L=G>OwvVNHu;f^H?|#e>(U z2^Oe%HAfr5+uHtmV-x?k72mWBRD%XEst&Sqe{1_5Msm@wWr~(Nrgn>l4j=pmoFR5* z&^?M^USSK0blc0;Qjh3jhw|7EOU-s)80urfV8b{VDZ#*2BPiG|OAr7}76o9Cv1DbMw`omuScH?q-HK@mg-#AV)D_z^oEp2hRL-Kzv3W3h>D5RN{Wz1ilC{0$+^6^!F zI-x-PclOF|(VM8vJDYz7J61WDxJ+;0l&aQ;tg%~n%4w@A=|p;MJ|MZ|n}DI|F2JE< zsJ2O*tJ7OD22aiU7AF?cb#oC5X(rbvjdypV5OvCvRG%lv42$zDCae|iWqU4^Ff5N7 znsIYzG+LVEJu|XBX{MX(Xc2)q?*=u`T6v_}4O(hdM7Hm5rufMapEZ=@TDUYN0bp^8 zG^y(5qDmHFlBI60egFbRSZJRH)I97Vt!EIFQPPy~TR$K6hy7{4Gw8q1C6q{JAW7qTcK5}#H9g7@Fl-(;P>47{>S)RfeJvAl z<8AX?aghN4+nj}oeM?p*Nft%Pqo}=Y8sKSRSkxOVD*{BEHIvwv^0Rz<5~BcLNHBgc zs;VfeoJi7OV{|4*NbciF=N0aM=uU`3@#r?Fi{LBHQYeg<0jsYj*>p5=sIAn-ig-vA zS9cSClpdy(VC2Vv8FB(zY%tjV;SUEVrwtin#~Z;|53Iqc6si^kpd=4iS(|1+I{vfg zCkMyRe%i0oLxlwuESQS%DQzQ#wV4SPm+`oa^6I`+ID3EK8)a_$eB3XI+JH%ox=I{M z%$zY<>f@43;liOKVQ<@y!`=*? zF|MmCvxWgv9NARp(?WTi)If?UY7-?78i07p2`Jx2m~R<|H^~NzaYyYUsN;gf0b`0I z3g#jYkiFlj34v%FPLVczpee|Y^M6vXLn*Z3>A_D?Oz6mEMEU|k8l{Ft%CV;>j}DH@ zV+1B&UH1mdTO3P}1{?)8FQOLh*9^h1NO89}>kP~^WpO{AH+YV6m&hZnlg{*Zw)ItZ zgz$Z&$J)%czTVmXdS~k%rN{E}FA@FIO)-KkC(?5rGS#vsf4xT)de`Z$bUYeJqw8`1 zHRhr?mAC7NxP1VJLZK6yLmaKs<4@_sg~iFO<&yIpo*b>;zyIYo!JHK2XLo*%&_mJ* zcJP49n+gjHV%Qc!3pC04cl1!)e)ok0uFj}1ONP?pSUp}im@>6B1nz=Ssz^CGDY6v} zkv^KkdnoLV9!S$4%80P%Pz*(b^-?PlV3-X?m*MuBTnQk;Gov~ZNN3{58i~=#k3WdH zd;I=mMBz!gq~%$(QKYE~lfBOHap!d|Of+~0elpvWuo@;APnlAQ3Mj<0v;D*4vok7q ze`jNZ{{Iv*lb!@|)xC|;%-5m)i>yr@&+@l@WIkwfp^Gny5fQWDpg(-2UpfV>@E|6N znc4Ha6|rxZdX(zhCjmnuwF%P9dy(K8oAgmW#{xZX`n25Y^%LJ1ce&Mr)5Dw;u ziyO{86rl!(@nAM%vJ%Q*+;T_2n-VXOXtc!Sx) zz)Y1TRUBdV5l;*kI36b+Uie6KLzMI!MLt5-_413(Yyg=vMNRXoOvtr|x|l8?XOi_1 z37O}w+)_Lm1s$kpsCzOM=9CzWx}Cu#t`Tc zhAv05K@YN?5_e19Zj__!c32Y)Iq#MM3R(|G08t49kwvdmyp)-;g1;k+0XSK-Xi!_g z_dXzt8H_3+NoZJ5=b+>#n>BOMGc*o&QYtGEa=`se5;gSbWo-Sf!+k13FoY;EAv?qvL+ z-NSLXJN@E+>F@3^{QIi+pgqJ(+%LY(E(Z^K`M24#$Ing+Nezj-qtw`Y^*-w}G@Fbs}jws@e9yC*8%BLgaen{D2mT4fKt8Y09 zZ$lS^GqS`DU^vuna*tZ!VH{uPOrB5jr}-Pc(?Kppy|UpkewC4c__b^JKInZtr?i#4 zu#xm4cEdQ07m|pO`wyghGCP+9kK^{*wa-pe3$aM*7{yp*WULeWxfRg^d){uLTQwu- zrV}?XZ#1pexL+qR;kfd)U64q z1U-;g(LwFEslhBLFVWv0(R&yYRV=onbb8hqcdk;aFkdDY!RMrKAjWLF1qPYry))y& z4Xrq(R*|#fpDT;>5?s0F&W~{Q=R>?>XyYP^xo`uyA)LXmApgrHPfx(EQlMG*v9%wy zS6V>saT=ou5~~tR%2a!Nxl}%m!f2tZ5AvwWVQj_)1urF;uVdu`*z97I3docH=FJAq zhLu@!lrn?1ak9k1S;t06D>96E%u_3$QY5Bh)(7NTm?S_)pyAcqhQ&3R7L>-M5x7jd zB|xP^d2ddfSGwLs{O;ipW0aL%MB32Bl!>v^_~adO5PWYg zTJF^1YDHnq?3RerH|!W2;2j6;=_PIlX@qRhK_P_8d;&?^n_XSK%lvbjT=&0_f3ndz z<gN5|Se>!kXwaYF9Y%aUdPs=H$eqyt&LF62}>Chv`O? z#G@IH^OJJq&Nc2-!RXx)_`N$FyxUNk(tny5Uk#{`EkxW6KFpB=ZTg&yC^`wGj-A2H zGUALTczsxsAVDK@lN)hh+%m=G5#_a+9sPx_Zo(95I~m80XpGkm&^JTj#I0;U?`B)y zd~**`VyK$v6;4F=A)tjfygPJ)o7n3r4m}COygr%fkrXDwsUv$dnhkqC5KPUaoh+z_ zb~W%DnKD-QxKtc{^C!*(^4*`V@(IG*zI#NmLqum6H2$CN;A8&$Pj{r9%RL-AhYShN z8JVC$Dj)*1X_A^j{(dITpH}2@m^C!FbpW=Z{&3r9 z(PHv^&ojhD@j(-vz|u<)YuY1)HN+x~cV7~9T0fvKF{?MvPj-~B?OypIP9WW5a0|QYmKt{T zxXg#O?!gY?*3N}_fpGZo2PCC$k!HMwzN-Fc?LJ|~790jLk)-5NrRO|TZGE_@wwq1m z;Av}P7WPLRzu*~YG*p?ycO?R-inCDRMr1-)BDln!bt(Vv#mqi3I7D2hh?j?` ztG82~RcOpIHk)D=mkUnwMMkCOQDx$ZpXB>BmAIdtM&O0{>_X;JgX9k~b$4;0$(xDi+hd z{=c@Q;AvW;_|YcFUJW?yqu8|bz8d+`WKFj!aTz+hc*becUndj52uEsae5HAGSPu{Ge$ah;V1sM4Ad+)9j;@Uw`Q zq|{GOgzF7Pw}XeLeaHwy1|%_Xap{}EjpU6Zr~_hJSC~XE=;vp5Z&5{lr^iiYhGw4d z&*s^K2c$WQy$RTBJUTBLJJ$PtDKmvXyF(f*$0`TflPm;QsWw>TU~K zz#9Y+qd2~g|9|%0bv=$7R~!AGtEf1NTS=^=?Tn+0>?pRJXvU`{$t$xa&ZDQLZb?09 zbt`?at$6(ZyP&;qVBg8Ull{H`$Rev))zy-m!(OAcCYHKM5Cj1b1VNy?L{HR3CS#h5 z)FFa@6_;Ao$=15B%5S0NRQ3V*$yWMi@;;Dk$H4X;EaZbK^{RR?m?*Td-x4E`RS@iU zXZ;rJ6x1DYg;F9#BY+AgTr9XI<8!8N;zp_t;P@8N?e-VP2fMr%|{N7(lql zA-u3?=X&7~FW8*tKl|1mR@nnv6sqnGVIQ9l`6LhbM)uweClErRcL)~Vr%{>zyJ;F3fk*gv1$-7IjC-cP`XOKT{3G$jccn zB_pgB2q4)qNfkWXd>A@|wc)!WENHF`}i@5@2^HF%8g87nn`ci3{of`mGhOkFFz z46Cv{;jQ#Vwu`hp@Canc7;@ItbV0b|(Vn|%iTs4 z!((O5oMj!eR)dR}jtk5mr|ocxt>n2-yQSAonXy(ydd3A^UFfqM85fsDxy}Rn*m*<)H1ni05yCK z<;B*E-RCbJ?>u|Nqf&y8L3}X?>kA1Lau=QV;h~Qn3ALaZqpcJ&CaI>#MupWVE3bJj zaEo`q2_A^%Y=isT#X^Y^Vfh3MXrj_t&BJiFv9V~)jM)?-)xn)%w3eR{@x?82&Q1;< zI}`RmeEkPMv`0uqYyO>@gZ(yc#;{b3>XEoDgbgC-taJS;unD94)IJQLi&FdO0yz!` z&*GwsPvwe7k=Dwa?lJyf|L;v#{<6>H<2PN`;?41!<;hzF+7e3cXsb~PcuIg6Kay&I z^TOld=n=|C^@r^a2yLA3N241Ng#?Z-#s?tU0guQB*z*=YlcZ0OSs_6nkWC4_K*$Bs zRf&?Tkd#RKBTxdn*`@uF&lRorAHDzRuMf^o&p-NzpQ1c94vQAXxz9%%uk88`9%kO_ z*jIP}cQzcLSaiRyA$(tl--`c8?-%_Gt8#;FpSY>~9U=I4e&w(ISFci~#LDe$4tPPR zY7>)L`TX;bGQ1r;84ag!Y)G6bK3Mtas87ePYe^a)E&)E3&NzD&5k~)DgNKL=`{&McsLTx>b16uhSgwJH58m0LGcZc6o*$Rc8@I~7OgEv=k&ZvBwSyxr}{1w zl-9%LC;8GXCc-^iTe#3apDgV%U7RKCJG_A6D5l>-td72GU0W}GMS<2Y5u9-=W0I3% zn<%Y}wsomxN=+@%p9{3q)+fLA&Z}BJ0rFEsRcgx)a$|XujP%5Fbxj?p7ctuE_MLl` z&Fr|M4fBc^Rqc7FG91hGfOct5Cdiq?v3vUHu6F;g_0#_U ztdCFjez?2(&mTG$?SJgv-TALg6iY~Vl(o~YvUJ({8WJ=v-9h?_wH5xiv|^4R1$!jU zr8u1&FO_KY2-}(twLgW+aP2Ox?O$uy@9Mpcwe^kLYsrL=`|T6$_7`N;_;U5AbMI*V z-kr|9_VHiZo!hJT){oa$zq)&Gy;Gc|MLyb?b)m+^o=@5+)B1GS5npNr&OrFi-Hr7x zQ#iXLfOZX>(r<1r4@V~}5Yv?(e)wVKMR!Oiywq1Itk4VQ&}}P#Dt3P{8os?)VwQ0F zi*Zmk`pOf8;+%MUfX2s2iKbAIjj7m%oD$lB{U^xH$%HUE1bya6Me?`d>EO{2*-4%vLnpMs=It+6SHI4zx)Bp6$K1I; zqO04`WFPGGZ`z|yNwc8gV2l?uOR>NoolXZocT4>6-|f+b;`MoP#Q*LYsn?cQ;f(Bd zz@PAr4u7U;+jpLKvE?Qrz-sp(8w$rJ5+H=1I4(Fhh|ah6+?(hvBgnBe=pP*h1l>eW?^X;t z&J_-xvdh)ikZs|D_?>>%4NG$rqTIw3w^MMWA-Q1R>U?r3 zn^1oS*{=h8))>gJ#K==6k9UIiGk%iwxH7&0aw3ldst`_GV!je9^i|HLdYc)nWSIqO zX{LDO@B+41+&(aJDgK<}#YBU-p~zF!9MsEh<(!H%6sG}}2!|k{sr>D(Ch;_i=_YTi z-pCLK;;{frT#$qD`7%fK%n)%r?>TY%a*mtMuCFf4=Vww}*!L;NajvX1VJfwJ#c`m? zS(qXwAOZCPASvZt1i#MShwuw30d{gf%-|603b=%omu3_IujC2TNA*Vs9mHgW!7sKO zC=$@OQjo(gqZwz3TUgw7$!iX~<3iKwX$SMFa9;bq^J>^uNw!K_(y!GV>zfHJ=|2c* zsn>*gKudY?{XCMVpB7vSoi^&f<_B|<_!?Gu!B7i9`;|_eR7(p^L@sXxOon@iB5B~4 zIyi7m%O-%A(DKPKpje87YPO5e*{AXYSRqT`atv`*Lq;8xUY^%rl=iFsV~MA7wb=BO z9(YqPF$smY;hZ1-iYoG9mZw$EhN)9`yur%^?szKESi}ij^52k8_|tS5V!-xPlZFTZ z;-y7$eK^2nnK8&Xs}rcPNbPM`Ei3MtF9e$|!UfEqvzX$z`l-%X{i_+8S2h=~`g%~< zBWdZnur1F`1vT6b>`3^ALdS@fdh#7ZuKtZy<-?QZH)eHQ2Iy4)ZGK0@#Qj&G`CO|j z2tdN;A75Xut`>QxNm! z^VZFoN6e%K)ct$6d%m>Q$18KOW!LWBEqH_JM5fmmN$=zUZq|CCRcwzG&EhL9QjXyU zZY}Q8B+hXPE&dpXz=AHVWJu6!SWFF$X|$5s^lHl(Qj>~|KM}`k(&C7BT{Mi_sicoZ zhL~Wwt5b2x8Lzv9uBkT+C(~bl?RS^p`(fT7dCCx;ssq`PAO#5^;!{ZZWrkvN&59ye zoW>PYTj>60%Hxopm)V}#*tj#mG!Wh@TDCq$% zPed1#-GF|sX>-ycfIXx@s2|I0k%JHWTn{UkU|*hK8qOj-+<<05>*i#eOPZn)no#ae zH9sfxWeWTii02=GHldww+?;gSZ$lc?bKG7qK-jB_=W6z`6y?g$FH5-ms4dfVU3n^@0X5<9+ zEem*c$6vQ>;;xCIUBhfnT-Mp@C(WG12~tqXY=fY!1nz4{abV|^7;W@FmK=REmaYzf z^K&ZI^P^opQd}JfNGI&`s@4)pT7{j;flfFFKyDym(5o6J2(Lz1Ew*HcTiMAO!e_dR zg+TR<4L+bgc(k>TCsBx$n+%x~V6nBdmLWs&6mgh78w3w5GkH!U+V#z;J2;t~&NCzF&}=^P zj-hr!2JHH#W6vYznUHm9Hl^^zMeWQy)N7kt@RVbY=>@%-&2ZKOk-Aw&gI(LipLXuf zF=4cBHqq**EOk>9@Ygmqu^i`^oV0H?y~^h{b+a@0*ET;s;+bQ5Y~E~k%-yn*d=peR zJ%xYu+0k}uGA*`iHlG-T{1AeMe$m7=# zOOq1ZfB;MPC&R7LsC{uAI@H6Ri|L;6{>d%wc|GrnD#jO<2;JR;h)E2CX=IfTL5cI&dxE;ay$PxqJlkI9Q8)n$63nIH;PE z=nY*R|82MW+Dtz1uu`sXlgr1lbf?v(<~9`>Gj&d zdQgJHgg~{~j@`=(aBb7{VsH#t(`Ji;GK^K(E0VMEz^}euKfHMp9zmL}U7_1N>sWVw zDS!=@Oc1-wn&B$Rs#!LjTi#=iX$>S9LTR%B)8yd%bjW|Drr3CFJSIRgoFT0(slhqR zda_n&;m+ZC6s~YKP%N8LQ(ISBF7eJ$#~Y3~r3@~3jU>bmZ%+dX$0OA1a5skAAMzYG zZjk7b{<1{GQZr7?NZ2p{9jp{|s*XnZzCCv6vwc|ujgj7)sbs|9&K4C55)3~r3FV0;J6{!=g0xfuQM(c zu*C65GcuK$-YbA49S^3c<=5^c=OEvAEWM+&SX;e)yGRTaJm_`~;$~~B@NXAKlXf-3 zIS@>e#OezNeYyLTflCXea8gZ6_)XfQNs=Z=Wme`NO@`#CqX(cBppSK z2#~QOS@J7_L@J#$B9J0uvph?B8m>4Hs9YDY+v{oye-Uqwc50iE?hDe+3Nul~ z(wmA$f}Q!30ziRvUqlB0r9>#-l@ysl&CakpK0t362l~y?z_>w zrBPyys{VJ@n)SC>QuTa<2(U)gRS@9*qq|~ZQxvMe#U(*WqMlls^fPn}6h`(E2*t4v z2X1zXLM}|3gi8r6$znAHURNlQ%4yDprm{7x7aO%P#$Cyc#7stzEhaM>VJ}AL917S> zf=`c_u+R!{hz>wC8o1|?aTi-1(iKn6kOnks0mc#mlJ;hppD0HvSK z&e7pbrNKKtU7R_TTXW+3a;BhPDQMeVmh&uPd>B2|~p+HczqWf834 z63D{1*Y5CbL?t5(Vzs*Ym9@~Xpw?a;2L z7)JR3VXwSN;QiWW@@bd=YwNcwjR4)Q^6tUpW5Y9V65qAUAR#KDM!(_&;!M`pFq6x& z1a#tK5a1LRzKi^7=xpkZrQ=LSLJ8EPX&)@7?K#l3u#lel^2IZJ;ji|RcG@LQpEHzI5TttGgg=0~g~ydl9z-OEZ72#fft$?(WO zOlc@gAn27lTHf}V0%^%d+;|CT3<<4SGV~M20Dh}?A4u*A2T;pcih5o~NJl6dAz))H zsdFS?JXdJ-EUAR#oEl4 zgJwHrjPT-ugA#TLH%r}xU8|zWQ=Uu}9JPTR9C3+McE0SA{%brO%rrt!*AhOhzoDs9 zg$X;v5v@quzpPA9th1=P#wN+r_OmuE_ld zUP`-fQQaOz&-^!*B9L{zsLtp}-{+yeLdAbMq;%|G;pCKRPOm5j{&4{rd;Rh5} zdW>2`oiWtZt?WnIR{j$V|sWEe|DjEMc>+hP4aCyP_Yy0r%{$C*+ z_aPa7W!c;Ne_i2c(G){H1Z1oKrhPHSBFhD8JKO7> zAzJ(&PoHe}yR4gr@=aDN9uTs#?&NeB+zB}{CnP->CbC$!&(0?oi;Ymc`f~mLq5?{8 zWLhI4Lx@SggZnzUbQ9r1Qi^egCNsHfh9m`ScWFT)*F_BG7T1`^iO{U-mCQGagJ%tuxEYTR>xk`|!OK;aKs0``5GN0o-r6G&;8<{WUyY2)Yt>M`=D@=}Iah3^| zk}Nq%y%XSm(S-_Hxf-c_xpi_f>YlVG z!x5^eo}IPxzbS=VCtysiL|XXvI=Ie_)lKXQ$j>yoFbx{aVlmX9ZTo%;Z<2%K$ZEzpP ze=KR40uuaLsVpn&Xv{zADEwQ<*CWLANd-;E_rp;^#u6?5_;PlPQq7ZWtwzikXPGgv zP3ujsGdax;KdgueLKG^IFq1ptfX{L)@CWeta|zoYlhjyyidjJD!eS?g{9DM|i_`N; zNsGR_4jKCcXyR%KR7;wtfBdvw>w2{y3xzM%bx%4heW9C`u5i>x0p8JmM}>a+rIn2? zmdXvHIfBjRy7$`%+1BL8*K0p1uBFN2yLJ1nG=F?|`==jY-?8tD^CVn;f7iYbr}{hb zeqtw?+W_>YUtoXDD=NVgCdLJd$-!)fETovMKCcUARqLGtN6tzC7S_m|qIsqIUw|^1 zu6Ue)U$weK{V!%k2JoFZSz~$O#Pqn=?RWONIJ44xZgxDmiCxf6{=bOFvIu0h&4-Z@ zT{6Yv^|?kyefD_dB9Pf5?~Fr3v2=rzFnU|Nj~`~YzqczuX z^>S_>wXD_olastVU~s$4eUX0C%$>8mrpVhCEaQMdHZ~qV-+g-Ua`(yhvxmiq8MtJuwCA^L?!s$Y@ z6ePH{;*afAMb;?_okf!n2D~K&82PzBsm^$Y#1x7GEN$Nv`8XQ6VhROFmzqKWMuRCh zo=xOOqh^!(?+KGbi;se|usK_=sR;{aho1b+mLYHH%?7FVAk`GcO<=#mI>JHa^}75Q z5qSk0>Hqyd{}-C`hr?5fJi$XQS2e@*Jase30aeZe#}v%O#v8TYOh<^QrwT(HLt$z~ zR5{_>pWgj;_0zkL)ac>dJi3G_q+*-3ybWfaZnK`Zxm|4Y>Gs;E_wIfAEi6I&)RM+a z`>1=~$Jr4VhO*ir`Ls>Ux<=AaazKo2B?j5eV+{{J(oo8Ujdb#*h=JMyse-h5^lI3N zg`Z?ec8SiZWxO4zGUnK=l8P{}bW>Aw0ITOn>eeW>eXG1&GDbj>ho{}6pEF4SJ&ER)N|KT(!IHe>%vn3RX!Eh8%xqIc_a?`o ztZs5$@r(SYjbG%8+mEGzlg7>0YyNLa-sbCd|2L&<^Yv}{`%Y}M706HG^2aIlOYvNB z4w=p%P??I^kE=g-fD1ww@=ziZ5{uf|Bv=KKO5dz@^vt)BB-)!+c)Y zW%HB#q89v%eAUqncao2}48c-WO%rpx^?LnQqZyI*HL@u2Nn@94O18)Gi|**}-9+k= znlp&3F!Tw6cVV#7*T$WR?yN{Vm0F0at-8tbF;6c91tU0YX3N8;dmZPnOs)<_EU!!A z+&Oz~WLBG;(oOwUaM#}z&rKo;t%xxbLNId?o?-F39Wke=`b*j|=QO7Ps(0;bt3&qK zL`SY*rPD>ftZ=;Om$l9pZBpZa(FPSx7=D>MV&cD|Ej6dmCHA#Q$Iu0{*}f_6md!){ ztFD#JBlr8=pEk*u`H;<*9G1kmE9;B^-q*cOw|p#jm->?G%C7*9tC^EgEv z@-s^k7dtIP+apj0t=g;sfS2*--BBhVN6^f;_yu$QWfLBylp)AbTfYQ+L!TV1%2r`b z3YJ{~(HGypP~dQ^Tp&p07r8n!Crf~@5GRjQ;NT9)AGsvI;J+Uf(N6cMhXiji^?HK{ z;oKYv@mp>azvaVv{Fd8k-yR{g&|AMf%q@0)fh&M$-3r95BxV<{co7MLIl&lDQx&^E z@Wy{@sS0Pg7|d!@e2v0lRkQBJzmtiRcHgkF1eg^bvCo0icuAu zg68HzxzVaReZ&RD(=56aX-{CPkp2F}qb`{Ghu-AW?|uP3|IHI>%>{SRG(w&GGMJwK zJ-qqg|M|Z+<2aPW@xg@IsgP(!;_I62n1E+Hq{Cth1N&Yxx7ly|?ZMB%e6BL}&?HG3 zbR-P0&10ry`NE}^55!2(+24xU(u01gi|e4r%w(di)j4Rv z*Chc~8ymHh5Kmu=ebS_^p#md{R1kMg218u!U{us18V;VeM?aU1Fj+60AtT%vX=lPL z5`id*oAA199>!K{C5wdZFEIr?v_QI~$@oQoI^MfDI~+1jbMG8x_+>=;H4q2iiu1Jr z=ZSB+AdmpjL?Cn0KSI8k0Wty%kkjg)-4Xt}1m%f%H52A666nxH_~sg+s^=u4HcMad z;1@7QGUF@AE8A%?OA_OIWSa#iM?0JN@XGE1u^Gr@{7SsozL(n>*rby0R>7seZt}mQ z&6|KzEuW19NLP`9aE|mIy*^x8=FOjbPi%3!+dO-`dU$)M_vGQpQkA)Ut*#bb>~U%tTzc8)df=~Is{>riEsCzwB`x0 z3@swa0K)A{7{-=Reu2rnDdxy5LdmCB)tRO!t|Ggg>RZs4=Vjs7ZO?ax0?voZv%+Y$ z8W$;vLrN~&fgDKQ7x!|$G;1Wgk*pqmEIuN>mEAUes}TeXyWE=|!p>#j}5C?7sQegy4SULEQ@uu-%e zBj|u8WCKE2c3kl+>Vc<<(V{C*T^Tn7atsA`ArTf3p6AEM_%BciA!B3ZRIUMOgXD-A zth27kv*ARqj!7geifgZeSVQ}V{dVt+Pmjmbvu=kH;??TT7{4+tS9vKy*-Vg3-aiXK zf7}Z&E|N7+79rg5ieI}Vz}C%7A3#5mWRN>!lf?SD*xpa=87(lblI>}*g7edwJwB?M zVQ{?D?K~d{eQlaZ8Ek8?L<$ z5E&bq6i>gH*Um_}B-~IC2^^=!ld`c7|JGw1W=9XjC<8b3XU<7i~* zUy-8DT%3m&d>ZI0So`O1-X=CK#M-;cCD?*Ej0>d-QSvX5O%nd@phzuj&A&*<(PU4Ff(S~AxnbbMOcj&p>J?i3CvE!uxrc^h?py1`5ycvRYDlyrcE}Z+od6LsE z)c2-)b?(q^t{-klg(|z2J~75Q1%asn5&-o5{Os;I%STYwu8M{Mm>Ug-%;eNqzbYCA zAV9;fM{)IVSLvRCd)1V^!TTk8#c?QNo}<21mH129yn4QjK@fK%cwBh zPCdDZ?SlIr23c1WndQw0t$%5V7z8QCfeG|!*WGwE_&nQ#eaHtPeh0I?h~~P79axzH zDOCA1_uIX}c(HXqgHe@NFl6W4g%tA-7Icj4#J%r z!kx=OxSK<`8$x(5EKsx4Jkm4Cw{{ZQ!OfZ5Yw?7<%2X?ED zttJdS708)Y@(TPe2h4gkavkT(%Z+e_fW{L&Cf5GrcsiGAx6Wo#SUHY*l@0@~4&cKawO)C!qs5wS% zGcJnnCA_R2L~8e<$2hqen)_7HbbFv}Vqq+VJNo!rnJjuG?mtF4BP15X4VB7(ih%!C zk1sW$sEOQS3Idxal9hdng?m$%_2~miPc?7Lr35X<(_ZBsHIHAR-U#)_zv#4lB|9>; zk$o8Pag~=O7$sUL{2_NA<@gp#;~Wx}Z+aAl8e7cEKltj~u031q;F@b!ZPgEDiN&6v z$HO7l+qp+^odz+j=Kv?7oZs)c?iSt=#WN)Ij`Qz}r#C-decQ&}w2tdPj3Q5F<}8j{Ycf%F(jq)Ylw4f{9l5TBfY`y! z;fPN%XSRF{h5`GO+o^**kB?y%AobuOkO4QaWGzH7beLKhM)71c>@(El2!YOw#(dL7 z#HYllOz9p(p4d)z`Cp8AXybbRb3A!M;%dE46%Y&=aa=pr$L^TP6p-AV>v$Rc*cF;O z`dnejQz{H7(44#iLk`}~9`8JUo()HMSGb%ZORyIZyjuGlBWTb;hG-c+pEbn!R8T5l zcARjzNw@}xzB$rYTzH%~>UA+X;Q`DM-WYP^ci$jl(dZ`WRZ9U5pS^eUdOE~2e?MD| z6X^^GEe41DGDXcF)azXGjXF1U^QRLUY++$`R~a*(u&X zqLZ)g$cCZ%;F*Hx504RI#3_Z#V?;ed5*(&SgurM@Q?K32wV-SJlcM|_43L7!Heg+`#9CzTU)=QZWsM}cl*CyZtv|M zJlcM;^K@r_dlzkRH?oAEAB_ut!gYwn(1hn9MwkPa?8R_oK|ulUiFov(+PecVpXxDp z=&=gG3+L!q0T=HU`q_>xf{Nj2IzUx-rG9T6iUb)unhMY=kucpl9iCoxctKl z$qFZ_wa}IiHo(yR?)ERT@#%EJ zdgCIE1$~2H3e>cPxWN%m6_#4j5(PRoO3Ac^E#Xcrh!-3|L%-3LfQibm4dI0B=1u3B zx8aJ{kL8P2+PJpQLw(}mLQXY)eppYie*ULMbza(z3_cGCq2(p5ezj#6N#O5x;4 z+mDSty)gh%ED_gIxUM#YO&-~iKSmS&Y7GpMGUC#GDWQWLLnjhjyQG4KXeQN?h4<-| z$0-Kv;LM;4S6&C%fh7?LALCP%JM9fUjHuL%yDkEP+^25;RBWJd`GdV&{>iom*e|Du z^>~foE;@xLs3yOU=ge#b5&MMS)w*nnjKxlZa#yO9<&z_`XD)w zTj&Qy>Sv1@?)zCt1w`w4h-6~LLDp7MGuRHm&CQX{Wsnq^1-D3A$*3QNq&Gg$ZxB~z zG%raBhws)@GcE(?Z73+)rbx%{?t;$rP(j zlAbsvr%LQikltVe)TMcGI>LJcd0`p%-VMH9EaYd9{-oZ3 z!KVB14C>2W7jH`tP{H}3kco!xUdayCLTDg^wjOkoBJ_m8WIUeJbgzOE2MbzE>%knDzPvU*l z9HRvX7e#k88VvPcNEaR}25V0?)Ghe^#m1r$`N-z!VBD#Wb1~7PDca)-?^^L8v z> zAPFrFj(bdKx9DOU_1srF*^BQ})wC$ye4hy&=7cXZGCnEJgWt!apS8~ykEa8Dw&x-; zQ{C9r*3h`eym!gMJ>K{+hD_+D_m~n*zQR|bX7a0K155iVvBHfE&e*2vMY4(~SQU}O z_R-HLBi_Oq8>ZzPrV90qw0Y+dQRS`rzJ_1AZ@Wi}Esmd2i5(o^?Zd$VetV^lAfE63 z&%xgIi>=+Q{pY(>X?8e)k1|ktqQ&rKcK?31GC4b6u~z-zNw$9f=2~_$+{U>;I9C7A z#xb3V$PieU-Gv(gUWm?E4%vY&)L)U`9O6s+8ZTjnM+ofjP8veP&w`KvyvoXV#ly5c zyhxlUd2-ht*^-0t*X(X#sT&fLc;x0T&a6=tz6w(}FTIEPPoVtFLkKr8blmrJ$6XAk zYHs)YP+g8$%0@58$11#DUB0`#`o#l!9lO3cS9&^O)>v3&SnpeES|f*#cuH}`s|1Mg zN62?IIbAL{DNrgY6tQu`HS&f`d1u^%Go(g1Ocd;&$o#@NgxkybgL^F0UvoKuGX+sF zoI+DuW!9;O*w@Gvb}A-xtyOq5a=q^L0wK&Yh%b5l^IyCh-jiLmd{F`?AKacbuZYng za53YreV#W^%NkDhu@8dbhhvL~;qOS4(KSbO>bfqdpiBUj<=Dp^`G5 zjULgpqR1XVFy^<_OCdm8aA)jGM|UJ~5gzkXM-@@h1&v0$hZpcMj%ItldGltOF8}4D z;TbZr%ZhTW=;c>x4tMS#%|sdG820R?Vd^0-26`+e@})uETl)&H_F|BUsc*1da{e`I z@~}S~bk*N7e%5^>wk2*lo*(`T?){8p*$k3l_Q9IvfxC(}})$_G-!G(H*VMdZ-}Z?Qf99 zzj1uNac^~nyATduw;v$!=;6^P{3@&qG%cC%*` zfNPi&-W=Qul4KVzZ7rKEq0M4-Ip>Vwr!8s#&SHNnB)dp>Rm?emoCxXW}Lu1CGH z(UfT`Oskjoz|zeeqnPQ>4QHZJMeHC&o9pp-)IOn;aQ2V|%58#l(FzL(6*=`~vzhqvO{)8pHv}+flHN~Wzu+PMJKAtU%7uz8l)ybRJZv_l zIlF$MRRhU=iR0V=Bw4k$x)->pP19MPmaSn@Qtr z`TZVAg8G!+$thB@SW1mromdp(h?uk3y`JHq+j!{=?6GCalfs#@UX)qS#hxs>5qqdB z>_JnCRpw`bS7uX85IoNEzW7Hv2K>)4_qwv{!i)w9^0CkDVKn|7cMmW>ul+)@2~H6% z((gwwBiN1ib*<3atI~OevkXv$cHY?V+k`%xj#N@<9HHk7Q`iiL@(k(+tl6ZuIvr*a zcE{+QVftNW=>_ z6IKXU7^lcM+8~UOcZ2Yh9QIg_2azul!2wUQ z)X-4Y{M`QWE=3U<`!MZ!hZ;j1Gk|s<;d;PT1}JSB=CDf$p{dnCk96O*@km)$iYoRJ zUljrh>c+1DRRdQnl|bk00}zpwQuR6K zE&T$D#kO;xRO5OmX=PZeKS^CvpmbcK8VYmf9^!vTO`PKkN5SzaG7uKpumx1#!v}Zh z41pSJ=KJ>eyDowzM`Jv4L(BqyD=BhX(9Y*jv_)d_&NBZ4Uc*v&%Ulk-t?*0r>^C|D zw5z+kE@aRA_&(;8gAZQ9ihP6EwhXB4g~JbOnc zIl(G+jQ*70^mZ`iMZ^M%FMxnlX@He*4k@@q$Y1=aJVo##t9FipYxNv!bOh9bOk(SZ zNy)}rQev&7s2b{s=#(2%%Qg!2yEyNHouytdnRAP~BojVy-+Maj^iTqHtgc`oQtqFiN~_z) zgGnaERJUm??Z&;Y?m-XFa1)Wgf>|}%%n3N?6M3{}zt7zn9QSdTjgu~XaB!2l9P;_+ zuk6?1s4^-e)i{XI@BsE<#a%T{!ytUdG} zq{GauC`Wz%A*{#DF}O+%P?u)EEig^qgYq$aQ3;haZNeD(&HBcv%+Cm?*%%SAsdg*ZqqvE2om0BUsIBZ_(NKQw1W{*o3=u zUpWFU3*C~2l2sBW&si5w>QTyEA>ac(J#ekm6D)NArDmsA=?d+KX269jdH$;e{&+b2 z*6I`Htk_et0PisMC3bm978i&>h)}rWI*kH@Mlgqg;z9ZyBN&;I!JniITni8zEJnm+ z)(zk!rxKHSfYhjDSmYB15N@3?S2H40!IjVP8uu6hU1jd{gsWZ)o|=tKhbZ*TYI4EK z@G<)0LJ!^7zQ#Iaf6dn9moL63K8gqzDWHwS@Am?TLLiS@9)z21_KAM?sjshVqX}TcUks-8W)!e&Jqj40GK+)t%!IWP>SkDW(75N?6l(Ysm+5Q8Ovi;iW zdimO#Ml(xoWAo^J(R3*wZsd3ivNK;(OoT!)1k+7r+NF??m5lov22uZ-&Fg7zG#ZY^ zSO{F3h)`BlEB;M+e8BumxLhdNRe{ST$+YE;s>80xh5zh!&(%-;D}VD0Nae02xX38{ zN!mQpJzghUX9X8xms)3O75BGw7RZj{FR{+wUOerNP<#+6R(@BdR$ezVr2k+GE>2^o zZO8|IpyjV*Kd2*|X>#rBEg&edcq2$L9~;HJb1mn4H!uxwwc1AfbHOudpT62UN7jPQ zPTnZ}WXv@vv=0n{7!dVfe%5^P{fn1_-sAxHduPaVJo@>7-_LkUhQj1fMmTS}vGK^} zIdkQeMTVtjX}!OaJ0jOUdF`dQJZtgAf?bBKdvnuCwk+*o9rUOr%at|6<4Dxn?E)Sh z`Sea251u^;J*IT{_I9C%kUUvXT`T^!Z+8zq5{$LXPGaL6nR^>!uX2` zP8qcaC*4Jy$XF5^6pl`y3j&S_)Dwiap&a=G^_|cyYgk5i<|B&Zkc)j*B{v>ZDgBGO zS3f8ncM}8XJkaZNDan4;8?ah6w3&XAeUW{|=^4NrS$)o2v!4nLJ;izZ^t{ulGM$Vj z&Bv(1DxOl^OAA`@A_928{z23_kts z_%9gr`k9Xkdv5O24NLy}XJfz_#QcEVCl?oRV!yq}x$s&nAT2`{K@M5AJnl8HE=NQ7 z$J6#n?}$>5;(R-U0jjGbM#N38S_>5H_Hc7LCxL7SPfSb%V4lwxdeKGVg24AyGvgz3 z?k|3c(6Hdk%54)s;Cx48p57#$Zi}I74~OTdQ>c|Ph5k+4?Zg2tmD`wLQNYV%-3GP1`JjEL!m+pyRJsnDK> z$ZkIRy=dbRJ~AwTaueyDG1*zUdNAEGDT)_SvLMJ&6~@)8>Rdj#~qdWb+#`H#L1kAh^Rfn^VTwVf>UTW+uIm=dx4 zorAS&X=|evltXLqm_fCCpaQwB7TRLtKxT_y%`LJT=zvsoE(x#l2rL5zK<~%VKbu=D0yhI{=`R<*b>d?xBz;b!o_LV01qAP{#Ugp7P&6jR?(qy}hilT>2 zEKtRlj&c4fKg>uV4`AX}TT=w~jC#My15(|RSp3&FN?1~cG9oFuTAnap{vhkv_g$p? z5eK@5<)`e^9rMWP7-JDR=iSYx??Tiu6RxEqw}s~|{#$G!Elv{h;6JlLbVWc```d1< zC0z`B+b&)zB@aR1I)_IRy55+_>*u2$u9Dh#9BXAI7{21i)utec+IeI5vIqlj^AeIa zf&2X#uN?T--UNeu0jG2*F7GQ?_R5M#bHAu8gFQNjtSP9yS|nf*?A_&rjZx?d?qthbAgr0j0`CCfYP zckkKMUKAD7XGN!Tytj~Ecz#&X1dmOSL-eRC%~qT`u4v3-g*3F`tAMf{(-N^Qq}BZi zk&f5XQHA@{@Mze7zw(Y3c?fTnQCMGTWexe!E4m#aS?c@j-MM7*mmXRtu&O<@{(&a& zKY+@W4h@>hCM1oy_f((~fR45!>BrruvftRD1e(r3$v4&AL|St*sf7K@0ZR=?JKM|B z^am5+N86#ch8C`ACyPlAPsqLF6Uf#8cFY0AOAx4O zI~h*e{k&zY8oc!>LK=FvnSa7*ge=ewD$O;nY&HJIX2LQ2xQl!d$ovSC9hJNgxuY68 zFrT0_)Lt~xsc8P?FbrSnKijAwD&2RQ%2G7)H^COVc}iVyk^ zbSrSSQiZzYg4;xQy8@7}vYq*pc$e+*shVOqGv8S3vVEi9V(XomYwz)kV*P%WbHmS4 zkVNif|AC)&Fq-~4i&PD0!z@AjU{0jGK10qmXgUIpXI+~Q{n025$Z!B+_-4D1$OPV8dj~4)}mR93YZw1 zZp{~hE!T@Jy&WZ!OgOY#Yb(rYk+VQGXS%h`dGb=OvZuqr5DFUSZ|^Fj1IRvph0jlT z5)VI9h914*Sm>L7!A%XC9g^S8rUS(Z zg*CR8EcYR`78kO zaCe6gF!s8Fc!+zh9xl!{G8BN8-yk-qAxwydUuz9pyO>rn#Y@sOinrJE^AR*S?7$b$GAfkk zfvsh}A>>+&ht~{`G>Wyz0^I%eSrzJTVZPydYE`aEEUmJ!((M@+2CBOYy0i*3MV{Eg z8eC!+C0=?M{qA~(ap$axk=)la27_Yhvu0E!@o;@{vQ15578qF>KknAFj$SP4)@6}% z{v@Pe)IDMO=@A0=?lZ*U?G;4upGG6hU@AI#l%Pg$r|mPQBJQ}l%m8rQJDKA33Jn0^T3ZCaKDx;I-M@wKm^M0P zTUz*-wd_d+s4Q$*K?4uLR@g0?|6J;djdT9-m*v(%6*^#J`z~Fqx@3h5I)!{2DK5IK zhBb1S#)y{I#)CBAOZO*3nQeIZGe;jeR%)rCXtB@_Z@h&*pJo64H*Ea#$%X%-56G2(64xsNu3+Ln$`|s*)~V{1K)hH^)Om_SCSaV z5}5><#}TWrtf2!jpaD;@RJ$Rn*)mC@6YBjBZ6LvA?L2 zkKxkNHb0iS|HP_ytyWgsrU;poBHrpXjWwoQw8T(>j1od#AC7-basHh&>l{!o<{-HL zSrgqsfeWb+%&th|rM)SSQiq%qlC^8$iDXr8HvmhAI{i}^iBl?$=9=b%uvJcmU|uHr zgrKeMyFi_R5wVv|Q6#W!s>&4!_nL|)-?{V@${wC~kF1w*v^XG4EAv~gh6?Jb!hp@b zX{N4nJKDcUVCE#9qAnK;reW65p>6?+I?L^u-iMom2s*cPHo55dD~W@&P3cT*E|+ke z8^?*d(~D3oMKY9FPzR@Z2eF6p8;VEB?_)|{j#T)0z>CcTIo{50ypgr`S^OC5#oTut z;}DoIA=KYdkKTA^G$bM3XC12%VD8LZvFplv+vwvPff5Pig{#uT1(lcmA6t5eA@~;3 zeiX!WLBGWcn6p1%6gm6^?BeumOglqg>I|s;k4qBi+8je?%vU1m8YJ;_Up7Y-^ii`G z)_HKHlSbI7Am!KDTF5A>>}=_;%G!q;WMJ!<$}*keRZFGqWNQ(F7^z9+dlwaxE>G#) zdo7wtVJDVAuz9CALFVchE>~;Dv^APZ$0NhYX}7GIY#CCTsYr*SP&gzBJ=RSMRJCoW zK>Y8Ka+=w?q@A?KA4)qZN+d;~oq8%HiG^ zNQs-9K~Cq2gO!&!*CQ0V%t;*tBp16j@99M9M$V)T1W$Fjid8OG>Q90hadD0VrdgIe z`Z-;0-JBer_1-cn8m29M0nt`i+{aXK-2elp^F2VDq3*c;(|R#<=i^#)I}|_8%bzjv zi$|kqd(#AS(<<&hYPA;y!nO9t(+}k@xNawa(%Nr+h_==VI)BhSUV#W!+7e@pvi8}S zoU0;-TQa|s3(`iEU&0+@P8fc>vC$v4?WuJDJx3xq5g;zc`6@v*x>rih zOF!>`?0US*`=VyA+w&0^0NnupS$8qNVKAqn{|Z6Rg`-Atu2=9tMGR9|znR)oU7#LY z@pX0)fQ~1s)RngiC^WQp1MMHB8 zP#(na_RVbC1~7@&6%HCW^4G{=5vi0){y0_`x=(>mIFrP|_`13E#-6w!F0ywr@_P;o z14>p^_dusKWw|P>=bV3N?Pc@1JSw3^{UOHL%m<59UyKR2LcJ7ln{@ynf?IR5h5o?c- zjURpApQ1quxVafR`?o#%*p z`k#YmTTizgFxT68C2Zd$V+qo6s7+;SXAv7a76sR2BUrV@dvN*o9Q30+6207F5zO8x zex#!#A$A;0X)>H5)gAP)95J%rS0hj!v^h%i3jTRZ%^2Az7j%TQwHo2f@!A_W`cgCF}*)RSv3RnWyeqpJHQ1 z%$mrit#WwKcR*x1Yw77YWrZ~nU3@S;?H%KWATl}~Aop+l#6RCN-S_|`5%BlgB4iDnY*|6# zat=z+X$(X@w|#fhGga!wZ+jr#(`z*q%qCH%5SPXx@%+xsqHM3Bi{THu1kBz}hX%+W8rZ^rt z{TbR(=q~;9_@fF4Y-lzdJe=A{j5mbkhzXm_o5)`LA&MA6?VQC0^eJ(MHq`$v2-$yR zyPtryrd=#=HEf(z$`LG1{l}SL{PMfL@orH$jH9fPBt|lZ5v~)FN|L~)-eQB6V9npE zz{V%)_90AL(t6bWm*yP-zcP^fq(3}Fq`A6ya>bOdr^&E2kagAHi;N_5a95Yt5E0=U1ZA0FG~qmr>v@@kNg2bnmQzNRI0W}ye7r2cr+bPaNX!^ zQAMP9?-87%d5%}!;Q@jt;zC#Fk)vWMour>3gXf5Wie?kraF;dMp}b!hB=uJWrcLn( zO;?Pw#5oB#7BKY;j!-e*#kK_Xff`;89ZlMYy*@TMydJV2amzqTLyMnqU^)3VD*xiM zuiY+u2f{`Kq?q|)@SE*wCj`Q;I32u;VEmpt>NbNFX}#N`@+Ah`%zPyV;tugjiHtev z4k~up^5G}gS*aFDg`A!3xF@~z)3WuatgWIA%>eU{=|hMPvXb{1B6ZlMr17{MIs|OB zKhM6kue}B7`rErV*&?}ff&Zy_OiG#bR@dco&t0lJIOK&4=ammj00l4p^z`U3a8TUQ z8Nw9C75`iKL_dM4d+@jrnBY{G2V+!ohcEwm!wba1K^bzVBl<8X0hsfo3c>-f_AQDk zw#>3N2`{A|C4rO?d>gW@Sq~vEDXNN7k$qhA1QRO)ArtG&L)SvQRetQCr5L$DrXnK0 zBOmKZI4QxuEyXog`FI#=qR9=y%VuFp@kJ})@k$r$z=zE6-%k4-IRnv3D+gD`z0*W? zTdOXFiIDy=p9t;YZkDgH^_<4XvtWIm&-gDlK>8|dlqzvB@2}cXnCvrb>u&!<*mB>! zZ1M)A>mWxibU-@yX+@9p_Li0vm}lFxWn2{ zaHbdscMjV=b@2AV%f0Pg`;$j$eS&Nt0e1U=NfyZ!L_e{b(@efwnlKt3cS{1O6swEY6jw)VFl5!&AV?#{z~4>$jk zJ>~gw-gglNOa{1NS{XthMz}P+pYesXHE`{a0$}j7d;HG?0a(A~L3grp)*ejT{gv)u z#oZAuV^x-9RhDd3*f@KrC$@+gii6A}5AF%4tfoD*EZuA2^z?ktzW^`jdr!QLJL+;X zr6Y0-MjW2gQHCT?JeY&`5X`{s)x8eQCU5Y(+!zRpEjE>%k@8j{3Ppuq79a9r;2CfN zS$ge?Gh30pU8o8%K$MEm(xx6~GNi-G#mPVqo7X=BtIN^%^juIDHR#lQa1P4n3pjhj zT;IunkT4uU5IEDubqvwU0f;U&lIW4^o2EUIIw>btVhq(u4nF^luoA75&m`D@=m9}6ibSG( z;g_0{XqU;0t?h$c#g(JmDtPY4xEsBB`2+-=+}Oxng@tj2)|VW-*mnj7e(G*MX$6F7 zu()52dszdOJrAM|GE*hGGs1R*4+P1ZWcS9ASodu^R={x3G!z5bsKuB{@6(F5-+Vvl zM&fKRV2f+2(P%KV(cKr$Hp6%Lwfak(*Ya2yy#RACu@M%(lH-XC2%=43c6q=?`((0! z!dXb@?DjE5p4Xg$sQyBv^f%(5zuACAuOa&lM^E7R?SmiWkAqQ{nNMMz@rFS$gb>P( z7PQ7wTOGW(k+Go#qS*#0y$oaM@E^5b`5_x+-A4@o9ml^F{d3M`$7XGdEH$yvkPSO>$_=6#(J<3T}s`&(C`#U-#$bTyb*j%#lpx`hc8 zS+MB~)s2j$jlU|dfH6}cdeu?02uAs1Fw}p+?fOd{6Xk@<^_>kWu3r7VtUdM^0_&bw zbMHqgL@@zq=;O#Tf^W5Ggqw%Z38Z!^%8grB`@HgCLc zcF632fF(WywBn_PbXi_r{>U7sd8!<9+|^VOaEXa>q%AEPbB<+}eGp&1iY6u*$Rw&W zi$0$>cOiT`o`IPgC;}F*vVURb3d5L2E`oTKmVmrFxU8Zpe1ww2I@_Bd6i8m?F_9fl z=jg-`%XSq`;7jx`#%-v~|hotH%3_24C_%ShC zY~difv9baW$~j)zwMJirK3r3zB#u7D@Wj{BO>QaN>v^TC3scpRT=vdjtBF%YMm*vA zVo2L2Ot%&*O^_&0P&LQ`dr%#$J_{y9OPH5=5h$I-C?cR|vo-93gp?pmT-E4g`s=U# zE)y)CVHttzvUQRqfd}~Dz&;>NgStndHht3@blh}}RQcBqmoR%XDl%$dIbOX_aUY|d z4xnK83?8RSBpR`P1`mUiPNjper^Kbmu*JN3!6rWH&OH@W{Jp|d$VxSAvHg~+b!_|q zCaFq{s(W9YAzMGg3c@z9?_KR45IO+n+4GXy$U0ytik5tq!o+N}QAS$-p?aKO?KwRp zY7xQiN4%CTDDnVwq{xHMg#%!kVa##%YIYLZq89$=aR97JX_^d_wWj2W!&LJmTSZ-_ zDO3b-acHN-t43AcFAw^^OjRp+!_X*HPx^u5PdJVt$tB0@&;0N+4=H&s4 zzr&9zf)%?w$J+zROlL4KfSTZXPq2&kW^iD4pQ4&cANgu6r^OgAWc7=9sE^(WBbnU< z$_rk`UiPUaoAZVvACKDLi$!esfKNbF9JX94G`>65b}A7SYTzJG-IMnaj1_P4gQ*>Z z2Yz&*9pqVCZ+V$s^ryHud$mnpkfU4tmk)|)wrEDKbmQ+?g3c^d&k=rEBP56_Z)J5u z_DF>59JTi?{K!=cPD(m1z}_i5)SL~9^Yd$P%ky1c%%CZ2z_xOjm^z+=OTy0cF-*Wy zZg?`4`(3#zXyoEW@N83PuaB$c#bewj&oloKL)`RTXk=6wC#pRAwd1GpvUyPq<)cW} zJT~W*2esIGev0?tAG_n*oG1~Kr$|@Y%X!f77anFs4=JN4Z7NWPeXOp}(w$@Mk2&Kw z+Vb*(OuigKka_>FT6OQ@?07i1pauqy<755uQ4h<3Yq{=7|K7vfT;%RP?2f$Tc!?wx zo*%+31DiUOJix?(OE30h!~~F-C>mf~PWN1)ctJW3vLhpuYvdRaHSniiY)}rtqK6rp zQDh&uCnR9m*=%r$z&8W8*rl^YO1Q9>`l6`VVN zF0&{uNq}O7%LXoFutpX44wcQJ3?uGR%)$lZCpL-1a2nVr;B#GCUSk8`WIr@h!c~3* zcbsuCR6br-;J?Eo&HX6}!&i$dws4|!r&8Cmd$<-kO2NI2^{~m53Fb6cq1}%GCO_%3 zj~sk?#(aGhO*c5xzWb&(fO6{LP4kgShD*9txDK11%Omh@uClE{i2^!pTVZ*P5iG|g z_5^4pzRW1?3ZeRa<$TQ67@BaFVfLauf|i9^9sb~UZq9uHphe&-B>R5L%O66 zLWqkB(nL zf4TIxX&?1YR_|qNf7w`F-MF)!efM<#YsCIdPB-EI1^vE84lh(`8Ei7ntlNcOe5pq# z=huuj*xTOQ+j+G4<r|Jr~qe8GmhDGPzuQo+{dl6 z_S*xbnh?;>UOstJri{$TR!lLdUAC&}(ie!Eg;@iQagi{Zi4JN3AGJrFS-^OOKC6w2 z#8{fmT8Szim(IwKTVVA0Rs!72M34fDTDf8+tl0s~-dRmq{Rer<`xnws?3WUQtD1J~ zP~Z}!M+;sm>74!+ML#PVI4=<{eI%g0ogMbu2uu_$AXibbLNhFM)QYueVYp3<$A7c@ z7l^ccw3)fz{FgW)6%gk*72x?5VgsmTo3R9E&)BHee2ZNW{se-8Nyz6lJP|0UnpU9< z*E9M|kpU z2DgETdj`&BtELrgW(@@9Ym{6WZLT{8&o)tf4WB?5ZmfF=U_mx*_nT}RkjQ8n5f89h zw`?w`OPXwz5KaPU{bzeoI=23oY%gQRa*2(_cT#E&NX##HX?J!+4pJl|Vc8l6YvEKC zu~Z}Zp;Fqsac}k3z14fzDddTX7?@^#L3oNy?A*pzC_KsOp^YbLKJ{>-NJ;cZytt_z z0{P#SGVmNuLK3cfn_7$L|IbEuOp(x)!d~ic&7>Ug!#2F?_#sJY=3d+K1u-fl1iSYlhhf$K|@Z zLUfR)7Vk4(UH<7(&hXzlvi z(zD@fIyJw{R_|@xzP)khjyg4MKU}V7z3UQ}kega=7MGWo8CVwtW+f+274t>-)l#ks z!u6WEeg|tN4BQYZv_eCdMMH1PAJDT=!J;i=@F~*w$-XtOWCViY#B9vR2I4nKdDANp z5oVlcYf;2i*L&sc zwK+a*!zJL1t-bAsFL$@SOi))YBT%T{zgX^cyXVWQxm8SzB=jgeZNFXGI_YlS`|{2z zPNF6A?z$u+P^&E>etDs&nOOq=rg9SCS7WeTuhtJ`laCw`mi0v@3sGJNnMb%y)U}&; zpIECH?@zQz_yB;-we{O~?tb}~dtZIgK0NAty8f_xoJ)ya7J4zk>o2_5Q`vC)3U-r~ z!}hODZL$Q@U6;`KNvXk=nAzpUD4cm>3PrgwqExjES-EwoGs*`Oz#4H5<*DW{Gp{(+ zfck?;R2&K!gj#(=P3Iz?ETXC$5~aIE=^2|gwD2(dM?bR;>A)+Vgru1|-1x45F$Rbm zJeOE6{DOcE+(ePSrO>&fJZw<=>4@^GA`k9UP`u9KgNKEqD02it$;IbyL*%_AxdFy5 zhSnNB2zT4qumW3){LIKo8RE~v=@3tV5!HyVB);=|{2e~+l18*0!$vRgci1SIH^PB# z6>3Xjo&qiWJP2&`;i{T{=`%hHAgv{e_^32ZW-~I%E!~&J@Job6;p}9QCa0KqWI@1N zyUPpwuJioZt)yPJ@E%5=Z!*z7h>Q=An-wnHQMZq$G|2UVl;po48&?EWR^$9f=XgTa z>W>|Io#4~rEJ$Q_Z66}KI_kdUI4tV@*KEC1YKbuTGsQz5*0cya2&pv}HTxdYB)|#unKVFo)It-TOxWh%+pL9!Br;zt1ut~z};-vS~2 zNYm$x-A__U@XMOT<+2v&nzN$*HaqnAMRiDU^i{MSKwHS3GuIA+@M?QkCn`&!^LEBZ z6{~X6FWesH-go$P3#Re3mFyBwaxHr`Q;jn8tSF=6y9RDv*aseUkMO>4tQeFZftV7- zNZfuxJVQ;-Crx-{Q>AnzyblKI7Yu#4CA*>fuZUT$h*FE5uuTb2ElfaVTt{wIvRtHM z^P>;>`^lK4F;mzRIv)~lf5!{tSFgcy_9F3Z-*#(Viqu|cPh~eeL>Z-IM|{cz`s1G}TW2OHY<**R*iREGzIp`gXS4>biDlY~f}B_yRaK+D;qA#ye{ zSvx;L=r=OZfTvGU{|gmbBS5-@H@@56&sH)9l&`EUue}<*8t{KNT+XMc3snGWjIo>+ zOVTkI6WtTmJc`8)C&Qzm2F|t!J=H37s9l&e)x~2$HUW{Eq)?%&9~zv5=Qz)s&N~^`Ticpju)gTm_3|oP%p=;a33*IoGdduGKjpe+taT zk6Ox3Aq$rjiL@g-m~1qdovglyx3ZgTIT{ef@E34JW%P?Mm1+hsRk!=3iFs3l!@=m!@`_0 z`6lj@*d;spJdG;5m@cbqK}7R*l8zY6t;Cxo?cM0|0hG-PVKQB7Tb98}HX z8IAcOheu)eIiN{11cYMqbtG|1V(hh$lWMgZl%uuyOfxt65(vkGJu8)eAFz zxyo_XoeS)I32*3X_WbWD3rDsHeo?ap_`j9(%gK4*cg>+T%Xu1wSD@E0WcsS%! z&8vju1918p^v)er(h*|fSVdYkcRKuGl+v9P852~`Cz|R|MfZ}*p<-#(ow*Y$C4H`R z*j9Bm+m?%U8CMuP3rZ2QJ|q$)pMWltk5d}WAEoK;|8s3N#pzvrc@uljof0D?*16@K zBl&ufp4CUpdh-OHz;oQ$+D5c1R~NWp)msBxAK)fXiUSvK?0KX4u{A5+)kYT=kK0IR zf>c5dPJX|^38?Xte-_-EMo_kSkL>aK(K*9^3NXw+v>6kAEfBA^V=(#0O#wN7dJM;Z z+7wLa$BaQm-!ug$oD##)kIDdy3;1B_dv$_47WmP-6k|wEndR3>!o5Z7*Rz)z!G9Y5 z%6TB-u>9jP4dYbS?%K^WK?KKt+7yf!W$_B=M@<35yHyOS@Lf}ozYBl)8(^QUY`_ds z{ob!#&$-5%MU}PSTXt|ctJ_#G*F5aN`p*tNU}7|YLVn`O5Dyuatj3$ZB~&|gcYXc*9>X?SGJz(T^ThHDugWHvq~C7qdL_2xn(Z>2l_N~U zOmlez0jklsvL_a#Vc)q#z4~c7)_`V?k26R{Ay}A57zr7t=r0WFa_2?BHa3uH0Kp(= zI~lVMuYIdLQx)uzoX5t-IRk6148W{2k3kgPX|}-&%g$$wW&~-D4J1seGt@)GtuodZ z$WF#ZmW_j6Y${5}DC$Ld)9?4<*YMlDK-LkEdeEW}4F!*ZD^_9x*LW2poUV`LYOz$& zJa+0eCc1X}U{o(ySrug0Rv(1!F{d_V!XHo<<|(#F#3O=@C4i+I1%%0fcc9Q1d=;&E z#D_9xsy%IA;5EHBL z@j3+M$_w`2n)UF5u9rlz{Aba+BhzlstCC56UbPd**{-h?d zAl-%xoov5u_xeoqzU&g|bJ<)BvoL#OqaaBYFFsgD=xNuZuYVEPa!NL(VIy&Ph7WOL~5sGJW&S?0{fI<4 zfCh65EkFW0=A@0pB9W?y&U!SQT!6m#h8d5Z@VU=HWJ?J z3lVoZ4;szO^5J$7##ziToD?IczRJtQ#~mgAAq|lBSzdKS#~^Fqr-fHljCJ7kns}@V zH%RcZBNdv4Hhj-tvmb_|eh1~#VlW`qM3Y^^=8304Ln7v|9`kZoz$u zP-PCNy&`N$wj1N_S?`9D4Ve_n-*<)+d@U$1r@n_j;;el`zQ0wtB8#E5gt7;Ukw+-F zfCF#);X_tBIBTCTI=cvkPd>}2_VKz{ zQg9MrKCT5qa^HFzFPdMnTSTgE-QInYMBrj0L4%H`Y7$DU#XsS(!=YuM>!7t*_s1vgg+qn>EO?>n%~P0jI`Y zzt&x?f?FRX$9|w=->e;*UCU!fU2n?Rn-!w+0A6jA#dUnccXtpfTY zMZJaukiJFSoAymnPl@++M7mp5g!>{zIf1Y#5Ior`A&A;65zW+QE!93rQtgvwJSUw? zWNX?vNw-gg>lza7lO*8;L_^Byeo+)`sQzlfMwbN5(4`U0tapKE+Iv}~e7Q!-(K|sk z^qx~z4Ne&gC#}eHHrZU}jm%lQPFlH}ZLHnGe*^u29dO1Tm>?kbz(xdox5CZ^%(e51 z&~K%Ne%ARGt&EL34rLiR=)Cgj`eWMk75m^yVhMo2oJ;Udz?A3VR$xU|U}feCd@UyA z#$7iV*_m4U>84nbRrB~dxeD^>X0xS`wxua}2>OdGivC)+GG8aDDxYr7OIqnw#>1MThc=sSlR{69cS*2|WeGlO#2iO#{>aTTVeUK!pd^$H-rB@j* zN7kD{)|)fQdNWB@ep*LXnQFx3;PjRfpc%JH+YZm=)4l!CcRjtI;SrFIFikt@4 z-@nTx!hJ7iKkR-Fnl7J13t8X0$PmYZ_HR+83n?=!M+N?w9v`PB&nvq^=?C+gyrYu3 zMIIHJIOL)t5$2k7>TKG*S&gzEJ@@-JyL>5nmdiIWfm8VvFOY)2^J|%JlF?&9(_+`~ zt|kT=d9Euw+odc=&aFu1sJfDsvh`%zgTCA?EVibj-oXS?K(Bi9+t{#I_G0_t6AiT^ zWMnHr zbWm`4;U!B$0^pG^MYLh6c4<{WKL=EGIpy9Vgrfl5(tY`Wg|Ch9`RG@?6sc$3fDH4n zZO|=X+2GST*fqRk`2#I&FqwQ+KE$#L#}=>szz(=qrSLe$F5M!9mk7-Y5Wk~4T{Nq1 zLtZ_K@ooQU4Ut5sjcZ-KO!^{mE5erQ5#sGj&Gn0cbi1BxG71)mz(w9V8+Llfy{?V* zc}qpjb#wogKP?<_3V&A2uBH1P%?JEXY>tYS9JoM-2OowG-0RAODB1vy5d7CHh*`9p z7eqgWMUp|TZ8c*5fAgjIKrHz-MS=L9sD2&fM0-^r7byTu*CA?`uanH3uHX*S->r@l^8SA)Jh{HThIRQv@;Y%$>J% zA9j?Y)kBooqUBr65yB(@dpuC1aR<^Vjq7cS}IBS5^0@2(ky}|3@&)u!jNo1L* zfRMhQ<>su69j@r4cl2`?i34F{k6~n=AToM-NQc`(5`Bjx5L=u=159ET~!I zE!J2YKZEJi?QD%k?F-OIk2$3+$rLk8y&L zqsA=~?()MKSXE8+r+57BLaw09;j~u3vN@TC9S(R2+?u@k|JZxi{Wgv(U-bJt z1)|Lu^u(e_O7evnIiV=ZVj_t$NyW*S`Ei3lQ-lQq95kqlJ^p?k=T5OFHO9LJqPMqL7@Dgi^zju+l?`+Pe2 z0X&%5O$nFmB*~V4HJQ9ZkS>_g235z>vXc+iK6&$?{ERPmBSyykn1e;Lzzu*4^0fy& z_~G!&`h(-tyvzx!o%xlXmDAZ7l%EJgyLXDO{`6nzMcJAb+zYx{;aNQB@aM~bqZs1P zgs=>4Ja%zskey($Ypef@8B*BLr<@WAbg0A3eEuP0pLpd-NvDr5gy zxr;*~m!D|?Ni@QODSt1Sc2c(Mi0F#-j_DtLgzOVYJS91%m%2nd^e#q-j8`4?05A>I z8RjxtN~8!zM(agEc8%moXY}x5I3iEPh|>hICq%>xcqJL3sz99%^V?rX8AZ|_V{B|3 z({T8WW5=!K2#?2cD3fjQ-RA{XY+S zkVcQ{J#%+{|gV!^5TX$ zhnG2uiGpoaCG2u1f)>yBy{a5@(@{#Z6#easE)5ZQgN%+NUT`;a5BieJcN>ltOd3TC zxjVXeH5?yq=I_USY|?WN_lNsW$s{nsndg>WgC zlXoXxL`^*a;>X)#%3jJLYq;x{j+Fo&X>XJ@;b0eWGld3PDIzO+GJq|hfBDnfUz0*S zLp6M^IE-qy#odf!VG+4AM0I*TAbCY5c0t;4un7SDna?J$9TQDN)=THNzn+XA@~Q3P z&|o(cV$_|O@<)Ewi4=1lm_-PY*e=r%;H5$(9D>c*0Q}9tAV0u6Y&jk)-aG->(`q1E z64KLG-!-wxkxz>}>c-Gx?y@>f&5(lFUF}TTM1N z%29KL@uSjUFnK!;V_-Q&RYg0;0&@ruMlkJg2QHZ*cR=I_4l6KQe}>>>yg=a(5fgp-->EIh!c4kWoyoSp#cT0YI#6a)CFQ+OSvc6SSX= zjs1hogYBcO-DfYJZXaxef;{WppOFkP#Aez|&7$RB%U6~STm4;QM}%(_St`ZI)60P?92VvxsbCTPW4hreEO(3<_D5=ww^SD%{VeD5pRR z&&F5_7Ui?m?{$#cN7?FenZELK0G?6zS%))J;y-Zj$Od0DofMae0i@tSXZW>A6-3nv z)Z$;JdinZ7P|Bf0!Ghw|gBLK3K_1ZCB$pozbGTITUJLKNHy8wMZMs}hNc{f7NTiuX zx=I37I3Yjuz?S_XUc6YQbe@shfww=CnvGJkune>wOv&0L+yNs z)sFk1p@Dt?qZWU?imi!KAJYyiU7D=`o6=%PO5MFppy`yQ77N=4)d~SP!Do~HYujao z%*=5V(4Shfw*+Vxa!@1qAJ*)rnr%R)devgvR#Sau@9Mwt&)sS)}w1Huz3 zd1||_lcwD0n&C(|$*0IDii6ypG9Ueyfougi)962jE7YO=Sl6)>+MN# z{aR^pZ8gFo+HCs?TJL&BuX}nqEI`FwIpGruV9>Pqz5t4H8UNHMY``1f35LgDw9hBJ zn(IYna$ga9u9M%(v~Qwd`Z4Cp+ZL9!1b6-wSs?sh>5cUkTHEnLt$Qp-<#>CW!N$@z!Z?IHu#=9cL;_)2zw1U85d_RQt{{?!&Zx zH0#KJq-=S{Wp`u-mW4*6L6W0ct&@dDBc7EUjjGTR@+~yl+A5DFoXTyq_C$}}QAdS6 z`tFNC9S*3#XX+L#h{gRn?30%2jj@;p%qb~ZhCa{0zo!mq9$w6zPaa=P3B^;oMwz^6_s@9W5%o6!}E-m$&tA1wVlINETq~Cji-}Whg+iwIl%Di=Ad^DS8QZE z$(0BEL3Ot(B|}Lu4x_zFja1y@h%=%(SJ8sK4&kP!ouL&?@64;{^M#G7i{lXl|%4!Q{7fD5ql=SfwCZF*!+Kr9Ih&Dcr-JL{|r%k7r2X!wpnw((}J{d zda{D5?~n4zmX}78S90#aaJ8NIH#yW#u}$4KB+)ZyBpAo5ByhK~E2`42Y<8ARd+C+3 zGU58kAqnVKkVE;z19N}%ZpEs^F;z{{o$(0*&qQ4j{lOWa>9tpNM^C<4iSGZgHQe60SZ$Wn;@>f_uy#0V~bbF=NIYbPCD4HFttJ5kLC}E37?M$bL3fz{^9N2xucrBc+L) z(!!6Vn+u{h*qi|t#}{x#FCjz;tx?#22I&#GMiRV=#|5)Ujx?hf&>|a3W>-$xE-$&y#8x7y0oPxL`(XFuQpc$&E684pAP zE`vIO8bUcw`pmtx0uda)G;>8&3_7us^iK@Ax4ur6{;e`2E&}f5q76TMAh_0 zPM#^j8=#maau|w+Vu9V)Synbb?NM5 z27jfAvD32TuABNU`)I;C!_73}{3Dm_&53fwWS!Yi^+uF?R-VE&ZbQ72==d7er-R)wegMS8WlaRwjgwGTrNs{TXDrGe-}554hX^a zdNrL~oFl=Ru47?cb<(kKx@Nm@6ChNLG5Nf;G1eJU-aDtHbl5yfEVYu94S7c@+u$-b zn|6h$WCxDXDsvAt{*Ymf9H62aH`r}hRS2l#4u#l=WSN3WK(Vp0w|%hpkE89sZ9hNY zyW&{eHPx!dbc`D>GmJDGuHuL_?Tdkf9f}^E+G0p+rh(^7b%EXb>5FkJcmnU2BECDN~@3#7TVG(;dltX(8deg1mtm;^1&hWCr} zyH#%kfRtXR^~XxjdhbFM2(Qw68I$~I>m&mRzPH&u_h$UU9s&uhe5D(ZF`PIs%hHya>y!Nl{B}nv& zzMOQ58SCO$fm-iaDm)`z_2TwKY348-agv2Dgah|?{t8F|n zX^Y6^8GBn;npvESo@*469poHyM9*3Eg3`D@OJ$w30c&5LBO5BS$WOm;h-dtoBv!rY{-~PJER1Q%?QP3Ot-DyF@BZEN{w_pOK@735> z0}aa#*r%df$1)scaWCFB@SP|ZLJI3l zvtuz8+FiU*7Ng~j4TpI8&hB4ROSwlM(*Gzm`Bnf{?BHy`qtJthfRL)rM1yr2wYByM zdxrx31IDgG4?GT@t(q60@LRMqGtg*UyG;vcaBlHHo4!R}rCCYFOOCMw@)WFS}Td zVx+X0yY0p1-sUqKSJ|w;Y?RA^Y!EcZjwR}{h8jLT6t2iT%U~P66j<0*lLVARuC>Q_ zPA}gbEAh9@hxu1yzX4@#fPI!U7{VZ8x0hg_3o*ii${pA-QM@`>B2!e^UHal|<&1TP*+9>E&0@@QbG( z-MSFOhQ|P@-ZTRD@$Y|h?$f`2_(LVC%T!=_AkZzzn+j4?n;;cLFWU^JpyrVZkT3z( z?q5wwPAIdbBIym6m8!9p@Az5gB?FQJN;sTCTi)S+%VE)Ud8-bJ7n2Ffk()yQl0rH- zin4Ix@PSrzij;-$(JH=enP9|3jGCZ5J*UxXHFW%W9_)5psgWa$D^L^ZkM06m; z^h@%Fg{*&fbk}J7FKn>8Wq5o2E&2Jb!CI%#X3j83(c*k-y}`WL&$8DjT=fvoY>&s_ z2)ifBAjls<#s*(%;fo4e@TP`tvhx;|>EPu&M&CeS#%>j*wv$0+ixg$j$@t2My(V2$ zg!BOmSQ#R=nFiryC9eokFMO`_bO@*!tbY7T$e1D(>0@e#IHgW+^tSijxm?3s0CM5W zzP$}f*L+5WZ!2(;EJ-T* zfVA8k$Fm$o5GUkRrGf-Q1-&u;V0q1aD}%-$;vyW-69mV2^r2hf5f_B1R%)=zry)!XFiZu3Bs8=Z0Uy)sZ1RSS zaKn#O8|^{rZ6HUt^szX*g(lzuHlHagFhnB+UuhG%%ayTlW%89b7q+}=O%n+Bt% zRD?KS@+$G$!oV$7=ddQh7+|ldv>U7NHQinGZB2^<=;@&nuQ|Bs!(9KM-?w^smMF?= zryacA9VrJz!Ny!k(~3ME?u=17dWh2YuP!K(H*}DbYH*KRy{Md)Pni-Gbs&T;%nE#d^XTxGEo}35qH8rPihD*S*i4G{Sp*6Nr4nGsU#Ze=rC=TQd|+H zCl{k3;uOD-NUh|JL(o{HD2uzA9fo@apLMUf=p51Le8OIuS%fp(uTO%{1Y{o@>a$V-ftTjx&@fy{+7@AHj+K`bHm|(;5CMqSUXfmPLKs3INGu z+ha40dJ2qquu?mPMm3C-5dL+F#J%Q`TnyH{HGSDU5~Z4z6q33%t$p4+6s@^5)U{F` zX(kntbJ}^0D%4J8Neq6iDobMg>m+12b4jas#>0BBT9X0m*CAE(*RYa^dKg)Y57QTG%X6Fu@52{b%?CNpg##EmGAPg!56r&`kFdNzy2FOy~MFB1|B<)Yn7N!hvTd_t;o!F5;57?X{gEX zuT!SM4=i)kSm35l=! zE0PLMUzZ-(Fv+#*gAMasCk-v47m5q3VPW-(f#wktMCw=Cy zxW=6C*9SQ?)TYwg;*u{bp)@sK9i*>*+WNifR_Jt!x+d4m5}%^{$N{q1pY`6&z3-}9 zQhhCa^k{p@`vGye;)A=?J=gqE+9(wBM=9wN!EUYPwIy@Kgb=etuGCN0`3ZcNi2cS0 zTBOkFQ)Pk%}RL+ga=_-VU*D@$~&czUg+^3 z`zVQx%H#EoEglGEhP8u#4$C%Zp*%9dCOrnrzdH8Xt~j6!!2gvsI|l1My$+tbiAP2i z6bgkZKRxI0DbE4qu|qb8zQ%F@g*9^rz_A_kt^o znZhMk*jL_i-OJm{IGm8*kG$m4rf!Jp^5&3X;GO?N>98Dx+Z!MCNkDOFZv^W`fpnW`Pl_C0H zp!NuZW)npyM(-^^_h7_Wm-@a;c6q;JFvq6jG9~CwrDy^hQa@lZpsb{jp$VzX}mJ2evBP z2I1vzCRKOk1&jq2sfcT*F2n@V4qndB6j(lmge@>}TG})nlA9EqW3ky7F&v{>c$