From 6269749bb1bc883bb753d13fadcf9c3f616e47ee Mon Sep 17 00:00:00 2001 From: dave Date: Mon, 16 Oct 2023 21:08:27 +0200 Subject: [PATCH] work dda --- .drone.yml | 99 +- .env.local | 1 + .gitignore | 3 + .../DiagrammeCasUtilisationFitWeb.drawio | 0 .../Analyse/Besoins/UseCase.plantuml | 274 + .../Analyse/Besoins/UseCaseGeneral.plantuml | 50 + .../Analyse/Class/ClassDiagram.plantuml | 263 + .../Analyse/Class/DomainDiagram.plantuml | 56 + .../Diagramme/Analyse/Class/MLD.plantuml | 89 + .../Diagramme/Analyse/Class/Merise.planuml | 28 + Documents/Diagramme/Analyse/Class/emre.ben | 129 + .../Analyse/Class/package/models.plantuml | 64 + .../Diagramme/Analyse/Class/test2.plantuml | 92 + Documents/Diagramme/empty/test.ben | 101 + Sources/.dockerignore | 3 +- Sources/composer.json | 18 + Sources/composer.lock | 255 + Sources/composer.phar | Bin 0 -> 2861074 bytes Sources/config/.htaccess | 4 + Sources/config/Dockerfile | 12 +- Sources/config/config.php | 8 +- Sources/config/tailwind.config.js | 9 + Sources/package-lock.json | 1651 +++ Sources/package.json | 21 + Sources/public/index.php | 9 + Sources/src/app/App.php | 38 + .../src/app/controller/ActivityController.php | 2 + .../src/app/controller/AnalysisController.php | 2 + .../src/app/controller/AthleteController.php | 45 + Sources/src/app/controller/BaseController.php | 73 + .../src/app/controller/CoachController.php | 2 + .../controller/SocialNetworkingController.php | 2 + .../exception/NotImplementedException.php | 8 + Sources/src/app/shared/request/Request.php | 2 + .../app/shared/response/RedirectResponse.php | 5 + Sources/src/app/shared/response/Response.php | 6 + .../{ => app}/shared/router/AltoRouter.php | 0 .../src/{ => app}/shared/router/Router.php | 0 Sources/src/{ => app}/utils/Validation.php | 1 + Sources/src/app/view/global.css | 4 + Sources/src/app/view/pages/home.php | 77 + Sources/src/console/ConsoleApp.php | 275 + Sources/src/console/console.ben | 36 + .../src/core/network/service/AuthService.php | 0 .../src/core/network/service/IAuthService.php | 0 Sources/src/core/stub/ActivitiesManager.php | 0 Sources/src/core/stub/StubData.php | 1 - Sources/src/core/stub/UserManager.php | 8 - .../src/data/core/database/Dal/Connexion.php | 57 + Sources/src/data/core/database/Dal/notes.ben | 3 + .../data/core/network/service/AuthService.php | 2 + .../core/network/service/IAuthService.php | 37 + .../data/core/repository/UserRepository.php | 13 + Sources/src/data/manager/DataManager.php | 5 + Sources/src/data/model/Activity.php | 24 + Sources/src/data/model/Athlete.php | 2 + Sources/src/data/model/Coach.php | 2 + Sources/src/data/model/DataSources.php | 13 + Sources/src/data/model/Event.php | 2 + Sources/src/data/model/HeartRateData.php | 13 + .../src/data/model/HeartRateMeasurement.php | 12 + Sources/src/data/model/HeartRateZone.php | 9 + Sources/src/data/model/Location.php | 18 + Sources/src/data/model/Montre.php | 14 + Sources/src/data/model/Notification.php | 2 + Sources/src/data/model/Statistique.php | 2 + Sources/src/data/model/Training.php | 2 + Sources/src/data/model/User.php | 25 + Sources/src/data/model/enum/Role.php | 21 + Sources/src/data/model/notes.ben | 2 + .../model/repository/IActivityRepository.php | 11 + .../model/repository/IGenericRepository.php | 16 + .../data/model/repository/IUserRepository.php | 8 + Sources/src/data/stub/ActivityManager.php | 19 + Sources/src/data/stub/StubData.php | 19 + Sources/src/data/stub/UserManager.php | 39 + .../data/stub/files/Afternoon_Bike_Ride.fit | Bin 0 -> 85602 bytes .../data/stub/files/Afternoon_Bike_Ride.gpx | 11788 ++++++++++++++++ .../stub/repository/ActivityRepository.php | 72 + .../repository/DataSourcesRepositoty.php} | 0 .../data/stub/repository/UserRepository.php | 71 + Sources/src/data/stub/service/AuthService.php | 35 + Sources/src/utils/SplClassLoader.php | 208 - Sources/vendor/autoload.php | 25 + Sources/vendor/composer/ClassLoader.php | 579 + Sources/vendor/composer/InstalledVersions.php | 359 + Sources/vendor/composer/LICENSE | 21 + Sources/vendor/composer/autoload_classmap.php | 10 + Sources/vendor/composer/autoload_files.php | 11 + .../vendor/composer/autoload_namespaces.php | 9 + Sources/vendor/composer/autoload_psr4.php | 21 + Sources/vendor/composer/autoload_real.php | 50 + Sources/vendor/composer/autoload_static.php | 111 + Sources/vendor/composer/installed.json | 251 + Sources/vendor/composer/installed.php | 50 + Sources/vendor/composer/platform_check.php | 26 + .../vendor/symfony/polyfill-ctype/Ctype.php | 232 + Sources/vendor/symfony/polyfill-ctype/LICENSE | 19 + .../vendor/symfony/polyfill-ctype/README.md | 12 + .../symfony/polyfill-ctype/bootstrap.php | 50 + .../symfony/polyfill-ctype/bootstrap80.php | 46 + .../symfony/polyfill-ctype/composer.json | 41 + .../vendor/symfony/polyfill-mbstring/LICENSE | 19 + .../symfony/polyfill-mbstring/Mbstring.php | 947 ++ .../symfony/polyfill-mbstring/README.md | 13 + .../Resources/unidata/caseFolding.php | 119 + .../Resources/unidata/lowerCase.php | 1397 ++ .../Resources/unidata/titleCaseRegexp.php | 5 + .../Resources/unidata/upperCase.php | 1489 ++ .../symfony/polyfill-mbstring/bootstrap.php | 151 + .../symfony/polyfill-mbstring/bootstrap80.php | 147 + .../symfony/polyfill-mbstring/composer.json | 41 + Sources/vendor/twig/twig/CHANGELOG | 185 + Sources/vendor/twig/twig/LICENSE | 27 + Sources/vendor/twig/twig/README.rst | 23 + Sources/vendor/twig/twig/composer.json | 45 + .../twig/twig/src/Cache/CacheInterface.php | 46 + .../twig/twig/src/Cache/FilesystemCache.php | 87 + .../vendor/twig/twig/src/Cache/NullCache.php | 38 + Sources/vendor/twig/twig/src/Compiler.php | 223 + Sources/vendor/twig/twig/src/Environment.php | 841 ++ Sources/vendor/twig/twig/src/Error/Error.php | 227 + .../twig/twig/src/Error/LoaderError.php | 21 + .../twig/twig/src/Error/RuntimeError.php | 22 + .../twig/twig/src/Error/SyntaxError.php | 46 + .../vendor/twig/twig/src/ExpressionParser.php | 842 ++ .../twig/src/Extension/AbstractExtension.php | 45 + .../twig/twig/src/Extension/CoreExtension.php | 1752 +++ .../twig/src/Extension/DebugExtension.php | 64 + .../twig/src/Extension/EscaperExtension.php | 416 + .../twig/src/Extension/ExtensionInterface.php | 76 + .../twig/src/Extension/GlobalsInterface.php | 28 + .../twig/src/Extension/OptimizerExtension.php | 29 + .../twig/src/Extension/ProfilerExtension.php | 52 + .../Extension/RuntimeExtensionInterface.php | 19 + .../twig/src/Extension/SandboxExtension.php | 123 + .../twig/src/Extension/StagingExtension.php | 100 + .../src/Extension/StringLoaderExtension.php | 42 + Sources/vendor/twig/twig/src/ExtensionSet.php | 480 + .../src/FileExtensionEscapingStrategy.php | 60 + Sources/vendor/twig/twig/src/Lexer.php | 519 + .../twig/twig/src/Loader/ArrayLoader.php | 77 + .../twig/twig/src/Loader/ChainLoader.php | 119 + .../twig/twig/src/Loader/FilesystemLoader.php | 283 + .../twig/twig/src/Loader/LoaderInterface.php | 49 + Sources/vendor/twig/twig/src/Markup.php | 52 + .../twig/twig/src/Node/AutoEscapeNode.php | 38 + .../vendor/twig/twig/src/Node/BlockNode.php | 44 + .../twig/twig/src/Node/BlockReferenceNode.php | 36 + .../vendor/twig/twig/src/Node/BodyNode.php | 21 + .../twig/src/Node/CheckSecurityCallNode.php | 28 + .../twig/twig/src/Node/CheckSecurityNode.php | 88 + .../twig/twig/src/Node/CheckToStringNode.php | 45 + .../twig/twig/src/Node/DeprecatedNode.php | 53 + Sources/vendor/twig/twig/src/Node/DoNode.php | 38 + .../vendor/twig/twig/src/Node/EmbedNode.php | 48 + .../Node/Expression/AbstractExpression.php | 24 + .../src/Node/Expression/ArrayExpression.php | 135 + .../Expression/ArrowFunctionExpression.php | 64 + .../Node/Expression/AssignNameExpression.php | 27 + .../Node/Expression/Binary/AbstractBinary.php | 42 + .../src/Node/Expression/Binary/AddBinary.php | 23 + .../src/Node/Expression/Binary/AndBinary.php | 23 + .../Expression/Binary/BitwiseAndBinary.php | 23 + .../Expression/Binary/BitwiseOrBinary.php | 23 + .../Expression/Binary/BitwiseXorBinary.php | 23 + .../Node/Expression/Binary/ConcatBinary.php | 23 + .../src/Node/Expression/Binary/DivBinary.php | 23 + .../Node/Expression/Binary/EndsWithBinary.php | 35 + .../Node/Expression/Binary/EqualBinary.php | 39 + .../Node/Expression/Binary/FloorDivBinary.php | 29 + .../Node/Expression/Binary/GreaterBinary.php | 39 + .../Expression/Binary/GreaterEqualBinary.php | 39 + .../Node/Expression/Binary/HasEveryBinary.php | 33 + .../Node/Expression/Binary/HasSomeBinary.php | 33 + .../src/Node/Expression/Binary/InBinary.php | 33 + .../src/Node/Expression/Binary/LessBinary.php | 39 + .../Expression/Binary/LessEqualBinary.php | 39 + .../Node/Expression/Binary/MatchesBinary.php | 33 + .../src/Node/Expression/Binary/ModBinary.php | 23 + .../src/Node/Expression/Binary/MulBinary.php | 23 + .../Node/Expression/Binary/NotEqualBinary.php | 39 + .../Node/Expression/Binary/NotInBinary.php | 33 + .../src/Node/Expression/Binary/OrBinary.php | 23 + .../Node/Expression/Binary/PowerBinary.php | 22 + .../Node/Expression/Binary/RangeBinary.php | 33 + .../Expression/Binary/SpaceshipBinary.php | 22 + .../Expression/Binary/StartsWithBinary.php | 35 + .../src/Node/Expression/Binary/SubBinary.php | 23 + .../Expression/BlockReferenceExpression.php | 86 + .../src/Node/Expression/CallExpression.php | 321 + .../Node/Expression/ConditionalExpression.php | 36 + .../Node/Expression/ConstantExpression.php | 28 + .../Node/Expression/Filter/DefaultFilter.php | 52 + .../src/Node/Expression/FilterExpression.php | 40 + .../Node/Expression/FunctionExpression.php | 43 + .../src/Node/Expression/GetAttrExpression.php | 87 + .../twig/src/Node/Expression/InlinePrint.php | 35 + .../Node/Expression/MethodCallExpression.php | 62 + .../src/Node/Expression/NameExpression.php | 97 + .../Expression/NullCoalesceExpression.php | 60 + .../src/Node/Expression/ParentExpression.php | 46 + .../Node/Expression/TempNameExpression.php | 31 + .../src/Node/Expression/Test/ConstantTest.php | 49 + .../src/Node/Expression/Test/DefinedTest.php | 74 + .../Node/Expression/Test/DivisiblebyTest.php | 36 + .../src/Node/Expression/Test/EvenTest.php | 35 + .../src/Node/Expression/Test/NullTest.php | 34 + .../twig/src/Node/Expression/Test/OddTest.php | 35 + .../src/Node/Expression/Test/SameasTest.php | 34 + .../src/Node/Expression/TestExpression.php | 42 + .../Node/Expression/Unary/AbstractUnary.php | 34 + .../src/Node/Expression/Unary/NegUnary.php | 23 + .../src/Node/Expression/Unary/NotUnary.php | 23 + .../src/Node/Expression/Unary/PosUnary.php | 23 + .../Node/Expression/VariadicExpression.php | 24 + .../vendor/twig/twig/src/Node/FlushNode.php | 35 + .../vendor/twig/twig/src/Node/ForLoopNode.php | 49 + Sources/vendor/twig/twig/src/Node/ForNode.php | 107 + Sources/vendor/twig/twig/src/Node/IfNode.php | 73 + .../vendor/twig/twig/src/Node/ImportNode.php | 63 + .../vendor/twig/twig/src/Node/IncludeNode.php | 106 + .../vendor/twig/twig/src/Node/MacroNode.php | 113 + .../vendor/twig/twig/src/Node/ModuleNode.php | 464 + Sources/vendor/twig/twig/src/Node/Node.php | 179 + .../twig/src/Node/NodeCaptureInterface.php | 21 + .../twig/src/Node/NodeOutputInterface.php | 21 + .../vendor/twig/twig/src/Node/PrintNode.php | 39 + .../vendor/twig/twig/src/Node/SandboxNode.php | 52 + Sources/vendor/twig/twig/src/Node/SetNode.php | 105 + .../vendor/twig/twig/src/Node/TextNode.php | 38 + .../vendor/twig/twig/src/Node/WithNode.php | 70 + .../vendor/twig/twig/src/NodeTraverser.php | 76 + .../src/NodeVisitor/AbstractNodeVisitor.php | 49 + .../src/NodeVisitor/EscaperNodeVisitor.php | 208 + .../MacroAutoImportNodeVisitor.php | 74 + .../src/NodeVisitor/NodeVisitorInterface.php | 46 + .../src/NodeVisitor/OptimizerNodeVisitor.php | 217 + .../NodeVisitor/SafeAnalysisNodeVisitor.php | 160 + .../src/NodeVisitor/SandboxNodeVisitor.php | 136 + Sources/vendor/twig/twig/src/Parser.php | 348 + .../twig/src/Profiler/Dumper/BaseDumper.php | 63 + .../src/Profiler/Dumper/BlackfireDumper.php | 72 + .../twig/src/Profiler/Dumper/HtmlDumper.php | 47 + .../twig/src/Profiler/Dumper/TextDumper.php | 35 + .../src/Profiler/Node/EnterProfileNode.php | 42 + .../src/Profiler/Node/LeaveProfileNode.php | 36 + .../NodeVisitor/ProfilerNodeVisitor.php | 70 + .../vendor/twig/twig/src/Profiler/Profile.php | 181 + .../RuntimeLoader/ContainerRuntimeLoader.php | 37 + .../RuntimeLoader/FactoryRuntimeLoader.php | 41 + .../RuntimeLoader/RuntimeLoaderInterface.php | 27 + .../twig/twig/src/Sandbox/SecurityError.php | 23 + .../Sandbox/SecurityNotAllowedFilterError.php | 33 + .../SecurityNotAllowedFunctionError.php | 33 + .../Sandbox/SecurityNotAllowedMethodError.php | 40 + .../SecurityNotAllowedPropertyError.php | 40 + .../Sandbox/SecurityNotAllowedTagError.php | 33 + .../twig/twig/src/Sandbox/SecurityPolicy.php | 126 + .../src/Sandbox/SecurityPolicyInterface.php | 45 + Sources/vendor/twig/twig/src/Source.php | 51 + Sources/vendor/twig/twig/src/Template.php | 422 + .../vendor/twig/twig/src/TemplateWrapper.php | 109 + .../twig/src/Test/IntegrationTestCase.php | 265 + .../twig/twig/src/Test/NodeTestCase.php | 65 + Sources/vendor/twig/twig/src/Token.php | 184 + .../src/TokenParser/AbstractTokenParser.php | 32 + .../twig/src/TokenParser/ApplyTokenParser.php | 60 + .../src/TokenParser/AutoEscapeTokenParser.php | 58 + .../twig/src/TokenParser/BlockTokenParser.php | 78 + .../src/TokenParser/DeprecatedTokenParser.php | 43 + .../twig/src/TokenParser/DoTokenParser.php | 38 + .../twig/src/TokenParser/EmbedTokenParser.php | 73 + .../src/TokenParser/ExtendsTokenParser.php | 52 + .../twig/src/TokenParser/FlushTokenParser.php | 38 + .../twig/src/TokenParser/ForTokenParser.php | 78 + .../twig/src/TokenParser/FromTokenParser.php | 66 + .../twig/src/TokenParser/IfTokenParser.php | 89 + .../src/TokenParser/ImportTokenParser.php | 44 + .../src/TokenParser/IncludeTokenParser.php | 69 + .../twig/src/TokenParser/MacroTokenParser.php | 66 + .../src/TokenParser/SandboxTokenParser.php | 66 + .../twig/src/TokenParser/SetTokenParser.php | 73 + .../src/TokenParser/TokenParserInterface.php | 46 + .../twig/src/TokenParser/UseTokenParser.php | 73 + .../twig/src/TokenParser/WithTokenParser.php | 56 + Sources/vendor/twig/twig/src/TokenStream.php | 132 + Sources/vendor/twig/twig/src/TwigFilter.php | 134 + Sources/vendor/twig/twig/src/TwigFunction.php | 122 + Sources/vendor/twig/twig/src/TwigTest.php | 100 + .../twig/src/Util/DeprecationCollector.php | 77 + .../twig/src/Util/TemplateDirIterator.php | 36 + 292 files changed, 39219 insertions(+), 299 deletions(-) create mode 100644 .env.local rename Documents/Diagramme/{ => Analyse/Besoins}/DiagrammeCasUtilisationFitWeb.drawio (100%) create mode 100644 Documents/Diagramme/Analyse/Besoins/UseCase.plantuml create mode 100644 Documents/Diagramme/Analyse/Besoins/UseCaseGeneral.plantuml create mode 100644 Documents/Diagramme/Analyse/Class/ClassDiagram.plantuml create mode 100644 Documents/Diagramme/Analyse/Class/DomainDiagram.plantuml create mode 100644 Documents/Diagramme/Analyse/Class/MLD.plantuml create mode 100644 Documents/Diagramme/Analyse/Class/Merise.planuml create mode 100644 Documents/Diagramme/Analyse/Class/emre.ben create mode 100644 Documents/Diagramme/Analyse/Class/package/models.plantuml create mode 100644 Documents/Diagramme/Analyse/Class/test2.plantuml create mode 100644 Documents/Diagramme/empty/test.ben create mode 100644 Sources/composer.lock create mode 100755 Sources/composer.phar create mode 100644 Sources/config/.htaccess create mode 100644 Sources/config/tailwind.config.js create mode 100644 Sources/package-lock.json create mode 100644 Sources/package.json create mode 100644 Sources/public/index.php create mode 100644 Sources/src/app/App.php create mode 100644 Sources/src/app/controller/ActivityController.php create mode 100644 Sources/src/app/controller/AnalysisController.php create mode 100644 Sources/src/app/controller/AthleteController.php create mode 100644 Sources/src/app/controller/BaseController.php create mode 100644 Sources/src/app/controller/CoachController.php create mode 100644 Sources/src/app/controller/SocialNetworkingController.php create mode 100644 Sources/src/app/shared/exception/NotImplementedException.php create mode 100644 Sources/src/app/shared/request/Request.php create mode 100644 Sources/src/app/shared/response/RedirectResponse.php create mode 100644 Sources/src/app/shared/response/Response.php rename Sources/src/{ => app}/shared/router/AltoRouter.php (100%) rename Sources/src/{ => app}/shared/router/Router.php (100%) rename Sources/src/{ => app}/utils/Validation.php (99%) create mode 100644 Sources/src/app/view/global.css create mode 100644 Sources/src/app/view/pages/home.php create mode 100644 Sources/src/console/ConsoleApp.php create mode 100644 Sources/src/console/console.ben delete mode 100644 Sources/src/core/network/service/AuthService.php delete mode 100644 Sources/src/core/network/service/IAuthService.php delete mode 100644 Sources/src/core/stub/ActivitiesManager.php delete mode 100644 Sources/src/core/stub/StubData.php delete mode 100644 Sources/src/core/stub/UserManager.php create mode 100644 Sources/src/data/core/database/Dal/Connexion.php create mode 100644 Sources/src/data/core/database/Dal/notes.ben create mode 100644 Sources/src/data/core/network/service/AuthService.php create mode 100644 Sources/src/data/core/network/service/IAuthService.php create mode 100644 Sources/src/data/core/repository/UserRepository.php create mode 100644 Sources/src/data/manager/DataManager.php create mode 100644 Sources/src/data/model/Activity.php create mode 100644 Sources/src/data/model/Athlete.php create mode 100644 Sources/src/data/model/Coach.php create mode 100644 Sources/src/data/model/DataSources.php create mode 100644 Sources/src/data/model/Event.php create mode 100644 Sources/src/data/model/HeartRateData.php create mode 100644 Sources/src/data/model/HeartRateMeasurement.php create mode 100644 Sources/src/data/model/HeartRateZone.php create mode 100644 Sources/src/data/model/Location.php create mode 100644 Sources/src/data/model/Montre.php create mode 100644 Sources/src/data/model/Notification.php create mode 100644 Sources/src/data/model/Statistique.php create mode 100644 Sources/src/data/model/Training.php create mode 100644 Sources/src/data/model/User.php create mode 100644 Sources/src/data/model/enum/Role.php create mode 100644 Sources/src/data/model/notes.ben create mode 100644 Sources/src/data/model/repository/IActivityRepository.php create mode 100644 Sources/src/data/model/repository/IGenericRepository.php create mode 100644 Sources/src/data/model/repository/IUserRepository.php create mode 100644 Sources/src/data/stub/ActivityManager.php create mode 100644 Sources/src/data/stub/StubData.php create mode 100644 Sources/src/data/stub/UserManager.php create mode 100644 Sources/src/data/stub/files/Afternoon_Bike_Ride.fit create mode 100644 Sources/src/data/stub/files/Afternoon_Bike_Ride.gpx create mode 100644 Sources/src/data/stub/repository/ActivityRepository.php rename Sources/{index.php => src/data/stub/repository/DataSourcesRepositoty.php} (100%) create mode 100644 Sources/src/data/stub/repository/UserRepository.php create mode 100644 Sources/src/data/stub/service/AuthService.php delete mode 100644 Sources/src/utils/SplClassLoader.php create mode 100644 Sources/vendor/autoload.php create mode 100644 Sources/vendor/composer/ClassLoader.php create mode 100644 Sources/vendor/composer/InstalledVersions.php create mode 100644 Sources/vendor/composer/LICENSE create mode 100644 Sources/vendor/composer/autoload_classmap.php create mode 100644 Sources/vendor/composer/autoload_files.php create mode 100644 Sources/vendor/composer/autoload_namespaces.php create mode 100644 Sources/vendor/composer/autoload_psr4.php create mode 100644 Sources/vendor/composer/autoload_real.php create mode 100644 Sources/vendor/composer/autoload_static.php create mode 100644 Sources/vendor/composer/installed.json create mode 100644 Sources/vendor/composer/installed.php create mode 100644 Sources/vendor/composer/platform_check.php create mode 100644 Sources/vendor/symfony/polyfill-ctype/Ctype.php create mode 100644 Sources/vendor/symfony/polyfill-ctype/LICENSE create mode 100644 Sources/vendor/symfony/polyfill-ctype/README.md create mode 100644 Sources/vendor/symfony/polyfill-ctype/bootstrap.php create mode 100644 Sources/vendor/symfony/polyfill-ctype/bootstrap80.php create mode 100644 Sources/vendor/symfony/polyfill-ctype/composer.json create mode 100644 Sources/vendor/symfony/polyfill-mbstring/LICENSE create mode 100644 Sources/vendor/symfony/polyfill-mbstring/Mbstring.php create mode 100644 Sources/vendor/symfony/polyfill-mbstring/README.md create mode 100644 Sources/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php create mode 100644 Sources/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php create mode 100644 Sources/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php create mode 100644 Sources/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php create mode 100644 Sources/vendor/symfony/polyfill-mbstring/bootstrap.php create mode 100644 Sources/vendor/symfony/polyfill-mbstring/bootstrap80.php create mode 100644 Sources/vendor/symfony/polyfill-mbstring/composer.json create mode 100644 Sources/vendor/twig/twig/CHANGELOG create mode 100644 Sources/vendor/twig/twig/LICENSE create mode 100644 Sources/vendor/twig/twig/README.rst create mode 100644 Sources/vendor/twig/twig/composer.json create mode 100644 Sources/vendor/twig/twig/src/Cache/CacheInterface.php create mode 100644 Sources/vendor/twig/twig/src/Cache/FilesystemCache.php create mode 100644 Sources/vendor/twig/twig/src/Cache/NullCache.php create mode 100644 Sources/vendor/twig/twig/src/Compiler.php create mode 100644 Sources/vendor/twig/twig/src/Environment.php create mode 100644 Sources/vendor/twig/twig/src/Error/Error.php create mode 100644 Sources/vendor/twig/twig/src/Error/LoaderError.php create mode 100644 Sources/vendor/twig/twig/src/Error/RuntimeError.php create mode 100644 Sources/vendor/twig/twig/src/Error/SyntaxError.php create mode 100644 Sources/vendor/twig/twig/src/ExpressionParser.php create mode 100644 Sources/vendor/twig/twig/src/Extension/AbstractExtension.php create mode 100644 Sources/vendor/twig/twig/src/Extension/CoreExtension.php create mode 100644 Sources/vendor/twig/twig/src/Extension/DebugExtension.php create mode 100644 Sources/vendor/twig/twig/src/Extension/EscaperExtension.php create mode 100644 Sources/vendor/twig/twig/src/Extension/ExtensionInterface.php create mode 100644 Sources/vendor/twig/twig/src/Extension/GlobalsInterface.php create mode 100644 Sources/vendor/twig/twig/src/Extension/OptimizerExtension.php create mode 100644 Sources/vendor/twig/twig/src/Extension/ProfilerExtension.php create mode 100644 Sources/vendor/twig/twig/src/Extension/RuntimeExtensionInterface.php create mode 100644 Sources/vendor/twig/twig/src/Extension/SandboxExtension.php create mode 100644 Sources/vendor/twig/twig/src/Extension/StagingExtension.php create mode 100644 Sources/vendor/twig/twig/src/Extension/StringLoaderExtension.php create mode 100644 Sources/vendor/twig/twig/src/ExtensionSet.php create mode 100644 Sources/vendor/twig/twig/src/FileExtensionEscapingStrategy.php create mode 100644 Sources/vendor/twig/twig/src/Lexer.php create mode 100644 Sources/vendor/twig/twig/src/Loader/ArrayLoader.php create mode 100644 Sources/vendor/twig/twig/src/Loader/ChainLoader.php create mode 100644 Sources/vendor/twig/twig/src/Loader/FilesystemLoader.php create mode 100644 Sources/vendor/twig/twig/src/Loader/LoaderInterface.php create mode 100644 Sources/vendor/twig/twig/src/Markup.php create mode 100644 Sources/vendor/twig/twig/src/Node/AutoEscapeNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/BlockNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/BlockReferenceNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/BodyNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/CheckSecurityCallNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/CheckSecurityNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/CheckToStringNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/DeprecatedNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/DoNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/EmbedNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/AbstractExpression.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/ArrayExpression.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/ArrowFunctionExpression.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/AssignNameExpression.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/AbstractBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/AddBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/AndBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/ConcatBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/DivBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/EqualBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/GreaterBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/HasEveryBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/HasSomeBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/InBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/LessBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/MatchesBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/ModBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/MulBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/NotInBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/OrBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/PowerBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/RangeBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/SpaceshipBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Binary/SubBinary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/BlockReferenceExpression.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/CallExpression.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/ConditionalExpression.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/ConstantExpression.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Filter/DefaultFilter.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/FilterExpression.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/FunctionExpression.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/GetAttrExpression.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/InlinePrint.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/MethodCallExpression.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/NameExpression.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/NullCoalesceExpression.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/ParentExpression.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/TempNameExpression.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Test/ConstantTest.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Test/DefinedTest.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Test/EvenTest.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Test/NullTest.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Test/OddTest.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Test/SameasTest.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/TestExpression.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Unary/AbstractUnary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Unary/NegUnary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Unary/NotUnary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/Unary/PosUnary.php create mode 100644 Sources/vendor/twig/twig/src/Node/Expression/VariadicExpression.php create mode 100644 Sources/vendor/twig/twig/src/Node/FlushNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/ForLoopNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/ForNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/IfNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/ImportNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/IncludeNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/MacroNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/ModuleNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/Node.php create mode 100644 Sources/vendor/twig/twig/src/Node/NodeCaptureInterface.php create mode 100644 Sources/vendor/twig/twig/src/Node/NodeOutputInterface.php create mode 100644 Sources/vendor/twig/twig/src/Node/PrintNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/SandboxNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/SetNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/TextNode.php create mode 100644 Sources/vendor/twig/twig/src/Node/WithNode.php create mode 100644 Sources/vendor/twig/twig/src/NodeTraverser.php create mode 100644 Sources/vendor/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php create mode 100644 Sources/vendor/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php create mode 100644 Sources/vendor/twig/twig/src/NodeVisitor/MacroAutoImportNodeVisitor.php create mode 100644 Sources/vendor/twig/twig/src/NodeVisitor/NodeVisitorInterface.php create mode 100644 Sources/vendor/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php create mode 100644 Sources/vendor/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php create mode 100644 Sources/vendor/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php create mode 100644 Sources/vendor/twig/twig/src/Parser.php create mode 100644 Sources/vendor/twig/twig/src/Profiler/Dumper/BaseDumper.php create mode 100644 Sources/vendor/twig/twig/src/Profiler/Dumper/BlackfireDumper.php create mode 100644 Sources/vendor/twig/twig/src/Profiler/Dumper/HtmlDumper.php create mode 100644 Sources/vendor/twig/twig/src/Profiler/Dumper/TextDumper.php create mode 100644 Sources/vendor/twig/twig/src/Profiler/Node/EnterProfileNode.php create mode 100644 Sources/vendor/twig/twig/src/Profiler/Node/LeaveProfileNode.php create mode 100644 Sources/vendor/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php create mode 100644 Sources/vendor/twig/twig/src/Profiler/Profile.php create mode 100644 Sources/vendor/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php create mode 100644 Sources/vendor/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php create mode 100644 Sources/vendor/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php create mode 100644 Sources/vendor/twig/twig/src/Sandbox/SecurityError.php create mode 100644 Sources/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.php create mode 100644 Sources/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php create mode 100644 Sources/vendor/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php create mode 100644 Sources/vendor/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php create mode 100644 Sources/vendor/twig/twig/src/Sandbox/SecurityNotAllowedTagError.php create mode 100644 Sources/vendor/twig/twig/src/Sandbox/SecurityPolicy.php create mode 100644 Sources/vendor/twig/twig/src/Sandbox/SecurityPolicyInterface.php create mode 100644 Sources/vendor/twig/twig/src/Source.php create mode 100644 Sources/vendor/twig/twig/src/Template.php create mode 100644 Sources/vendor/twig/twig/src/TemplateWrapper.php create mode 100644 Sources/vendor/twig/twig/src/Test/IntegrationTestCase.php create mode 100644 Sources/vendor/twig/twig/src/Test/NodeTestCase.php create mode 100644 Sources/vendor/twig/twig/src/Token.php create mode 100644 Sources/vendor/twig/twig/src/TokenParser/AbstractTokenParser.php create mode 100644 Sources/vendor/twig/twig/src/TokenParser/ApplyTokenParser.php create mode 100644 Sources/vendor/twig/twig/src/TokenParser/AutoEscapeTokenParser.php create mode 100644 Sources/vendor/twig/twig/src/TokenParser/BlockTokenParser.php create mode 100644 Sources/vendor/twig/twig/src/TokenParser/DeprecatedTokenParser.php create mode 100644 Sources/vendor/twig/twig/src/TokenParser/DoTokenParser.php create mode 100644 Sources/vendor/twig/twig/src/TokenParser/EmbedTokenParser.php create mode 100644 Sources/vendor/twig/twig/src/TokenParser/ExtendsTokenParser.php create mode 100644 Sources/vendor/twig/twig/src/TokenParser/FlushTokenParser.php create mode 100644 Sources/vendor/twig/twig/src/TokenParser/ForTokenParser.php create mode 100644 Sources/vendor/twig/twig/src/TokenParser/FromTokenParser.php create mode 100644 Sources/vendor/twig/twig/src/TokenParser/IfTokenParser.php create mode 100644 Sources/vendor/twig/twig/src/TokenParser/ImportTokenParser.php create mode 100644 Sources/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php create mode 100644 Sources/vendor/twig/twig/src/TokenParser/MacroTokenParser.php create mode 100644 Sources/vendor/twig/twig/src/TokenParser/SandboxTokenParser.php create mode 100644 Sources/vendor/twig/twig/src/TokenParser/SetTokenParser.php create mode 100644 Sources/vendor/twig/twig/src/TokenParser/TokenParserInterface.php create mode 100644 Sources/vendor/twig/twig/src/TokenParser/UseTokenParser.php create mode 100644 Sources/vendor/twig/twig/src/TokenParser/WithTokenParser.php create mode 100644 Sources/vendor/twig/twig/src/TokenStream.php create mode 100644 Sources/vendor/twig/twig/src/TwigFilter.php create mode 100644 Sources/vendor/twig/twig/src/TwigFunction.php create mode 100644 Sources/vendor/twig/twig/src/TwigTest.php create mode 100644 Sources/vendor/twig/twig/src/Util/DeprecationCollector.php create mode 100644 Sources/vendor/twig/twig/src/Util/TemplateDirIterator.php diff --git a/.drone.yml b/.drone.yml index 53acd087..55ad540f 100644 --- a/.drone.yml +++ b/.drone.yml @@ -9,30 +9,31 @@ trigger: - push steps: - - name: test - image: php:7.4 - commands: - - cd Sources - # Installe les dépendances PHP si nécessaire - - composer install - # - composer require phpunit/phpunit - - vendor/bin/phpunit common/Tests + # - name: test + # image: php:7.4 + # commands: + # - cd Sources + # # Installe les dépendances PHP si nécessaire + # - composer install + # # - composer require phpunit/phpunit + # - vendor/bin/phpunit common/Tests - # build CONTAINER for app-build on flutter IMAGE + # build test X - name: docker-build - build: Sources/src/config - ports: - - "8080:80" - volumes: - - ./php/vhosts:/etc/apache2/sites-enabled - - ./:/var/www - restart: always + image: php.8.2-apache + commands: + - cd folderA/ + - npm run build:css + - build cmd + # Sonar static code analisis deployment ✔️ - name: code-analysis - image: ##### + image: php:8.2-cli environment: SONAR_TOKEN: from_secret: SONAR_TOKEN + settings: + sources: ./Sources/ commands: - export SONAR_SCANNER_VERSION=4.7.0.2747 - export SONAR_SCANNER_HOME=$HOME/.sonar/sonar-scanner-$SONAR_SCANNER_VERSION-linux @@ -40,64 +41,24 @@ steps: - unzip -o $HOME/.sonar/sonar-scanner.zip -d $HOME/.sonar/ - export PATH=$SONAR_SCANNER_HOME/bin:$PATH - export SONAR_SCANNER_OPTS="-server" - - sonar-scanner -D sonar.projectKey=Bowl_in -D sonar.sources=./Sources/bowlin_project -D sonar.host.url=https://codefirst.iut.uca.fr/sonar -D sonar.flutter.coverage.reportPath=./Sources/bowlin_project/coverage/lcov.info - depends_on: [ test ] + - sonar-scanner -D sonar.projectKey=HeartTrack -D sonar.sources=./Sources -D sonar.host.url=https://codefirst.iut.uca.fr/sonar + # -D sonar.flutter.coverage.reportPath=./Sources/bowlin_project/coverage/lcov.info + depends_on: [ docker-build ] - - # database container deployment - - name: container-mysql - image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dockerproxy-clientdrone:latest - volumes: - - db-data:/var/lib/mysql - environment: - IMAGENAME: mariadb:10 - CONTAINERNAME: mysql - COMMAND: create - # OVERWRITE: false - # should be true - PRIVATE: false - CODEFIRST_CLIENTDRONE_ENV_MARIADB_ROOT_PASSWORD: - from_secret: db_root_password - CODEFIRST_CLIENTDRONE_ENV_MARIADB_DATABASE: - from_secret: db_database - CODEFIRST_CLIENTDRONE_ENV_MARIADB_USER: - from_secret: db_user - CODEFIRST_CLIENTDRONE_ENV_MARIADB_PASSWORD: - from_secret: db_password - ADMINS: antoineperederii,antoinepinagot,kevinmonteiro,paullevrault,davidd_almeida - - - name: phpmyadmin-container - # should find a goog version - image: phpmyadmin - restart: always - ports: - - 8082:80 - environment: - PMA_HOST: container-mysql - depends_on: - -container-mysql - networks: - - admin - - - - name: docker-push + # build image and push on the registry ✔️ + - name: docker-build-and-push image: plugins/docker settings: username: - from_secret: DOCKER_USERNAME + from_secret: SECRET_REGISTRY_USERNAME password: - from_secret: DOCKER_PASSWORD - repo: myusername/my-php-app - tags: latest - auto_tag: true - registry: docker.io + from_secret: SECRET_REGISTRY_PASSWORD + dockerfile: Sources/config + context: Sources + registry: hub.codefirst.iut.uca.fr + repo: https://codefirst.iut.uca.fr/git/HeartDev/Web + depends_on: [ docker-build ] - - name: deploy-container - image: docker - commands: - - docker stop my-php-container || true - - docker rm my-php-container || true - - docker run -d --name my-php-container -p 80:80 myusername/my-php-app - name: notify image: ruby:2.1 rules: diff --git a/.env.local b/.env.local new file mode 100644 index 00000000..868d6b11 --- /dev/null +++ b/.env.local @@ -0,0 +1 @@ +# not comited \ No newline at end of file diff --git a/.gitignore b/.gitignore index becd7966..79c7b354 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,8 @@ .idea +.ben +.txt node_modules +dist .vscode *.swp *.swo diff --git a/Documents/Diagramme/DiagrammeCasUtilisationFitWeb.drawio b/Documents/Diagramme/Analyse/Besoins/DiagrammeCasUtilisationFitWeb.drawio similarity index 100% rename from Documents/Diagramme/DiagrammeCasUtilisationFitWeb.drawio rename to Documents/Diagramme/Analyse/Besoins/DiagrammeCasUtilisationFitWeb.drawio diff --git a/Documents/Diagramme/Analyse/Besoins/UseCase.plantuml b/Documents/Diagramme/Analyse/Besoins/UseCase.plantuml new file mode 100644 index 00000000..d1446342 --- /dev/null +++ b/Documents/Diagramme/Analyse/Besoins/UseCase.plantuml @@ -0,0 +1,274 @@ + +@startuml Diagramme de cas d'utilisation Clients +left to right direction + +actor Coach as c +actor Sportif as s +s <|-- c + + actor "Professionnel de la Santé" as HealthProfessional +package "Applications d'Analyse de Fréquence Cardiaque" { + + package Web { + ' ---------------------------------- Sportif ---------------------------------- + + usecase "Analyser Données de Fréquence Cardiaque" as UC1 + usecase "Statistiques de Condition Physique" as UC2 + usecase "Gestion Sociale" as UC3 + usecase "Gérer Mes Informations de Compte" as UC4 + usecase "Personnaliser Mon Profil Public" as UC19 + usecase "Rechercher des Utilisateurs" as UC5 + usecase "CRUD Amis" as UC6 + usecase "Visualiser Analyse Fréquence Cardiaque" as UC26 + usecase "Visualiser Activités" as UC7 + usecase "Partager Mes Adnalyses" as UC8 + usecase "Partager Mes Analyses avec Mon Coach" as UC9 + usecase "Gérer la Visibilité de Mes Activités" as UC10 + usecase "Synchroniser un Appareil d'Analyse de Fréquence Cardiaque" as UC11 + usecase "Fournir un Fichier Contenant Mes Activités de Fréquence Cardiaque" as UC12 + usecase "Synchroniser l'App Mobile" as UC13 + usecase "Importer Données FIT/GPX/TCX" as UC14 + usecase "Entrer à la Main Mes Informations de Fréquence Cardiaque" as UC15 + usecase "Fournir Mes Données de Fréquence Cardiaque" as UC16 + usecase "S'Inscrire" as UC17 + usecase "Gérer Mes États de Connexion" as UC18 + usecase "Supprimer Mon Compte" as UC19 + usecase "Configurer Alertes" as UC20 + usecase "Recevoir Alertes Anomalies" as UC21 + usecase "Être Alerté en Cas de Problème de Santé" as UC22 + + ' ---------------------------------- Coach ---------------------------------- + + usecase "Consulter les Statistiques de Ses Athlètes" as UC23 + usecase "CRUD sur les Athlètes" as UC24 + usecase "Alerter un Athlète en Cas de Problème de Santé" as UC25 + usecase "Visualiser Analyse Fréquence Cardiaque Équipe" as UC26 + usecase "Visualiser Activités Équipe" as UC27 + + ' ---------------------------------- HealthProfessional ---------------------------------- + + usecase "Configurer Alertes Équipe" as UC28 + usecase "Recevoir Alertes Anomalies Équipe" as UC29 + } +} + +s --> UC1 +s --> UC2 +s --> UC3 +s --> UC4 +s --> UC5 +s --> UC6 +s --> UC7 +s --> UC8 +s --> UC9 +s --> UC10 +s --> UC11 +s --> UC12 +s --> UC13 +s --> UC14 +s --> UC15 +s --> UC16 +s --> UC17 +s --> UC18 +s --> UC19 +s --> UC20 +s --> UC21 +s --> UC22 + +c --> UC23 +c --> UC24 +c --> UC25 +c --> UC26 +c --> UC27 + + +HealthProfessional --> UC28 +HealthProfessional --> UC29 + +UC5 --> UC6 : include +UC7 --> UC8 : include +UC8 --> UC9 : include +UC9 --> UC10 : include +UC10 --> UC11 : include +UC11 --> UC12 : include +UC13 --> UC14 : include +UC15 --> UC16 : include +UC18 --> UC19 : include +UC20 --> UC21 : include +UC21 --> UC22 : include +UC24 --> UC25 : include +UC26 --> UC27 : include +@enduml + +@startuml + +skinparam { + BackgroundColor LightYellow + ArrowColor Black + Shadowing false + BorderColor Black +} + +package "Models" { + + class "Athlete" { + + ID_Athlete : int + + Name : string + + Email : string + + Password : string + + PublicProfile : text + + WeightHistory : string + + Goals : text + } + + class "Coach" extends Athlete { + + Specialization : string + } + + class "SourceData" { + + ID_Source : int + + Type : string + + Model : string + + Precision : enum + + PurchaseDate : date + + LastUseDate : date + } + + class "Activity" { + + ID_Activity : int + + Type : string + + Date : date + + StartTime : time + + EndTime : time + + GPS_Position : string + + Altitude : float + + File : file + } + + class "HeartRate" { + + ID_HR : int + + Time : time + + BPM : int + + Variability : float + + Variance : float + + StandardDeviation : float + + Average : float + + Max : int + + Min : int + } + + class "Statistic" { + + ID_Statistic : int + + TotalDistance : float + + TotalTime : time + + AverageHR : int + + MaxHR : int + + CaloriesBurned : float + + PersonalRecords : string + } + + class "Training" { + + ID_Training : int + + Date : date + + Description : text + + Exercises : text + + Feedback : text + } + + class "Notification" { + + ID_Notification : int + + Message : text + + Date : date + + Status : enum + + Type : string + + Urgency : enum + } + + class "Event" { + + ID_Event : int + + Name : string + + Description : text + + Date : date + + Location : string + } +} + +package "Repositories" { + + interface "IRepository" { + + find(id : int) : T + + findAll() : List + + save(entity : T) + + delete(entity : T) + } + + class "AthleteRepository" implements "IRepository" { + } + + class "ActivityRepository" implements "IRepository" { + } + + // ... and so on for other entities ... + +} + +package "Services" { + + class "AthleteService" { + + athleteRepo : AthleteRepository + + findAll() : List + + findById(id: int) : Athlete + + save(athlete: Athlete) : bool + + delete(athlete: Athlete) : bool + } + + class "ActivityService" { + + activityRepo : ActivityRepository + + findAll() : List + + findByAthlete(athlete: Athlete) : List + // ... and so on ... + } + + // ... Additional services for other entities ... +} + +package "Controllers" { + + abstract class "BaseController" { + // Common controller methods and attributes + } + + class "AthleteController" extends "BaseController" { + + athleteService : AthleteService + + showProfile(athleteId: int) + + editProfile(athlete: Athlete) + + listAthletes() + } + + class "ActivityController" extends "BaseController" { + + activityService : ActivityService + + showActivities(athleteId: int) + + addActivity(activity: Activity) + // ... and so on ... + } + + // ... Additional controllers for other entities ... +} + +BaseController <|-- AthleteController +BaseController <|-- ActivityController + +Athlete --> Activity : "performs ->" +Coach --> Training : "assigns ->" +Activity --> HeartRate : "contains ->" +Athlete --> Notification : "receives ->" +Coach --> Event : "organizes ->" +Athlete --> Event : "participates in ->" + +AthleteController --> AthleteService +ActivityController --> ActivityService + +AthleteService --> AthleteRepository +ActivityService --> ActivityRepository + +@enduml diff --git a/Documents/Diagramme/Analyse/Besoins/UseCaseGeneral.plantuml b/Documents/Diagramme/Analyse/Besoins/UseCaseGeneral.plantuml new file mode 100644 index 00000000..c7b725f3 --- /dev/null +++ b/Documents/Diagramme/Analyse/Besoins/UseCaseGeneral.plantuml @@ -0,0 +1,50 @@ +@startuml + +left to right direction + +actor Coach as c +actor Sportif as s + +package Dev { + + actor HeartDev as d + package Monitoring { + usecase "Surveiller les services en temps réel" as UCM1 + } + package Admin { + usecase "Administrer les données des utilisateurs" as UCA1 + } +} + +package Client { + + package Web { + usecase "Analyser la fréquence cardiaque" as UC1 + usecase "Statistiques de condition physique" as UC2 + usecase "Gestion sociale" as UC3 + usecase "Consulter les statistiques de ses athlètes" as UC4 + } + + package Mobile { + usecase "Récupérer les Activité et la fréquence cardiaque associées" as UCMobile1 + } +} + +package Server { + usecase "Fournir un web service pour les clients" as UCS1 + usecase "Gérer la base de données" as UCS2 +} + +Web <|-- Mobile +s <|-- c +c --> UC4 +s --> UC1 +s --> UC2 +s --> UC3 +d --> UCM1 +d --> UCA1 +Web --> UCS1 +Mobile --> UCS1 + + +@enduml diff --git a/Documents/Diagramme/Analyse/Class/ClassDiagram.plantuml b/Documents/Diagramme/Analyse/Class/ClassDiagram.plantuml new file mode 100644 index 00000000..2f7d31c1 --- /dev/null +++ b/Documents/Diagramme/Analyse/Class/ClassDiagram.plantuml @@ -0,0 +1,263 @@ +@startuml + +skinparam { + BackgroundColor LightYellow + ArrowColor Black + Shadowing false + BorderColor Black +} + +package "Router" { + class "AltoRouter" { + +match() + } + class "Request" { + + method : string + + uri : string + + headers : array + + body : string + + getParameter(string) : string + } + + class "Response" { + + statusCode : int + + headers : array + + body : string + + setHeader(string, string) : void + + setContent(string) : void + } + + class "RedirectResponse" { + + targetUrl : string + + setTargetUrl(string) : void + } + + interface "Action" { + + execute(Request) : Response + } + + +} + +package "Controllers" { + abstract class "BaseController" { + - redirect(string, int) : RedirectResponse + - redirectToRoute(string, array, int) : RedirectResponse + - renderView(string, array) : string + - render(string, array, Response) : Response + - doRenderView(string, string?, array, string) : string + - doRender(string, string?, array, Response, string) : Response + + abstract index() + + abstract show($id) + } + + class "AthleteController"{ + + index() + + show($id) + + create() + + update($id) + +viewProfile() + +updateProfile() + } + + class HeartRateController { + +model: HeartRateMonitor + +view: IView + +fetchAndDisplayData(): void + } + + class "CoachController" { + + index() + + show($id) + +assignTraining() + } +} + + +package "Services" { + class "AthleteService" { + +createAthlete() + +updateProfile() + } + class "TrainingService" { + +assignTraining() + } + + interface "NotificationStrategy" { + +sendNotification() + } + class "EmailNotification" { + } + class "PushNotification" { + } +} + +package "Factories" { + class "AthleteFactory" { + +createAthlete() : Athlete + } + class WatchFactory { + +createWatch(model: string, user: User): Watch + } +} + +package "Models" { + class "Athlete" { + + ID_Athlete : int + + Name : string + + Email : string + + Password : string + + PublicProfile : text + + WeightHistory : string + + Goals : text + +registerObserver() + +removeObserver() + +notifyObservers() + } + + interface "Observer" { + +update() + } + + class "Coach" extends Athlete { + } + class "Notification" implements Observer { + +update() + } + + interface IHeartRateDataProvider { + +getHeartRateData(): HeartRateData + } + + interface IHeartRateDataObserver { + +update(data: HeartRateData): void + } + + class HeartRateData { + +dataId: int + +timestamp: datetime + +heartRate: int + +location: Location + +activity: Activity + } + + class Location { + +latitude: double + +longitude: double + +altitude: double + } + + class Watch extends SourceData{ + } + + interface IHeartRateZoneProvider { + +getHeartRateZones(): HeartRateZone[] + } + + class HeartRateZoneProvider implements IHeartRateZoneProvider { + +getHeartRateZones(): HeartRateZone[] + } + + class HeartRateMonitor implements IHeartRateDataProvider, Subject { + +deviceId: int + +name: string + +serialNumber: string + +user: User + +heartRateData: HeartRateData[] + +attach(observer: Observer): void + +detach(observer: Observer): void + +notifyObservers(): void + +getHeartRateData(): HeartRateData + } + + class "Activity" { + + ID_Activity : int + + Type : string + + Date : date + + StartTime : time + + EndTime : time + + GPS_Position : string + + Altitude : float + + File : file + } + + class "HeartRate" { + + ID_HR : int + + Time : time + + BPM : int + + Variability : float + + Variance : float + + StandardDeviation : float + + Average : float + + Max : int + + Min : int + } + + class "Statistic" { + + ID_Statistic : int + + TotalDistance : float + + TotalTime : time + + AverageHR : int + + MaxHR : int + + CaloriesBurned : float + + PersonalRecords : string + } + + class "Training" { + + ID_Training : int + + Date : date + + Description : text + + Exercises : text + + Feedback : text + } + + class "Notification" { + + ID_Notification : int + + Message : text + + Date : date + + Status : enum + + Type : string + + Urgency : enum + } + + class "Event" { + + ID_Event : int + + Name : string + + Description : text + + Date : date + + Location : string + } + class "SourceData" { + + ID_Source : int + + Type : string + + Model : string + + Precision : enum + + PurchaseDate : date + + LastUseDate : date + } +} + + +package "Repositories" { + + interface "Repository" { + +findByID() + +save() + +delete() + } + + class "AthleteRepository" implements Repository { + } +} + +AltoRouter --> AthleteController + AthleteController --> AthleteService + AthleteService --> AthleteFactory + AthleteFactory --> Athlete + AthleteService --> NotificationStrategy + + Athlete --> AthleteRepository : uses + Athlete -right-> Observer : notifies + Notification --> Athlete : observes + + @enduml diff --git a/Documents/Diagramme/Analyse/Class/DomainDiagram.plantuml b/Documents/Diagramme/Analyse/Class/DomainDiagram.plantuml new file mode 100644 index 00000000..48290b0f --- /dev/null +++ b/Documents/Diagramme/Analyse/Class/DomainDiagram.plantuml @@ -0,0 +1,56 @@ +@startuml Modèle de Domaine + +!define ENTITY class +!define RELATION composition + +package "Domaine de l'Application d'Analyse de Fréquence Cardiaque" { + + ENTITY User { + + UserID : int + + Username : string + + Email : string + + Password : string + } + + ENTITY Watch { + + WatchID : int + + Model : string + + Brand : string + + UserID : int + } + + ENTITY HeartRateActivity { + + ActivityID : int + + UserID : int + + WatchID : int + + StartTime : datetime + + Duration : int + + Distance : float + } + + ENTITY HeartRateAnalysis { + + AnalysisID : int + + ActivityID : int + + AverageHeartRate : int + + MaxHeartRate : int + + MinHeartRate : int + + Variability : float + + StandardDeviation : float + } + + User --* Watch : Owns + + User --* HeartRateActivity : Records + + HeartRateActivity --* HeartRateAnalysis : Has + + ENTITY Coach { + + CoachID : int + + UserID : int + + PhoneNumber : string + } + + User --o Coach : IsCoachedBy + +} +@enduml diff --git a/Documents/Diagramme/Analyse/Class/MLD.plantuml b/Documents/Diagramme/Analyse/Class/MLD.plantuml new file mode 100644 index 00000000..07057223 --- /dev/null +++ b/Documents/Diagramme/Analyse/Class/MLD.plantuml @@ -0,0 +1,89 @@ +@startuml + +!define ENTITY entity +!define PK "P" +!define FK "F" + +skinparam { + BackgroundColor LightYellow + ArrowColor Black + Shadowing false +} + +package "Base de Données PostgreSQL" { + + ENTITY Utilisateur { + + ID_Utilisateur INT (PK) + + Nom VARCHAR(255) + Prenom VARCHAR(255) + Adresse_e_mail VARCHAR(255) + Mot_de_passe VARCHAR(255) + Date_de_naissance DATE + Autres_informations_de_profil TEXT + } + + ENTITY Montre { + + ID_Montre INT (PK) + + Nom_de_la_montre VARCHAR(255) + Marque_de_la_montre VARCHAR(255) + Numero_de_serie VARCHAR(255) + ID_Utilisateur INT (FK) + } + + ENTITY Activite { + + ID_Activite INT (PK) + + Date_et_heure_de_debut TIMESTAMP + Date_et_heure_de_fin TIMESTAMP + Type_d_activite VARCHAR(255) + ID_Utilisateur INT (FK) + ID_Montre INT (FK) + } + + ENTITY AnalyseFrequenceCardiaque { + + ID_Analyse INT (PK) + + Frequence_cardiaque INT + Date_et_heure_de_l_analyse TIMESTAMP + Donnees_GPS TEXT + ID_Activite INT (FK) + } + + ENTITY Alerte { + + ID_Alerte INT (PK) + + Type_d_alerte VARCHAR(255) + Date_et_heure_de_l_alerte TIMESTAMP + Description_de_l_alerte TEXT + ID_Utilisateur INT (FK) + } + + ENTITY Ami { + + ID_Amitie INT (PK) + + ID_Utilisateur INT + ID_Ami INT (FK) + } + + ENTITY Athlete { + + ID_Athlete INT (PK) + + ID_Utilisateur INT (FK) + ID_Coach INT (FK) + } + + Utilisateur ||--o{ Montre : Possede + Utilisateur ||--o{ Activite : Realise + Activite ||--o{ AnalyseFrequenceCardiaque : Comprend + Utilisateur ||--o{ Alerte : Recoit + Utilisateur }--o{ Ami : EstAmiAvec + Utilisateur ||--o{ Athlete : EstAthlete + + Montre }--o{ Activite : Appartient + Montre }--o{ AnalyseFrequenceCardiaque : Appartient + +} + +@enduml diff --git a/Documents/Diagramme/Analyse/Class/Merise.planuml b/Documents/Diagramme/Analyse/Class/Merise.planuml new file mode 100644 index 00000000..b95a2d21 --- /dev/null +++ b/Documents/Diagramme/Analyse/Class/Merise.planuml @@ -0,0 +1,28 @@ +@startuml + +!define ENTITY entity +!define PK "P" +!define FK "F" +define PK primary key +!define FK foreign key + +skinparam class { + BackgroundColor LightBlue + BorderColor Black + BackgroundColor LightYellow + ArrowColor Black + Shadowing false +} + +package "Modèle de Données" { + + + Utilisateur "1" -- "1" Montre : Possède + Utilisateur "1" -- "n" Activité : Réalise + Activité "1" -- "n" AnalyseFréquenceCardiaque : Comprend + Utilisateur "1" -- "n" Alerte : Reçoit + Utilisateur "n" -- "n" Ami : EstAmiAvec + Utilisateur "1" -- "0-1" Athlète : EstAthlète + + +Objet -> Objet : Message Réflexif \ No newline at end of file diff --git a/Documents/Diagramme/Analyse/Class/emre.ben b/Documents/Diagramme/Analyse/Class/emre.ben new file mode 100644 index 00000000..de55e117 --- /dev/null +++ b/Documents/Diagramme/Analyse/Class/emre.ben @@ -0,0 +1,129 @@ +@startuml +skinparam { + BackgroundColor LightYellow + ArrowColor Black + Shadowing false + BorderColor Black +} + +package "Modèle de Données" { + +entity "Athlète" as athlete { + + ID_Athlète : int + -- + Nom : string + Prénom : string + Email : string + Sexe + Taille : Float + Poids : Float + Mot_de_passe : string +// Profil_public : text + DateNaissance:Date +// Objectifs : text +} + + +entity "Coach" as coach { + + ID_Athlète : int (PK, FK) + -- + // Attributs spécifiques au Coach si nécessaire +} + +entity "SourceDonnée" as source { + + ID_Source : int + -- + Type : string (enum) + Modèle : string + + Précision : enum + Date_d'achat : date + Date_dernière_utilisation : date +} + +entity "Activité" as activity { + + ID_Activité : int + -- + Type : string + Date : date + Heure_de_début : time + Heure_de_fin : time + + Effort_Ressenti: int + Variabilité : float + Variance : float + Ecart-type : float + Moyenne : float + Maximum : int + Minimum : int + Temperature_moyenne: float + // visibilité +} + + +entity "FréquenceCardiaque" as fc { + + ID_FC : int + -- + Altitude : float + Temps : time + Température: float + BPM : int + logitude:float + latidute: float +} + + +entity "Statistique" as stats { + + ID_Statistique : int + -- + Distance_totale : float + Poids: float + Temps_total : time + FC_moyenne : int + FC_max : int + Calories_brûlées : float + Records_personnels : string +} + +entity "Entraînement" as training { + + ID_Entrainement : int + -- + Date : date + Description : text + // Exercices : text + Feedback : text +} + +entity "Notification" as notification { + + ID_Notification : int + -- + Message : text + Date : date + Statut : enum + Type : string + Urgence : enum +} + +entity "Événement" as event { + + ID_Événement : int + -- + Nom : string + Description : text + Date : date + Lieu : string +} +athlete <|-- coach : Spécialisation +athlete --o{ source : Utilise +athlete --o{ activity : Effectue +source --o{ activity : Fournit +activity --o{ fc : Contient +athlete }o--o{ athlete : Est ami avec +athlete --o{ stats : A des +coach --o{ training : Attribue +athlete --o{ training : Reçoit +athlete --o{ notification : Reçoit +athlete --o{ event : Participe à +coach --o{ event : Organise +} + +@enduml diff --git a/Documents/Diagramme/Analyse/Class/package/models.plantuml b/Documents/Diagramme/Analyse/Class/package/models.plantuml new file mode 100644 index 00000000..0904fea7 --- /dev/null +++ b/Documents/Diagramme/Analyse/Class/package/models.plantuml @@ -0,0 +1,64 @@ +@startuml +package "Models" { + class "Athlete" { + + ID_Athlete : int + + Name : string + + Email : string + + Password : string + + PublicProfile : text + + WeightHistory : string + + Goals : text + +registerObserver() + +removeObserver() + +notifyObservers() + } + + abstract class DataManager{ + + } + class StubManager extends DataManager{ + + } + class PlainManager extends DataManager{ + + } + interface GenericDataManager { + +getItems() : List + +getItemById(id: Int) : T + } + class AthleteManager implements GenericDataManager{ + +getItemsByName(substring: String) : List + } + class ActivityManager implements GenericDataManager{ + +getItemsByName(substring: String) : List + } + +} +package "Services" { + class "AthleteService" { + +createAthlete() + +updateProfile() + } + class "AuthService" { + +login() + +register() + +signInWithGoogle() + +signOut() + } + interface "NotificationStrategy" { + +sendNotification() + } + +} +DataManager --> "-activityMgr" ActivityManager +DataManager --> "-activityMgr" ActivityManager +DataManager --> "-athleteMgr" AthleteManager +DataManager --> "+UserCurrent" Athlete + +@enduml + + + + + +@enduml diff --git a/Documents/Diagramme/Analyse/Class/test2.plantuml b/Documents/Diagramme/Analyse/Class/test2.plantuml new file mode 100644 index 00000000..4cccbfc8 --- /dev/null +++ b/Documents/Diagramme/Analyse/Class/test2.plantuml @@ -0,0 +1,92 @@ +@startuml MCD Simplifier (base) +!define PK <> +!define FK <> + + +entity Montre { + MontreID PK + Nom VARCHAR(255) + Marque VARCHAR(255) +} + +entity Activite { + ActiviteID PK + DateHeureDebut TIMESTAMP + DateHeureFin TIMESTAMP + MontreID FK + UtilisateurID FK +} + +entity DonneeFrequenceCardiaque { + DonneeID PK + FrequenceCardiaque INTEGER + DateHeure TIMESTAMP + Latitude DECIMAL(10, 6) + Longitude DECIMAL(10, 6) + Altitude DECIMAL(10, 2) + MontreID FK + ActiviteID FK +} + +entity Coach { + CoachID PK + Nom VARCHAR(255) + Prenom VARCHAR(255) + Email VARCHAR(255) + MotDePasse VARCHAR(255) +} + +entity Athlete { + AthleteID PK + Nom VARCHAR(255) + Prenom VARCHAR(255) + Email VARCHAR(255) + MotDePasse VARCHAR(255) +} + +entity Alertes { + AlerteID PK + Description TEXT + DateHeure TIMESTAMP + UtilisateurID FK +} + +entity Statistiques { + StatistiqueID PK + Moyenne INTEGER + Maximum INTEGER + Minimum INTEGER + Variabilite INTEGER + Variance INTEGER + EcartType INTEGER + ActiviteID FK +} + +entity Groupe { + GroupeID PK + Nom VARCHAR(255) + Description TEXT +} + +entity MembreGroupe { + MembreID PK + UtilisateurID FK + GroupeID FK +} + + +Coach --|{ Athlete : Entraine +Coach --|{ Activite : Visualise +Athlete --|{ Activite : Appartient +Montre --|{ Activite : Utilise +Montre --|{ DonneeFrequenceCardiaque : Fournit +Activite --|{ DonneeFrequenceCardiaque : Contient +Coach --|{ Alertes : Recoit +Athlete --|{ Alertes : Recoit +Athlete --|{ Statistiques : Affecte +Groupe --|{ MembreGroupe : Contient +Coach --|{ MembreGroupe : MembreDe +Athlete --|{ MembreGroupe : MembreDe + +@enduml + diff --git a/Documents/Diagramme/empty/test.ben b/Documents/Diagramme/empty/test.ben new file mode 100644 index 00000000..0386641d --- /dev/null +++ b/Documents/Diagramme/empty/test.ben @@ -0,0 +1,101 @@ +@startuml Merise Model +!define PK <> +!define FK <> + + +entity Utilisateur { + UtilisateurID PK + Nom VARCHAR(255) + Prenom VARCHAR(255) + Email VARCHAR(255) + MotDePasse VARCHAR(255) + DateDeNaissance DATE +} + +entity Montre { + MontreID PK + Nom VARCHAR(255) + Marque VARCHAR(255) + UtilisateurID FK +} + +entity Activite { + ActiviteID PK + DateHeureDebut TIMESTAMP + DateHeureFin TIMESTAMP + MontreID FK + UtilisateurID FK +} + +entity DonneeFrequenceCardiaque { + DonneeID PK + FrequenceCardiaque INTEGER + DateHeure TIMESTAMP + Latitude DECIMAL(10, 6) + Longitude DECIMAL(10, 6) + Altitude DECIMAL(10, 2) + MontreID FK + ActiviteID FK +} + +entity Coach { + CoachID PK + Nom VARCHAR(255) + Prenom VARCHAR(255) + Email VARCHAR(255) + MotDePasse VARCHAR(255) +} + +entity Athlete { + AthleteID PK + Nom VARCHAR(255) + Prenom VARCHAR(255) + Email VARCHAR(255) + MotDePasse VARCHAR(255) +} + +entity Alertes { + AlerteID PK + Description TEXT + DateHeure TIMESTAMP + UtilisateurID FK +} + +entity Statistiques { + StatistiqueID PK + Moyenne INTEGER + Maximum INTEGER + Minimum INTEGER + Variabilite INTEGER + Variance INTEGER + EcartType INTEGER + ActiviteID FK +} + +entity Groupe { + GroupeID PK + Nom VARCHAR(255) + Description TEXT +} + +entity MembreGroupe { + MembreID PK + UtilisateurID FK + GroupeID FK +} + + +Utilisateur --|{ Montre : Possede +Utilisateur --|{ Activite : Realise +Montre --|{ Activite : Utilise +Montre --|{ DonneeFrequenceCardiaque : Fournit +Utilisateur --|{ Alertes : Recoit +Activite --|{ DonneeFrequenceCardiaque : Contient +Utilisateur --|{ Statistiques : Affecte +Coach --|{ Athlete : Entraine +Coach --|{ Activite : Visualise +Athlete --|{ Activite : Appartient +Groupe --|{ MembreGroupe : Contient +Utilisateur --|{ MembreGroupe : MembreDe + +@enduml diff --git a/Sources/.dockerignore b/Sources/.dockerignore index 365317ad..d995f128 100644 --- a/Sources/.dockerignore +++ b/Sources/.dockerignore @@ -1,3 +1,4 @@ vendor/ node_modules/ -.env +.env.local + diff --git a/Sources/composer.json b/Sources/composer.json index e69de29b..ec32f816 100644 --- a/Sources/composer.json +++ b/Sources/composer.json @@ -0,0 +1,18 @@ +{ + "name": "hearttrack/package", + "autoload": { + "psr-4": { + "Core\\": "src/data/core/", + "Controller\\": "src/controller/", + "Stub\\": "src/data/stub/", + "Manager\\": "src/data/manager/", + "Repository\\": "src/data/core/repository/", + "Service\\": "src/data/core/network/service/", + "Shared\\": ["src/shared/request/", "src/shared/response/","src/shared/router/"] , + "Utils\\": "src/utils/" + } + }, + "require": { + "twig/twig": "^3.0" + } +} diff --git a/Sources/composer.lock b/Sources/composer.lock new file mode 100644 index 00000000..5ac198bd --- /dev/null +++ b/Sources/composer.lock @@ -0,0 +1,255 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "21490623fb644929ec5adaa8952849fb", + "packages": [ + { + "name": "symfony/polyfill-ctype", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-26T09:26:14+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "42292d99c55abe617799667f454222c54c60e229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", + "reference": "42292d99c55abe617799667f454222c54c60e229", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-07-28T09:04:16+00:00" + }, + { + "name": "twig/twig", + "version": "v3.7.1", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "a0ce373a0ca3bf6c64b9e3e2124aca502ba39554" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/a0ce373a0ca3bf6c64b9e3e2124aca502ba39554", + "reference": "a0ce373a0ca3bf6c64b9e3e2124aca502ba39554", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" + }, + "require-dev": { + "psr/container": "^1.0|^2.0", + "symfony/phpunit-bridge": "^5.4.9|^6.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.7.1" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "time": "2023-08-28T11:09:02+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.6.0" +} diff --git a/Sources/composer.phar b/Sources/composer.phar new file mode 100755 index 0000000000000000000000000000000000000000..03c724bd9e6c32d89ffff2ea5c8f55d889c2e428 GIT binary patch literal 2861074 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 z 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

#$rxDc7y^3)JQT!GS8(l?n-AU&AbRRFs{ z7l^<#L}{?nLgn_%B8JgY51vXm+>pDISN%q;($0;31}q6-f-JJEjp*{kSafDS zhgV<{1u}b086;N{8hR}CO1m{$C_Ri3B4Y>YGtp7;?AfdzmhZQT+vlb2(_{qRs&(V0 zld&32WL)FCIX@-?O!2TarY7PMo(u6_^-60mKuSgu`jBrm4TZqK`3li@g{FOVeg*lR zT-&KOKAfBO`T4s`mF>pELDB(x4$z*O-`}guQ>7NAiw=S@tOta8X!&1GxeI%*(_%zI zPCmoGn{@vKii0Pk2|wU?mr?Ac8)Pgd!t3h~$A_SVEINr=m9MX7EvC;9XZ->40CBNz z``d57|BmOO4|aB6=wvf2h%2YFrO{)Ko+{%;j|AxDt&G$J#&A$c(=*6VIVH^@{TOvC z6l|NKn&>!j!#sIS<@i`!HO_Q)-ZvrW*`}Z87Zs<*T>Oui9-N|aWZW-7g6ga#V@4EmyPhG*T@_J|D#3NGaUC@i(zx<^$@60l}1|EyaXtkaPQ`#p!e4*8Xj zoPJl^sIKQfP^9utw|6WPGXYH~oNe_?KOT^(AE1LJ`SK6VTAfTZT*IF+;29w-}? z%(~Q0j@tzqkQa{tUt$$Vn$%hiB%GmlEVz_~3QNz> zC*p=&z#-^aW(q#Z>)U}=C=U`B6n3uVGC=AqN)$-dv-s&WOi*c7>f)r*ma(3TG=BsG zyEs;7(vGlk`#xS!R(JS4FhOQ&fN<_b2`{j~VT7lz5P@KUODQkM3oD{NOj>?#78@9~ zwMt;o9*Wu6dW{;K*{_q?5XE=wCJkCwV!H(9XNef@H6$wk5{K6=uP-~0IInTV@$5qv z*W9}a0?R`x+KK@nmvs2;94(j$vZOW^OoB`7OxseXi4VD*B;jL3er$UR`wE@Mu=_lf zqcnKaI5LI3mvgV{1|&fPb>A#fM#4z~<^oOh6?~Xv=`D-Xi`Zb@HOQe4!eUBXwJ7br za^*GLz2~^XTvl^Iqrn+K&mrhMmb$=*pf?mc5F!Z6FSoJT%+ymb1K8(K65c$UJw?U6 zWlVPFyGzWWt=Cq=nDHR}o_ZD%{Gt_KYo;m!ly6ho)39x0+2 zkpqo2P~ainjw%16-zfXw2_2QMp+q8FsKP}v zNEVh89b+NIL?m@_prjj!tX!e_v?&@d(_|tuMYBYDq*}!WOMKupRkAM&u>()TCCtas zW&uQ1JQfZ9L5-rl2dTfFnh4d!QlS+z#SIJvDDK=)2q6&BO}AkYP;!pOqvxraMG<-v zeXBv;s8R2(TnUxNC?Kr6?<_@ABUJBK^l2V!gJ(8$aY_A&GA)>Tdy`}jsT?iXKPUC#!a=Y!L?&&HGI3@GePhN#MSHHI0kc4KowM`CZ5 z6N0%~ad8-Kiy9aLAqmm^J@Ea_P3HdCjb(~4C3zPnW3UNyhoV1t*SYK=)HspAT-^3_ zHj*vRQ&Cz-+3ae%{@?+YA-JOB$=L%OyzGoe9q~~aOTms% zZ+O8N3%3cT$VTXmPH}77|8(I*n*jzN zY6uEK0C1Ct!WbJx5>=5`7bp*fAT*2;G{l}ExPd{!;RxCO-1ff*CozS-i@T@rp8bH1 zp+2Pqw81H#PhFsk7}5AEf{J8}U?hH!c$_$ylGZti0how1+`D2~pYrurNQCCy(M$uK zOc66dkDkJ*)_v{Oh=`wgx-a8;NFhDNj<@AjuUt`*geUD+4F13-3)^7D>-(*T$k=&^ z<9>+zCn0-D(`=ytH)E|d zqD^z@&5V>*mkJGbLCi|h*d8uPnhpssKC?hHlEuxreKRJp()%z{Wx)m^C3LoqrNO!- zq}9F0yxW$PV;*@DY)$t;sVw?)JELAkGF1;hTQ^}jr@Bz+G0s@a+Ar@@E^d| zqIZEPJ#s90E48>*DT8(m8fF1E=fUhHaaLikAdL`hWztg?a(%KVPiR1cE!7-bGNr|P zgEu5a;RasZT5?L!n{1i~CPwB9mP*PG^Mouj2U#j*OKpLt6KFHmmB}&+9ih;ANQ5+8 z81ZXQA^s(n2G@_LN{x}xoqr^+)iBUTB9rF!VYE1H$Jz+FIiqQniteQUU`%zx{y=Jp zrH6+^YOTt_YSL!0u_GsJ^ld>yhHp{%%N0RUqYECdXG?&u89-FJM zL@h!=*fB>ivX$;fP-7QdMND>Hp-z6Q!X&QO!|Tl0Y?*PzIVQ-|R`D>LSD zs9TehThk{ukur1Mtt2{1G%9TwZ74;FD1*uH9TVqkvLYMu`l8g2CqfJ&3V`^~a0)5@ zWGcH|6yv>j@I)l!ny1+v+`a%xTg zhUtz%45-*;keX5va|fG*IQ2KD9cF76u>rMYbf%kdL;;UKq&q+VUz_D%A-8y@e^2%~ zWAI>=7GpHCL$6!W7Ux+M7~7pkXex<=&}zkmnAxC2tS5lwgMb zUH(~v4dMizCq>7?1opW_nlwvu#m16g6tr7ni2$~6p21sz2M{}e>@}zVkE_T1FV~K{ z-G7SbG%5qa2+g}i2sxT!K3THqC8zzpX76OjS)Pq2f)Y-Vn6)6ncDs{iW!a-6t{tKgU4ptL6pXW!_RHf=bZ&|3LJC(5Z0c2v-dKVO6I z{fJIhK)ZJiqEiC86bTvn2gj69DW3$_H8gdW@Jb7%eyk*u7(1BAo`U40FjgpC~~%bi57RhL&WEyLD@tZSO8 zOt@jt+6e6E&Ta30b)f+@6Ss}jY>mkb#k54iVpH~*BQO%$;w&;rqJ}Br-wNk(=}5$4 z*65~Lf*3Qu$~;U4oFyu6%rDV4>_AwE_Hx`Gz8Mbs-PUbH_bovj>R!w^hd#AxYO)xF z9(W`kh4&e5HQ`%B4MOCPV51{ueulHx7GG`WDV_tI>Oe4!J58KD(5Q?HV-PC)CTRlj zVWude0QjY+n3;fVa~MK;p5NA0Qw4p>H&|>~p5}Fg<@T?kz+_psuz$ky;g;^(=4IfT zg$^TfG(|GjY*&KKqHaqVyqCkGty`a7R;%pms6G8~Nu!wtB@b!MX&~N%hR|pL%v+wi zb%AMN^vO*DXg*fh&@2su0Y5ow#5*CsAgTwJd)9BEa>j@&l&1^p))UviKHsAS9>Ahr z>m~ytnTXvW-5pl*m#B;K|}q5`)BH6Umf6 z1h)h>lmW><_Jub~Kkbhf5fB-54uu@*SwuHUxaSAH9FKS_V{1A#sf+BH0HqAi!$Sd3 z4pAY!dD@I3gtL*P|E7&<-Adu!ML4=#8sw4n>^SI>TM_9dgXqcFk@63A$`N1Rj7hb5 zpj;Mq_i8Zd!HhGN5F4+r9~|zV?Czax|0kmWcVPve0CHUDa>C<|>6umO$Q&vLLL|Q- z9wV&oL&KFs4S?e=UCMvbP3Q=_^rj&g50{9AY1SAcF^ROQY2AVV!^t?@Qs_Htn$fc+ zQaMB_Bw{?jCoJ9@sQT5FAWFmQ`9{&x%vTT6W4wR(aICG{NGMT?2*uh zj`09D0S7-$1ZVf50u?6*aXKF;k+*g8gE*zgE`XE54DgZju&O$lwq5HmdI(EJIwsEk z3Yg(ydvi=%S{hz$3JLJC(X(*1bZ?sK@+Yc$mz1L~DzursbZq|{GFXac(f9ep0&z_P zREx@e*PET5Z(LkN{)DZEe_GCshkIbfB1naQwn-`s)q1(NwQ;z8visusA5Na{92{Lg5NTWh(wIY zzLG1GYg$ykk^oXUxUGQL0JQ;;<&~CKySUQW0J{XB=(P68ERb9(Hy%}#dC^6Pii5M| z#hw*b(Re$1v3R!^$I~JWVY88t=-IdCT6OJRh`;x+bC_Kb$Z|RuTv}dI561IZ_4o?4 z*1TbB^cd6_b}SdkPsS2XnIPPHfBwOu3dkJ<*#SbFI7NU;lBjy>zRR||l*5Tv1=OJd z$V^ZxB$2Utph~chk?v|DSVOc7MvAYuPCw(71!8mf_5H<(5V|Mh5j6lRw$ERD!y*S5Hx9lP%@ub598MC+=>PZN1c zi3=Y!c~UQ7E5w$3VNyHogpUxJRJu%>)^|>VT-eA-wL~#eSzZ>?1h6twXl*y0Dv&6I z2qet!uO47l7P3fw;{f$vN)$%D&Z+@Xs~+Cn+Kq;Cq>c7XayaBu6|s7az@ zf-1^wqh!EfK@l`;#~Ps0!A>8aBB!~m=xlAY>ZJW3NkQ0^fMqoP6M+$AazyL0@_-AL zE=&f#mwSd;d$Vbly#$;GEbG?0Z@9(iGj@g(X$1i0Ohmai(g`P0=WA4ymeO|o(8s8% zE_ZqMoU%;ck6?Xs^Eo#cy>%3~)Wg!&hp1tl{fb*96RFp?)gjpPPZo|yQ)7!jgQ4g+ zQ40+%o@0BZcoo;8wj4Z>?X|UelmC zz%cT!$C6)+?OEspWhxo>Fe1>XN2UHaXy&WmwQ3qY+xg!T68UxQ+p;t=y7`y64ZXlJ z8vb@}!-I|QwohK*KWO;~@xmI=o^NmLzYyRa)x+-4$;EK&XZ|F1Ua)%Lw%#Mh=D)$P zj9_ReLNWJr=kVFi_VcZi!$0g1HiU{A8tiXx9PGY8lYeb&vbA%-GqwylJ^B}}UlP%I zJ)B{`_yQNwrcdcmgLQSSlh(TN%3AIEihUK1L>e8jjan$)_+b(Ri4Or;(gb~*Ds<@Z z9v7f~{k0jM0Xsf3>}THb`sX#x6i3qNtAGCIng+yjumb{Rms5jrZFl5G<4o}|?~`wN zaRNHO)7a?bWHvsqYA$~2XkL3P4lY&6Z*ZVxqOjCJy|1@9K&TH#j82*x;s!^+@~>K} z_4qLaB8L6ATmpSHR|l~8D`{qxYoEJ7kp!fNTG+)4a4TQ*hX%gT*%VtKiRFX^@~P6W zI_*KWs;g3wMC%10;Zp^)auq?@mk6w7J8A2-KjT`Ygt9LeATG5QbSs92XVMDV45u2e zguzk6mhkT-<6wm~)GOLOPyqO>WW8Ut{%-?S2-kqCTC36kDXP->T>h$AVaVj#S%o#Jq+rCMv?xchk^XcV@?=?0FPpb{N!X*Q%lZkA+Ol+TVf z9E`EzL@Fx?h_>W&`6In~CgMHu0)w!z-QGk-m9l_xj9*rd71Y*jRu3}tufi-780j8v zNZAzF40>r@^*?e?b$(mvBKQ>*k5xvyQny2zs$kSZ0ZYulQ1WSI4?TgEz}z*NSBJM~ zEw3UcLvm~Cs^Kx0KAn=8=19s+5$=P^lHPTC;T2|zaKl+Rx>xsYl94H1x?r=wT9vNK zTY&i0r_fZPAX7m9Zm6o9!%sz5a>9e&6Ra_s2De01C1IFV5SF9PEC9vl7m36SY)G!e z--WS-gE^=q0n3xtdLX!H5krjL%pP-D=QrN0<3O8Ag-3CSc(DvNaiwyHp4Jt29gHFe zzzniO&;DKwurfIUCYN{o)$MisNILeLz$j^B--RFnW`s+lwJTyzF>k!;5I#yIB4uuf zFMSmy%p-=F!iz`o1@DYW0#1fa?(r|SIqj|)TTcw2@zm-0@C^zN_}UYf**!6F(jU1} z+M5k4CH>t+$i~4Ota8ixoGZ-QFPOB*`xJSCe$dw)RyBz$N*=3}NkXSZ z(?a&E2OPt>gyeoLu4Z<>TtIikE`T*0!TG!~tEJ)}Y!(SI8$g{WH5ww%P&>0({HPF| zXev<)tr%IfjBi*+IWVFKkp-tWLD%tX%vn{n5w+ZjVw8ea_xwREQj(TfkZk!-+$Oyi zf_wVb8|R39{zaSo!d?E&^u>52QV7UVUa=#T`a_Qr1yzm%DP_VT-kEs_KDVjd#ltjf zFpWwA1%E3mby)D$LDBlrasiNo$)$6gc{4~wJBbktxn)cc??>%BK%Ccz*4Q&~Z>ebs zf|E~zX@q(iQcq~)bw{N_MpEX_@1rmvkq->Jpst0CRqTIvq zb?fy1hphs7lq>TzdXz{8wK_6w2ntF>ek9DQZR3RIaXz7*&tu$BAuOIjpjpWCsI?NJ z-VC|env(|8xXwWHAX|2pzBJIV|0-wX8O8#ZGzjMp>uL*_P;!*}0ejt0)xO;8_ihCA z0F7J`P|V9;@=O29AZii>v2~2=CD^KxR0D3+Kqy{Thek8rUXmdy=Pd0gp_|&CeMz&{IMbwg z-cbqqNM9uj>DvkT)~7es+Vg7SBs|ohm|Wn+p!6@sK}dLdo>)RNO&~&}{8+y`GeWfX zLrB5DutT%+eM_2S+^NEWTY^zb7q$+$%Y+YuYGw+Q3@zPAA+;JC1d3}JE5yMstdIh- zluh*T1C?$#0zbng8iQHY=+C&Amb`Y0sqg7U(YJLQas&YLm9i69>6t1L-C#`L6z1(6A=S8FX}1b1HWtQw4NzK0AkBayXz zUzu79(5yZ?dy@7q=TD5tsi@Jlsw$yHKQo$sag+_I3E75MeB8$AG9Hrlb1u$P>VbU4 zGbgW6R9a6LUf=>Hh$5Q;-GX#BctfL1PH&oJb~+yXh^$aKz!@mhzM1%%WcWjh#0Z;Q z+yxdqX{&M$V$&q=F%k9F-VQ#X_D%LJR!DGT$jsmA(d8VU`RDMl#NM>;;E$wS7MQ1| zI#WIp>M}*dk(x1#EFgr1k0?aZj7F9Gyvj(p0r#NVk=#A=W`G6~IJ(1K!Q3z^UPSfp z%Up_13N*|A3%w)cafE%C5IkBl8VU`3l%>UOLJ9?-OLsw;Ez-9Fg%sJTV1P>;#0Ty| z#Dzff9Kp)>xhy8jS*>BJ=5TI507JaWtw`^sOr=S55CG=OqYhvlW&F8Ngzg-}bD)rO zy-HH4tZeU&P;fr0TM2MkBQkW36Jtw3<23UTK>Pt00dUwcfw6%FD0lb}GT_ZpQp6e& zma(>61oo2pbRpnma57aHUA3H{b%xyeZ^eRrY7S6(@_e9rGLU_}iw`KNj78>s$TaU# zx#K{jp&j19&Kpb7Q$^26SjO!R{}{rE*mu4MXVQ8J>~uC6U!%I_aYo`CqG;q`b8t_G08l z3_@huQdF_0{fnS97-QW-wfVxgD!sH-JUVLQpe^q7mP4FM*D@thsAB3YArHK#lmi9) z2tTkMj;11|gZr5QJZ)-Hunqh1^x~Sgii!a6R^6P)t4!fmmgLF7!s=ZNd(%B--8w?n zH$i($xs?OfQ0bk1EEZFUDvD;dU-N24CW4(snORLS!m=D4%=Ztbus*Z>j0()TSIG0y zkOGi)(y*o`Yu-N9_ip*~;2Gktsg%a=ah;6v<;e08A+c`0E|})u*ShGQU{LFyXI(C@ zaXd9!2)UkEt+23_6_^YhKr(Ewv~chp!o#E@DOXJx3230M_+Jw~rVshwO3==lEYQ7_ zo~Y3g!N+PdsNp>(Q3!A(A{lmJbT|xHYo6?ZVHA+C3l=4lo~=lB(3U*O>U(eX#d?8O z*#O5z%hXGVMjZR-BBXK8;{cagL?P{XzI!~Jo{V4fYRa&kBMA>KF>r08e5{%O4N}3z z5?LC9H>vNur}Bq~&B8e4j)Ltsz<9uPm_UFftDm_FZOOw#2B6$ndIr*^A1=CjXnc7WzwOnLw6x#vW{8p8?m zX=~pT;R8=N+wzcpTOz7px8`q1Q$WM}x_@EWt1l3`&lF}G-AX06gL(5kr$AWb&>YVeco zh*wU79p!y8Ng{*5QYGs9)tv20wzAI|XT5{xlT4M1sQ=1z!lsOEjG&U7ay4ZoW(2zU z$>DyaL2Q1|dF%kOshMXn-AC9opL5N(vc8pX?STiM^4uRCJ43%lG{2Jmk1b$gz)fp& z!*tpibT%{pjON~rrWHPfJyQ2!Ij0K4)ue_-5{P)k5|`^+m%)!u!E5yBD7SQ`X+kay zddo!auZl^(3auT!p~^1M184KU6N}&G`xTu~aT;xcHtOdRfZ36u{ZM|gJg{V(5Je?3 zXG3Prv~|40WHMAd+BiEyja!^Nzu!9EWI-RspU4=7WKnf3CUc*d$qIb(Jd7SZNnUfS zV*B6_uOT(6uj4_U-vH0@&l-tY^Yp_Gcg5tyX6*EUkM3xKZVm$i%?1yOMjrp>?)+&Q!-h^IU?@Bx)yPf z6#m$~p6$MQ3c~15w|_hxNL|F$_RG=R(fBrRb$x|9bwH)`^HYQ<#_b~&gESW^fn*>#IkP%a?lw?vzLmKqpWP$;} zALK(<-jU$Nw6?Z7|NKM?IK{?~-+cKco+h-G0+=mZ1^n!-(-3eW0W8x=s`0Oa_hgKoFb8anJRh2b(6E@(2%AfGnT~ z7*nauK15oGe5I(Ku%F0%p=*02_%l1979H~aGC24F#RtdNa8zX?w}S^6ya5SOV#|2Am&Vy)?8HJLg|wV#F?G7uIT;69p`m>67N)jDWy) zj%qzaXO2Jdi0w?4e251j!X#JV2>{{#xnyQQi{8B#7T8|au4;n=;1+o>uQFJLMn6Z4 zA~VsS4KHA6C$$G8DTe9s_Gag7gbE~#I_=qwBP2E?ro=Wy{egvDHg@z36$4PK{?_{2 z@ykt%9xar%M8yUPB3X0FTKvm=mTv|l^-~}KQv3XB40{k0$)Cv~?9wRD8^Jan^!+qI z%`1at`t*b6IfzSAD!tT}-xF8@F32MUE<1-P@=I7-UxM?kS+Kr@v*a?fOvz-p9d08KCdRI}QCQRt{O?eF#Yp@l5@+SMe6<&494mTF)faX>+cHwT`CW`?IS z>F`;YPWVH@bT>ifj_%*?jt0ALq;t_ZAyCU$aa|-ZSY-hgq71f2f+P*Asxgt^Abeqy z_UP+RH)qZ>L|JnZf(Lg!nA}f~sR0+ZF7>z|A?IYIM4(+62_z)qi)u6wXu_Bw0@i_E zAv7ch+&>k-(BHMolCFFs|9pq|(QwmJ1%8e-&p1m!7XPP=@d@hESfa~|h@wbKl8oT& zi(S(CwW^qKRa}HF=k?$+3X)n&tOOASQLH>l8;3>~XbnY;2JhvMKq^)wK+Jl78wG^m zBo&sO#|(dXLqNvfbuu-}Y%uVyB9r_%ksC8YmNzNqRPHymf!wrN+*x@)p1l3f>%p~T ztAmh_53VlcH)MWzhxoz>hSN1~5w>k0NY(e}LtqH!rIU6z+kbgA^Xq4oIJs$*NIMjE&Mtp$r95tfqn{zxH8er;5IVh3{qBYo4WzQ9?2tbJw ziQZjRlUbC;2uYx9o`SGv64TVQ-8PwtNrD}H`vherYV+MJASn(c^vVCg6kcCXBakF4 z(dSh~>!`q$_x@)-1UQa;uCGg76wd^Z#0+$6h?Crf+X5vYKLM;Blq@MBf|U270OqUR zd5q}Y0d`Mpr_t;W_;Fmol%POT^~)bWk;UhYDYEzy6b@$`!|j6*&TwA173<`^f&^2! zxvyeJLmN!h+=hS%J$Ryj31WygHFucq87*PQ*UV!Mta^emnO_xTEKNj<$~ah+)9DZ~ ze8(esQz?}OX6JE!TW19eWtX=_fuy1WvRW?i0}p5~OOIKlgi>@NBr;KdNw8bT=Kfv; z0);~AHKf`IxR#R{WX@?)pP_KaZYc31ndc%@4Puk-jndFz@?8Nz3R)}QRYiG4FjiJr zW9y)sM7T#PBDsW5F!(>1%kn%_A*n6|x`a@Ykm1KMSEP;DC8Iw6i!_aYs!{!6Ds@to zDz{2`BaziqrC#75ENYN<==)7nGMv5~^-j4_ z$c<#_xhNhS`YIJJ2tC<&d_F!Kp2jW5d(xHXnz!zS6Miy-Jg|q8?S6J$>{Y2pFur)l zi;tiKyZ20026A)!8_@*_v5<`lnu;1S>E%w&d(NOtCw-fKC$V<)Q;e zG`6HM!d(8e?QK#Ucv9z7zrds?9(BvtmeN7k2{OaPd|d9OY$yYq9hHmu%d?&mV1cq^ z&MMRG^#YMTr<0UTL^8#-2z?ivl`n7Vga$I0Pl0sIxcCcc(ECG>io|ZNM_QL8r9>`h zMvZ)cJ31rM^lkk8apby;NJNPVQF6Cuk;QdM?PBct?U_@Vvx&&LMth5=tQ@%%j!1s` z)vsbQdxQ7OHbKhJEny`M8(wA$5XzG7HLf>cme$O|)WO&85Zqg!D_xo*vBdX9pJ4~K zs-vEKQj7#7Y_UNSDEw^(nH!}q3BLK|llA6!jqQP;exGc-pkmQEPIl3GtU;SilAB_p zE*C0$wurE}@sn;61Y6EepE@ z$7bqz89-OQCn^JYx{o#H++P*Xbjp@IQk^x9?{WwPVJageor<08$F=P5&qVphh?`fWY_eak%uecgx->CzS|??dmA!_}QZ>LxQ*v^Bsl3t0od z;ksr>&JGmPL4IW@ui-44j7r+l`79U$*uiyK5>tLCM*Y&*Q0}i#ztiH}TvsrST4%$Wa=uwSsF9kX#TL+eL6%OEy6m4v=u_|~lK%(ZU$=RV zz;4UWc5tU;YYc(=;W>iBgFbU6r~vq{6f3xj?ycs*il_{ZoxXjkr4tO&@KWYru*k5VBU!~~Qo;Q< zlit;Npmy-Pa>XpPkY;TmG5xhL{Ho?IWBBfH3)zX!f zscIVlU2aSXDul8{I~gn1e${!5+&ZlQDp(W#^JC*-MkOu;EzcD)clm$WQ({QI;a|zv zFzv2-Jg;CAR3`5aPKU_rv1fil3wPP0+`|^$@whaCT5KkNg8n>_1>^cMQo~4_*cBAj zO-P_jSXem~2^JJ`?J83lO1sYED3wev`wNrz;@puGC{XMh)BL{ub#vBOfeSR42wAdQ zLvu>HeTT6PaEBu+fUu!X4FH8{fAYubQQi_qhP8UVtgkC(wfD{m&_%P_b+nT^A5LN4U=f&xj_Dc9?B6ldtBS#`!H5DZPqQ_&cq&LLh2eSm7} z6m2p;RDyTwt-fvO3oUEZ@@KfW-4-f_LjtzNF4NG%%6l4Ra=JNvAP1Y{0*gq5@Ron2 zPECUrTvXdoz#xgAK}LaBE7DzPuh$qV|v+8uq1E26pgw&gZLF8n<{;S=E0qZ3s{fT+pJ ztl?bzTDEE9rwc9D#Prp*eon!N@##fJ`4<4=9)tZ5b3x=N!A%5||0!JsZGc4)uvPRz zvn1n5SBZg};vTCaSaiVjdy&&-*_BAQK=RzUl*q1ng3XN+kxM>fk3xx#O5g>BQNVk% z;8OT1DjB5mGNm**2j9RwQTPOrX$I(QoXf+kM}>z1s6?$W!)y##+|*A$)H@XTR{rny zo$-GhU)b3_-r3!`$=L>yhKlI}*=L66^mJF)0;ojubbsT;=C>!$cMiArH=Z9T_trPr z{(k#8-czEdk?A=n9@1tM(dEHqp>6T!(PyF)Tney#@>niP#lBVvfO}p$tkjZ!@_N!6 zokDy9Zapp$%Wt4#Bm!L4y(;fu$osUnKb(K?UOmc#qOa50vy0x@^FePi!X^jLD@A_* z&8=KOHmxCe#(N0%POAErILC3nl@JEPL*pc_KOAFVJPJB$$&((?O%37^n_vgSzaSvu zLd`5WS1VD8OvNg$>t_!M5A1;d3#xSUQ$J-kgo#gAK%Sq?} zWn+0>E(guuVmrJe1g(1>rBRU211b&v80lCD4V^MB7k?u@Cqyp2q;J0bQY0x~awU>p zVcOxL9&HXCVK>8kSw7+>Y?!X@zRECs9vxc_khwyxP)Od^zVKMR1sk}IhBXrgS1<#n zI*<7$0uWIvC;Fk%EVR1cVl0a@0V!l4CYmt$Jb2`;5i3&@@szu~WdB&4;)FoD>*lyV{>L0n5Rf6x{^2EJ>RkwRx8fcD9*l`hJ#A%qrgPyy9!Xvs7t{EZ4r&Z zjP|iazKQyb8~53gS`v{aef8vSJ~kjV2;sy>IVaGHy}OdXP57rmO-a+|iT99pP%=(@ zXJ3$PDi2wh(3mN!b}Mlgc~bdAViPHk)ZjdR#I=sUvK7a%G{tnon)_=fZIrK-IL+aB zS9T>8zhWGfmf&Pz_ILUSfA;Kyl|NGsH zv=qv-0}0NcdcaSfL?{Z&SYjCgN0FQ!+C0h=C5tRIPnWDuQftjgQbVjM8fQj#g_KsO zs$xh@Y1P+|=xwDu@&3s}*w9lP(8g8;BQMR_P2{wu^vu?$r9S0S#j~D(HJ4<=F{oey z0lqz%K$o=bd^T%iQ%g-zxRzDRGCO&FeQW#a%Wqt|!JG)Ex{W$aC56YH>!KDkh|8ob zh%m08j7PD>R}hx!AHgO4w+$(wTD*~I|28zOSo`l9>mH@M^+!mm%-FW`jNv!ZiY ztL2ODxA&j!9&BSiYHa1k1Q#wQ#A{%|)n!bKciu307MLY*u5~Sa8vw$#5H~5^;rrAi zKw|wAsdBV2Foo<@W-WLFok5^*qaqLz|3M{`g=+Cgw{vwLS7MbgUVL-bcR`D8JC9{Q z)QzZsHtkBxC*59jKqw|Eee^5?FihWJ(GE!0ZtutMQx*!qn|-=^C)jgGfvG9|Hg^to zc3*h(=hb~g&}DPW*~`J4-XST(6;0+7lE?x~BoBAz9Zoa7e5w81yx_h#eLVpLNY2pU zDWQorV>oAALD?`nZEUV%L{69oYGd}MzHuvVR=pRBvT}9aZj#;RU540l1*WV;)p5*T zx4s4;D3Jks$uN~(6+O=}3xZ#}B$#(oxI=`eqj4Yyw5@$4w?E;dE*m))NG(c0n^B zAet+JR3TEEl;a&f5C5cM2^|>uTOS~KLzM`3ER3l1NLGQ*(1lQ{$xG&oYZ%@2TwGD1 zH)$;`SAf@rL z9t}#0OR8T3HgrH5d?=eh-etawrO1DJeHNwtoqLCq57ekAGp{7dzlI}`hb^5i&PI99 zI0?lahWJ8SbnkWVQPM!cD?*8C|0D_^lMoT-wz8ZRRu$(Fk}?ZK2n?q@P?Sis7|lJJ zUR_u{?-SN~44teADuGghz(HhRx!C(v69vF>Kys!xgk4ITDA~y?36ZUJp;94kc2MXi zfw_)^bD|J*DsdP*z^Rj&yi{tU?knUk*clbgH%9#(_)Wcwi;UMSb=(2?PnK_}<-2?@ zR%fSHGm>s(1ZeO#1LV8+gJW+;{0*ZVfRN;`@87W&< z+9GPgvfud zJ}t(L6~y1AWKr;$St!&HG#yuqqxF7N9nc7(`mZPr_sHkaQO%OhHBfnXo1osC$_~Z1zRPlKaEu2nH`A8>mF&@7aooSAz zpa@r$PjGpap`dl8jt+W+e>%`xq5gsqgq}10kGj)G-RXBaM4|t#rI6@tc(a{8=);X7 ze&a9ZIuEwi3kW(GLO{7Kb`4oOeLmDAMT)F+1@W6}A#3D#`dZh=IAGyMtkM$8x8;J5 z`8>?F%?bE!BpR83(M*hQ6un4{!!BpZ`VU|aWoANBRW#(E@VvD|+Z711pA&yzikOk% zYjvZw7Gheo(EHmP2fHsQ%mwlC4UCi-cGw5FZ>=`F{brJy{d#U*9aWGBsv^#J48x+S zi~UI&=BCn=kpIGj>0EV@vSF2&jNE<#Qi2qquL5G7ul|kbqGMGs9N2aV>AVFgJQ~kh zZ-%&66e5;rupN_mnUYqxD`Sb&%_Wt`cN=F6uV zQTjbq21NqDJaYfjY!i_eX=Ab2bQfHV3j$De(jej;oj(YT81LKK)&Ep2?TC=7M~a`AQ+O-Z#Xe zr5|t#MrYECkJow3OzZ==daw>9lw^R^WEBW1T30s)~#4Ff0j5SQfh9K-IhSlco)f=*@PAtl)X>Ff&cBcm;|BD8+0{g4Hb zwXFCWuF2f`sOAF@pu$f8I^38^sJiG|3=)^;gusWu*GrpsqW7H@Y9OhA>#}|R2+^+a zMN3Ff1?93!jn?G~hb6#7@%k6ES`gtT|KXV9M}@b16RAA44025Z@K`}6T*rTqbkXyl zewfY%m!d_u)cWd6$$2YW^3;TpU?!;~C3JqTWEB92aZi3N+F6dPq@TGAZCb+Aq zMF~iqCyb-BK)zivJ0WUeQB)F-pi*KZCb(3pQCj&p^hAxoPQo4v?Jz{E1e!p#@|M7qymfWhvDokK653(}~zuaPF3;w?3NpDCG_r8mPJx)+)dg3J2mWrQ#Yv$_HozV#4jW|)-8 zz9SyOk1&OU_#;j6RdmFipQ%9ZlEeH%f-53JWoZHHy@T=P0B=TT?P&`KX-8)R6b|=5 zQ96MZP8-8tS(WMkFTujvz5AMB-jL=JqXcnm9KD<*i8Hq~K6OD86j&!gEbVq6L*j{e zM!a(Q6*j?gnjbxc+3r?Lb5^sGBtOp6LW%K|CSy=6l|H6KqYw(#LveUXIm#rd#|HV( z^U|DA!!BdkPVqU2d~uKvP->9{{a}ssuZZ}#p6WaJSkdm9w_cWmDWt@^PexhyGs`q1 z7-cb#jf0j@4_#7nuBNNbHytwArD@)wZwaYZNRkN9KWUw`$;<*Xy^=>yi?rUxyj@YvnF)M%7x~L+ULi9!f^w z47=I8X0yTRR8SCi8W{P%Xu;wXnU^EZJ2m9xm|7WTj{~Z_2uhCdxP@Tr9Me2Fu*F!F zI3ivMPBLnl%V3A1P;@FbR5;{n^QgAN(gS28KoA0JV+j{fLt6}`YRd6jY#ZQa6Kd2N zTcFH+2*!Ynsxk;VNLz#_Hnr< zGU!4s0roY^b4TfEC?xZ8&t&CtFrD_!22B?l-|+^##pw{+x){)|iIgI&mt&lMyBNM5 zTzqJq_Heea-+KK4LBZG8XWVPq9ABa=_+Zk-ZBN}h_x2ETLOBNB!iD2R+=w|HUtabQ zM*J|oZh^yLOyJ?*N94)2u&WL0L0$|_2RQ!)4Q@>*lBFjd{|PJJ!v8y;&90{F4<4N1 z=CteAUG)0^|6c}=f56s7Ra^*w8BBt=?E5YN(_D$qQGF*nYx#0Eyg1$&4Zj^+Tn#40 zl}hoRvihrD)Airem`uE|a~UE4#bTwl_xE@APqw!AwqI;*zu5f4$^Q1i?(>(2OkaDp zvGaU;3sST^TkdfkuoeEa6hE+!Y<2VC8D8+;JaV&)2k*+mq-ih7SvzkAU_6+CLyX4s z$-sP{{3L)imvXnC^-u&2dwuo!s_#KDtu`nI3={%h)3t6Jn}&L}@jgf!1}_}Uv=A{f zbMS~8jhDR{6Gr=k8Af8FC|r*>>+6fL4N(R0Q6jDw2#M*S;~}s1LUb3FbNUlOXsunz z=YM9+=k#K#`>o=(y7*vg@NWA@T&*CHOCVAUps(}NIS2-3MaZty1u%!~Phz?uag<>* z%wy#e+=VaE>0qPFVqdSUlN{3 z7l^sx3F7GIIfigqfn>*o>+0|_oi2VV2nltq*+q8sGu1Si%faLfQPT=4LVsA=fS^4i zuRwG%165);xS|O;738fHPjFDn@km=eMfD;CDD{aK!St3HBH37p;>tpu*!5@#;tG($ z^(xmyzQ(16_ga4b4pqG2`@yF}F>jr!nzV4sW|A5Mb4rbUoWabf5th;_=n#vCTt`5K zyAHvg7rO2AdH|M#369GTG54a`Xxsubp3?IR#l)?(+MF`D(9OL)zdl$s*L3}O1l6#? z3y+y|C#uK}!L&xGkSwncp`ZLAv?2GwdhfvXvH`}8FF?e=3|V%D839D3|DoOK^>l{( z!pKK_CHsEE8Lw~zu_CEs9+)^cJUm74@WBkH0)Ut4ISz+ml7L!ad~-d4&KHe-2|PJ# zckcU5}nI#4g2>=4Cj=Z7^}2KL{&zB-%q z`U9lS^>Hn?{w=nUl(gwxOl7rgF%j_40=O{AE+BBBn6PNmD`e@u8J@O`Ag2j}3my`F z2^Lo8>f##LCU<&Q!=tad54*_hczun_=4XHfwiFpaI1cOxwk^8qw8p2C-sSLm`oN&; z`1tK|_3nNB9u@^i<8k9RF!V4fkO=P_oVKRdS7J!g<=Zr4uk{sK_fhv>QP~lp`O|X{ zuU5xz?R~q~`fc|&-LD_`K*yt(!k^TWwharX9X%tuywT{v$qH8TAtB4#^`oL-ous4n= zLp~2jL=!^x%nIPFyRGj~ZvYF1PKnoRVV?YZEF$F$90SNFr8%+Jg$<@}$u-iyuX+Sa zQR(qfnTO0Ms3aKqxF~mcd3C`PPJ^*;ZsR^ zb@>%KDHDV1q?1|4RRNcpW5DM*)n;%Z*4F_M1duqqq=q)i_Vbjyw6t6fK6lfW9jr-{ zG+(~m7Fbo!Tb{4<;O2o8QV-&Ex-mJs=H<17C7`s0n5p(~iL*pdX^{G@P;6p#1xj44 zLN1J9>|Up%McN@^^h&P|cjp>_M`|az@p3qB4Ky1i3<z$2P;fvlLjYWl zTK{!*eg#R7?*EIzsnk^bpI!_1Mh_w3E7h%BOCK#_b8A7^hOJYepb&;KY^)SV%ClJ1Z8M{<> zUTckAqxFfzYT(cCmUnqZm!q<}70)1kCl+Y!3y`39AP zVeMAF6(;=bu?d^|v0P=PPg+xu$Ed~FJCPzv`8&%Iwpr9PfHKF0vGyKLvBo`;-m?aF z$Fxzfz*jo@X+X~Sq5vWUO7gC=Scx3rbf`(%MIRIzqMP7f0GrtqKypRTp>;$R`_vu~ z2RXflupWfPfQcJaofaqzQXlM}Hj8YYYs@%K=&010wSWgflFW$0#7p^IDL)_3qWC?% zvRow@!U74Q_6Q;;`c3liwWeJ`x@b(eCo+S@32;P0wC(HU38f4*?n)1G8$(tvM%7g8 z*G;bz^*E=GC)kWZgk~|`;lgr*rR}Zuk=AjU1WXDK*o`cx5*-x9vcYp zE{<#}n5*b}xyy@01-wLs(>$7JAVO8S+HTHZIi!_wCCeZaUV-UqIW)4~O5`>dOoh0J zYYNH0;)lrt6D*=7lE>Pvcv|A75K0<9Qg#bmV~aYEIUHIaEh$q2d7}i}ZLhDl^Bd#> z^~=UypeLK+?Q|BlogKzKogOe%2W2fJOSQEmlNq{?q8YPKZkZCXd}rky>Y+0-ZIM{0 zs#EOuga>|}%=302u}VvA%~epp3J`q0r|X9+ocCJu~URb07`KMc?~m z=Cs2+EmwL)K(+X=E`#OS_{19Iv&fF>$0BEhOn4a=B%-GnL^8LIrRBcG9Kta=yX6?x zPQ&fJSiU`tYfPp)h^tYlar+k^0^i9fWe<{Br^A)7n|VsLD*q=ibLkxOORpU$+9+o! z?28Iq2GPBXVQ=~$@W;e!710_b`YN_yn)z5)Gti*eK#`5TUoAgv+t#_5IzmZw9b8TZ z`FbV-QmBU~6M_|U{9SMIRz}&;Q@w+Jc!$`y(iy2E(nrQAsioG$>B@dnM2Jr%k0+O# zO<#dV%s@%WFi1VMI+p8779f84-~Y}0qPR4umIx~nXO2{#_We@l*0z_OHpIVaIV8%7yR`0<|ob zQ_>B#31=&%~KtKl7UwIeAflUnItd^heRx{9p=W4RY&gl~L@ zx90s1*b$i9!ifm{BPRfCiy`mV9+sWyrCBre_E^*0Zf@UIZKEQcirf+{l7MM_au%#>6M=$tUT#)s}oJkB11TI(mQJFVssF^ z#@-`NkZ}7_0BOrbx-G`~7qpWgi&^!$6m#Z-gaF;_&}AMn5{dF{%*_9n(@BH`~YA0Y%OaDh3?PKq9b_`Pzdw>J~-=;z4?vIr=2?dq@L&0?D zTO?QOPT9r;nR4$2ZXO^D3;Gz9T&JyP*anY}u{Dc-(e_o!?TgHmH^LvE|zZ#^k7En8df>?vdg_h`WYhO>YxfNLbBR(1hx zaBPxL6IF=sq<9XoLvLWa2?2^z@EGQGV5lpriM%%O&oF=Auglk|cILpNnO7zVef|#p z^7B_BD|b0fW3JY$rYhTV-8E-YiKuP34{!hsk>+2AZ z$XyG@;Tjql;^2#y%{Q)C`HB638!zg((JQFfoZR`6^e>iEA z*zk|wOFoy_xS)Mac$K|cNd}Qq=Qt-yFfVXb%pTZcH4a1zR;N6tHEFfGwX?sydAPg( zhm(Wty^Z}1{HfMP&G(XRiD|%WM#ed3J3CkMwyU`%IFHO#x)jwdbJ-RU)D&FW?U zpI0HQ|BUOb+jdrzrZJ9#{wq863(AMn6Cj4!zM6@`&MmP=(1CQ+O{HbUL68{v7sM;E ziU7CvC%{u#_a7!tjCmg@%(3{eHzT^B9slsJGo z|1;3N$QXYrWTPpVa1WOm%D)s2;yyZy@ZnP^Q|kG+mf{H~o~o@D>7iIF;Tt5HGSlfe zocDq+Ei%xhHd<+wy%m(QOyWg0aOW{Hyhf{alpX* z53V3t9?F*^-1>sCvC^ha5 zeC5Bjt*WzTHDFT9*!eyp6^~2A$>P~+qhM7Dhmw=x7+g(KEqlOJFd`=#BWx^0!e!wn z+<+hm(iQ(eCuR+;>6=_EAQ!RQYCmY>zps(+OvES=sJ6;PyY$PBV=>9&@(|=|+q5{% z&zKT`vt94yJPA~aWXJpQeKrGMu<2|Jeb(+4VBkxvuBt}O=k7_$sMcZTr$IA$@yg)V zbgB1IE3txTouaH;R$6^Gd%9s>{5lIVs!03|7qaSTdcSl?hk!QLNcZt-%pTgO) zbomErE-E}C9{H66gs9YTvaL1ILkBAKDs5FrqrD<@?;QC{;Tyw~LurEo4KDi1#Wo4Z zNm3g|Dy${kRQq9FR+#DzpJzDPm>rI<`~|ZJJ=v2QVqWRQpefqWCJ)?m~9yB01HhABi+jQ_m?4aue)L#!s=Oq*8}4 z0pC8EgBF5Q&ju>Kgaouvq9$|r86F9QvoZZJI<43nE`VLvE}`-`GPx+RjATw~4&BJ6 zSmG0(C&fZtv>0MjtvA!@0!pIaQw1-gg{lG=tJzp=bY_-x%AiZtH-~R+dab?Q+O`9v zkeWRWCFofKQCa*?h&R+gWwf`9Tgau)ox~b{kOcE-XYW5E@}o1AeTFwZBy4O-tr=!I zPvAge_km9}e8Q%sYYcsgGqJr3{cO4nE`(@sg^Di6&ob#ODmMQ%U6@%2Wev{iVr0*P z)+pWvoA!7ImF-WdoOz_u<5A)Da&a?VA`N(X7vG`W;n`rqh4H|vT1q}iDE4MupekIe4%hxNG8o0FK(;#!`%wILg&yUnilb$ zI)Z2*VKm^v{F&-aw=$j3ALCw_p3mOCiu0nrNPgkUGA2>Q(PPGV4M#wQD)zMdRgDFu zBT^LMczuL7eaW%Y-@vhnD*;oKiXygT#V|0}JR6n|8U{7`up#-YdBDm_h7p-bHC?sP zzCtgLs)K60Y%e1(8(hA)+33yZvw!4mZSFra6t~O zhAYKhj^2)dCOM|deQvm%I88oSZ+$WCwl=~!aXy>MLxjXEyz0lx@C5%)H=}faxdI-X zAyxM&X~PQ*3*@Ly$h}tgM65jgn$nl&+P9%G&W`HCuCnG=)8+ayv;F19g& zKQV=6ps6G#-s(__s$#I*qiv+QJ8fIA+^-FXvd??(c+Y`mtz00*fK>=|4lFd#wi|-P zJ*gs26R0BQ1T%GONDL<|@_c+YJgqXuopvOg*1a#L_mC%obC6%)wm@=d97j&I`)O>P zB!;OW4!XDCCy3g+myMt8`**OIC!*gGdI>zRhHKd3uSWRMsycf-GF8!VcOZdr1a>%PkB&Gzk1Ndd1D(gNS&I4@!>DG8B`eI$LKJn(5{zDkXJg&_I342J|SpOEGdB@EX> z)x$zz>vQ`E)=ic>MQ`k}^Vl&`%^FCiTnJ#StF6RBA)wA%ovJf6ej`l>lXed=M{L9e z?JRDC>!x1}R(*0VNwsX4ZeIsO%ex22l%lYkCn?5Gg+4gT=&4RnwsUsw4R>H;SnF0+fsHZ)j>Z zOi!#(Zx@k43@NS_ew)nIOc8@ezhuRk*b~vAO2TDp{JitnNX)?rR2=?*X-IMos-akVDo=6FlP46MzgxaQ{#T* z(bvemXN8@|9|qH}nNuS_UOj1PfssTbV{VY0Fjtd(k_z1~q9d2R-brPjgzD3`B6Ov* z^{UFyXw*68H9p{Wd-gdNh)d3C$iLEs(Os7su@vlV4TU=ul7y-t{W8V6&FvPYdWk*X zE($n;q^J|*&B*-ey}>9k8f023vJG(K$t4UF$H?b2P-?cjz(e$B_FRR+X1%z83GXLq z!wcIq3VtMrSr-o^jL?TwI8xbXlaJka!41@-o#5~Ts)oZJvmq!IL234?)&A=rk)=1A zoWO*=z%JEl`}p{u7=7&WzxeFzdGOO!2ncDDw{VdZZ_Z1GY0Vazk0Q~8dGNTCfl z+h7tGMV%9o$NVM@))F_2f^i~=&ebkOewe~(tIsDp zk4rkcH*|vQUl&hkT(RXjM*Mw>CWXXRaX@YXmQXua*H%N zNzO={#i%817xy~RiU;V3`(y|q1RYT?>vBX8jndXfskY=B-Q;CM?32%sB5HjldY3ys zI2$KdnN;KD^`Xm46dP@6*wO=)i1cwluUUnB+{UzVP1;{!(;8Uw&Q(HBWB<$R|@g|?QDYn)@(jEF6! zqSp8T88}?eLg(douHl!l>NF?kV}m3C1e<0hLJorcxCqW|!ByhMUHv)g z#Yxt3LCO$DGUu}M+wk!hj#>`7yam6oYhA^105|CzFSBKh+)rJ@pMj+n0|~djI}PW% z2NQ9F7v>zj99>;cal!g8G3`j)=rUhO&L0$6LUR+3@bU!?hwbbZAB9l!QmI99UJuuo z_>n(3z=s2Elki8;{oG@D8e<6OC~xwq85$q;ZS@3aF|r97pJX7RvY8yHM(IwTtKP<` zpBZB6St^*mI^M&bFwFMZvdEjXZD=|fENUrV!=3=E;ta~RY^=TrlGu|HBXJ`iG=u0X981IksVzRM372P>L{w@R>I< z(0a@fy0C`#n==xlkLsy!o;WI3i4MVo@PooL7Wt0@4Hyx00;&SFM zF&xo@hx}(!-ZpoFXa60tMNoR5RVe7&_`jkx?93}%c{BJH5j9whNn`izlv=@%>g#RoI})&HNau2yFoT$rDL9EGC91`j`&14jUOK zx5?^wx2~ZQco~H43t0Fl&8aZ5>AUPp{<0QjH3sAbi>}2vFs_HrP&4i2EgEdkn$*9F}?KYPMgQJ z5I02p6YuWdX@^erVfcyu?u#T>9smZlf#WkQP&#V*HPXzWg#LC1H?Z=iLOUr$fYx}) zBgKV?7a~2*282erEGyyYlhCQ0zp*JtsnnDXg->tx0pb*+aHfu<>ly1Z{Yl9pf-Ben zo^#P0-{;TKutovsG8Qk;G|n>i7oQP*xH<{vEAdtnKd~G2C&K1;Tb zN&+A_2b5xvV%PsSWk@_LV8s*TBK$=Ni9aTGak2To3McI^JA7d_@f4vMBcEUnil9()M?#2`Fc~XpxWd* zVSTW!EI2AjVU&9UxHD^8a?AZ!1M60CSvw5iin+hFkjrO#jX*Z6UQGCmzHM8LKIEr>j^80c9y+69bbJo9K+Bt!bo^BY&Wea-wXZ=y9>9} zbz0Anp-r=I05#xGZO} zQ71d%8gjQe52tVy`@6UUD>Es1f$b*IAO#wr2-Bq!6{A)39aTaykVu-r*O0UlBwSzw zu$yq|0;IZ_`somRPnduQN$O*2npbrRp zhNt_bWaZt3XoBzXtO z#}Fump7_b#pnA#i3$6a(uOj>E&^i5D|Yap*wu^$zPah`1&_WqIHAT>nBDvwd%>NCv44*pxpkXs>`zb4{# zRSG(y)>6pJ6{RXe@tQbT=|x~~H%k((H%c1Fsq zHN?pmnYkB@IkL7ybDVEPlyQWRY9A-623g7^oG%cGPEsSx#bK?!dX^YmEEiIVJ~c_% ze4+gVEXS99xQL*?t0tSwyWzDy2Tr_UPSe z`v7Z{57a`Gfirbs=abheG31NpVO0meiPcNL%0;(s=8w0g-zNm=;?R z2epO_NrJ({NJuaoE}%!@Mt>j+&|;*(NS1U3#A~+qS|o!KNRY!%>IJd%<|Q?1tKoRS z38Be(C7NUnZg_AZO)%6&%sTk4_amw007Oo$Fz65ZK|4g@YGsG2;|I-}eI(Mw`!s!yut8VZ^JCp>)3DaWMdb$5xj`Gz)KxN=nNNRgqek!!J^*B^I za!m2nHLafuO7?ij&Xy4*gz%RwFX~Nl?JtH zczYX%-|oD4wtMn)<6!&6#&_EiCl^hd23MZq5?}6#sLD-i;MKPhntweUIiY4Eh?9)a zNh?~-Am)LTS*C-mxXW9yGtXN&4Kl?+lP)PT;i4)j4>~Sekvp796Y7IVWR<%)5D^67izZ6CfDzl4qY8PywrW9nhD?uO2G|(}rQk+CMof|5c+4)ZIxIlJqVEnT zeon70PR6gfX@9~neRu^)3Tq6T0oZs8AVYT>rbTW+a@C@^G)F^q{*OSpacesyD#^$- zx@c)EF$|2BbYZzNcf&MKq&ygk;-ft9XgWnw7K2R>B`6C^2acR_l_10EEq|SId7|-Aw8z1X_#rr z!auIL@SJ#lVOivfM&rsMaF5i-YvgW$QQg+knbNcI{7d{9vd~CgP>e}w35p2~Fs!fh z#1JB*L)1M#JAk3*7Zv=@PScZm+^-FNblWH7J!GUSc^Hs$WUimUhBuaeEQq$RJvtcJ zlqQWsoqUA5LM89i^{0Ja?!CV64QG-cQ0PJX6jp+fFb#&&{bUtNyLPdlS zHHXZkii3G){c0AMQZ-0TH9^#Z7LbnwNs_}2h`u~U-VMjs4BktSlLLUSMzi(xwBvgbJjhh$rGfu(`N8O3*9QYda}0_)2pIMW z3c6i%Epx0dKbfIM+QK6q^UC$^sq%|w7r1D)X1tXAVk=f!@df)nJ(~oS;$Mwg?T`J_ zWz?$L&c4E;R6h1_ARt;c=+OkZ*&!bVIIII8wX8nm?Cdrd5OzL%J!E|2=?B$2W*P*( z2Z2cr7l^l5rSo88;I7)z2nm}KDq5Ve;~13@A)PGXE^Z&usdJ?<<+*r?U%um&XSKAJ_*IAaHu za8nrC=A!B$V3npEGHdk?Gp5YT!01*l1nKXpWQ-ED!S0Hs+N`gZShPM7WPu%zARuVv z7GpzINHseh$zpL1NDT&P%>eC+WMb!c!q|k_OS}TLxM9+nc)^MWQhl>MA zv!E9d30}$7pHGwBWY4tastGY!H80Z6Q+ZKdRyxc z9)SNLC1lgCJD!|Lsi)zrgX@H}%Izh}z0@8bX_S#yOaz1@X(IFb$|U9gFuwQ`MXH&gFT zC|=0ux2)FgtXzzFdXj;G71WKxeQx;i;JAO>Ul0E|o_=|JB=$ryXNJv=Up-(zA#RBm zwgrN2SV>?Qfh3)=-fd5$bEc$cq#2|&oCF5gKhlJ4UPJT0rSl??c46}I6(6{k;tTm* zZy(n)N~&c*F1+F)TH*+DFn*EjbOzaq7#T9Vstrz_?H(NLJU`L+)ouEvnG>b9cX6zH zZWRJkw4da5MTfH(Sq`OtGn{c#8UNFC49ssh)a&F(nS#oWXFMJy?5^n zkKQouU<%7-hk4V7F>3L!rF5XuBXpAq6LhA($(WYHI)~|hPIq3!TErg<)JdRt51L7R zV9K>+oqj_UvMN{rfEn0SHcA!j5%@IBDB{Fq_2bka;Uw2fMJ-%XEw%U8qd)dKe|gyX zx9%%c)I*fNga3$+&de~Z8&=E?5@C=42UN5lFS3D+cnFuwJ^c`NAgg5|LgiuN)#Nn> z{i^%x?!(UH^dTX5{CnMl*d%`waWAKuaw541oNk(+P`9;vfLqvTfB!`1sSq3(>$!QJ z05W_OaD^BGi@bUm!ar;EW((|$Wa_m?wzjsPzWj!Rt4A|Gx?!7h%1T&YO6<<#H}C<@ zVN2~!h`#TJlgSvjBS=^)5*la&BjCSR>eUIMfuz#oX0n0gTLcNh?-GN&GnSa`6`T`fZ+xCX`ihVPu z1Smv~SO-$3HJ%Jn&q*U_J=Piji&S3tf>DH|IkJy%4o_nh)yAAfNY`I}&B+!al+ieG z#yJ7$7cHAi{S+5~D;-!H5xH?T`Ik4ui#MN(8}YSp1rwaL%XpY89M0O>IoNoL6Z$W< z4}aL*|BofM`WbSX4E}tLeB-{YlCuNG(Cn3XgO(raU||x9Vl21tj9j*a1D5Z{lec^a z2BXIB$D9}Us9b{-+I0m>P0PbqaTCd>l6p{6&BUEPEQBXgk%*zwj0E@>MGM7d2qHvd z4c~`K#dnU{LJ>4ulqlq{@c9?=bDEMfY8u=*x>MNR`R>U5=GP*`=e!RiqZ~-n7^MY> z_}}W$AOHQ;mrvH#SG)M{zyFP3<1zk6OhMKbK`OuDM=tClvI_%Zay{BqCJK8Pz7Eb;`CXAK?8`=vAEEOo zE%Y0((H=??rp+-l8=6@Qzhz&xu59``2+m$e#462I(7DDuVQ31$K;(zgaPn|ShKnLM zMQxu{k0`PLlQU6m#q=qKC__(o0I+*^{xrwZ0} zt~ZXv$gmdmAtUK#@y3&c;;FT8_5$fI4Qh>9)s%FExj^yscSb(0wDgI6e&gk&Xht?OE z&lim3S;Nd6fv}VP5V0|WSPj-lz3SGdoz9H5qW6G#)oXTdu%sEYBt~*uX5rKz-NK}h zCbAr^KKtx{216ww%3p+?BAVCkU02lsdSONalt`e*o7g9$_RnmdV2Ez}kAEeg!`a_( z@}PoslY6Aq8@j}`7|Y!fTIAUcWK?!KsH1c`xadik;d+FC$?4lczazT|zaNbe zJm9EHr)T9$|o(K3MZpx8chSR#5FHS7ygXYVEq-x*fi7@z2Na8KuMWpYv9; zPXF(1odG-}kHsnrgJfd#04+{u-%Q5WSJPF9)YYS2=MA=YUVXXN`gVI`Yvpg3+~Q$u z9d#mgr(a}}J9m+Rh^c+G_GL5v=n;yGR!7{pxF`oj#LqrPAeAFM;Lqs;L>AWS0KkoI zOv)+7G$B`^sQuDUIOOZR$X3Pc4QIdC1GvJ)aRTfG`w zhV@fK>aalN>XY@OKR&>+qH^w4az9oa04JB`AUgsoi!1mP2<4|tu?DrkXFhQ~AuHcd zjf5l(gi7#_6SOL{`Dbd;Jd|Oo3)EJ$YDn3jKsXuRlpm7AZS1;-gOh2!5$`b+$BntV zy{ju6fyHI+W2Eo2ymRn-!-AXU^@y>Bcy!c^I2wR;hKUHxrz%KIA4xw^JB3|A4Hdkh zkQ$+yYsWO!7t?OHi!9^+$KJcPwUu0H!{7N8G7o(Trwz6{nIuEH?a+X`$=HSgoTSHe z7=Z*R28l?*Hl5_ZzxTZkb=rGN!r0E?9bYqPw0G?~tXj3sYt@Q)Wz&vues!8AqyFnN zE#gb{z(W2akg27^@S5d=d>x+nMq5;c$yt@NZ(=BMRnp9DyNj>P``+ssQG_5X_FoI(q(IRW1Ptr`QH9AD^R|J3vy*hdtS;5uGpT*>k=! z>@UCt9$*NbYH@}%GODdRnUT-@1Nu+4Q)|IpcCKLRK<4R5Qtx~TdFz)oW+|!r#v*Na zjp;I5gfX8I9SULfaQw5w(NpB7jDJS&laD2-K5>g#pS35_nqF*d7bh2$+t4%OQGyYV zXpJf~{nI{6qB3%9Exke6;8l1Ot=ip1ANP^^WKgo^LF@4&PvbG+#*my<_VEroTHm3p zUjveO>RdDmU$4m5Jcbf%FY^r3et_dRL`kjI;@d?EH*fohp5w7RC2zbywzE}+wt$s) z=gf@KbWhA^{I1WS-jv#~!)W5!YFnI9xLH9v>6--%>lK~my2O5uoAc?0x zKJ{wU*e}!ym9u+->keA&oA#PRq2Xum%R

?Nm74$Aoo5$NY^8z6p32?5BpV=qf_zAaVvwwOT&RgE{DOz@WrybOUSX94Q>DoJ7Z!lDnxMq^X<`%k}bMMo*T|4#1a@`r89(9XbFkAKZF9u z(NKqiu~Mj=Jh(=OHwX$r5F&bkdj<^S3RT`@fVUVx5Hmk){u-LMzP=cuHk6^Z)-fKp zmT^2!@1yCDCeJ!$n|_`k8AAvJdCkDXYu|x7h#9}SQaD|W_6ALA0vw)UfW^m;%fc&Du#uSfZa+0 zTo4S?osTIku$rhVKR$w%A44p`U7zZgFtRN{_eAj7H?4am8Z=Fwl4YfFJ zSr8u9%eW7WgdidgD*G2A!x-(w*&y7DI%{-$!regg8ziyT7mt@jpA9-WdQnjz#w5eO z@ux0)k$=Mj|7+U6uXO*Wr2FdFEPIz{7=$RNcCrpCl#1;x zS50>=xr4u!R2W%S3{V}PcyOy7A;}S0q`ECc=<4=1?~4JVx+(0aGO4tmx4B`ju_KW; z^({~1TT$rrw@OX3HeNOwxZku@Ze;@hTY`D?;uyqiBY0Ob`_*)0nq!RSS!4)fz~GFe zl77Q<xg2h8QgMJfyB)G_qO1AUW+=|1>${U1!8v4Nt&S z!bgxu5k_^!@(au0=n_}Oxc*U(njy-SJ-z?+!|)+7q%wV&Ew(4Ei{bFi7>d&ytxm;L zf?zFh{Bw^@?Yu<|B#9w~w~(SXt2k&rHm?!6fqi)qx={$TLm}TD(sIZ##a^O4>f|nm zyp2Q>u=!3ASePn*B3MY06A&l{!4L%%+ElMvsH@dl#KbfTNo9&MpcXVF(R4*M1kw#J z-f~&}@hY|oQq4303VviL;TE8}+>YYZT}wzXB0L8^u@kcac9bSQU0m>Zhm>Cmu2BYp zM;?-o6*?^?I%n#BXoR_&X8_ViCBl3fIpRR9(wh5sflMk$pu5Hp(VE32&FjUzY+XWn zDy#u=kQ7FH`ZpZ(`;5$84dzS8viSS^>*LMgB|O`>)8ef6-jAZ%xqwd$@fDAe{`cv9 z5v|zUQx!=t3oKb3K*CkHlp*e@5WkzQJhPhN+w<$=mC%eT(h{%pekJj|+<@QW>`IUD z*P*U``1KWj@zO_q_jCMOMQd}*#yb|;W7y3wsW615KB;*>8A%J%0Vu>dACDHzI7Z`$ zNGU$K%!<5VChk&l#6jQy)|F)_Ov4|W8u7geO*tr5mKAv6N*Qv_Q$l-s?NPyQliz*J z-1vF)%o?^NCya^XbW({JaV6B~8>j%-gtf&lzBq>t{lym@)TR33i}7NPvoD8;7Lf0`oIhK3;9ADmoVcY7-#aOqC4 z)n4a6b{&?eDJoa4elm+n2BbiM&YqD(|-)Cv@sr-0S{ zk*cs9zEBM&d{2VeK0JiC@vjT&8iA?oynl-F?$#k(t{9BL3rQz9rJ+ZRh!KhgA`x<7 zNwZ`q(~oTKV2XaOv?wsd1xk`}e zq^+39PyMSn%}`BbeROh;d)VU}Y)j3aqWA~`P$%&^KPtxrO z_k07g1aMJ8sF>3SMN2b)-C99TF$|NG^miMKi_*Q&0g%C|4fA;uA(fF#Ga4t-VJ5ua zI&wiu&qzrOFTnlNMgLg6sIE2`hP-0NH_R`3lOw2Eb>emaXG%9-mc=6;KcdWv0@3HA z;X5hpa#$$}o(-&I?$fQ(i|K@06H7ok17GKoWi#L1Q=8T<`pcxEcA=W2BPx2cG-bgp}i)5p?M1|l~p%q%U10{}}9 z%W2TOqAUk0QXbo62R6;jGhS?Of<-@=ApvITm0U~wYLG@7ITtN~Q(nthJgJk07OD#rj*%USV1gi<9;FlIxpkLP`t(%%F-vQ8uA0JuFfd zS4jbsb}S(|J&gx*23g>!)2V{azCsY@6&h)C`~+!#WNE?fKq5sg`20*oV4ItJ@*M@Q zl=COKrhwsik{WcPQNZctze&Mbtd!>Vl@S=pni$;2lN(5+^btajoW@u_uerS3ftj+% z$MZUh9P0+uotF>a+{agY0_Xb;7pXQx9{)KZPi7 zc97Ab{y}FtRjBbZ)OhQS3aQ-S>pdHqnS6X`|NZV7 zo~6dYi^jXiC9AZZX)=;E-r!~g#JSTZwSRMYIvm^_La@~PMh|0)c=OBQ_D}c(T~w*N+0*cV(cuoDESE+dT6Mzk;5Oe@FXU5Q3oJuXco%fNM&aU2 zlgBjH_AZfMGHyW?+vr>oSK|Ay$6`p+lDP0ik0-7D16Y-|zJr13hZoPcU;YKs?{x@CL zOL`U%&8QTfvO`>wFnUd}@u@}eYo<+%eL;U?08`mztqBuyl#Nnv;!N^eiDT2OVi7=& zFyQOR;??4K&_9vgfk<|R817=kjZuA^k+EoJtQyNVgjW?(55NW8J0kEwE1R|h@ecBz zB^S(pPUsShS=NL1GAnM_XUEUbjc6j4^@V0;y_GghC;Me&O|!W&Z7> z*Gcc}29p9-4&U{<_5|0Cvr@0Ei^Ayjq_8^#auW^Q_swUBrtyZbSB4&h5JNZ3L$bw8H+<7XBSi%H81C9C7!#p&8wl`}E_ zuK=bHP-Lr2aqhCoe5-L{(*E7`;Dpz~F*!qm4#Oo?ur9?F)PVEP_GO^^j)IVHJxPA4 zbBqW>?D1~m?9r9G-!a{x{&+oU4@-3NOC!0`CxB$MXfxL79m+x1lUbf69uJD%OJmmX z#cfnRCp~28JWe5WiVM|RL^7L!8aEuab<8g_l5aMvln|TQ~tyN4de!GKwuq^Tq4!UJSl=-N;PwwhkI$} zCu9FKt=WkiHobN!m_v5jHKr&WiFsIjJIoQ$Ldwydv+JzyaocPsd;^8j#5{)Dxhc~s z79uEPoncWmM?H@@@qsbmEphydv6hN2h)n`6L_{;0QIm+UG76v>9YRhocnf4erTw+q zVnUH#Ge@xQJm@YbE#)9%L?1xFIp6vO@emYp2N_9u(?489q6{kkc;F&&E#il2Fr+_r zMq+H0NHy1~U2K^|R84LQXpFPkfitTGIkw{Q9##B z))rL|4$Q9A`r5Mu(r80QMzx#=ig@iz2LD~enlQl*Wb<>RlA0wFCONHB+MggF+B@ZZ zrxAtZ%6CXzeQ3K{#wHy;Rf;6Cxhmr;KHmaGk;B7qZc12DTBF8YS zg#Khkpw0z8>E1Yz*Bqsao;jCJX*(ekt7^5_FWs<0IFczAvXt2moyA2`lkmxWHO_B> z;DdygbUp!4>1GlNg;Fr*XN8nC^($fbZUYTLP>rg&$nZEirGmcJk~hGLIRs?`AW46z z`vaF=*Ml3JKUbDjbD-g2Nu@cmCAkR|oy1K6((@9mcDT7hzdK@h;?dsL?#@2-205%n zH{8SdrG7>nLvf-Kr?wIv_7YCGkwu%JUhLDSR$)*Ej}?TnPUf4#2LY6nLlkwcT~vKN zj~_6;f^^RP4Ex47YK|TEDmg$*5Ggi1*zIeqBW&*S-netx^Am^Lf&84tWU-=Ooe*el z1sf9;bgGE<14^DCY?%eHQ0-)R(QVn?M6HMNYxnzIx?YcmEyVMox=wf4(_2ks#1O~q zDyWN<6sX42ay{(Ve{gBOd+T`wraFRaL2IKxO>>|9tlHqG0hr!9`#p*kBMRn)fQ zn~Ef#USH+IIhC2|E342g2$qfe;h0OH zIUgl+B9&yU8^mSyfPfPyip%MVh=fe`oDGA{t*aH8J?TIk&A450c*@9-_`S%`+4nY8 z>>yidx7-b%i-5LR59a4^#BEW)`3Z0>_Nr$j9+=X&puhV=-8GQgI($lIldXWqI?OGq zT1MBBm!jP!y(FVm0@}L6SD!Eb*r%#sh*Z_0i6h*U&`>p~wKioXVdq5W`~><&82PaZ zp}w`PF2aFevJDctR4PJ}&WP4q)FQMjXw(eHGf4bsJnDBrQ+bG;n1s_P`&@xM@NPq_ zHz1AUP{AY%yo^UMsY(zZ%28S)9l^*@x^wXQu@r1bM#@Ve0Om>GiYX=aU_laR3jPO< zsXdCMp?X$ABRS{waQJ|bO7o_{=JijRFiNZqk`!v#xy+N?A8(P4@eOSzwdOj@M4Lxm zqW8Lj9lO<91F*Pgej2D5E&GSNn53qs0Rj9aL#AQ5IGG#_m1;k*&@@7yXfFTel&b!r zJ0)W7_Mrbg>T=#bIuih7agnX}y_0MB919WJs82)M@Lp$RJMHjtyuh2d`9Zj@LyHxi*T*|w=gCnT>tHWKZ_O=@wLF<99Et>F19zL zK!$L5wFqGbHT-ItF-WeQ+`u*8K#YDzs=}$<#$Icf+CS1ZWbiF60KNvual|CNR5w7b zm8QsS>5bt}m?uvAXW=K7Ck4sWr6jCNyqxTD<;ih>&>7vh(^u5yghEsg}n31|A}9z#9Ovr-;WRR^w4_&uPuHpfw%-&uE62ihf$+ zLJ*-2`-l$iVyxF(6(Td4+5rl=t`gLrEhqV7kh7&zlwG9UvAC$m43-b6NkiF@HJg@d zNgV8(k5_-S`Uoea{p1@JR;{a5RO*4wpmO&LF789P_2@=pJm$lA%0@)VDrW0mI^GIm z>&+%25z10#VfhE)_ovEzHh9d!I}?0Vg^Ps4m{O7oP4r{U3c2dkc7U=yimqKCtI7kv zs;9hC6s+~L*MItB>&MoY=>@zJn`bF(Yo<|RI?2BpF~G@^Nlzh@FEEB^;b8r^SM&HXNgX%z7y|Pvm6j|#f0_gm z;@yNSV)K(4(qI+IJ&Rq-hh$7WB940ULC`!GI1xsw;a|`P(AdG< zs=bReJIG++awcr9?HzqMH0ye`P8UHO?}d}ksZFR>8}Os{k}=LlqBKM%Oz}s+wcJJ! zL4IW$xrt4{y0#|Cl*O$A*jhUe>db&ztPBe@xQR~eHx>ahD)D@-`?`QagNZE#gUipb zPm!({eoPln(!7o$%B?_E#%*MG4WTYV$nO9!@_8UA;4!PSOCAF5&1;;90&6_&>aV=( zaPb!+Zc%|7*88~lyd^LB3Vf|t|AGTxK_MXb>;M2|r>KD+ZU{rRr~_dBE5alZw47)G zodsmt3KD&+o5Viubzz_Ng0Jk_u7ngMm(l$@-q%%JfTdS+eY`ucKEA(moqLG- zvzX^)A9sduyD&fT{EDF1hOWUsY*|Q;fw-~Pd)pUlIBTWxj!KvkE>M~lw^XkFEJ3LD z(&H*xk-86W*+YtIFm(Dx1F{*SY4IPg{ex=Y;0!Rvb$Ih|BYvd|npRsbPMVAn1sH0K zW&aHFvPgE}?j1VZZl?8SVRpQvXTt(-UYaEpvyN3<%OW>s+JIvMrnIGVG=5cdGtoOPVQ&{BIGV2Xp(Y>vg+N;Ia;p3ZQ!-jA64g>D)e) z!8T|XDtyc+27pODDZwDv7bZ7{ zCE~!=Olr>-yBzE}zM#s)`~_#`e@~fO=$Ug1W}$p?v$_G)_QkwLxTESq_`5Q>_=?ku zzotwu>6uf6C|L;so2wsRC^29eJ=O1nFO{vDCWYl@ok>p-*!;Az@U-7_XMCKGdF1A- z_Yd^PKM~DOdBFgjoKp*oY5NLx0=*@C)2=_5CxFYCs-YXf{E7I22D=vSWV5&(Y7xDE z`ht47f>f+!dk5w53U(K`;wy-%NlCr=m|=!IQ_JJ2C+mZ%}0Z2Hkkg4A7E4935dSEdCmIW+d2vSfC+Rrm5S| zoz!#xbT>yR=z018y_?J6S(p%nZYhfZ7wCOZ-C*M(1><_{f%eUZ`d4@nyAGo;5fr|L zViwEjF4`R$U?0Vaxlh3cP?H>xpaczwli`{u0P5)^^)ESHdn~2n)E`&VksJKy zC2x01;i1jrp4+fRtgpCe3(aAB@V0Z&@2-!|uBrM45o@_^)Nc9(naq}qijz@tG2ocy zWKmGGPDnJCD;~JmWJKQ-(mSqH22Z9d&qZtYiydfVaHG53lEfZ0G$iu{=>SQrjQ1Zj zTh4_)pkUb=i3MJlDb^1)zmEn>piCf%hek>qBF+zmSSE+hMyR3qZa8`qzl!i(f+VRW zRs#Cd+p*a@zCP1@+vIs-`ZVQu4F%*@frdvymJmLMJ12jv@fpeFdl%y#H{U!10X7XI zuwILn2xjiCq`mUqRD|A5TCet=>!t}Zl^v=VOqV8}syQ_S658^NVF$z|u15;aCfs8L z!;7LrAf~h@)n?z!RVWlE78C<0+6x_m9&u?hoaA!1)yE@OaXDck{WPBgFf^h{z#^2wCE;FF=(t;%q>smV|*%|P^4^dPhVb5ZmJdfYP-62rk8d$ z-Q^`wno1b&u(>kE^;O8*_(yMU3!%}l@bqx!kCKSnZdn?xgpkgwtBae6Aeys<8{F>D zzi172fVg4Jyo{##Wc+h-5Z$%H#TV*g8M6+eT}@T2yxyc##Qgx4G(Sf&JWH~;0wDuQ zqi3F+2nWqwK>x>rK06Ci%3pJ2;B;nCZXG-Fpebit(=EM-g_B#R67gm)xdaA&uq3c# zE@>?3Zx`fZa-%#&Z*reY7@K~S3iT|WqyQ6J5(JX0gzMBJmCRaY(pMDz)HTxcI{RRY z8kF?`r%a~}eZY6FA!#zX!9EN(^#uClDA}1X=#M@`DD-bXu5jqR1|iWO2;PMNqfaI* zTGWy%AaOszbd3xa5m#i#krCJ22Pz~|dG2LM*lF)Vp`?=r>^wqU7?K1>6H@s(Xk~(XL!IC;WY+noIAaQi(v2$+ z3MAqK;g3l&Ili2v!N_lMWzNxqsbNe2bT25pz#PQ0`9=8F_SU;tc>;BC z0NEYJkCRxtM?&(&UVVKrxi58qtqY)sLLKI6d6%)ZYR1M!h>1iD2yUvF^iZ#}+v6W< zaNylVK+j{C)o|Wd%?*fUnjg06D!H32nMNuoqex34Q-GbxvQKvH!V)h?n7_5VPh6#N zQ<;I^Y)nE!{+((jQkPFHmZ5r0rdQ5+B<6`v72J{lRjK-+;tQz!^q|ySw5sBuiXlmQ zfsi!PQjoT`)UZPFc3~vQMs#9ssOTqVmPfP^R)q>#2$ObKyCS>x5zN#;tMb;R#N0JE z*nLFM$q%GL!FtVYrfN|8@UbtC^p6{%{&Nyd%#`&z)5SXc#1kQ1w~lpV(? z`P zg(VxZVVjaQwaY@FAr< zR6x&PilxdU{V13Lpvd_2B*e5U71S_2^yzhi@Jrw-m;C09>qaw!9nhVuE>F1_8PkI38HP1Aj38Y zNNeT&?@mQZE>;mERf%$Xt@_Hw^pcG3i+A1tFk>2#z+}^&M-*Nvx{VO{;ddSojj;HY;O+8{b zV|qWFsSHckgP;0W)WVT&rtw$#d$6T!%<}tC0Ym3fM<3%vJcIvI?=3j|)e82b{o{RMlyx(EO-A)vdolddc@0OA zq+wuKpjhPQ`1nz4<%TzOuM82eFFD$rb^Y7~U6gZ98CzRTiOsg*SN`%B8Mw<-fiQA& zk==$#0bl}-R_#uGBzSzltmc~*cl!hP32KKBVt7*qFDxuNyO8Uit9&8f{|a>5s?E+q zZ8pt&4w6;fvB@Y!(s%Y8s3{~X%qJ2Ti$Gx4_YAl4PjO=WMMkwa7KF~Z3I+*g7YpO} zv5pYa*+IUPib^s>5<0=U)iU&t&#=L@^v;AL z-@w>@+O9V4R=r~++-y?|eAW&}Z7=L?TXG9XA?x-KQZRCUi2{`Spd}HuJsPvG2UoBb zV}GwD0fCViEF_g-%W8fVPJ_uX%=7^DS6Y{y8(GH2asM)PmZ3v~$=X^F z_F|lnyVsKt92j9$Yzro2N{%jAIy)nEX1d`Y`jhj0xp4Xw5B5A(D<0~Km1egZdgKB! zFShD+fAv58tLOc}HB2Rb;U#&__<3h6`QC`G{w8pzjBOQ!ugbaHLTSjJtPEqC6di)^ z03Ka{y4}Rg?g}kSPGc6Z>?63PPC5ffy)D{#hMhm+=SVZ0B8-S0JmtM;zZgXI-&!^x zyw;E92h0IBoQYNVglCHPJ+==IA^kPa%D&*-vM&_BmLi!1NHS17fWaZ^n^lSP7FkN2OpmR~4osSR{@v_*&VYvL6rBwI2;<6k5D-o~$|D$7+ffoC=&-ho z=j2_f90W0>b+gyjLcvD8qhRv} z4!r}IZ=Ct`Mz@*Oey`U$pG>aCFl?WJ)m$I1f_6Q`|4U)ShhauzK0_eG!~b~n=$G9` zCtv;gS3iG*l(w&a{`1bSPk-@M@8su?J14*V_382Blm9sR&*NiB#Kz@1z4sluRe{Fu z^NB?nXe!+9z6A$SAXGtgh{S3hF)0Se8sWr=)&K$2V+f4UF}nRz2_VOT>0I@3*7`q5 z?0st)(Lku6$xB@!x+3xeWsSINEU_w;0oao!LX7V>;)Kuz9jQFR&N$M`Zb?Ao*x@`! zhN)U6$0(T*4!T^R_1*Tt_piP^THiRp1uM8TOJXt9SpX^?$-B1?7j7MF?H}wPt?z9e z?Y(;Wa{J|X_?A8m`F8f9S?_iMj3EkBK`cjvIRJEuQx7B{v=Dg#PdaJSG`x!lI3DBL zy@!tPb!+*&_Z}pyy^8vgU*Yd%bM%C3 zKRB5q0G??tD9}5Br-+ZhVZYVm&Hwsw&At4kTGiQ5&y0XM#l1}cckOsu3?N@gd+ntt;39;3Q8HHL@2d>&diVf>l1c)dM*2^ z0#z20ZZY#)BChnhwJ;R>Y!WhBaiL_j6*RGp)V#7A5Po1!A`>%qqr{eVR3+>N?C$sm zmH@k)SHH)FX}nn)bjIT#Os%5a5|&EZMhA|U6TqPgHglkTj01yYw<^Gi$YX< z@ITwT6#Ym7g6bBwE!l=;$!)&_9M%vs7eo%h*RA(`gb)JFVa&eIDcL@+BEAh4wpE{y zVlw|1ObIe&E||f&7oz4;NshTZdIYG0^4~N)G%}x$sfPMy$v$E8H0(BUutY%=8H>Pfzutk1%sa}y zmj2SuZ(V3xjqWZ#V>b1O4NVo{r;8ATNz0U3ji>fCSDDaMd9N-yWna zNV(DSN1a7Xj*uALM5r}SXh#-09pG$-JKzft;IOe)yH3$~l2d~hSQ#`979Qr7IcMjY zS_BLBZIP1^j+2ZRvJx#NuY$asOqBotLT;1%tRkrJrNAkbI)!>|F%q+6Uc+7Y0fj45Q!?)UfW&#T>9DhRsP%-q)U7vuXgrubs( z#m?Rj)xKW9gfK)LFBB-+CFbbq<<8d2gK9@FhX|emn**5>$^uLWAZN_#SrUQ1?+_8dO62DWxKWLrd z;#*}U6!O>LKKH#X=refgonpwg-r{6H$pL{t&0k)2BL6h(L|)>c;~%(=*YcsIK-(n` zaXJ`XlDCw))&5k&PDom>04PeX`;+0-6{Oq5;x0W@@{`l@2u_SR3rm~8O~@D>-Moh7 z)dC~E`Zu&3MwBbL8A8SkhTuXnG6V}fRbn_)Tt*b|nj5+oDb)zfD z!HR*LIhj}BPMO0q);e$g-u9uXgZ_B8vMKB=uL)-BsqUYzt_=QxP46n{m_1rFbz@i9 z91lVG=y;t4Ki1SIk?K~ga5)?l#Z0!<;Ean>!e4SS%4R!<-(J&lw!Kq*vjH|Vyy(@v zN(z1y-))#3vUrSC2&P0fy`2^(=Vq^>#~N@TFhups!|+!~+%LXn(G|PhCH~pec>iS7 zznT<11h{%MYAt-jHhe4Bl7x?n&ZKA#5Kj!?qQO`0Leohc$|!PcjZCU;&~@CTb}{U9 z4>wqo<~jcId)cZ%f40Ym>qtrOLk$g>)Z7$%$iTcq`>(E~x%u`0RRIt8MIMvCXMLcG zKe`v}(_c;B7|3wP-jy0Y<_~kMwl{id|4Gjk6FXZn=*8{}>zEpyPPmMwK$PxD^FtaG<;u1>ImNKN`G>R!oyax|j z$;npN&#clt39oW+kYD-Vfjy~vDyiRNAYfzvbDlCiajgcWCKkbhX#r@SeHI=V6hYwW zm5%&2gLAk>CVU3?rhLx%h~P{K@vey|v3#D)oy-?WGjejFlXB}Y8QM@V87MKB3oQj9 z0#ut&Q>l5(&iE=Z>NV$qZ=W(E#fF5YaRu@KSq6q+*!J72M@KKV4!+;nJUW7Tk5>Eh z4k{<(72B~DG=2S8mq3A!vovd7TneL3xh&YK_#c_0Kq>{@$`d3WIfS&K7`E*A)nKs0 zQ_q3fzOxyT`?r?5y|*tQfdZ)F{s{6_CwMs^zckBUz6k`*C{+A#de;-cDKl3JKFj5THgEQwQCGd$W2V~-p>V`GZpdfh6 zyJLEk)V<#edx6mtnG@JH>I}vzfc{HtNdblr*pwQGWKhUySY+ho~0SWSM8FX1Ei(5a$X=1;@KI9URHiQ4A z1Go!#D_> zS4#|*rVJ@yGIk{&*a#Y(17RM?@Z00po*6#J(yd!zD7N?Ehm`frIR1Mqv*T-Y14#zO&(>FyGfg__F z%Nl>%v^Bs9P|_V?)9T)8h$}-b6lf1%DSre1J?(__Aq1QUAM|iv2IMM{(p@HKuw*fT z#1%_$7oV5llm)}d(*Py;uI{tP@El_!Y!?e$cJprg35-@WT+wY||Ko&FHHRQoW?p|B_{np;MJNsLD`~ntgAc$ORqBH+_tLa7Tbs4f;_g3F4spZxX?|T33;LRM)DFNTA?)cG~vHrZEqbA-6M6^ zS#62E2!@+P_1F@ZuG&tj5k4BGkOo=soY*vF?}Lk6I9J@%$a|@UY^jo`M}voTK9G6@ z*bh)KFJT&KbpSsv{|a@p11)v1B91lc#@aooauPe10B}0AAV#PF;50?%45X-PQE?fB z2A3vqa_YH^fs)7DJLv;fW)-DV9`Yceu^dx?(~ho;yz&HQ35~u2MHrkJ2xT}n4aDAH z?mDj%G(s6&>s;ky?w5Oo_XSO>2!V;u!Tl<@&iDZ0De(Gjzau;F5fE7MH&lU@AOWJ8 zpTsdJhb|=Y1*Nn>Si$~PIS0bkF-HYjHm0+)+V9kbU`?!>)uu(Hs{M!+|SUAp_(aiB%8;J!{U;7tamU5A3g zlv17gln_?xU5H0<6)3d^Aj&dKYB|z!CJ4D_vLv z)%7^PX^u?8{yA^ks5|f7Ap(tgRuE**@~B%ihhvwCT~Jdu&(%E^xADf1`F@3*Z~EVh>|rx_X)$M3*1Ew1%H6qY-%)z zfiZ~}N4sR>46%RX#FYXJV3P^iA61!&`@J4R3CO3F)duRATCsvVTA&Jv@dBEJZy{2T zPA`xr1?tMDFx*4R_cMx}(I8-&9JqPNkUoNry^k!5qwUSs*R5YaVst%s%lj1sSeKaV zKKQakfZ}Uxn05v5ByFMZ{JwK>4ZYLHWZMw`7(U@W{tlY%vTUP-9iuF(-<3@1i|132QLs7S9F09FJ$XDFQzjq~ z92>JNHijA{o(wo%AMiRGVqHG&e;8)PaYMBbJ8JpY*=})LnGOil`P1S4m)xJK zL6F}QTZ|Q8wo&@>obo&!YjUmzP+A9*(RK9;ny3s3$?wf=NW6air^EK*;rQVp{{1L( zOFKi?nr&?dOMakJrkgV~HV8nP77c@}VEh~vsAQA_h&)R7^b0FDWl7f7n;gN5&V<|H%L8y0~x^$)O}KT5+DLj zX92j$A;^|Rtc$(ti18DQR*Vm{c5`a+Dc_`!<+n*ss{!GXtrT%vDojT3vLE!s-r0px z_-XdmbkO9~AzVGF5@y!gv`(Ce!Z;+mfDlK@c1TEoorxuD#O;XZ!_H-!vXj3ybo_~n{|tU7{hl+ z$$o~Yi~$utki>Rt1(mn>;s`Z+k4~ZQ4!)V@T00Bh4szM!DzuNo zMYU6DWf)f!&M>spJh#E2`;t+_FXMCh$mb~Eg#PkR!ejY@@}8DehxN7F?}Eg!xiAH9 zsY%Y^y`)}4fC}L`;X789ijhkGxy0YVhGEShKxv2JJqOHgy7M=UJ79&*1tqldgUVpl z2zMaHeh6+_mNOK8hujW0PeY@+4T^8Yv=DmeN{7%o>b9(dTDY=Z1ZF01$_uXA4p54{ z5$8~hE14GMWa*LNEvhEh_A8?72X>8bY1z_o5Qs#x;iE7dI!zEy<|51X-MamP{7V}* z{7gm`#U^ZSm861$JrA*evKvk!V-lKq#zQ+QE_&pWzAv2m{ZXDz93vWha6xf+(0BlfgSY#Lp5<~dgXj(BrjG6^X z&1eoBQFrrm2R-LtVq)6S>gwv$p^00{EQ{-RP_;)kGYp_dH}0+F^u^xere-Li$0?bf z-9H;vDD`lB8kkEB+pfWgCQQ4sswM%$Tm=+>2LmN`L;)zKO#4Vli$rUHqL|hoSF?Jc zM;&^J`N2T1n6qFyuHm!KAa|Rn+4PenDG2W{mL^$F31QH*rEG(Td zsJAmgaA`g4Jb~>yZx`&kJ@WZ5XTn*p-uE^PBxR(dbAqTK)<%#)I3uG*8CT^3og~EBWM4UeYEDG7 zAg#5YVn1LDLV`&?z%Y=U*uNq+bc?q%fVkFgMM>eL%F-U9HbuiKyfA=udw2cddl)YG zFBP7S_P6%na%WjGX^M;nQ6WUK@|SJenmw*M?URpnwM#I_U=rNb*+d9!l>*s@kB>l) zmaPjl=7;V;jyh~%z4RNh&JYGdwHp@vAFcYY-HvYOS?}4D5AZUW5(skE~_&2DJpTu=41P5Ts-Zd z4D}YzSJ0$JK^Fr`R{xoHU3$nUnYrQ?bTQ(@r&xiQFf7Y*ON^>%e6_`IjjMH|u%Nq6 z$b$s+2po4+7vHM8auR_b*L?qjqb1Qe$PYuuifO?(0Fe+ zoY;o}@r$NW%tRa$me7Z6d}HF?JWZd$gpV(ZrV`jf2xxiRy0=b5YTxB~8g)&+M;&5E zN3SsvHbI7eJ{(@veYuZmA&I&IU@4+}xGVn=s(}&-*%rvd%~1SD>tSe{-Sdw1*IbR_ z8GOi{3Fy+{&h-Q?%J5se_<#@hCpV5`&0p(abu}#lxM~*`7g~V9MfyYkBj`#+!v>T^ z1qcLC7H#8J9!i!k%l?K#UbN*2lp_ZINK;};AB(0Dr9&~AZhTgpiKeoE+9!%@+0j(; zDBMG7q@4j}DN!P-VI$uUFMALnSllN_MoZ^-2rlmjq9*L zp#%^+DS{PLJP4r-U}+3pX|M0@Zmu7!Ls3GH(?m^_6zH|AHS3**)L_mHLfYH@XgIi} zij0VwKAA=95_QU1cmQ&i)b~Cy8cF#SCNZxse{o|vf-OjkFakWt&Wp>bOc>e_v=sdB z!#2`m_`h(fv>!TBtIW2913XfhO>cleH?Q=O#27#(qy8Q2ZQ2MQ{jm#uk}z3Vdfz=$ zdSAOof86};2nF_@ZGU%^?$W*ZnHUGsPQs)(UsO=1@@muNeAMtCKVT~dU8R|?&$_ZI z4#d!CM3qG{!x(>XGDHO@f(S2%#<1Lm;TUfjmBL1B<>-aq#4Z}pl1F3M8wKg6qWcCb zPHY0-71>*gyD9FUSc_WN1{~X1-}rv(Xmfin90LC?ovA;QdC5?!7gUibbewLPf01^{ zqsdNW4>(obfSD%^eh6K8?Yf@tY^*=ePF`%k3Oy!6;tdQV3++0z8?kQ(2

^xt{2V9trDCy4WcQ~tdz*K=$m9Cgw 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Ÿ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

gInpc}c@#A|mSGf`I&9XKgVw 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 z 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 I`iZf7YKOtY~^PH&p@e`})KQ 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 z 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 Howff0@{e1* literal 0 HcmV?d00001 diff --git a/Sources/config/.htaccess b/Sources/config/.htaccess new file mode 100644 index 00000000..aa5afc16 --- /dev/null +++ b/Sources/config/.htaccess @@ -0,0 +1,4 @@ + + Order Allow,Deny + Deny from All + \ No newline at end of file diff --git a/Sources/config/Dockerfile b/Sources/config/Dockerfile index ece7cbf8..3a5e4913 100644 --- a/Sources/config/Dockerfile +++ b/Sources/config/Dockerfile @@ -1,17 +1,13 @@ -# Utilisez une image de base PHP -FROM php:7.4-apache +# should change to nginx +FROM php:8.2-apache -# Définissez le répertoire de travail dans le conteneur WORKDIR /var/www/ -# Copiez les fichiers de votre projet dans le conteneur COPY . /var/www/ -# Installez les dépendances PHP (par exemple, si vous utilisez Composer) RUN composer install -# Exposez le port 80 (port par défaut d'Apache) EXPOSE 80 -# Commande pour démarrer Apache (vous pouvez également utiliser d'autres serveurs web comme Nginx) -CMD ["apache2-foreground"] +# # Commande pour démarrer Apache +# CMD ["apache2-foreground"] diff --git a/Sources/config/config.php b/Sources/config/config.php index fa498fc1..f9de94d2 100644 --- a/Sources/config/config.php +++ b/Sources/config/config.php @@ -1,10 +1,10 @@ should use .env var -const DB_HOST = 'londres'; -const DB_DATABASE = 'dbdadalmeida1'; -const DB_USER = 'dadalmeida1'; -const DB_PASSWORD = 'achanger'; +const DB_HOST = $_ENV['DB_HOST']; +const DB_DATABASE = $_ENV['DB_DATABASE']; +const DB_USER = $_ENV['DB_USER']; +const DB_PASSWORD = $_ENV['DB_PASSWORD']; $dsn ='mysql:host=londres.uca.local;dbname=dbdadalmeida1'; diff --git a/Sources/config/tailwind.config.js b/Sources/config/tailwind.config.js new file mode 100644 index 00000000..f12c9fbf --- /dev/null +++ b/Sources/config/tailwind.config.js @@ -0,0 +1,9 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ["../src/**/*.{html,js}"], + theme: { + extend: {}, + }, + plugins: [], +} + diff --git a/Sources/package-lock.json b/Sources/package-lock.json new file mode 100644 index 00000000..ce66cefd --- /dev/null +++ b/Sources/package-lock.json @@ -0,0 +1,1651 @@ +{ + "name": "sources", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "sources", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "tailwindcss": "^3.3.3" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/has": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jiti": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", + "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", + "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^2.1.1" + }, + "engines": { + "node": ">= 14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", + "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.18.2", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", + "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", + "dev": true, + "engines": { + "node": ">= 14" + } + } + }, + "dependencies": { + "@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "has": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "jiti": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", + "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", + "dev": true + }, + "lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + }, + "pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true + }, + "postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "dev": true, + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-load-config": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", + "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "dev": true, + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^2.1.1" + } + }, + "postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.11" + } + }, + "postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "requires": { + "pify": "^2.3.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tailwindcss": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", + "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", + "dev": true, + "requires": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.18.2", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + } + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "yaml": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", + "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", + "dev": true + } + } +} diff --git a/Sources/package.json b/Sources/package.json new file mode 100644 index 00000000..22a46252 --- /dev/null +++ b/Sources/package.json @@ -0,0 +1,21 @@ +{ + "name": "sources", + "version": "1.0.0", + "description": "", + "main": "index.js", + "directories": { + "test": "tests" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "tailwind" :"tailwindcss -i ./src/view/global.css -o ./dist/output.css --watch", + "build:css": "tailwindcss build ./src/view/global.css -o public/css/app.css" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "tailwindcss": "^3.3.3" + } + +} diff --git a/Sources/public/index.php b/Sources/public/index.php new file mode 100644 index 00000000..26a02875 --- /dev/null +++ b/Sources/public/index.php @@ -0,0 +1,9 @@ +run(); diff --git a/Sources/src/app/App.php b/Sources/src/app/App.php new file mode 100644 index 00000000..61411eda --- /dev/null +++ b/Sources/src/app/App.php @@ -0,0 +1,38 @@ +router = new Router(); + } + + public static function getInstance() + { + if (self::$instance === null) { + self::$instance = new self(); + } + return self::$instance; + } + + public function getRouter() + { + return $this->router; + } + + public function run() + { + + } +} + + + +?> \ No newline at end of file diff --git a/Sources/src/app/controller/ActivityController.php b/Sources/src/app/controller/ActivityController.php new file mode 100644 index 00000000..bf4d3f8f --- /dev/null +++ b/Sources/src/app/controller/ActivityController.php @@ -0,0 +1,2 @@ +redirect($this->generateUrl($route, $parameters), $status); + } + protected function renderView(string $view, array $parameters = []): string + { + return $this->doRenderView($view, null, $parameters, __FUNCTION__); + } + protected function render(string $view, array $parameters = [], Response $response = null): Response + { + return $this->doRender($view, null, $parameters, $response, __FUNCTION__); + } + + private function doRenderView(string $view, ?string $block, array $parameters, string $method): string + { + if (!$this->container->has('twig')) { + throw new \LogicException(sprintf('You cannot use the "%s" method if the Twig Bundle is not available. Try running "composer require symfony/twig-bundle".', $method)); + } + + foreach ($parameters as $k => $v) { + if ($v instanceof FormInterface) { + $parameters[$k] = $v->createView(); + } + } + + if (null !== $block) { + return $this->container->get('twig')->load($view)->renderBlock($block, $parameters); + } + + } + + private function doRender(string $view, ?string $block, array $parameters, ?Response $response, string $method): Response + { + $content = $this->doRenderView($view, $block, $parameters, $method); + $response ??= new Response(); + + if (200 === $response->getStatusCode()) { + foreach ($parameters as $v) { + if ($v instanceof FormInterface && $v->isSubmitted() && !$v->isValid()) { + $response->setStatusCode(422); + break; + } + } + } + + $response->setContent($content); + + return $response; + } + abstract public function index(); + + abstract public function show($id); +} + + +?> \ No newline at end of file diff --git a/Sources/src/app/controller/CoachController.php b/Sources/src/app/controller/CoachController.php new file mode 100644 index 00000000..bf4d3f8f --- /dev/null +++ b/Sources/src/app/controller/CoachController.php @@ -0,0 +1,2 @@ + + + + + + Activity Tracking + + + + +

+ + + diff --git a/Sources/src/console/ConsoleApp.php b/Sources/src/console/ConsoleApp.php new file mode 100644 index 00000000..ebf6c435 --- /dev/null +++ b/Sources/src/console/ConsoleApp.php @@ -0,0 +1,275 @@ +#!/usr/bin/env php +ActivityMgr->importFile($fileType); + break; + case 'MANUEL': + // Import manuel des données + $model->ActivityMgr->manualDataEntry(); + break; + default: + echo "Type de fichier ou choix invalide.\n"; + break; + } + break; + + case '2': // Synchroniser l'appareil de fréquence cardiaque + echo "\nSynchronisation de l'appareil de fréquence cardiaque en cours...\n"; + $model->HeartRateDeviceMgr->sync(); + break; + + case '3': // Synchroniser l'app mobile + echo "\nSynchronisation de l'app mobile en cours...\n"; + $model->MobileAppMgr->sync(); + break; + + case '4': // Afficher les statistiques complète + echo "\nStatistiques complètes :\n"; + $model->StatisticsMgr->displayFullStats(); + break; + + case '5': // Visualiser les jauges de fréquence cardiaque + echo "\nVisualisation des jauges de fréquence cardiaque :\n"; + $model->HeartRateGaugeMgr->displayGauges(); + break; + + case '6': // Retour au menu principal + return; + + default: + echo "Option invalide. Veuillez réessayer.\n"; + break; + } + } + } + +function displaySocialMenu(){ + echo "\n--- Gestion Sociale ---\n"; + echo "1. Rechercher des utilisateurs\n"; + echo "2. Ajoutez amis\n"; + echo "2. Suprimez amis\n"; + echo "2. Voir amis\n"; + echo "3. Personnaliser le profil public\n"; + echo "4. Partager mes analyses\n"; + echo "5. Gérer la visibilité de mes activités\n"; + echo "6. Retour au menu principal\n"; + echo "Choisissez une option: "; +} + +function displayMainAthleteMenu() { + echo "\n--- Menu Athlète ---\n"; + echo "1. Voir le profil\n"; + echo "2. Modifier le profil\n"; + echo "10. Synchroniser un appareil\n"; + echo "3. Visualiser l'analyse de fréquence cardiaque\n"; + echo "4. Statistiques de condition physique\n"; + echo "3. Gérer actvité \n"; + + echo "3. Retour au menu principal\n"; + echo "Choisissez une option: "; +} +function displayMainCoachMenu() { + echo "\n--- Menu Coach ---\n"; + echo "1. Voir le profil coach\n"; + echo "2. Modifier le profil coach\n"; + echo "8. Visualiser les performances de l'équipe\n"; + echo "3. Retour au menu principal\n"; + echo "3. Gérer Athlètes\n"; + echo "Choisissez une option: "; +} + +function DisplayCoachAthleteMenu(){ + echo "2. Ajoutez athlète\n"; + echo "2. Supprimer athlète\n"; + echo "2. Supprimer athlète\n"; + echo "1. Consulter les statistiques d'un athlete \n"; + + echo "4. Retour au menu principal\n"; + echo "Choisissez une option: "; + +} +function clearScreen() +{ + system('clear || cls'); +} + + +function displayAuthMenu() +{ + clearScreen(); + echo "\n\n"; + echo " +--------------------------+\n"; + echo " | Menu Principal |\n"; + echo " +--------------------------+\n"; + echo " | 1. Se connecter |\n"; + echo " | 2. S'inscrire |\n"; + echo " | 0. Quitter |\n"; + echo " +--------------------------+\n"; + echo " Choisissez une option: "; +} + + + +function loginUser() { + echo "\nEntrez votre nom d'utilisateur: "; + $username = trim(fgets(STDIN)); + echo "Entrez votre mot de passe: "; + $password = trim(fgets(STDIN)); + global $model; + if ($model->userMgr->login($username, $password)) { + return true; + } else { + echo "Erreur de connexion. Essayez encore.\n"; + return false; + } +} + +function registerUser() { + global $model; + echo "\nEntrez votre nom d'utilisateur: "; + $username = trim(fgets(STDIN)); + echo "Entrez votre mot de passe: "; + $password = trim(fgets(STDIN)); + $model->userMgr->register($username, $password); + echo "Utilisateur enregistré avec succès!\n"; + return true; +} + + +function athleteActions() { + global $model; + + while (true) { + displayMainAthleteMenu(); + $athleteChoice = trim(fgets(STDIN)); + + switch ($athleteChoice) { + case '1': // Voir le profil + echo "\nProfil de l'athlète:\n"; + + echo $model->userMgr->getCurrentUser() . "\n"; + + break; + + case '2': // Modifier le profil + echo "\nModifier le profil:\n"; + // Récupérer et modifier les informations de l'athlète + echo "Entrez le nouveau nom (ou laissez vide pour ne pas changer) : "; + $name = trim(fgets(STDIN)); + echo "Entrez le nouvel âge (ou laissez vide pour ne pas changer) : "; + $age = trim(fgets(STDIN)); + + // Mettre à jour le profil dans le modèle avec accept NULL + $model->userMgr->updateProfile($name, $age); + echo "Profil mis à jour avec succès!\n"; + break; + + case '3': // Synchroniser un appareil + echo "\nSynchronisation de l'appareil en cours...\n"; + // Supposons que vous ayez une fonction pour synchroniser un appareil + $model->DeviceMgr->syncDevice(); + break; + + case '4': // Visualiser l'analyse de fréquence cardiaque + // Supposons que vous ayez une fonction qui affiche une analyse + $model->HeartRateMgr->displayAnalysis(); + break; + + case '5': // Statistiques de condition physique + // Supposons que vous ayez une fonction qui affiche des statistiques + $model->FitnessMgr->displayStats(); + break; + + case '6': // Retour au menu principal + return; + + default: + echo "Option invalide. Veuillez réessayer.\n"; + break; + } + } +} + + +function coachActions() { + while (true) { + displayMainCoachMenu(); + $coachChoice = trim(fgets(STDIN)); + switch ($coachChoice) { + case '1': // Voir le profil coach + echo "Profil du coach...\n"; + break; + case '2': + echo "Modifier le profil coach...\n"; + break; + case '3': // Retour au menu principal + return; + case '4': // Gérer Athlètes + echo "Gérer Athlètes"; + break; + default: + echo "Option invalide. Veuillez réessayer.\n"; + break; + } + } +} +while (true) { + displayAuthMenu(); + $choice = trim(fgets(STDIN)); + + switch ($choice) { + case '1': // Se connecter + if (loginUser()) { + if ($model->userMgr->getUser()::isCoach) { + coachActions(); + } else { + athleteActions(); + } + + } + break; + + case '2': // S'inscrire + registerUser(); + break; + + case '0': // Quitter + echo "Merci d'avoir utilisé notre application. Au revoir !\n"; + exit(0); + + default: + echo "Option invalide. Veuillez réessayer.\n"; + break; + } +} diff --git a/Sources/src/console/console.ben b/Sources/src/console/console.ben new file mode 100644 index 00000000..489a27b8 --- /dev/null +++ b/Sources/src/console/console.ben @@ -0,0 +1,36 @@ + + // echo "\nEntrez le chemin du fichier: "; + // $filePath = trim(fgets(STDIN)); + // if ($model->importFile($filePath)) { + // echo "Fichier importé avec succès!\n"; + // } else { + // echo "Erreur lors de l'importation du fichier.\n"; + // } + // break; + + // case '2': + // if ($model->analyzeData()) { + // echo "\nDonnées analysées avec succès!\n"; + // } else { + // echo "Erreur lors de l'analyse des données.\n"; + // } + // break; + + // case '3': + // // affichage des statistiques, etc... + + // $stats = $model->getStatistics(); + // echo "\nStatistiques de Fréquence Cardiaque:\n"; + // echo "Moyenne: {$stats['mean']}\n"; + // echo "Maximum: {$stats['max']}\n"; + // echo "Minimum: {$stats['min']}\n"; + // echo "Variance: {$stats['variance']}\n"; + // echo "Écart-type: {$stats['standardDeviation']}\n"; + // case '10': + + +gérer une activité : + echo "2. Analyser la fréquence cardiaque\n"; + echo "4. Analyser les données GPS\n"; + echo "5. Détection d'anomalies\n"; + echo "6. Consulter les alertes de santé\n"; \ No newline at end of file diff --git a/Sources/src/core/network/service/AuthService.php b/Sources/src/core/network/service/AuthService.php deleted file mode 100644 index e69de29b..00000000 diff --git a/Sources/src/core/network/service/IAuthService.php b/Sources/src/core/network/service/IAuthService.php deleted file mode 100644 index e69de29b..00000000 diff --git a/Sources/src/core/stub/ActivitiesManager.php b/Sources/src/core/stub/ActivitiesManager.php deleted file mode 100644 index e69de29b..00000000 diff --git a/Sources/src/core/stub/StubData.php b/Sources/src/core/stub/StubData.php deleted file mode 100644 index 6c3b525f..00000000 --- a/Sources/src/core/stub/StubData.php +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Sources/src/core/stub/UserManager.php b/Sources/src/core/stub/UserManager.php deleted file mode 100644 index 4ea60ce6..00000000 --- a/Sources/src/core/stub/UserManager.php +++ /dev/null @@ -1,8 +0,0 @@ - \ No newline at end of file diff --git a/Sources/src/data/core/database/Dal/Connexion.php b/Sources/src/data/core/database/Dal/Connexion.php new file mode 100644 index 00000000..daa45215 --- /dev/null +++ b/Sources/src/data/core/database/Dal/Connexion.php @@ -0,0 +1,57 @@ +host;port=$this->port;dbname=$this->database;user=$this->username;password=$this->password"; + // This should be remove or set to just use a debug + try { + parent::__construct($dsn); + echo "Successfully connected to the database"; + $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + // should be a more accurate exception + } catch (\PDOException $e) { + echo("Error connecting to the database: " . $e->getMessage()); + // do something ... + } + } + + + /** * @param string $query + * @param array $parameters * + * @return bool Returns `true` on success, `false` otherwise + */ + public function executeQuery(string $query, array $parameters = []) : bool{ + + $this->stmt = parent::prepare($query); + + foreach ($parameters as $name => $value) { + $this->stmt->bindValue($name, $value[0], $value[1]); + } + + return $this->stmt->execute(); + + } + public function executeWithErrorHandling(string $query,array $params = []) { + try { + $this->beginTransaction(); + $this->executeQuery($query,$params); + $this->commit(); + return $this->getResults(); + } catch (\PDOException $e) { + $this->rollBack(); + throw new \Exception('Unexpected error on database client: ' . $e->getMessage()); + } + } + + public function getResults() : array { + return $this->stmt->fetchall(PDO::FETCH_ASSOC); + } + + + +} +?> \ No newline at end of file diff --git a/Sources/src/data/core/database/Dal/notes.ben b/Sources/src/data/core/database/Dal/notes.ben new file mode 100644 index 00000000..4f6cce38 --- /dev/null +++ b/Sources/src/data/core/database/Dal/notes.ben @@ -0,0 +1,3 @@ +la gateway ne gère pas les erreurs => elle manipule que notre sql + +faire des singleton en web n'ont on aucun interet étant donné que tout est suprimé \ No newline at end of file diff --git a/Sources/src/data/core/network/service/AuthService.php b/Sources/src/data/core/network/service/AuthService.php new file mode 100644 index 00000000..de68ee96 --- /dev/null +++ b/Sources/src/data/core/network/service/AuthService.php @@ -0,0 +1,2 @@ + diff --git a/Sources/src/data/model/Event.php b/Sources/src/data/model/Event.php new file mode 100644 index 00000000..4867ab32 --- /dev/null +++ b/Sources/src/data/model/Event.php @@ -0,0 +1,2 @@ +coords = [ +// 'latitude' => $latitude, +// 'longitude' => $longitude, +// 'altitude' => $altitude +// ]; +class Location { + public function __construct( + private float $latitude, + private float $longitude, + private float $altitude, + private DateTime $timestamp + ) {} +} diff --git a/Sources/src/data/model/Montre.php b/Sources/src/data/model/Montre.php new file mode 100644 index 00000000..cf01c40f --- /dev/null +++ b/Sources/src/data/model/Montre.php @@ -0,0 +1,14 @@ +id}, Nom: {$this->nom}, Prénom: {$this->prenom}, Email: {$this->email}, Rôle: {$this->role}]"; + } + +} \ No newline at end of file diff --git a/Sources/src/data/model/enum/Role.php b/Sources/src/data/model/enum/Role.php new file mode 100644 index 00000000..49e8f46f --- /dev/null +++ b/Sources/src/data/model/enum/Role.php @@ -0,0 +1,21 @@ +name = $name; + } + + public function getName(): string { + return $this->name; + } + + public function __toString(): string { + return $this->name; + } +} + +?> diff --git a/Sources/src/data/model/notes.ben b/Sources/src/data/model/notes.ben new file mode 100644 index 00000000..3c30fdb3 --- /dev/null +++ b/Sources/src/data/model/notes.ben @@ -0,0 +1,2 @@ +c'est le modèle qui valid les donné de la session_startil créer de new var +et c'est utilisé par la suite \ No newline at end of file diff --git a/Sources/src/data/model/repository/IActivityRepository.php b/Sources/src/data/model/repository/IActivityRepository.php new file mode 100644 index 00000000..c09fde13 --- /dev/null +++ b/Sources/src/data/model/repository/IActivityRepository.php @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/Sources/src/data/model/repository/IGenericRepository.php b/Sources/src/data/model/repository/IGenericRepository.php new file mode 100644 index 00000000..2adc6e03 --- /dev/null +++ b/Sources/src/data/model/repository/IGenericRepository.php @@ -0,0 +1,16 @@ + \ No newline at end of file diff --git a/Sources/src/data/model/repository/IUserRepository.php b/Sources/src/data/model/repository/IUserRepository.php new file mode 100644 index 00000000..d3cb30fa --- /dev/null +++ b/Sources/src/data/model/repository/IUserRepository.php @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/Sources/src/data/stub/ActivityManager.php b/Sources/src/data/stub/ActivityManager.php new file mode 100644 index 00000000..76f8ad1b --- /dev/null +++ b/Sources/src/data/stub/ActivityManager.php @@ -0,0 +1,19 @@ +activityRepo->getHeartRateDataByUserId($userId); + + foreach ($data as $entry) { + echo "Time: " . $entry['time'] . " - Heart Rate: " . $entry['rate'] . " BPM
"; + } + + } + +} + +?> \ No newline at end of file diff --git a/Sources/src/data/stub/StubData.php b/Sources/src/data/stub/StubData.php new file mode 100644 index 00000000..84c35d25 --- /dev/null +++ b/Sources/src/data/stub/StubData.php @@ -0,0 +1,19 @@ + + + + + diff --git a/Sources/src/data/stub/UserManager.php b/Sources/src/data/stub/UserManager.php new file mode 100644 index 00000000..1c738bbf --- /dev/null +++ b/Sources/src/data/stub/UserManager.php @@ -0,0 +1,39 @@ +authService->login($loginUser,$passwordUser)){ + return true; + } + return false; + } + + public function resgister($loginUser,$passwordUser): bool{ + if(!Validation::val_string($passwordUser) || !Validation::val_string($loginUser)) throw new \Exception(" some wrong with cred !!!!!"); + if($this->authService->register($loginUser,$passwordUser)){ + return true; + } + return false; + } + + public function deconnecter():bool{ + try { + $this->authService->logoutUser(); + return true; + } catch (\Exception $e) { + return false; + } + + } +} + + +?> \ No newline at end of file diff --git a/Sources/src/data/stub/files/Afternoon_Bike_Ride.fit b/Sources/src/data/stub/files/Afternoon_Bike_Ride.fit new file mode 100644 index 0000000000000000000000000000000000000000..d28baad0447223d82d1dc813262965a593d22f1b GIT binary patch literal 85602 zcmZskb(9oWzi5ZUVB?G%P`I{C_w?Yw-Q9x|9D=(;_W%Kc1_&A;xLY7N32wpNT>=CN z5a8|Kse1SR@!nnET6eF#In~wG_+Lz)cTdbH`(wSCLhJ$wFdXyxY@afc*Xd1{^OMNxoP;9eSqrCQjL=F|ML%(xUOl5eSwQjQjKYeDJo~gw=!iVu3tK+ zAMmkJs_{5$ih3E-l9*13`y&IfKd_`hs!=a{in#VKX#{=D+sm9{+DJmeexQ^noCKD$B4eTu2 ziYcmXgc-#RPa#eOe1%etiIr1S_DC~|n_PtW1MqW!RKrnKVlh2gaZ8F3CjlGt@nKg_ zQ7X!e;{GZ@oD8halWIJvk)nQ&Dxyb<3t}Vmp91X4m1@M-PEk#xQ*;#9xD4?}U_p*l zqexwe9v#K)Ek~RR3^P)V9`#dH79IVSI8R05G@xwOR3k&f6!l%So00xXoUbx89T=6E zYUFR6qKZU2bQHIyDscvIG@iL_lA=CD*>n`Qv^sGn5EPec6mOoQmPHrRQQWnf#92UG zOscWx+Y~h@rhty(YSkhB1hk7vH5#{0QLCc!>nLtqO&Rsd8ZAT9v15?3=r*MsuuC~kgB;zD3^ zK&ml__xU``TnOTJwI(hC1`(^XgqBB`QQTi`iHm`AnNp2@%@`SB&aJqE?TNntuQR3^ z<@m^AqRho7PIV+M0Ul>aHJlAnRA7`jS#c#g6PE%j)2A94S%;=Y+4bCto86VT3>cj* z)u>x5MRkob*937ZIU4!@3QYHBA+S=vvZA=lJ&DVKl(ebF%ql7BW|T`$R$Q9i#1+8G zG^xgYwz4Q|?GsnAFL5RCjbEx!jP3K0HBwx^{=`+ltuH>~D4Ts->ovs@~ zF0nUxYK;_kXE1RMaO{)MSjfJwNKCSxA#pv25!V7mKKhKsMK~hG$cE&v#N8eNtpj%d z>obb8zx^C#Mse>)5!VAj?|p`sJ@qYXD-+jXEO7%c@~zLP;Y?A{u|@S{#ohK2Hv(t= z@fqLQI6B12X78`WH5?CZ0-C<|8PNq&R79K^#oeDs+zd>6=`#ZIrl_THvN!Qp;)YCy zwg9VN_>BCyI7G(DPRd`2%RCj@3S@ZhGn!{lQL)xYalNM#w*e_neMX_IY}s+LOZ8Xc za?FCZ10x^%i~}6Ae~te}M{(C@6MqBtJ@gsnVp7yU@#aWzt9~Z#017?u83!X$)Ost5 zYqNm36DWSqXM}|DVJDa)#dTav{2l0Y$7l2lN>T1aIXd_&an+YXyMSMB`HX)v@;(#F z=_oFKIdL~|_J+?Gn=VC#B+3!VUx|CZ650cVU-ucIiUVC@B^||WT|?Xpth&l%KYLVs zVpSc*ty@pr2TZ-KwcYOjH+pAq@kqdq58*OL|Z!$IOnN__4dNM~#!jCx@{mX6N@%2`xSY3% ze*xEj^BHFk@OfHM+?~6`v%s9~KI5M~9@QtooUFK24~XZ0%G-QK^6ws1H=(JXthkPk ziRXcvTYSc>?H(0qMRD=Zh!=nrn|(&y7LO_%FDIh@O5D;H&_$rzCRVTw9yKc7oUFL! zuZWj`#Em}V(Hf76v_^`1^bhee@bh|~F>IwreQQN=sqctafF7sA&ycwNpNQ9htVFfIqxS1_YJVlJ?HA&8;N@zc@n()kMJJde#g$5v z#?Su-aDJ7~XfVs8cErnhyuT86HZAcc;9Kc4{+Q-bKgH|o2qmspdg3kM$#V7yQ#>jp zzKtF!E;1AGHgIAYBY*Iya4U-27D&7UTw3BYf+u*?`Z#l>xUwO{yTH$jeMUi_M|~IH zR!>%3SZ3lq;LAdvachi6?Tl-uqqubu#QQ+f0wz1kqik^8wX;mz(&E7&_T!yy)Xm zC9T&Kw=Xa8IWT*o&-kU6M|tDSk>Z9GAie<7kM|krdU{m31apSO^|TTH23C048F%xj zJPBR(Yl^cui7$aHV|~WW&K~8TXh!Ya#8<>WNBNBM9X)D|HB#Iy5AiinZ-mb%)!w6u zB=*pg6?eA?@gE>~n9pd{#-sjD_+CeG+lmw40Dlhl853JFx7J8;-fxI+fpmk|-!}KC zHwoSKNO6VA5Z?hA2l$M7O+4zH6~)~tM|=-F=*y?l(4*=lnj^&>u1NeBINjT4Y^}>W zWJPh?s}Mf`hrZ`jpq59?wxYP7suMo~6MFcJsOlc&$kI*Ekhs~kh@XJn-F(J|${uyd z8Y!+-UE+U0a95x4sk}%1muQX@SFQo^Gtj)V&&XFsCTq^ExRl1kFTnDS>{3g5)Dvs6 z;=-B{zXIvM^BJ3pdemua@rnDd1<~(&PCwdnwD)+_hD3A0i@Vs0mbD|pT3ez5*0$jzv$Hc!?4_f)&K-zpfvl~4#+CveRmF447P`iwF;J?dgYZ#`LY8@dzI16P{+jG5UyoPL;5+_3M78GtU$e8!gqb{JL^ z=j=nw2;6JpGkU~&RE>nbda~l4^dn{h+BWtX$09wdy%oi+8b}NPGBxrUB{FlMi|?mL zimNq*7zng);4|g~dsNMY{yK`wKAac?JgVn2o@Vl>;RyqD6!&l>F&Jo9m-m_8qkc#j zsH3>GV~8QZhuS`4k7DhMAFQLex?W-^Fsl~(zOTvZK)g9p+~-tc7?8H6&*=XtS!GBV zq(_Q7Gm)4X7+KwCe0`s+X2zRQ+~CQ?aG+o{pW%Cxtg^%p(Idr$P9;VFo2&SYl`oUk zJ}ZiQKAji|6sznroYmDB1QpsEBcIXkCT6UAjSgM%leEzZzQWrRuorkF)9FutVE`0Z4( zYHdYv#n%wC0NF}#SU#4l<|mBQlNA@Vo|qN5SB!n%;biqG-i+clZX{*{W)<}rLk=dZ zxP;Mqq_`eihz2mQh|k!#H(5Q5AETqVEZd3Mfl`HiMx$NH>T=vz9mUPuLCgVs@o*~e zTe2DxXO0w?Wfw6guq)YTbl#fG!PSi7R_!6?0!F%h#*K~1>QUS{Jy~(3_Y-piZkNwk zzAjlA)<|({4ifVK7o2P>t62!v42dgwh?o~x?_i&>JX!6vqPRmxi1~oYcJ>KNla(Xh zd@JHQ9w+7pM%#Qw??uTf%!=Y(oFo5Di~1+4kQj4r#YH_QrU1{g`i!)FlGWFk33{ZsxqlN21L=wRd-ADRGbFCeYhn?g zKo)k4U6a*a>ovt~c|$A;3{LbJ=Q<{<;J6?4WW|+!Pb>zUNbniC+9#{iu`_fOx9bD3 zIMA3lv30Vl6FW^uaoPSOmH_U=`;5%rCaZxlW)#=s3$Y|ng4nHTvf33hQ;!sP+fVuV ze*^4}^BE%=Cabftvvd?UBrUNN(1>`uZnDZ1J4Z)xx6%~YY9y?c$6n8U#SQfY)!{uIOK9!hxI*JPpCYA$y#9`%=RiT*qI*RKYN-PiL zCtfO@tV+i$)KT1-%)|=7{b--zD4DF1Vt&z4T#-m(MPLu{UeRQ=Dr%{Y;#x)%D*=m% zWm1w=Q1mh##qEwIRt82A54e(56Dx|#kU*>gbRZ6JB&%pEinC=QRt3rvJ%y6FC-tkI zthk!lh}D1+#DDW8t4dMJbrjbnJFz-YpLjHPvU(M{LPv4Ka}sL+9^$GT$!b94Djmi7 zauaI;g@|*rC9AfPt92CT%S)^U_!CDYva5+)tE0Fn`H8iGXkwSRWEE&danlMC>i}<} z_&lSN)$Is#q`1j8VqIWAaYRJ2YG6fiy&S}Pz-8hOVQjn+8}w_6Yneo>59}ij2~JkC zBR1(MuBDsU09Zm?9Kh#kMRAPgX0#H|oiX zdsl?m7-%Ii4GSS+vyS4P6eBhPiV+KZb*nGoW)$~(31U+qh1laix9S?cRgV-m`Ws?1 zpce7U2e)dR*^J`crHRdf^u$Z=+-in3Qk=aku?28H(r09S^S_f7_pTiATi_J2{wud? z5dNEfO>svm5L*JXh?`%y)%najbrd(M60sF9mKgNRt;S{ErK7lSst{Ytzamb3>{e+q z@6l1*)vClcKwDzWL$~@ZY`>1;2304v1qu*n-gB$qvjG_m;=w<;KRRF4#Q zx<0WZkd?UhqMPq@j_W9HN<(5NAOo?;dAG_Fc2Y-i1sfAP0|s&SUv8Bcc1lNacbX8p z040gBr`_sV=ouZwjcrEk3e+GTIN??eL(l6dF0ci$8z75s=rOmd7J5NPao%r<-GRBp zfFpdKp%--&m$MbI2XKWr<4?C56M9KUar;^mdjkIw)j_xVJM^-S;(E3veh)NY1zWVw zt)^H}T>AFJUcf10)E>8Tgqb77?dd@54cOW2XaCL&g<*?lNSGUR^{y;}@lll{f0;4&gzg*&0uJDIC zifc8HI1Cubsle>TZk09sk&fbW4<-%=rg4T*VWC^K2!E=hxQ|1KBY-QMo5am`tI^@l zbQE`P7;z*}ol~A)=epI9h?hEwdpd$R3K+)8QkmIqRn>~(E{r0M2KI286*FhAV-{>gr$8p55z)DW-Zcb&N5b;(=apQf&ae$LE#+y?lzSmLQ zfbm2xu&4kxawf6gj`&wcam^+YeSpDP>W7K!O~OCwD9$s9m5hnsKIUC-FfqPW<_#A!e# zu92F3?^bgo&B=-@vxGPu7)`9(-K{!XQCyW}#2LU+VqzD!>SRq;T$|;@nLsDvp6}f1 zsujh}TuGb-d?Ds)?^a*K%_StRr-F5ElXgT!f#f&9N-PjN%^tPFw^$CdSottNK!Fc*Tj#)pZ&0tuCTMu(DYg4Ple7jTrg9C*&i+Qr?fTj+m!*^29QjJN`r zMm$l}triEFADOt`$B8R})x^9-+-gCf`BudFP7qfC5xnL{k6YymHWz}puP2GCf%M!r z`O)oGp3rytHN~AcOK@IwtwxRcn&N1J;vaoH~r*8ySN zJbLDEt8Fo66u0IQaXs)Gx1C6AgHm= z=v2V1R>qreMck`f#7)4lrat3PJ~!VenoCIBw!6g5K&ck&F!FNZ5^pYBam61Hw*aTP z88|C9YhS$ik%_zTh`1GK%RR>MTy9k*-rSJHb$?3SCL`PNg-;H*8W?A8g5u6SCvFG2 ze#gNzyIcJpXYMe>^?OPD4LIM4)2wW6btG2los_uiuZcT=rrd?ynboaU#HQ6zT$8uN zoxs8F+=J^(oM{!gB zBkl(7_VpRNV%=(MY(^c$g?%ON0cs8K8NWxnRgE|^id&T?t)Ks1;O9Y{3Pie9(YQ={ zq_`x1;y&Qz5bkD$vuef#=qT=Fdg6Y-7|!`nm|IPb3)E3ui%i4=K-rPZP_SDSj|KHu6YC9>T+y|j^bK}5dQ$m@CCv4jBYjEisH_P5&r}Nz3kr7yH%#xFg;S7 zBZ7Dc_}#~~eOgYlV#0M4H#&-V7-+>e77zT~+@^@qQQVmr;t}B91fNm!i%Zpwj@40I zx_IJI!1II8IP=M+yixHwiVIC79s`z5@)>nLxKx&?L>=_oEN2k|5jFx6+Ae&td{BXZ~{?rTosDWJ?W7Q){yH8~=? zj^aY|5KjZyr?XFZ=2FG2DDG8W;u%2A;5^~6OT7y>CoAq!e&Sz1+L=7|@X*EeXHGp? zaTf~`&jLG%-g_>UE+UVP;&#}G=YVmu`0DSrOI->#qqxZq;(4ImPuv#1$z;Rx>XG6a zCJ`?HwPthudCjFxgy+*yTunFeBG7M+&p2|~rP@TAQQQw6;w50iTn@_@U7QN!*CWL( zDNMW!y#3i{q@HuBDvnLtgDdKgY^J1S-_?Syoh;-;EZh0Bv4WQH#&NYv?)b_|E z9mO3fN4yE-T*fKSpDuMU%B7>Yn2N+(z{Ov=Pkqp(wpmeJ@yf*85?Aoe%zl@u6z$d{ z#rdid?*K>m&h_bDmpT;X(NWy`>cqRi*EK#PVUJ7oj!w~0Tv#pQJs{_LZjJ16DHUBr zM{(ur5bpyuH?n2#bn)O;F&)J%tw($S4BE^M$Q>@VKf0)n;+{4jJ_L4d^%*~Hcd1v_ zNO7eb6CVLDxATqvR+oy8F()f-MpNQrz_Zh5*tf6=#+1~P75Aw*@d?m<7n}Vim+E9i zakW|!p8{+5unuit6SShZjjf5#fS3EY0lD6#;$qFoiVJB+d=3;p$Zh_$E_FEe8~vK% z#&jUQ0LJ~vmxild>QQVd9mRd^NckrO`S^D>uu7-znwxOqK^uYvZbxs+b&QZ3`n*A&;dH}N0f>0g{g{Nhq&;!Eop z5|_3g@eMHaJSX{!Tq;|F8O0qLKzs{iy5uvyUEoqZ;>+rh;@S=-z5^y);rq{dF1}we zM~aIaMtl!szRtIpb6tFoWX_PdJtK(!0@H8$jBjSURK5iBt%w^mn)m^*-{BN?mP;ih zm?OoN7)SgF{C3Z0WSPOnYejJ%e8f*ct%uxMn&#pO4s)cqO%sU!0Vf}`gno3XFe{2{ zJBj!i81al-my=w4X;?zPPjQugBz^&E{mp|R6J4rs7ISXJ)tgTI3S@oF7nS2(YD^aM zHN{n#MfB^%sm2=?pO1ZCq8Y{IoI^|ljDFADj&rG*iDmR_iu0dGRDj<{PCrJwl%EyF z9a}(53;gmQw-HCWRHj7pQxUgiG0`6g{>tr`;Vu=CP)Sc#T&tzTbU=2VwOcimRWqit zj^ZZ&N=y$_R6OZ9gjF-#jN;S^Vg|s+BYal}xzw*==48e7T}jLc{Kmt7I|jN`?a+#P zvf_@eB4z@f^Vs0{0WLKs#2hIu?;2tN5XsYsBm1-Vg;dZZ#dTRr3=a->rzdE%()e}d_6H3*w5pUaeZ7W$co|)ZXkvL+j+3^TrZdEYDICM zHxfgEqdc#<_IsD=V7;ce5}S!(z@DH~V^U9-x)Es3t+=*Zh?#*tJR`clhfCE6Fh5Um z#kUf}0XI*VzU}T(^D~*-inzFK#0VfhG}QU7$+$Y>kKUu74{SDkW+&Nr)8q;ORt-wwDALs9%183)H;8k5+YDF5oar)=P#qs#C zql-(`$)tDse&YQ6^ep6(9G+_I>-0a_KQ}Ik$B_qj{J$=p5_fh7iz5#(FOr`NeCJZ* z17+8dPKoRNJ25X%F*?;4)83_4hRKViQ{t-bCgua0#-_I_dkU?LA}_iD)@FUlM#uIV4dg1`+P^}gMlook#doODWD^kHHlpjP%& z!_(BIrdm}ac@r$?Z8@|TK`<%#ghuMs-;un(wreWfa>{E zjdpci>b(`keK<>W0+$P>8o6r!Zxr{(1!5Agl?U+O)NrX0dPkQ|i92?g=mK^or5dxV zNi=6joZoe#8#v9+1&UO0sae)Yapi6ilYxu;3L$+Zm)evl>wY>VuG?Lr2iVHbB6gK` zsV|AL?x$1YhCCpq082}z8s4%JW!+Dw#7%olEDSU$oodu5?NWCV&E1u_Aspnh<2%eV$9bR*TqJx4Ll%j3U{fF@n#g~auVwR zec7^q4RNWz;~VO?BJQq>SQl7I+#BFh$K%aUMO;r0u^y1b`&^oyopeGIJyKkOBElFG;F=d{Z68wJS+%2xQ<#IX`?%QXvUu6j!n|u@Uf^ zSm|Ao>X*<$j}(`$9I-L*9iK|B*GZgpw$xGF-3r7efIs`8=od*UF`=!F;(n@3YzmAe z=6aH(9>urQQJkk5v6+l?a3p<@qz=Tk*HN6W2C+Gimbm;*5;tbd$%@Nao7e)VOiaCz zq&~-W&?CiNs7w47SV|mnB}vtbH>0=_4Tvp)T&#U-FC?jx)<|*b8xvarBZ)u#m82S4 zb1QCZQ(|l23~|B9BsIy3;_9{_wgEb`zb$(-Nli;=qi0B5kygaEz$IdyKa*5#YYB;a z(T3O#7|$=TvhGh(nG?(lT=gdHN|;45<37JiLM<<>NhKjd(xTs z9Z-*be95gzYJa>rL*k}%BX$I$J*mc=jY&KwV@7cSJ&B!wuf#U%lDN^HF^;{ z1IyX$J*$(HiZMru>)(gi1^ADVfBu@Jeuy(aGI3q|6T1S>nAd|thfWCi9Lbx zY@ca$sda6zIyiV1e%JYO?gyQCz!K#9_eeuvBA2=OmTa8YwQ%THq$P~bNLc=6wOB|r1xYXZ?V}KnQIb*Jyr2b79tfRPgdx&F! zN?e2m)nao<9Im6d#K!4`j?JF2f&0FR+%Y!nT!?)SZM8dZf4mhloC) zF4vQ(<&xBigpoRmn|73#3jD`q>VQ&7s#@Y`9mS12K^zaPiYKWd31f5==RQrG z0Mz5^_fg>_wLD>*j^fgvB~An~f8iT&q{fpQN_LPtsA`j_brJK->qOvCo~Pw#84@QQWt; zh(7`cxdm`Hdy=|kjTD#ZE^#U_{GHF}nN{}jQ}jr2)9(|f0d?Q^s(5&KC;arM#>7XSqw_>7W&JNey>Ia1uq z48(;%+WWkfr%sjGisHru5ElVk@A9SYBd59=H%CuaTzoKbG0=|tS~KoB)zP@wI*Qv7 zO8f=LbDJ+7Z#ntZmpM{glW^h^;2&<6jl1qteXS_&dL(fvu=@t9=4Gc^6*pH;R$QML z;xb@3cj5Y9aHWsB(4IS7kOgpPhK;2k&fa@ z<{_>IHgGHQ?S7|w(cHx&67_snS_d+)x*B1F-fuU&w87s$((B^kl`|P9|;y z`XA+cp-oN|8EZyytqK!20pD_)x8w$=`ZwlRJyP7BqQuRBgB!&4);ZNhD~iieg180P zdw`#&u5qebu`BdQam&9UZUriEQ~JOvR+HG(I*Kb_hPVxg+~YH*taPeVF{^YG*QXqD zJFwz+pOJlqQx%F`siV026^Oq96?gcI*S|W|ZEK{sQk982fMeTu_-mO{g<7vEZc|m_ zPN4S|pV4lqQ{9hQqbDmaumkxMX1=jkEeT$sxpfyt5H}#2ofPH*-F@K>`jgK)$iksVzxEH9%w;o9goa#!cjJARYi5e1VhgXEyto%{q$n zYehT=++V;~B6FPTbM!VH#WiR{`~%oF&u0YAcB(DWTXht-upRMFpfz7q{W;62ywT=l z#l7i3JOt$6`>%&Ho$6lH20c<-wob&uzyZE01cA|40o@MUMzk52WM z6~!IuLp%Y*PVgCbCOcJaYqH|L@V7erPXb5z_I2PS);?>bxOxMLr-0ex`2F7xPPIPj zcm0~;MhqsN20D-7o6w2uHLWOa*-+vc;0<3SpC8XU6tho{6laVe{sqh(&Tactb~P~v zbQCve6!9#ObEwZ~<8!LsF$Z-NcYh4=9B^_FPrG=X${zEFj^bQi;(4Ig0Pf6>b*kzy zhjkP;EtPly$k&hOD#kd~yJ$0tyE%b)5qQU!^fg91RrctkdZf6pNyJOQ0>0iaJ<6#Z z(I<2i*JKLuGVpB=pOJHn|K|l*MUd4hB#F|D~jtjmv{pRX~%QJgPp2F z^jSSp+}3%-o4|?I{QP5(Q;mo|r=z&H3y8OX^(}dvYM@hnin^eqxZuUa+d%IY{Di2# zQ?-x2q@%c6ONe)Xm}cxvh?AqQ=qPT^GU8p}R%5;)?Ca#qPBV%-vYdDi*x8WXTOX(T zHR_rkDem@4;(cI8eSTHan{_Dax{l(4*AO27o9nWx`QE8|Mcvdo($3pjZ{3k*1SVm5O|*qqrTv5uX9mD)H!H2dDB`QQV=O#OJ_Eo|x*@ zj-z1IGd)sVn%%?~K-cno9o*W%y(iYv62_%~3AN4Pq)bgG{t%_uI%e&S1@L|Go# zZthfXBF)K)t9Fq13P>u$&v}|S)h%nJxTb#+UjvhQrffw+&T6cY;@TZ1{sY`C#Upw3 zoGN$J3q3>PemP2f15_b~)@FvRDDK*E;#*)754rta-Kn}qz0xDa{d-No-%jsr;hf>L@Pg3h@(=TAVLCi#pZlC^L$4UL*bo{9BAuI}b;PsP}rL zxK=lapMep?qb~N;Q6F>^H{=%a3-GWg*A5P+x*qjOM{&FE5WfQDiOGdzv;VB4xWDfa z{d%(+7GYPDU)EbQic9;Dm<9+Ve$DMvxuX0cA?5PBq7h;u`%;Ob1jaZisWL5NopH>c1kU2QGPd zXfc`{Mr3+DS#kaUA!Y!25hq1B)vJgMI*RM~mY5OPoa{43hdI^P2y>*kQSXVFfY!tf z!A{jDBBLHDuGI%(0C3CAZ?^*2-&#>zwNJ!ApgHkU29APO6j$>zF$mc0;=0VAg%BR7 zCo8VZS7Iq~|M3;C>Pt?^lOv7M@v0ac>kc6sSjB@}Gm>X_!&m zHGg6lu+qt|Pd_+RSVXiQDeg>qVrC!*G245G>J=WVqqs#GiQ&Kv2M=Psai~$@@j8kd z8$gTzni40xa;R?Mi8_jF5=4vy_S^a0%?pQ0vZA;wA;c)44zb-chq{;994YQnC@~ti zY-7EB>`=$8k>dW!OpF0q5??;xM=w?sH#&kC3tTV6-_*G4P$R>$=@}9?DvB5f^djcF z?NF)VS#=cGI))ezJT1t1{0)biZ$)u6;)n^rcw*114z=Ej;yek&L?DQ`>ykqawq8?Q z`YgmOz}x~{ubg+NwpJ8(Ju5LQ5J0SU)}bm{QQRhjm<`yGpC{!{JJb*1+4bCtTb6@p z0ELNjPdJnjo89GwyV#@4^e{k>Zk)i1~m6xp+imyF*nCx9KP@)J@C})F(FH z;!tzL9Xg8pl1wZB{F{?MgR;?~a$8Z{!4zUaUpwh zH&Bz<_`szVL1qBvEZm;&s~${EIF zhl+?Op(iWuzZ%5CKqaE_gF_9sqPT0dh(&-uvhdu~c!#?a)FT!HrYExa#yHfD@bWr}>)L==9H>CdG|HjIT2Wk+M#K`p-w7 zu4)rvNuU++>0pN{7EwV*aow8{zX5K=^RVqe2S2E&sH3A@Ur$hY|URjS6cdZSvEbx0QS6AH~>T!4#9mO4O zM=S?)BzEf}n}Zp}P3%A{4;+i(N~fcP-x8QJBrdfhu>#PSxVODSowY`aYu=ey5y(J{ zX)DJSbF$)cbtP5;N=Ng9#8wXVF}$jtA#owyiIstFQ9PX4!l6D`QQZ9=#45n!NH*SP z4mHf0thiskCsqZz5c4)>ZxUg?rnt?$iPeB(5$uQRJ5=+?YWg+B-R?`Q4zwhmtm9BU zBCG2t?p=Rk4ImG3d`%W#WDOm~#SbFZ1a^hWv`Q0n!owDZ>sUvX-8#xb~xnb%B+c`9c3T4t3ZXDQ?^t zVm+WQaei@!8X8$!j}$j~9I-wymN>bHgWtf^(NWwaAF%;2m)P9H+80?*M{!HX6B`0E ziMd=3t^n%mC~o&eVk2M@G05Ri?#PBZirYVl*cjMKd{WTCX_gtqoti>y0vsov$>&h{ zA{*(E;?7ScHU-kM5a#E0sCAKzbrknvIIp8WYh>M{%2fCbk58#H-N`o>exZxEb?_ zt$;qn?Gfy1B3kH?;ubF?wg#pUPlP$t_=uJ|ic4KgYy;dPZVq;+?h&nZ6gPbdu`N)P zweR-;he{jKMn`cImJ!nN`MN@53~FR`oQ z5SjTq9mPejCVmHOCa(Bu=V;$aM{y6=5IX|bi2Xj>l|9THDX#H4Vke+H8*jN!c6BGD zgB~gF?0RBnAdbyG=7U`wx1zZ3Hxj!5e-V$qv#aT$o%Kj@(VK}~fwAmOX1uYhmsS+F zY74O&(2zaYkk@wgQ)m}GQe25`#O}Z?Vy~BW^&q61j^cjZPV52fVy`*og7k>z z+&hRpfgbFP$3L^HDj_{}6gO)p@q6GUao`iXY8&#sj^g}x5qkmhYyXjt?8+~sua4rH z?I!jH?h)%eu&Yra{dE*~a}Ti(u#AIF_&vLFg$~eB-0*$GzCaYmvXDD=RWf9Vj^b|a zC-wu{5d&}8)$?F8iYt7O*dKUG%zeYIHUtmXBgIYpgE#=_#liK>RlDjEGD=5rp@)bA z0Y8q}Q!d+8nb0vhirajcI0%?1NBfJi5Ju}LF5xI~FyP=k!ExTMPFhjifn&rWz!2ig zzwBy=6~&b~K^zKX;@srGX}g+gMR5mD5{CiHh~ATSwLN5B%MrV38j`A`xUOf3BZ05PKM&be{gClGihFvFI0~4?3EJsD?CN9i z1RcfIxZ2ZVJyZRhFTSsv@ZV|@=yNGHlODOnf9mO@iO`HHUkCSEgSfsW!X z-62i{<`U0ru&cwt^K}%La*y}}5XFVXrFC}IF?gYl;-=jvP6DPAYpu1be*%BeQQVpb z#K}M~7c>dRBbmU2P09qqy2Hh%23HXsX zVy=AHn{*U6@gL%BUY`Yp6v{^@S2i_3p0DFliXW3PN6~(=KOPmW_B%YXISG|I^ z=#k*=5w(2Nu*uTViz%1g!AML7P&~_cgo&7+Z4>Tv*rr6bqz#Te@ z`}ZSp0gythK8f9U;7%RICI3fU2xKM}ooH9XgUl#y%4gyt;1G+i_;^;$pj~>TxO-oS zi-A+bQ9ipW6u4VQacTWB@ck#yk@)90yUG{1S4VNlX^2aJ0>qqS?P_g+8O2ps#HBzQ zV$0EX^{*Ah^-W7$2JB}|I5*O+7F$u=P=DgDKzHJ|BkZbJfH_0rhNUAe2M)3J{WOea z8@NZ$khtUNi7SB0#Ct>RDkgBBj^g|>5?2BT*jC;Tva45C6xSpZag~fDwj5|z{jDf& zPylf?@E6=WkowyT9ff9fc1 zZU}K5aFAWi&hPE&LXbI9oL?AmJs>|5<~9@~73nD6VG|aWk-m-T3j2c4Y*g&?CjE z7~&S-cMcsNI@pyj_>_*~M#K`g0;@S9HE3^F(}K_GDDGVxaT_p!1KrfNtY9JMbrd%? zfw&!L%<(gK8@mb(xvZnO4~fLzfI1v`N42u6|AH^*D6V5x;tn7KNBd{r+STk3^EJhN z$wu4>Y~u`LcMH2J9Ab_X*E2iucc2X?E=kSpYHr9yJy~&?auRm|X*uON)0BgbHACWN z=OXR~e&jT3b`$oRq1W_CaryHQ_W*9r-WoTyt7{?GbriQIFL5t$k#o(ojqK`Oh&fVR zN`B%#pc|*KPa4?OO)HAqT7bA82;d}tLw&mn4mBq$u2>=B0bq5g&zN4%uI^f|DQ=^U zco1-eu@ig%5 z7q4-=qFwzNXhv}#N)gWhai6`0Ke44XL*mMoA^rul{p2;;R{$xs4Vd;;Q8n^ z@|Nccz#1v8e0kzIAm<0K@oQPTniXU&A#p1!5YGc=-+PV2W$bE#6~(2kM7#i0dFM4Q zm*(WxTDIb*RwiBqGQ9N~uS?lgc<>|rKE>UxLc9e0^^e!s_6=vo)=8y zJ6Io?xU02^*MTw5y~f)jc2zF;xt?2bW$O}e0L`CyjfaKpDrfKu9mS>ABi;lmJoOqU zQ|xMQkU3J^q58yIz_Z6*OJ%t zX^FLi&5`2nG$!5!KHc{kyIgklYw$mMq_{RsiT8l*_q@jGBrd&z-{>fAOEcnqpzU3+ z@rTo{ItRbiQCzkb#0Nm8J6_|3!>(FbQQWX^i4TFxx4hg>u&Wh8@AODkFUE33%0c);!ji>qSYIV?89mO5&KzuIove&TZwX07-{Fg}h#!6g? zj>H$h(o0@rc5V&;LH;^w*NOPIOyZ)~h{$DE%YxGDDDFjP;!7Zw*e{1&m9V0?d|ipJ zfMyrG##e*=ZD2+{Qe1;>#Mi)Y=e(+T?{azxEtRS-vQCYd$D$vIWSa@6c^H)_#T*Y z)@uxmv8x3EVLFP7??e0-un{jr+0~_h%sPrI)|dDJIQN&=NEc~Wr31|-I zakyRW4v5er#r@cy_z9>^oE9b{BXtzFZvgQ>AS3a92q&TeQ96pdJ&^brID5uxWDl0N z60M`Spuxm1z-;2MKz57)u{w&&F@*RPun})&Vjmw6r=z%XLy3NUICPx$8qG7>)#FTN z6jyN=F%7Ve*daaZZD1BXQrxuRLot0Mu~brhFnG%+3U=A_ry^VOyn1?13CT=6l)^uTE1_0KjH8kkE*apT4k zGXSB)!vERSn}9qzid!>|m{CTaV7>ilQy&BJ>nQGpmzW8-e%xy;`PZgK2Nu*(T=`UD z0MLvW_}->^2Nu#%T*vXmKw!%;uhI3bP0b0k>nLvF1Y!^nPQ3k(jgx$rj^d6@BnAWJ zk9v&;uWhQi6~zTlB8C9yhGGOeTf`-41&V_un=Z8&p_FaoeX5!+_a` zcq`9sD!UcMef^P`8Tk88_F&I!Dk-R_9w{z)8ZjLB_=ndx^2Dav1{Kp$T$ky@2q1x2 z^RZ3Uv!b}QGl-Eu{(~HJ9@_ZbsyR~J>zTwTpuz#KvF?G5i#9Wgi~ETf4TSIa8sqQV zREwYz`ZdM%noW!W3h(29e$S@X2AWaa_&LN_pv+#@ggZ9X*BUAA)?8v7P;rmfn0wo% z96_b@WW^=SBgO;8cYBQ-w`{6iP&pmN4V+I*0K#^8jZZghN?B3du?56L!1cS=*nZun zjs=<{#l2og%mPf==`~hev#G5C=4*<(vWS=!XuHE}%(!Y(O{|gP^8G^01~mH3YfQXi z<3IINR?m=jONa)s({`_s=CV!Y2`a6lxK&Gu*@17jd5zyM+Em3LbELS}%ZNFEUR&9{ zU9hPq)?~%ySWe6dblu`L>Yul%-PR0=YqElv3mCrHYh*lUQ>z0j>DLrDX(cf?Fn*KQ z*!-7`%lFDUiaWlFmSj67^pvjgktk>Xl!A=-hG ztGq_5LpHAM%_wg4R-yxFzS3)i{%KPMttf8eHlh>gxPsR_Xj7{K8|cZ3`?#H$1oT?& zHM$?LsSZ{YS7-;(1^9mT8jbebI69ak#Z}%(bOSqA;uA{h42Z+Uh3JY0p zx7*Z?Ky#$HMF)w+fvgL>hHaZoH4AE~M~eIM2eAZ@dA`>ezSX9(1h&>uyFW|7uQ7CuO}!3krzb0}>?vY7;Kod^ zQE)Y%N|5=Q;%1&EmItoP@ERLea$E^EM~ZuKhFAf(KHY27SYcB~t&!r2oh4QTwoUUI ze#_-G&B==U=^U{Vuzsr7n7quU&IPsCGbHZCd17T?`;VLyF14wL*4&CKdy!ZLcsPaY zvL!b4OQ5;<#8tUOtO{fxUS4cd4Fk;uFRsI7Vl`mvB(E`ekxgB*W=PzVE5z!+fgjj- z7uwV_D~hvUBh~=+P4pUP=F4u}oLg}{uM=wmS0;E3-#nYz7HCFs3vUo>0Y}EOeg16Y zuALdhrMX3{4XjG_8n@=y)YPC3dLf9bd7D@V*x_T@&gN(z)JaEizuqC%1%CFjmHlK> zQ-b)@d7L7N`}Z!f9x!5@*Z5(kjmy2RI*RLXpI9I8jb(;r*wp%XfwuZ zoS4QYXhm@mkBAL{R--vYPPM69LEZI8aqS-y8v)Hnd5wRk*tmn%Lq~Djo)8-YT}QIn z^XGQo1esCX`=`VvK-&>sBikgK${%b_R$Tq(#HK*M;T&`(@`rkZ&AAmf{ROcZFlw0B zC^x~z1#uVsn&R&MO>8bBhkA{jshrgWn+ri)L2TUiu1iAwg&nPV1`E7 zRGQ$PdTzy?c~5Ku^y<&)b*SCUyYE_2vLD*rwvF*A(~t7vguooL=lr z2HMokpuT#fxV>MA9f1wsb3__oQi#;4YpjT!frCA` z0_bbw7SKQ)#qCH->;jzV?lms;mL0}m9mR#EBX$Kgck>$kd)ZV_@DLrvbxTj|1{~<> zHU8@L#qG>M><%36;x)WIWcOx9aY31gJ%Bx(*^s*16#pF)JyKl90Af$zNGGo` zuPX=F;Nd!o+Zssx9@yQH9Yz5cN}praP3>K(WM#J4j~hC6n870I0Sgo!fX81 z#KwQubfS*pzDXnw1#%H%8{5=^;2(4pH$4k+7|^)6*J$0)rWRUJ+_S92;lP|`oZ8j5 zsnp;}dZf5A25|&%yD1l^b!}>B@Dv@z&CE_536vwo)v<9m%Z%b~Y7Er|T##b6(Qw@IRR zAqjc9Bz@|@X+{eBFBLh0P!hSgxQpAz(~T6?x;Szqp$c+*s!N6Xq_AxzkiQWcB0IS0 z83)cZC506!g&albi|mxd)&|TrQrHirk)sJ~kTqR$l+7_x*k5IkV+f(_+Xh8kjM~jL zQdnv^;Fvm(jluJGLl@xZf8geROCo*@0i{a9xX0gI*e2Sb#Xu=^_ zBd>Hs|1eV6`0B{%1jWHyCCsG;_@uCGpCM-u)+6iYa;cpG%S=gOKh#A2PH0Diu_J_@ zRF36F3R_YOIg=1cQ*$VY@q~a?Mhc7i0y&GY75OAk&b+IQ6xOpgayDTQEm&-TOJxdJ zYoxGqb&zui;k12av%6FkpA_b3lXK^7M`yR8(q zw?1+{A&AC!PbQc8HeiD(DJ-=iasieRF**J;C53Hi zgj__>oE_%*aYdJ7qmjbG8zUDJjv;?~?^Ig@tQ0n{333VHCr&yo-a6HbfX$|)utLp{ ze-N^9y6X0yQ|$=YVx+La&5=t9Gm-6IIhmxf)ktA4S|FDZA~*|v|H8@dxy?vnby^~q z6UHIyJaej70XvKowx<S8+QlKPh?9sj3DXGK&=! z+yl9pP#k&Yyi?uGVWqGpJ&{`oHIPltIaO?SyFtRf?1kJ)=!-0W)~SwUwSS7R(B8;x zgj2}qGfveb>jAS)Vb?@%CrqOccJLGx%-@z2rurav5E|39Ykty6SHPAOcC9aRCn1O) zSjBf zeB|J;*|)-`c#($*y|~ix-|keu<~(Agu!s@JBl5qvMmn|CsUic98!4>QNaRt%2Cl9e zZgHyH0Vj+UcK$cyF~aR%hUy!eoT^aZDIlV zLh;E4C$raVNnsz2L!Klw<`T2rdZ&u=Nn!KHBTo@}aB;eIt&_=rwxqE5iOAE0)m+vN zSmRXr0?(Os3L7~Id4{l`3*xlZPBk~j1tW!Rn~Xe5sF*%fPhI8Y%zMd5VINIJo+Hfj zaQ}0qQ?2z$VT-3B&l7TR;U9|Z81R=VDJUx-y2b2-z>-mXX3-vyqnxXBqvtjjR*!w~@m7%|Tuve8!+k3>y>_ zaK}ht=jS4?68>a3rZ4iFfV)NtD>fhb7vb{>jMX5s1pZ^Buw@I7*9hAta+icXbRyuH zk;1YsLS83ioIF$yMn22&)JS1f79(#EI!vJ-&yH{BD=BQ%668(7hN&Fc{A8Yh=cc5v z;HAi0gbUM#>Yn`AMFUu>Px%cL|$k4b^$5x37E~B<$#FFlgaW{T~N!i=1zb6gFxT@*l#nMMHV~$El_UzB5u-hAqg)ga!-?_ufUN&Z%-s zpIX?0t;i>YwG1dpsQ^#L@-enA&ovL_HqLISJy+-CGG`PVT=^yHlucWY2 zZ;;`H#G4!rPn@bzaJ(rg?9E$b1Yv^6XY9TZyG~(m-XkM@a_&o~dKY5XDeQxvKleWg zSt$7#mn1_&3Yx_VJFJk=gr02B4K8Lr3Mp))urUr~4B=?BZVCZK*ketASgK>*V%J(+rGT4g}c<>x$Pbj)-*4&AfY?55u*YJ!>kmx zD*{=Fu$rnF$Y4Wc-a_V25%y^`vM}K=mHKFY?k$H~DeP)2vIyZdhr_{wE?#I}z?2j= zE+5iKcz=$29Ztp*B5lN9dA=;P%0p?E;w)9hENy2gDXvU0xDPYfn!WPy*M2~LOjz@T$wl17tm(3yUtwMPAuAJZKWC_mJExspPt4W|%RCTS zh0x|d?zwV9_LA$Nk;1kNK~^OMePGa&`@C0N_l*?R(Sxi;IKhn8S8F)RT(+w&Ec0*3 zPY5fSV(Z}E@=q??$rm<#Eb>#rv;f{=g><{@g@v$UlaSR3`I%>&1-Y=uRkKcEou(mc z5Uwz{xz<|hZ4rAJB<$i$4_TAYoY~)_ks(eig{@zNtVIZ9 zu6hUl&IZo2W}U)5UxxggaEZzDzbtd9c20XmCoK1BbqGUB@IEPi&+5r`R6y9W9mu+bE@gR1+ANoPlxzobgw5EC ztVbA7k>|5#xYQ1}9Ul_5_7L(*LV8u6-J8lCixfL1C2aq3WPQTW8oU~dd#<@swwtXL zw&M)40inwmJWM#An}%*X)Fo`$MPx%l-!GZlJl3V|xa|m`RsueetmDQwkyWHUnZ-n@lx zfJ;qruP{>BoQ&DH|4I1#CtkC`9mR%jJ47pNcvfT!LeMY6bY|`-o=dhv(ZX5>Aip6j z8qCyiZW?Azo^KW_EF=WklCVFW2QYfkyd~T5cwz6tkgW*MM)H#(k0;q-eql!_sx&yigSK?nGn4|}LhVY^si{`HXG z6UrXpsa#~cg7!}l_P7DED3N=M_O;qiK>a57i)iPVdYvQdlH6S<=G(Q`Dj~BgvGT(_9B$L z&f}KUgt*9gX0gI%e~au*IDM0cCXuhg7aJ)otRwOVLetwkx`7;#*VbEMJv$@&5dON$ zJFKX;Yx39|A;OM+kL*iuJ>c&|HVm^jC4~8PNB&6Y@Q9~Xxre?fw>`>)h4n=KL>T;- z$JUT*bJ^olSXgglKf;E8c?}M7d@j3KVF`VZ{Rvl}@kzkG+&##(*8C~L3jB!tnGpVx zcg!IR=CbP)R<0j%fc&r5d^8a`D|EdnDXj3%$X`Uhp~2wbEf;FrAz{J4AO{l4yyIa) zWV2A)yb1IF75OWn&_sVVaOqbo|)40S(=(gp2kDvM{?Wy4#H-PL3#+yg8ASClQbIU zv8N7U&hbbu;bLf-UWDwG$CeZ}bRu#%VRBfS?oCf>NM3tWLRkJO$Pt9h;e6l)IVz9c zT4C*`Ax9E+N3vL2>d|@aI)!EZ9r+ufe@vQQIEdpj+?EtJe-?5Sp?n-KSRTxu5^nd9 zVRMnAkx}{6^kHP}2zxh3*yH)gF@*hzyi%M~$Bb}$(h=5m5ppb{Z=p2354p-Gg}q&Z z97oVj-rGEsiIw5@#+I<&%aG#<%ZnnJbko!)g*{n;oIq&dPSbZdm&HWbswr&6YUD&h z_F`$~Ea(?$Pjte5S%;iNSX+V@EDxto9cd2-VW0kqoJ?q4nwRL)5lxM>hl8*jn~_rp zlgje4V@}IeBUYLUCT!?dE^6JEbhe<&i-ZmqDD$B?rK#j2<2CkvSS5n(q-Sfi83*@XDd()3Q|_l=LTZJ)4? zXOMFU3u>n6`pcO`8)Z++!V=FT=Mp-9&esc8v4^4-nLQ-z?M37~LU8Rgy<#1+DWYtv zDeTS_`?3Ttev5gwKE+w6vc66kFyq(z~ zY+WF7E#YDRG@S=|&L@R63PG+T{5g=S$vW@E&o&z*>``vydcwvb)FJ+q1NmneDQs;x za)Ze9G(Gk-KX!sWp$q#V8u=&T#E3L~ggx{yVTLIwtaco7BjN4nG#!BaHPLqMgq2P} zZX)-P(BJ5h9rd`NR1#L-Tn?FVF zCS2XbCsqzIo4>#)vq8cp)kN+gL~T#gU8wQ%3fKuv!Y0*5?j;o2&9{mUFb6HsE>>8Z zFOmBQS@);uuaJ`x?B6LY<5$T2gbRn#^pyQBwI}~Lvrb`C8Y2%7#ve=5d65g_trQl~ z9C?rsbSh2v;`mI+XLr1?rY(_&2yM>t4Ya+Cpy`QbvBLVdK^`WIxR9p%AjikpzNWD5 z?U6?aA6=$N-Q!Y4qii)1_ND{!DB0*FBIY34!<0bcLP#WO?lIDXdU$ zfo*}G!%t>b(UD#Z9>Wr|o ze#owf7vVm-}Uu*BLn@l?t|LN!aP1u8Xd4srjM%j1*R60`eANMfP-EnW2$O zx$GWgcBj@`s;;U z3x?YP4q^T?k#`AWbEj)JgDTx3ZU0u-tJ%nVgpPUB_5L|7zOiNZt*{*Pk@pGBBhz(# zx*whxdj%k@%p&9i!qAv>9sWC`0;m=_DeUwnDtZQg{{J&All$W}dFpQQ8KD#gXcdH1r)S5~GBGE!LC z+sOY2#hRw;vRpuQP3>=_uuczF zjPp{(j1;z~Ffuct-}H1n=yN(~rIU>mHaZ!Zg^)fcUDvDWQt72#Mha_H0-2RCa#6a@ zSA$1XN*6Lxn5!JppD=tm)#MYG8do~ONMX+_A+r&FT$`>NRHdaZ9cQGlb)O)!6UuE$ z*Lf>*T~;dENMY4#A#)J2>`2$^D{`VM6=9^X8+DNZgsFSeb))ihTuSCKQdsS;kb#7I zhtl`F&u2;t_nbp2-vLk21D&C}$i zUdUX80uN~3iZV`}VxN5%_ToomZbI`X>H2yRM%7d7!}!7ienEy2R=!Brn+v&A#?;4V zox+L@LFOSuzD?Kt3vl-!)xJbRSPu^}FCi|2M^{OpNlmeDK@j%!Z^&>$=FA>lCf=ns zB-=M>2#Xkpj3BJb=F!EunN~aLidme0VO zFjkXf-)|zU#B5|VAv}*q|B#De{v`W07GY%k51H6J~H!a4$C-B&`1_WC21~r$?V;zDZ5DeZiHm zcIS}=37Ly}bR}lTG)=Lu#u7H-3bGKPd6Gx>WG)Yn9Gb-nJ9qbx2>I=Dry5?&zFACIlSfD=p{CoTvo2toS@8*`q_8tjkuE|Ma_$VLx>|gU zk-|QIjVwy=ve+^cxcgqhzClgc$@j=4!V|XEJHn|(mK<(M3LEGM;QlA!Q{>gb%!w$K zW~8uU*^q9+eRe{(eoVwGX{E3=Igu%ZD#%wooN8K0`$jy&awAib4_zL;qoY$zDe<#e ztgu-T$YO+=$lk4;s%443MhXkn$l`?0kzY1(swKtkEBb_elYlHiXpSuYC36Le+r%B`R#iOg*C5? z{D@FB#iOqma;ib`cAdiZS3{O3yh!!vEeTHLj_YPNNZ7sV$O?o#B|N%(yi;9_v2Rrr z=2r_@k>D-k(QA;WqdS_C!iLsHRwCpn@6nD#r+OIM-bi7EzC?aZs8optgAJM-XJ3RV z>`FsqWx_XAJo=H7SwQhkOi5wG8zZX_ihSbHpCxmwgRnmg6umZ^ywKTh>TnUynxCBV6g?(bYLVkHnQWQrP2h$S(=i zx_Pwwd#BnEmujT2`je3L37vX)be5h>AdRO!bd1V5G2x zT4Yngl_4J8c%oDNkw4Z*VOKXGn-TJ*dGw$uOuy3FNMXk}A)6Bxrh9b7X-?HFZ=8|B zW^X~ZAbjNIbVV~hJ-1z~u#wx4-w+Z;cyyX_;f5k*+SOolft?lK(-+)9`DhgF6QhIZr3R+ z>M*h`A$F2SXIshy(#R;YPGOE?$aaLErg-#y&ShJp>;?(Ddji>>kbSyG|HW+KlhJui zNn!t;Mt)1^^}9zOV_I*ISSy9KK9B4`XgP~B?t#Vb)x>b`O*1eNx!v8^}(CujYAlvxCfv&KG1#3Tt;8*_jZwz@vXW=2Uy) zvl}Ta>OQgy;oU-N!fB_fl0T!7!nQp^eor{M*rWF_U-NxJ1|x+n{ukMm@YNrj(3!_r zEYW_`wbsqWrL7? z34VJ#dMlIv-o@Il{|L*Q3;82q?{1H-^NOc!;_VlQgtg3z{E1K)IpdvE6^TD@)+y{p zB(fi&HPWNF^_S0n7SFdgJjIO-W&^^C5pGOlN~`1ahOYz*!@Ol`nuC zK#1Jy(QU%GAa>dBKnW}4ME*jUh3r6Yypwy6DJkq*H*z4M3o=ggNMQU9BZYZVkiQb@ zBCm4=a3p4{k;2{=Lk=PoLssR&;@8M+MjBQUIT+arnOc|`9CMVT1z6B}pz-C5QbAnXuL6kZFY4$klFn7~g({ zOjy?P$aKO`@O72zQV}i*tDpU>7TFLPeyP;N9oZH@Oyk9Js~&DZVVMVGTM-s9hr1M*Wd+0gsuOe*r zC&=Fj5yw1w3RkX^!|jL0gx#r$97U*d!lSz&kL0o&B<#`W$kBw(r#!j`Tl-an-M7L@ z)(D9N-|IGF0=zM>e zKSfw_Q{;HUlD|B<7eDsu1S^FV`vy6Iu<#~V9b97mkhs8<6qeW)IgwE64ktQlUynrl z)kk5oIv^(z0`GGIh~}L~iT10H!YXw}P9`*Z=+O_ux$&&0o5c!C>57~}81Rorx8QL2 zFJ_97!YcPbP9^;Pgw9f^OTCVsip->h`S(UnBTW6*qo*Tt=bUV$uyrD*6FMQCAubi~ zZ`Ubo$q&dGgtAXP`X%y+!%AV}`XGNNOnJ_gE0?wX0_U0y5|-^J{@B7wr6K1LoRr+bj~yOtziB9JhX*;I@PQ3_OEuXN zYNfEjBajOSe<05?`tfC`{idO?_P-$)5@xg5-W+8OLhVr|tifpHB0@6qU+Qhv5G#eL zvB<@QR>&IE_`#vJ9TJu@9=U`NirmLhmNCRO7{bm^K>k5cY>;0?m%0#Sk56HfCn1*- z2Jx%huEZnQLAC`G)_V$a86o8vR~=OtLCa}N3adR0xty?>nvl$BR_{Q2@Cv&+9l3&V z^D*r$vQeOIjD=159l4V5`VpN7WQ&}~Oid8hZWeMC;V_kY5+i711FRJ0HwU?z@B|se z*jw8G`#C>h)8-=A5d5j}pVeXpNAO;=SYglRBi9lpu|eryaN{||{wcy7i;(LGpKv&I zs>=q2*j7_mh9$`Lg!RZXj4>VvwV#9(R%I!210jN)u)mQ@oyfh$tW((K<;Xt?LOCsS9_)!)+ZBwtgFO8zKEaS}=x% zH{`Xgrm&_vk=qG>ykW=p<_!~hH<-Uu*puDJ9fYTEIhXZi_&ePGDZ<9@L+&ILf6ob^ zKeO~A?1wsqH9UyiML6<-VTxZ|>ickediBy7M1PWLZtn`tgzgFArBEY zW%uf+X)ZN2%1U8=H;{)39Rj?%@$Z}+B5lJcY}PI05rWF;)f;EK)Q1RZsU1pKjXTJr zg#JNZeR)1l>PJ~Atj>MpF)111)u$HoclxBT%8!u833WrgdfzhkZPX02SYa_wkS7Qk z!o0fJN|!nsX-_)BLZ2Z|5<j^KPak#Y`|# z*tqP-i-Zm?uRgrjr8Y*7Hd5HgK;$Jt-DEG{T42Y=j5AW$j9}ztLdR6E&T@!3qOqfl z6m~cl@(Q6-39tV42&3w;Ba9U0mlt`JFt4;%pJoce7HvP4F04%?@-M>Wa$ep3BzL{y z(o9KVCu5M;2zx4c_1-h|HS-NIQdpgQ$m@j9KlW;Uk+v^>kdeYNBqDDR!mE09qpKXB z`Ry0ug&iz}yh(WeiC6c#!R_M&TT<9~7xETiVhyi;e4AcsLVvSZVXfTAzX?rid3Esz z{3!`P87VBOIPx~3Ms2Sy^_V#k2|pSs?0G5V9l~$*y!!4_?kFbqHd5I6a>%=cHVvsm zFX-|l_A*k~k&4KBghgL__0HEWmBlB84XlE^Pk7bTtM9+%o=!qfQ&L!oPmvD@9lr7E z4TA3b^-*FQBZc*Bhq-o>kX=HT-f1)CcwY(-<_6N0M;e`ikK)?4IjBZZZ2f&7;+ z;s@5rdtui(8yYF>Kx^bvLhpWFozClKw->Evq_BJ_9 z!mc5-x4ay;bCQ+9=66TFAToxG4Y#aZ2y6n3yT@+D#TaIYT4dwxBIJ~2|*${&%h z2vNUz^&H+x{H5ztBZb`qN!eeh_{9}D-vg< zu%+XX?+H(5c=btMV_vUNw2{KrPDXwp{4mF>Z}S3lM}fRX3VSmh>DQY%Gz+~tfs%fS z!A1&eHXE6NkmnDto?V?UCM4!CQdo`oNJUt(+^dfu_r+&6QrOHz$c%(}tGv1h>wFk% zrLZG^ARUAiYrOhT$z%>t}R1mB5Ysl)$@4K`}N@W!P4FeOIU%-Ojw0n$t&Wc zviX^k!cK|ILa2bO%FE@4Wy)Zrur@1^SqX1hXC;w*PEr;tY_>>$!eitk7Q5NcZji7G zBC`>0%GOeHGW}F3Da^eJnVm2iSs&TPCx!JFnS-zz`HsaN_se8T3fm?!fUpYLnv#n$ z*gYgH<7#9eVF$7^@`YbkQ&L!n$ee^5$m&R^Uv?vfl@=L9xP_FR;OCRV%83mA|4T;* z>=X9dE(&D!v%j&h^%U@v;FrNq{&kdS{y91kTO9N1whj1rN60_?M423&VSmB~@dbm9 zp@u18d)KnwE`&VCy?S?(qN-(XD}_B+kNlo66Iqv!F+9orNS3CAeYO$VmGH$0uYSlk z9-icWV5G1=HzT_d{7-sy$9B}fu!lwpi`<6nPPl~3^IcKZF0Ylsrtd)ZAY4Ah@zR+O z?u6TQ3M<1C($A<_{KwoU97NS2avr9H_v(Xe|`96 zqVJgv64voB@(03-3toMrUr|*y=B|;#`W!>{A@sWB)qD7G$^S`VKc7VQC5*kop+8vU zZBtU%-ZRJ_3D5rW>IZ35ve>_k6ju2H@+ZO%H>eFGcsY37O(TUpxs2>bxOR)~9iNja zm;btv!j4@-_9yha!;v;Yesy_1Sp|gsr zV}&o8lEQ{RLjFQXe!_Ws0k5Vna?VI$rJf=O5(1xjb>LEwXUt-S9e#=Yl~C}dSNpH# zNOK)GQrLpG$U%e>|9N$WKY4Sw>#&i+`eq1XM2p~hM;+pePF0KUH&R%c%*Y{x+`}vY;K8CQmutI`!V2X?4kOHQ4AhsxXi}+>mKKesvi^A8!7BwIMPGd=09AYyIfSgj$dP>uJQtg^|KK#v+FkqL2k|a%#@=Gt!}iwTMHGAT&Y-{>}F@f`2kn*sOfWk%R-t zaku%EN4;Vc*12C8~mE4#wUd(CL<>h0&@)4U%V}f}BWb&EGlg10Q1u z?`5R0fyI%N2pRcRKFye<=0w<%!b+7wP9`kKGF;!t%;zs7dYh8MZj?bzAso##To2<* zfg2)iNns~HLQW;{!|7UqNvc@1Eh+49MdUO>3bij+NRrwbZ8u2R{>sSd1TXdWPVOXi zF}kN&r?7R^kTVEt-h1^eK9@Kurn`~CPE|+#PI&j$s}Dr8wK3g{6n45MawehP8?R2{ z`;8rAZAoEyY9nV6M!ojx5s67^QmkF4uom@@vk9v?KD~wcF0fAu`=tSL4&lUe&Y?w< zR7h+Ovrb_X8X@NrGH}?Bm8 zd|TQlg{?|Mt|nCFTy~&al8VXK)+|<7!f@mo!Vu1a&-q@ie_U%Lh1K~Dxt7q3^Jj-2 zlhoVTZ;TYyVGME|A=4SJKFg=7uU*2VMS&lHxd@naalQk($ShXalx4{6grO|w`_Hd6y{!u+(lS^(5u(Z=VRB|>lrDm#wz4)!YgC~U&7v* z?F%D?RbGwUL&(Zv%PmS$75r-(DeOOydkGQ9UW@taZC1NZVSCpg_YoemSTA4SzMiFy zDJg8gTI7C0B69X0N$Px-FO3v7WF7JV;r0Qqp1+iDqGz#NE3EW-}H|GD+3UYNfE7B99QZAV;s_`^Q=ApCZh&5qXp_ z6q#vFlDePO{wcx+ZbBX-)Y;EPF)}8b{ZoW3+l)L;sJ)kC1^H=!U8k@yTahOSm3DJI zxHd_70_{45_1}&>N$9-Ot2ZFm=d{0yu#a{kPZ6GN_wqr>B(*JPO|$!i?c0SsO~|l~ z5fDDLJ~sF>BZY0U^7$)aDSoSYeM2AkPtU z{z=c6Z@=HlUBi?VR_HMDJYm^7uYQT#5cY|Y!a5&CULX|Ynx)UyBvm@^r$!2Ua~ye* zuz96dJGS!?=)88F!n&VAUXrlft7DLh!fZ)lbRdq&9`MF&iYT@^j=p!h{iC zeH{5PkCnpSyhPq7eC_e-vPYBDuMxH}7MAf1@&TdyFt1KLo}|Jf?bZr={|@<(P;oG0 zVJDJQT(oWDg(YVQW<-nNV2o(#$s~0&+U^8l2sMB9>cXd!)PyMes|b6V8Tptn z{3ow2bT&ynjUfzBeCb4_;xtav=XDTkSPGNB&$Y+FNT^SXkrjf4+ zR~aqb%VLY?u4R5tVMpVT{}Bea^y*2JEEQ&@u;Bd2H-u3wyt?7dBy~L0{wcyrBqHAu z>NWG~7k|@1%WXGE*xiE2cZ8cwygL8AB%Vb1%B)jZiz3MPgh!3N`sjUnjKQ{~uzgPC z2g2R2*xG-R)Wkei3Y(IQ^!tI1Xnn7){4eLvaJyJx8Hyn@5DwR+`|&hM4b9uwtW((0 z5=ce3{spJyXG!WtURzSw>e9%Jgr949b*`65YGWQNh1D;IbP%T0@am6W%YkI8rmz+j zkeLX}7>@q!za-@ix0PC0*^iN#3Erxlmft3+FT!mBvqfSc=n?N>+EnZ0}9j4r+`e2ccmJuI)1>t1`K)6gHaQ-4Q^jTFk4jQu1+7 z2eVFL-ulQu!f7|nI9vN`s4Xe1D+in-Ct(0`6Y^aS+bI<0M>FUMB2-SM^UFFv3b74_ zuJVmkg0LMlW{yxo*MeT%AX~B; zA7R%i>?!S)BNrho!K>HgNLIsQ>^g;Y`4*X*;GfT{$K*^_DZcKcu(KVJVT6$}461}C ztEKVw+CkW{?~!>3lOw%)NbY3yCa#^?L&Dy6N9H9I=N46syveG)ud6QXLN8=Ep+p|9 z?i!h_)<)Y7x3J&)AR`E4b1@zlo2)9tb}@?;meda!N!T6Y)nCRZt9~&(j1*RJ05Xbj zH^{3yB_^vPQLKoAz_5YHXk<@r;`J(+%)15b#i_8PgOD+V$AMm5p>VS57;LWvg@p`3 z#uBn3_an>Yu&k{>|>yrCrHtN=B)tnU%1UBC8QuXwCG5jg*V z;=^V4Wm3WtXCdnlIxw@KZ!MAXr({yX+;fq238k2TvY<|~IuK!gV$OeRx%rRNm zN~H8+GAm(O)*%}bmONm}Ra<_QXgLFAR>FpFKz>Cyf6t>Ue=E{f6Jb|3A{!CPA(J{J ztI1)sev}lpdK2<%!er!OO4iI_r7*o2*_iM%vLPjJXO)I9vl7-%WD`PW=r+E_hj|AuWAary9@aZp(iue&h-*$*D0*sUSvzckn0{ju5Yqh6DFtr z%t~071IShc#YDI+KPRghk@oZ?toadSYr@LQOep#_S%vxeD=g9EcZQRM?!lhHr}7Zsoy7sO?ZgxL`Y}8VCZJTZa->=Lxbi;WE=O z8!Ss!ITNI6I+U=)=g2OE$;^NKdQCF30qvEIu=1~w-xC%wbGFLHWK}frOH)!<$~$CN z!V~8CX55~v{z{-Kb~^)8{Dk-{bfA$t*$SZvEHbQ%&W8Y%4C zT*%&pdi*I1ZX~NN`E5yIid(LZ9|#|i4elnZ^Z84glEQXHBKr`Iu!qV&;?y5+7b`3v z7TK4uo_$;6DK#O!j43Isdp_ikgkel^9rP+$jft;pq_8Im$e#$`BD=g#R<4APjTCmc z5V9X(3yW>%aR0x5ieWBfe`G)8$ZT#^F468jVLRQ(p9#sx%|UL}Kk*~8SYd~YBL@&l zARC9dRYYPjBZc)Yjr@h+Mpln?ODD9fJwIkfn>c)t&-nO-W&)OcihpA)H38 zDC1TO3)+1v?DIOvp@cwc{N;*nr3-R_KIbx>a$1Td9TZ zX3mXcJmCRy)DLdHO#i9bAYqUCASV!KtC% zloZzHXXGS8dE}$PZj};kN0Nl?7>Jxq=#AW)?pCd1>|%vI9E_YoXpY=D(ycy?{lqL* zn2VWEj;Vx&$X;Wq39;3U6jsrToJOcYV_a^MTSdj%#R~gwByu`oDe}wdZsucgO-I!f zwv!oOjv0hMkt=4q)l_YFg0PRrBY!9CLk2B$s}gZ`ox*l71?n2nzdsD{={8gOvQ+t%9R$t10ZzcH|#~F35(rsV2cz3LCuxxs>n`vM2Ib zR=ZANyG1S|{EGYvxi6zVI|%dNiCj+DiR^>CpzN_C>{F2|2#=BPkVlnmHHFO=xsnh} zSK$5~xB4xkZ5V}B+l5?3D1dBw*R7iQN(vhzay3CCyCT>5*?lW)mdG`PL}U--C7%>F zU*uXsF64Lj+-jP#f2XkOyOHY%rI3a0yVXF4JuM5{FLFI03c2BdTdmCex%tV29o>W6 zK&XYR_J~tQR$Hlsonbn)<4?kOM|d9SA2)YJY)N62_9HhE>LTwv;aACS>#eXw2auZx z`;gO~x>e!q_7D_y@gQ~mak0N&v9i(y4ULq;{wc!BpFkcY6r|)lO8RH8QrI$)hX|RGtC86<*a{}>n8+i9S;(-r zZgt;b_pPvNCy_@9t=RD=-nmth@1!HF#A)O)f){!5y<6SLVh;ylw?!T&oI>9FKqHmK zE>_r_GsqK!mdN}nMcwqbEw!)$=a44};mB5*QdB}tyI5hLUO=8A6h~I_Pf?9?St;!3 zCFE&BA~I7zib@KzH9=VAtH?8iI>3kO;OiEZA}nX{s!_K zLH^F5uoTri#MWD3u3O0Sgg~BqT9G$Jbq=;QUf8q0krxO9kr9z8${A#+}M7o#4ks+m@6R)g#!}K4C3iA#V^KQL;|)6mHnr9WN~CKjck9CrYj_k)poL zZfklD`N9r89|I~9`9b=)KDJj=CUr4&^* z(C#5&BY9ZWai1`OYu?^fQqW&uOju$T0Cxi?<9`~eviprD6UO)-^A{hBE;WYBQMk&fKuRV~2t>!^s$5X;PMg__= zOHl`->>(&D6ORx(o)NlVq4V1^MYV{wCpuw{2;_6ZCs!FaX`7;oMcJOQu(3Sw?07+F ze2v9+NKsXztrWI|hpZhh2@P&=rPC=z?T@zIW?^gcAzu;xx#`i{x~8bn(e|oC*fbtP zcf2M{`I}>^NIe*dbm>;K)E&%c$Lk zF)1o7&XyFG`Y}=wD)X>VzX>T!hb&^&DQtRGWJbb$o(KARN(w_Gg^d)J$Xgj44#IW@ zAfHZ8QM2+njTE+wmpwQ#5ymmD>7A9LZuq3I619<;2~`;`%`%UJ*SA<<6Y3$e5H@6C zKEfi76`vGVwIMPqAumI;+m@%O+zExuI)#mHjPxfAWN>%Z+7#6#(Mn-6nTb#zo1#Hu(RJHa}dtt_UfryQ&j2vE+d7F?1T&;Y|87^ zK|5&1^V>ZnY}NP3K*CSl+xUA|idvq}?ptA(x+8NEGH_R9;@%XsF4k_4umik@#1TX& zshL%;?(T-3J*=XdLI&p$BL+gY7zneZh-S93g}?$a9o*_}gDa*bwo=&0QOFp=fRa?|Yn)tT>|%xeGZq<3XvQ7Hfj3iB z*Vs6-SYc%+A~m5r_Z~OgNl~@q@);>CWGXU_P_&{~r`=Cc1><6k6xL)0G9Tf=$J{}D zl%f`BD}}9}g^VX`tIGZBCo~v3+LRQQftMvY@)HhmkM-Ge+CCj)q_Cl8IkM;R%s&k|%JVQWpEMtl1|DQx{RWC6k|?g+2>zzN+~QkefLWI;j??j=uCscKuS z-9y64@KPv8AwnnaLcegNs!K7EW}U)XZ9o<#)Z+g2vMi~pc&wGerffnMA>8_!JKxz- zY5VNoDQwqPq?6F4saIbKNL8nOixqZh2hv5z!maoW!KrGOPYTPt2U(PGvL(AOG*vx_ zv5OT}Za*@K(5(%R--M;AZ(_pD)(R_o2$@WXZO^T~@KjYLCd^1-)sG_Ggtr}-S`n41 z+_AZg6gKh%GKH|L6O$TaQq{E>D}{~Y^m~x?UVx8y#dy3j6sSvKXOMH>M`$ zPgRv7a~mlv<|48=0&&LC!Da83{w{}-|p!Q0!bQwpc5A%S+W!X{ipmL}BsfeC3vQq^}ktQ5BAIVI@RzaU#nTawB^nSNi2OQrH5K6$k~8?OmyAUMnE?F1U_aSenH<$%Szv#{vir$C%H;S2mJzlNmf6QXmBsj2MjxvV zd(YpxmjCyEtOo3@k7e+aUn`U2GuXed<@~=8AFBy_2wMuv<%TVU<@B+yU{SC+Fo%ydf@#=HSdfo> z4J!zn3JdeG#;|1AL|8`OdYiz?!iK{>@v)|`YOtZOJifo98LT>NFf7)`n!`Sa{R;cP zeb53{AJz|+>id7+z?#7Nz!H7?v?Z(=tQV}V@Bg)ewSxTwi}tbBu;#Fbu$)TjT4qNZ z*c8}d6Yr5QywcXtA7b zaqC#sIjphi5+f#`40a?AcN& zVd)t5)iIc`azEY0{;_IyUfFC@DPhY@=`# ze^S_?GRR?s6g(-fhBD85(!jixu%3)y>ljYBb}7kNHY`?!=hy94Sa4P32*R4{yaYZX zR`o29!CD|;+iN065<1`E;mnb-s(JzW$xLb@ngT0ttIO z7CDhHFC^J8XT+*429MveK*Cyhkdp|xvL+jU&x}=zbAGU-ur$9RC(C~sytXul4p;<_ z{8Ca_G9&ssrV#E&BpY?-#j2{gURzRF4Thg~OeM^WVpSH#s{4^z3M<9H)sAU|>oLj3 z%BA#QbMb&OlNENBA+H_N2_N$&8(UV}K^|7jC%yUZ$o4_#J zj^8B|Og3I@iB*H5URqLERR-vG%p_DOl58~G!G0(=&pk6wVcAwAXA#CZlZ`@qV^y
P!kHet0Z*=ThzRyBy^p=e49yUbTx9CHZi;(0ym7+tr>Czcd8mx0I~e-QE( zOExl}j#V8ac}km-!n!fAykjmQsYJ5z%lTN<#jXTlX&4#ZF^@2#G!5(uN5d#xL&9n> zrn+N3VN2O$quouqJyHK!lNA=lXzY#!glXlIjr8|oRl~@8mK3)17;+&Yx>B;S;!&*n z8hO)_!iMwxJI5lz$e)spch6$ggJ>RAXK95+okuPvY^s)Q%zPcohbwMbQrM|W$Rz|v zjbx+Z2Y&2`%a#-tbPc(bu&gHY{7Uyfg2&^Ttgz=dk$)0K)JisXc{$aMoO-gt>fJ>y zBaE$`Yz%fdIr+R}l@#{oK5{w1t4^}fHMNuR4)v-Cd;Ac&g76O|!_zrcL;vemNnvaL zMXn^IWS&`loIEmn!IHx2K0~e|e65~rjPP@+KeC;(q_BN2k*f*5RKma@r)r&@*Bw|D zVGrLR*ANa=PBz+vI#tgcyzYP$HtGZNFOe0JjoVpS&xqre6qfA^axEcUxn$#g4yP&< zsim;v-;nDFg=h)SBAIOD5v!!I5h((=dq?O`8!Da0sp>@@v!t-9-pCDv^F@=5lLeg0 zJGYj?qWBJ{V`RC^43|2+hHa-mM*i2Z@ zhIFo&Q$^%HZAoDszA5e4LYQ2LN+|7ACv)lQ6Bf>wN*!AXH3}pf9VpJ-; z$R(?!ux5Pd)v<#xHy4%A(5V{RQdn9(OY7K4$d)tNnA_CJ@Sj($lEQlM5nabF!Wi~_ zbz3@Be0JTag;gqy+)c=wJ=xgY#;HbxYboqjEOL+h7rWG7+dEaOP(4{;HC)KOgkfRH z#_oDTG?|o~s!n%}19w5Z|^OAB0r#kMh_a?$xl|ddP`1>Ur8Qb!c1?ZiWuoLBw zhX~VslZ|SvoN9CsFQKrs!u%>C4-=kqxGK=xsRo7Uc?w%l8F_?oomX&6G~xFQ)q4|R zjjAG#5_a>#a20-)reS&~B`l-{@)+R&Z`oF;$Ce$Y=PB%1E#z^+8s4(KRf~-`TuWiQ z>LO1NM)H>Jh3Za~F`|Dm1YxxsBTo^wq~PFM*{SY@=v}I? z{Y{al34vb8Muv(`wJcEAkg%i8k!J`Szb6^)@=n#vu3KSAEs;GfCiE>Ug%3mL@ zgpFy9JV!Y3nbQL{ht+`(t-2L9z8&&B;UOKD3RV7Bx5AcpL|!0V|G?!l)-!#Wu3KTV zyC5$TF1}+hr`k@nJgaU)!v5-pyhKR*hI4o7c3pN|QkYi{oQAw3|8l_HNmbO>v=68VsDjnjj$DNbd?=%a(M4SyjY5%%p) zGQR%qR7;}t5lPsJ4ak29vv+Y#c&?M46mJBwp28MxK|Urd-O0o2i=Ap)6fgZDg)Q8U zd_ow#gG;b0m}m4JOA6bv8~KzF%*l-RI;Z*^&C89H6!z*LQgel1LHK`$63Ud`erXplPuBji#`0NSRWQAoaf=o@gw2ZOpn#QTjwiK4mg-kqaca0Ng&i-0Oi%cV9MUUJ z-H6mRBy3y-WCp@+mew2~QdhjN`c;q_3HzwN<3r=r`pB`?st60Jj?6?@#81|9be!5_ zOJUb*A$Jg!HvbW|+GK*CD2Li!Q@VS&~yh*MJ|wG{TbEz+M*89C_BIL@<2S|x=Y?1&5? zbYeZdR>!Ffc1dCVx*`J!C8?pm*2gix+X$)ODimNC^C$& zZ6TvnoQP8^B1c>E6!vKZGMq4U0hh(k#xY>Lt^{E{#vrp2YI2b*&E+^XJ(n&iEK341 z8(|8s8YkX}Qwg>dwk-*nozNLs`W{=EErs=(h%^X`kthC*Qy(Mr?D2tq|xMSY1==W^-E3hOuznTzlf^3;zwo?_Rl zBCOydWF%n}vZJ?4-M5!k*rlb&+=Sv(U$*ov#>dk&By8RaWE9~SDt=LB7pDh$vclS} zK}HjfEKV{q1iI8fyCn#VSdWY$gz;k!3UjGMyCn#_w+Wet(1B)h*KnzkwiGt!Z)9G= z2DVRUZWpI}x+Ms!yc3y^aFo_JDz8f|v|EC(`+Jc232A85FAKR;n7u&4=IlonARIyV zb-8%^LQhs$<-^E=gi*-&;x5&~o~*D8$B~5yr;!=Ux|GAN1Yy@sAqx{Su?fzrt*p(n`+he3jXn-8t-NmW2 zt|4LLo+IN4{gK`JxH#w4Qdq~=$fAUI$Z~^RYM3pB6@QN`MrgE#Zq{&@8Xq~-+CGIn z_=GG@$WJF?`B;~FW=moF|3j7__%Lumn-q^{^8<;SW96q(j&_dR&7W!?k{wye38Sf z$qHNIgDgw|XDdz9mcr6yLsleAqTg3zr%P?ip-T!YlLJ|a;6;xye4k4lH1s|}Sm#{G z$^<9UdB~+c8u~ydY-bd*3Sl_1_;Hu|Zs-G@u+({xKM__T3!QPPy|xrqt^l$s;T|&J zqD$2<^pRIs-@?dhg!1%nuUutmvnN^ACv3VCS)I@ax%HNdQGs+1L)d;dvIb!}vdev! zYL;F1hlE`$imXWp+QugM*riTo`^}oHuzMwtwFv!@J)gVO`mB>IDeORLWNpGi?jiesajEEVErnI7f~-gQ3pwDsOJxqz zlNI);DzZLdD{{Vat4E>Jt;q_TQv=z6P@B_(#8hroDRinOg%z!hY)Hs~Y@N=nmW1ez zsIVP%k&OsG$dsAfyskdSDk&_q0kSdSGV@&O>sG$Oy7Mb+P$Og$!g=I7f47PZT4a?J zwy+7ZDPb7W9qd-40~cFT*x_c#W`qvN5n*oiE?|izg}rEjY)*K@PqsLlTeS|*rw77P zw??)gOh)d=;Z~FVS6L;6`L;#2Bve8=BHe1Wzdj`q7T+G(iqI8VE849V`!m`PTeh%P z9g(dG{gGAjx|O$GQdsTI$Tox)$e#`3T@JX6B0 z5^O1~TOVX6g0y(wGH%t?f0MPe!Y1@Xb|$PuzAoqH^Q4^!A%LNPs6Jtzhai6@$i~~WhFc8})bkWpemJrl;TST19k;p^q}Nl} zzLCgZ2q~GYR|B{DBY1-~Sz+bIAiEPXAwM*x`a*QY3%fiH`70p|nW+WsHbmEuu+bi5 z55foL`L(rMd2A`nFB#dBa0MCO!L5$kQrLkB$XTR&DAz|^8k-Z6dk$bzj z8K+LKr?BHwk$niVOTE^^tzO$w*w`7!zJ!dD`w{9OFAs35g|-xS zeGaleVF3q#dqdpnm@S1(nTH%e@JIeP!ma$n^kjuqU5Fe=NaVN@FqZApmcmjlK@K9A z$S4o3&z`KXzy3rHCamRf)!;W;Uzn~0VSQF0hY&)M9Vfe0jxgO4gymU{97-6?QE=vT zT0)q<*dXlPU&vvE_Z&ZyX1Ud!P<@#~*wppN;e>9;;d9-pxGjY_Hz7w5!jUZ(y49%= zef2}wt}V!sgsmL2TP&55yR0@OtkpK;C_+hOzvXV#F=($Ph4t8h98K6oKVknWw>l8` zk0pgI*@YZKD2u%G7cyYKC53I+gB(lvK=Q=W(<$uVM!j>LHCJ=HVZ)|s~<$gyjDQxaxq=)d0{!r&#ZeID**QA71 zK8j2v_)+r39=B@bd(tW??D;Wd5+Nh0qblL*U@ zr%$<6c3&-pt+;@kOc;b*f7Y#1WI1omQ&{pPKFerR!L#oZy=`=Iv}gua`S42E-CErE#wSBZ)DNCZk5)b zA*|T<3EOZ7`8%O8a_j>+uIP)N!mi#!&LmVuj{4WFD%d53op^wpMfe%n;;EaLA}?B# z6}Ivba<*ME?uAkU_1dj6+m#@!$y4MXgqg@yZ{4c8uf8)QEaW+I zE@3Y+-v_svmsu~ZupKXu^9T!&*FU+{!_0a;g$;RyoKHB1-1(In^1W>>t+3W_kP8UQ zk^R2A)e+z8mJ}BA4!MwU9$7bqsp@6XQdpV~$VCL%9AX@%nwmvlP!{&|BXTj}E;3ze zQ)Tkgm!gH;|BPHh=*0FpKdq@6WYJ42Y{^&TQo=yw?ewM!wbxTv)^Er^36q%Y^9&|$ zp6N;u=KPLaM)<)w(q&49q}A0Y?EDYpaza_;F6LP;oo;=?nxzQl{wJX>XLM04?SxGF zClgjKC2}QU7*{`5W`PsKWVYN@c3!S@e1e%at0rnjlv{F8+{aqL)@! zKw9J)LJdxc2Y+*`UjBNX!V0HH{zZ7fsr1Y*ZuNJ7Zq&m1XGE?g4CW;K`bW143)Cfr zZSp~`BRuEazT|ti3bCcIH@?XAgehE4nDvHzLVzwQ%-L&8!8 zA~zC#n#)5}H0s87qZYO-2)T*Sm?w|+J##D5M^9GR>tN(&Ld+cIiAFEpCa|qkO|PY}omr886DG1iso7SBX3|pFw(Q7lgbS?7 zcq(Cvul`kp?aqPRPAE(by`%aH+D%i~fe7Rd!b+}w{7c2}4bVTfu!!8qorKc-DyR9$ zDhKIyE6fv(+(o#{1*<1srb-Id>nY4PFLF0w7%jn{HWVD9OA4EtAGwE6mo`+E)_2X8 z!m1ZS?j>ZQX--XNs?MRhQ432Mi`++;O`}ek$y7aUDQra?@*hGaww1e?O_eu9|0=>l zP2_&US+=rcex|A&tfjC)MUe*xJ2>)Q4m263PA{#nCB=~k2`!NsLQRI8(F-K(pOVN! zgh=H4aFcz!J~{~NQyO`gPy(4go2hnY)VpzEZOR~z5ON_eBGaVRQrKgWM+v^jzR0ag z-whHLQxLxd4({At9IFQo2pGZ-5(NGz8dl>p){LAlPFV7%AiXM+gTlXjj)9c zsdcoe?q<|dSnZm~>xA5Fg0o^wbs>|M!v3p;yg~SdjrUs~O8V&a6n3@_@+RRc`@S0a zOvcsLQrOS+khchB*kP>BZ>rImwG>vi0rEDXE4#N81^GRF^*n{;Z-l%HyO(EuK zOJQl6Any_y&Enp25q>h?qgM3^JKPj`kMQAluAs%z5`6Szg;i*dyia&DBgrU$e4S30 z6jr_mIy zQ^KtYG)>b~KkNg#uq_>t&j?SFIWLPh)!Zz4uPJPAXXJCjn?$a?6*bvY>-~_hZC#Ns z2qiq+>@IGq4|exM*u-wgmxQ|G`N&HNQz`p_CSfbOBVQ4G#`3F_V#gSu4;{i@^gzBQ zB#!2UxD1Wj?)M41-wXMMP-PS~RL)fS>;)2bu@CYs;pOloV_xOcz2Kg+#-Wdz4F%bEIuww{&&5EY_FRhlsiVs45BwQNI zVHugnmcsl7BR>%i4dR|_B~w*Nr}xytN(@1MCJY%!#aA}f^o&{xyEqj2g;0M08*f!M z-pqPwg>4;<{7Tr}k89)AO|{GJ!V23l68Rrtd>_uPYEbcZ$3hr6F z>XO1HPC%w0BzNLurlHBTH$6{bwI?GL;otULwQFpuCt+F&i=T!}NvPG9t*j|6Azasx zu(02e4nnV1T;OPKs{C2C6c#cY=}nl~JjsY|#qKSuu0CN|=OR-P4mV*;R^yxh>oRK*NESz(X=M*0wzmrgQv_cPTxL-!Me#qUIB zCX6ba-G7F)&n=4Dh`LS&&Eb$Q1k8miK zgX>6>XD9V!g%vr5^e40|#08EqrWzcf59q>fpF{=_0`haFGu~8w5&D=dto2!BAmLmL z14DaEwJE1ADeTDwWDsF`ZW?v6sb=NW>nW_`6=X1>R|Gq$38uQ2LrYWrbc6=D8QkXZ?7{OLB&G5IopmcmLtM`j~@$xL^0uBp5Yy?YZj;1x1EA!jD`Lkmpa zS<_P3n72rS&?!B4gBH=N$*LzStiuOn4#JW&Nk*k5rYd7gVO2gOa}tK7;wbp1sfOA8 zTVad8A|nXR9rPHNnW|H;-UNj``i9I!SgSZ@uQ1hPyO%0#@egDq!ALc*`xOing~hVcWAH^Ap}aV_=GHrb-o|59q=M1|ka(8uEsEs-1LxBefLPAQV|p z{)+(v^X@U#swmy!g$>GvEJO(8W&20_Ox53ha7)={$V6xnHYvxF5bhIA2bFf?77^QLmdZn31WHl>knLLa`Sz3`%`Vx8+P zDQrUpq)E85m2b3OHdTu_ecwS?cvWOPA#6jUk>wgk2baFrA#6o0WKqKG)eQA;oo&VS zr!`q&FY6g{A%#S(^3YUG3(v7i3OhakS(b2kB%dt)*Hqz!{;;I5!9$Vd2xo>Q z8o3`+vY?)f7%t?AsTStft0HXnIAjGv$KJHtr<{7_)3>LDrAb0oBpm9_ zz!cBuHs{lKpoIN85m|{asB5Az@j2UP9{miOu;EjYl?jm@`Ih?&+HH)M!e;!AtU~zO zCeir$CEI7To~*D@bC5p~PPL%*z2f{cO8?lxdd){xB^+$Rn1HX@_vKz`Rf4eci;>j` z+ZyoI@HeIku%$5nWytD;J9QF`N^eabL0Dy#6!!N@WDP=IaXNn6z2RJ zS%)yaOrr4{GDUVRg$3_G)+IbE$#AmBMqyeC`+XO(9^tp*iH83tT70mU!cOc#)+fv? z$`D`37XG^Wgw5ZFY(U5m&oCNH_FiUPQkegKWJAJhccSqpa$`olAqmTQ0NIGp*Tq-E zSFERm;t^j0RU?qOsT!nPvp!H^|=wG7urvV@sim+D_mJ%f*ZdjE><6bLwiH(35wbm@ znlHotrHEHgBJ|PT+(qeG1$60oj@0mx57EQ^%{Q+`5?v8}$X*h2Z_oV-!yluiDyMnXs1M zkzENspFPG)NeFrGF|MbLS1lsfSyI>qZ)7(@+-r|`9n^%VT879Ir+hJ1i-zY$&o9q1Sbf@fevp zyOzQ#WJUHS%)R0jdUaD8wUwmv7aFQN2#kI~03 zUS$i__sfKZMI!qV)}8SfIsN0+^I$E7jgLb1Clo*BG1?%f1!*blTnusmVefH|(HNN{ zNZ)A_7LgA*kTBw?$5@Um9;mwl!b%oE4kFY&>@k`J#H(TfS_-RE2sxPGJm@hlAb<1M zS3iW+ErJ|ENZju+VglpU9bbLjMA*Gp_GcvZ#G!Ntk~eau}icK94bo$%dvs zYE`_jR4(LjLhrpEqakvWeNjc&ZIL4gDUs1kHYT-RAYn;v@Vr{JcZ3Kh8#<{xyxhZ z^NCkgGM=zjMOfw%$Z>=fNGDD6TLyi7NLaIy$nk`)$fmUT4;ggVPS~tc$OJ-l=DCBd zY`BjuDXc*mq=(QOd4bKoudnV-3M*a?nMjz3j9`c1lSOw#h5aaxOd_;J_VkKZO|$5d z!uC}}CKG-}_Ws7v-cO%E3ENZ|`5U1bvNHR=tp0kk!Vdj}oIprL#Xo0%``o^1C@f=j z?^&F#z@7koG9zqCZRBLadgK%OCLUV~J5U!nh0u>S z^o9OV2mACu*qQpssf5SK?R2va+4mxaeQt=HM!1f=P1o+GeLY^-kS56Kgv_+tnzu~# zIZ)rR5O%g1at5Ib@(#V!Q-Rm5A6r;JOXTl_yvP{(w;h6RSW?)S*2tNJ^~`e*-R9DP zH!UgbNL%DA!ad|hI^1*Y_pXE;YLA>v*urEx&{c04pi2t#?Sz~|sLLj}>?nQBpxf4D zg-z*#{DW{6dH$fO)&y%QEL%6^Ttblp9%CnG9cx0g6n3&Zavq^Ra`!IoSlCin=bp&< zgj2|SoCb9bxogc+*vH<;1%&kMFq~WHYX)m6tW`hcLPA^Q&JA4B3%X~O6t;W-auHz@ zax!OhuLE>RVY>$*7ZcVZcdX`|*H24fzYjq!A#6Yv<`naeua?5f3_~s@Tt((t&SBX{ zzf~k`+HmBbgsO);hBxQD3F);I)_nwW8DTj)#%i1`cd@0gV(XCHdsTs&kgfZ+G4^1>xPX9YrGZEHyCUP@j)DDj^ zhO0a~{B#=<)@?R&3!(frkMW7?L!|@mTP20<`2)F?5V6%`gdp7kx}>nv^N@cNZg27! zt&>c((k?0N^8(~H!mJG*qidq6`~x3YlNDBQF>*Vh^*WCc$OWt7fqJsSx-CWSAbeQk zF;}4SHwIQ`qtI$kT+r!#qY>X?GAcjl@z9~BhL|1_V*Z%dT=o?SeFzw>L&6$p=Td@ z#>mdWx}>mAw~-eJd3$+`2i-X#4tixxR+xDYd6CfTSC5efc{TX8C54@NfV@N~@eA$t z7gH?>(o)!$N65>B_CI@!U%PRs%U`dju$_;QR|q~`JjNeCb3r-ajWt*B?w!c68Vs@3mI6;RBin~ zT9qK|hBxvNp=4)|ajKfBq5?iyQdovG$bSh<_{pwTF;%I6&z2NcA|3KE;ciz>54f53 zPrz483LB9D`GoL$Hx3=#`fD8cpCyHz&V+nQ_(mJL#vMhsErmIJk-*7kM?{ zn^jU+m>=>vVPOxBg2hesDd4*$g;ftgz90n9sMmAnG&t~wC5252LcSy<_GW3_T(Ao8 zvW86&wj~7litvJMrLmJciUE2|6=83~kgo~f`_iW_%q6`5hgDLTe>UVBLI9iKq5`J6 z;_q!qVFe82TSAoq9wR=Vsml4wP)fZ23Co%j`Ht`>TXyC=bU&=2lpIP}%3R3zgs+1< z#=$64_4Sh>X&g$}+eqXGLTPpw8zW8iK8u#Zc10mS5*iQn7<(hwR(xfQ9ETFtItKYk z0{fv%Ik`0ABZDwGl(5Tr!o0jBSVK{Hc?At7T7QmUV)wxwBU@Tio%fM-@OFg2Ua;sf zsZG_&*J4W8&V0-xl+d4*F6k{&YQ$R!n_d7JMtIVXQ;?J*r7pddurY;@;e^6ebW93U zRnMYJ3R_eJnU&Cz-|r+(<+b(G6)o(U6Pbl5rkZ9a`SmOtY@f(qp8&=T_%!DQs3vWHjMP zGmjB^+pVUB>5{^x)|irVX+np=%9~QS_KwEe+E@wy=Zkk%b7Os&QcB8Q*DPx@iiV)(Kgd zu;M3=(P%%935IJatY24T5yFtlw1mBG6>3Xi-F`vF5}H)>7@v3kucWY2J&;a9aCr{H z+uX{qOA5=~8yQD{!8eD?kL^&xwvI#=C2WuL7+x#f zYNIWMjUR(7M%WeWG2Za_`Eh%)!b*=v7AHI|>@n&ua;wv}6qY9uS%Pr1ARV%KZdD+w zULaw)enXZdY|Za6rq6M!FX1u<8E>M&(oaH`A_U~~7)O5R6^3v zn&wvJvuY{q?Q~=rf>*T1$UVu;w@viWpTgp2Aw!vz?O24YK&Wrf;(1GDJs6$!(# zd5lU!+>E)Zhv5|VVL7rAVQV-Ij5i~`*iu-*)yT?(^kE+3a&MmdH}pJ()nALOLI?@r z$NrUV#g@VbZ$SP;_!!8w)1TdHzb%EG+KjA9`0Vd75<9sS7Zt6F7nXY)vKrx57CO7_ zcvZue!V-5Ps}sU}J;tV%Ztk}0aY2Q>--E0{DColuqp4f%$*HBVe*2L%3Go>@^z#~w zZ-kb@o*qKhA{gg!ulRV)+Y2z<1thXH-q_UDa_{-vJRnaDlSV@p_xSJ zRS|abEV3>kzk^fC@@{p}o~N*G7m@V{tra`Q(mdL4PgdBeE6DnUiC!F|i%~-np;iqE zYjy+KfbjSC1mm8I$9Qw<@lS=Vyp3!~c=um|(X0qNjGTIiQ(+nIBO4Juen~L86mYAv z_K3g2%ty$^gsPttjDC4|DZn0@S6I;}$R>pP9}|orxp}149u8Pohv&$qghuZZ3?nD4 z&mNyx*zs4$W`tI66ZirG4_Dh#Sekdp=7c|9Cm63n+>G0zM@|)%_am|eA@eIr2J%jY zJ*cm+;4jFQgl;bqjQYO3xnz%~ENsj-WGlkjX9_RGJTf(VF2}X1Zx9X5BmsL{OuC&N@gv$>S zjI;l_`0P%!C544&M7Af?zn@@i`{Ytjvqf1_SdPrd4umat6O485T&lM%g~j+GI}$?g zut2ZmB}rXUSn5DzC&G?f2}V`kpsX35+nTJf?ZL>-gibdTj9$EZSub3#imnUu9f&7^ebv40o@iJ&iTMDZdf$T_OPhJU^Xssnh;?aB*SF3LtwDid{)C!cMqUU4K0+xv*)4ki7^g zDOvZZOMT5!z^VjcTZVxn z=zBiF=)Kpajs_I6q_FPs$bN*D=Ms#h$68X@(PGH{gmPySj1t>jinsGEDeOxL zBIkkICIf^lJ^OSKKuA1f1yd zr5t0^I>x4Uj7{Sh%h=Ds4F8-~{a=~9u?4*@HOl9eA~i)$(&59(s%OuCGW$?9S}6=s_4t*?rkJ@byevo>V4cqG+Iyv7MmZV$*D==HG4`8dY|0co Xl*w|9ww85L5?7Qc8p^+4ANT(NVuhUS literal 0 HcmV?d00001 diff --git a/Sources/src/data/stub/files/Afternoon_Bike_Ride.gpx b/Sources/src/data/stub/files/Afternoon_Bike_Ride.gpx new file mode 100644 index 00000000..abc8c574 --- /dev/null +++ b/Sources/src/data/stub/files/Afternoon_Bike_Ride.gpx @@ -0,0 +1,11788 @@ + + + + + + + Sortie vélo dans l'après-midi + cycling + + + 388.1 + + + + 387.8 + + + + 387.6 + + + + 387.5 + + + + 387.1 + + + + 386.6 + + + + 385.9 + + + + 385.3 + + + + 384.6 + + + + 384.0 + + + + 383.6 + + + + 383.3 + + + + 383.0 + + + + 382.7 + + + + 382.4 + + + + 382.2 + + + + 382.1 + + + + 382.0 + + + + 382.0 + + + + 381.9 + + + + 381.9 + + + + 381.8 + + + + 381.7 + + + + 381.5 + + + + 381.4 + + + + 381.3 + + + + 381.2 + + + + 381.0 + + + + 380.8 + + + + 380.7 + + + + 380.5 + + + + 380.3 + + + + 380.1 + + + + 379.9 + + + + 379.8 + + + + 379.7 + + + + 379.6 + + + + 379.5 + + + + 379.4 + + + + 379.3 + + + + 379.2 + + + + 379.2 + + + + 379.2 + + + + 379.3 + + + + 379.3 + + + + 379.3 + + + + 379.3 + + + + 379.2 + + + + 379.3 + + + + 379.3 + + + + 379.4 + + + + 379.4 + + + + 379.5 + + + + 379.6 + + + + 379.7 + + + + 379.7 + + + + 379.8 + + + + 379.9 + + + + 380.0 + + + + 380.2 + + + + 380.4 + + + + 380.5 + + + + 380.6 + + + + 380.8 + + + + 380.9 + + + + 381.1 + + + + 381.3 + + + + 381.4 + + + + 381.6 + + + + 381.7 + + + + 381.9 + + + + 382.1 + + + + 382.3 + + + + 382.5 + + + + 382.7 + + + + 382.9 + + + + 383.1 + + + + 383.2 + + + + 383.4 + + + + 383.5 + + + + 383.9 + + + + 384.4 + + + + 384.6 + + + + 384.7 + + + + 384.7 + + + + 384.7 + + + + 384.7 + + + + 384.8 + + + + 384.9 + + + + 385.0 + + + + 385.1 + + + + 385.3 + + + + 385.4 + + + + 385.6 + + + + 385.7 + + + + 385.9 + + + + 386.0 + + + + 386.1 + + + + 386.3 + + + + 386.4 + + + + 386.6 + + + + 386.8 + + + + 387.1 + + + + 387.3 + + + + 387.5 + + + + 387.6 + + + + 387.8 + + + + 388.0 + + + + 388.1 + + + + 388.3 + + + + 388.4 + + + + 388.6 + + + + 388.8 + + + + 388.9 + + + + 389.3 + + + + 389.4 + + + + 389.5 + + + + 389.6 + + + + 389.6 + + + + 389.6 + + + + 389.6 + + + + 389.7 + + + + 389.7 + + + + 389.8 + + + + 389.9 + + + + 390.0 + + + + 390.1 + + + + 390.2 + + + + 390.2 + + + + 390.3 + + + + 390.4 + + + + 390.5 + + + + 390.6 + + + + 390.7 + + + + 390.7 + + + + 390.8 + + + + 390.9 + + + + 391.0 + + + + 391.0 + + + + 391.1 + + + + 391.2 + + + + 391.3 + + + + 391.4 + + + + 391.5 + + + + 391.6 + + + + 391.7 + + + + 391.8 + + + + 391.9 + + + + 392.0 + + + + 392.1 + + + + 392.1 + + + + 392.2 + + + + 392.3 + + + + 392.4 + + + + 392.4 + + + + 392.5 + + + + 392.6 + + + + 392.7 + + + + 392.9 + + + + 393.0 + + + + 393.1 + + + + 393.3 + + + + 393.3 + + + + 393.4 + + + + 393.5 + + + + 393.6 + + + + 393.7 + + + + 393.8 + + + + 393.9 + + + + 394.1 + + + + 394.2 + + + + 394.3 + + + + 394.4 + + + + 394.5 + + + + 394.7 + + + + 394.8 + + + + 394.9 + + + + 395.0 + + + + 395.1 + + + + 395.2 + + + + 395.3 + + + + 395.4 + + + + 395.5 + + + + 395.6 + + + + 395.7 + + + + 395.8 + + + + 395.9 + + + + 396.0 + + + + 396.2 + + + + 396.3 + + + + 396.4 + + + + 396.6 + + + + 396.7 + + + + 396.8 + + + + 397.0 + + + + 397.1 + + + + 397.3 + + + + 397.5 + + + + 397.6 + + + + 397.9 + + + + 398.1 + + + + 398.3 + + + + 398.5 + + + + 398.6 + + + + 398.7 + + + + 398.7 + + + + 398.8 + + + + 399.1 + + + + 399.3 + + + + 399.6 + + + + 399.8 + + + + 400.1 + + + + 400.4 + + + + 400.7 + + + + 401.1 + + + + 401.4 + + + + 401.7 + + + + 402.0 + + + + 402.3 + + + + 402.6 + + + + 402.9 + + + + 403.2 + + + + 403.5 + + + + 403.8 + + + + 404.1 + + + + 404.4 + + + + 404.7 + + + + 405.0 + + + + 405.2 + + + + 405.5 + + + + 405.9 + + + + 406.2 + + + + 406.4 + + + + 406.7 + + + + 407.0 + + + + 407.3 + + + + 407.6 + + + + 407.9 + + + + 408.2 + + + + 408.5 + + + + 408.8 + + + + 409.1 + + + + 409.4 + + + + 409.7 + + + + 410.0 + + + + 410.3 + + + + 410.6 + + + + 410.9 + + + + 411.2 + + + + 411.5 + + + + 411.8 + + + + 412.1 + + + + 412.4 + + + + 412.7 + + + + 412.9 + + + + 413.2 + + + + 413.5 + + + + 413.8 + + + + 414.1 + + + + 414.3 + + + + 414.5 + + + + 414.7 + + + + 414.9 + + + + 415.1 + + + + 415.3 + + + + 415.5 + + + + 415.7 + + + + 415.9 + + + + 416.1 + + + + 416.3 + + + + 416.5 + + + + 416.7 + + + + 416.9 + + + + 417.1 + + + + 417.3 + + + + 417.5 + + + + 417.7 + + + + 417.8 + + + + 418.0 + + + + 418.7 + + + + 418.8 + + + + 419.0 + + + + 419.1 + + + + 419.2 + + + + 419.2 + + + + 419.3 + + + + 419.4 + + + + 419.5 + + + + 419.5 + + + + 419.6 + + + + 419.6 + + + + 419.6 + + + + 419.6 + + + + 419.6 + + + + 419.5 + + + + 419.5 + + + + 419.5 + + + + 419.5 + + + + 419.5 + + + + 419.5 + + + + 419.4 + + + + 419.4 + + + + 419.4 + + + + 419.3 + + + + 419.3 + + + + 419.3 + + + + 419.2 + + + + 419.2 + + + + 419.2 + + + + 419.2 + + + + 419.2 + + + + 419.2 + + + + 419.2 + + + + 419.1 + + + + 419.1 + + + + 419.0 + + + + 419.0 + + + + 418.9 + + + + 418.9 + + + + 419.0 + + + + 419.0 + + + + 419.2 + + + + 419.3 + + + + 419.5 + + + + 419.6 + + + + 419.8 + + + + 420.1 + + + + 420.2 + + + + 420.5 + + + + 420.7 + + + + 420.9 + + + + 421.0 + + + + 421.2 + + + + 421.4 + + + + 421.7 + + + + 421.9 + + + + 422.1 + + + + 422.4 + + + + 422.8 + + + + 423.1 + + + + 423.4 + + + + 423.8 + + + + 424.1 + + + + 424.4 + + + + 424.7 + + + + 425.1 + + + + 425.4 + + + + 426.1 + + + + 426.8 + + + + 427.6 + + + + 428.0 + + + + 428.5 + + + + 429.0 + + + + 429.4 + + + + 429.8 + + + + 430.4 + + + + 430.5 + + + + 430.7 + + + + 430.8 + + + + 431.0 + + + + 431.2 + + + + 431.2 + + + + 431.3 + + + + 431.4 + + + + 431.5 + + + + 431.7 + + + + 431.8 + + + + 432.0 + + + + 432.1 + + + + 432.2 + + + + 432.3 + + + + 432.3 + + + + 432.3 + + + + 432.3 + + + + 432.4 + + + + 432.4 + + + + 432.4 + + + + 432.4 + + + + 432.4 + + + + 432.5 + + + + 432.5 + + + + 432.5 + + + + 432.6 + + + + 432.6 + + + + 432.7 + + + + 432.7 + + + + 432.8 + + + + 432.8 + + + + 432.8 + + + + 432.8 + + + + 432.8 + + + + 432.8 + + + + 432.9 + + + + 432.9 + + + + 432.9 + + + + 433.0 + + + + 433.0 + + + + 433.1 + + + + 433.1 + + + + 433.2 + + + + 433.2 + + + + 433.3 + + + + 433.4 + + + + 433.4 + + + + 433.5 + + + + 433.5 + + + + 433.6 + + + + 433.7 + + + + 433.7 + + + + 433.7 + + + + 433.8 + + + + 433.8 + + + + 433.9 + + + + 434.0 + + + + 434.0 + + + + 434.0 + + + + 434.1 + + + + 434.1 + + + + 434.1 + + + + 434.2 + + + + 434.2 + + + + 434.2 + + + + 434.2 + + + + 434.2 + + + + 434.2 + + + + 434.2 + + + + 434.2 + + + + 434.2 + + + + 434.2 + + + + 434.2 + + + + 434.2 + + + + 434.2 + + + + 434.3 + + + + 434.3 + + + + 434.4 + + + + 434.4 + + + + 434.5 + + + + 434.6 + + + + 434.8 + + + + 434.9 + + + + 435.0 + + + + 435.0 + + + + 435.1 + + + + 435.1 + + + + 435.2 + + + + 435.2 + + + + 435.3 + + + + 435.4 + + + + 435.5 + + + + 435.6 + + + + 435.7 + + + + 435.8 + + + + 435.9 + + + + 436.0 + + + + 436.0 + + + + 436.1 + + + + 436.2 + + + + 436.2 + + + + 436.2 + + + + 436.1 + + + + 436.1 + + + + 436.0 + + + + 436.0 + + + + 435.9 + + + + 435.9 + + + + 435.9 + + + + 436.0 + + + + 436.1 + + + + 436.2 + + + + 436.3 + + + + 436.4 + + + + 436.5 + + + + 436.6 + + + + 436.7 + + + + 436.8 + + + + 437.2 + + + + 437.3 + + + + 437.5 + + + + 437.8 + + + + 438.0 + + + + 438.1 + + + + 438.3 + + + + 438.5 + + + + 438.7 + + + + 438.8 + + + + 439.0 + + + + 439.2 + + + + 439.3 + + + + 439.4 + + + + 439.5 + + + + 439.7 + + + + 439.8 + + + + 439.9 + + + + 440.0 + + + + 440.2 + + + + 440.3 + + + + 440.5 + + + + 440.7 + + + + 440.9 + + + + 441.1 + + + + 441.3 + + + + 441.4 + + + + 441.5 + + + + 441.6 + + + + 441.7 + + + + 441.9 + + + + 442.1 + + + + 442.3 + + + + 442.6 + + + + 442.8 + + + + 443.0 + + + + 443.2 + + + + 443.3 + + + + 443.5 + + + + 443.7 + + + + 443.8 + + + + 444.0 + + + + 444.1 + + + + 444.2 + + + + 444.3 + + + + 444.4 + + + + 444.6 + + + + 444.7 + + + + 444.9 + + + + 445.0 + + + + 445.2 + + + + 445.4 + + + + 445.6 + + + + 445.8 + + + + 445.9 + + + + 446.1 + + + + 446.3 + + + + 446.4 + + + + 446.6 + + + + 446.7 + + + + 446.9 + + + + 447.1 + + + + 447.3 + + + + 447.5 + + + + 447.7 + + + + 447.9 + + + + 448.1 + + + + 448.2 + + + + 448.4 + + + + 448.6 + + + + 448.8 + + + + 449.0 + + + + 449.2 + + + + 449.4 + + + + 449.6 + + + + 449.8 + + + + 450.0 + + + + 450.2 + + + + 450.3 + + + + 450.5 + + + + 450.7 + + + + 450.9 + + + + 451.1 + + + + 451.3 + + + + 451.5 + + + + 451.7 + + + + 451.9 + + + + 452.1 + + + + 452.4 + + + + 452.6 + + + + 452.8 + + + + 453.0 + + + + 453.2 + + + + 453.3 + + + + 453.5 + + + + 453.7 + + + + 453.8 + + + + 454.0 + + + + 454.1 + + + + 454.3 + + + + 454.4 + + + + 454.6 + + + + 454.8 + + + + 455.0 + + + + 455.2 + + + + 455.3 + + + + 455.5 + + + + 455.7 + + + + 455.9 + + + + 456.1 + + + + 456.3 + + + + 456.5 + + + + 456.7 + + + + 457.0 + + + + 457.2 + + + + 457.4 + + + + 457.6 + + + + 457.9 + + + + 458.1 + + + + 458.4 + + + + 458.6 + + + + 458.8 + + + + 459.0 + + + + 459.2 + + + + 459.4 + + + + 459.6 + + + + 459.8 + + + + 460.0 + + + + 460.1 + + + + 460.4 + + + + 460.7 + + + + 461.0 + + + + 461.2 + + + + 461.4 + + + + 461.6 + + + + 461.7 + + + + 461.8 + + + + 462.0 + + + + 462.2 + + + + 462.4 + + + + 462.6 + + + + 462.8 + + + + 462.9 + + + + 463.1 + + + + 463.3 + + + + 463.6 + + + + 463.9 + + + + 464.2 + + + + 464.6 + + + + 464.9 + + + + 465.3 + + + + 465.6 + + + + 465.9 + + + + 466.2 + + + + 466.5 + + + + 466.6 + + + + 466.7 + + + + 466.9 + + + + 467.0 + + + + 467.2 + + + + 467.3 + + + + 467.5 + + + + 467.6 + + + + 467.7 + + + + 467.9 + + + + 468.0 + + + + 468.2 + + + + 468.4 + + + + 468.6 + + + + 468.8 + + + + 469.0 + + + + 469.2 + + + + 469.4 + + + + 469.6 + + + + 469.9 + + + + 470.1 + + + + 470.3 + + + + 470.5 + + + + 470.7 + + + + 471.0 + + + + 471.2 + + + + 471.4 + + + + 471.6 + + + + 471.8 + + + + 472.0 + + + + 472.3 + + + + 472.5 + + + + 472.8 + + + + 473.0 + + + + 473.2 + + + + 473.5 + + + + 473.7 + + + + 473.9 + + + + 474.1 + + + + 474.4 + + + + 474.6 + + + + 474.8 + + + + 475.0 + + + + 475.2 + + + + 475.4 + + + + 475.4 + + + + 475.5 + + + + 475.6 + + + + 475.7 + + + + 475.9 + + + + 476.0 + + + + 476.2 + + + + 476.4 + + + + 476.6 + + + + 476.8 + + + + 477.0 + + + + 477.2 + + + + 477.4 + + + + 477.5 + + + + 477.7 + + + + 477.9 + + + + 478.1 + + + + 478.4 + + + + 478.6 + + + + 478.8 + + + + 479.0 + + + + 479.2 + + + + 479.4 + + + + 479.6 + + + + 479.8 + + + + 480.0 + + + + 480.2 + + + + 480.5 + + + + 480.7 + + + + 480.9 + + + + 481.1 + + + + 481.3 + + + + 481.5 + + + + 481.7 + + + + 481.9 + + + + 482.1 + + + + 482.3 + + + + 482.5 + + + + 482.7 + + + + 482.9 + + + + 483.1 + + + + 483.3 + + + + 483.5 + + + + 483.7 + + + + 483.9 + + + + 484.1 + + + + 484.3 + + + + 484.5 + + + + 484.7 + + + + 484.9 + + + + 485.1 + + + + 485.3 + + + + 485.4 + + + + 485.7 + + + + 485.9 + + + + 486.1 + + + + 486.3 + + + + 486.6 + + + + 486.8 + + + + 487.0 + + + + 487.3 + + + + 487.5 + + + + 487.7 + + + + 487.9 + + + + 488.1 + + + + 488.3 + + + + 488.5 + + + + 488.7 + + + + 488.9 + + + + 489.2 + + + + 489.4 + + + + 489.6 + + + + 489.9 + + + + 490.1 + + + + 490.4 + + + + 490.7 + + + + 491.2 + + + + 491.5 + + + + 491.8 + + + + 492.1 + + + + 492.4 + + + + 492.7 + + + + 492.9 + + + + 493.1 + + + + 493.3 + + + + 493.5 + + + + 493.8 + + + + 494.0 + + + + 494.2 + + + + 494.5 + + + + 494.7 + + + + 495.0 + + + + 495.2 + + + + 495.4 + + + + 495.7 + + + + 496.0 + + + + 496.2 + + + + 496.4 + + + + 496.6 + + + + 497.0 + + + + 497.3 + + + + 497.7 + + + + 498.0 + + + + 498.4 + + + + 498.7 + + + + 499.1 + + + + 499.5 + + + + 499.8 + + + + 500.1 + + + + 500.4 + + + + 500.7 + + + + 501.0 + + + + 501.4 + + + + 501.6 + + + + 501.9 + + + + 502.2 + + + + 502.6 + + + + 502.9 + + + + 503.2 + + + + 503.5 + + + + 503.8 + + + + 504.1 + + + + 504.4 + + + + 504.7 + + + + 505.0 + + + + 505.3 + + + + 505.6 + + + + 505.9 + + + + 506.2 + + + + 506.5 + + + + 506.8 + + + + 507.1 + + + + 507.2 + + + + 507.4 + + + + 507.6 + + + + 507.8 + + + + 507.9 + + + + 508.1 + + + + 508.3 + + + + 508.6 + + + + 508.8 + + + + 509.0 + + + + 509.2 + + + + 509.4 + + + + 509.6 + + + + 509.8 + + + + 510.0 + + + + 510.2 + + + + 510.4 + + + + 510.6 + + + + 510.8 + + + + 511.1 + + + + 511.3 + + + + 511.5 + + + + 511.7 + + + + 511.9 + + + + 512.1 + + + + 512.3 + + + + 512.5 + + + + 512.7 + + + + 512.9 + + + + 513.1 + + + + 513.3 + + + + 513.5 + + + + 513.7 + + + + 514.0 + + + + 514.1 + + + + 514.3 + + + + 514.5 + + + + 514.7 + + + + 514.9 + + + + 515.0 + + + + 515.2 + + + + 515.4 + + + + 515.5 + + + + 515.7 + + + + 515.9 + + + + 516.1 + + + + 516.2 + + + + 516.4 + + + + 516.6 + + + + 516.7 + + + + 516.9 + + + + 517.1 + + + + 517.3 + + + + 517.5 + + + + 517.7 + + + + 517.9 + + + + 518.1 + + + + 518.3 + + + + 518.5 + + + + 518.7 + + + + 518.9 + + + + 519.2 + + + + 519.4 + + + + 519.6 + + + + 519.8 + + + + 520.0 + + + + 520.2 + + + + 520.5 + + + + 520.6 + + + + 520.8 + + + + 521.0 + + + + 521.1 + + + + 521.3 + + + + 521.5 + + + + 521.6 + + + + 521.6 + + + + 521.7 + + + + 521.8 + + + + 522.0 + + + + 522.2 + + + + 522.5 + + + + 522.7 + + + + 522.9 + + + + 523.1 + + + + 523.4 + + + + 523.6 + + + + 523.8 + + + + 524.0 + + + + 524.3 + + + + 524.5 + + + + 524.7 + + + + 524.9 + + + + 525.1 + + + + 525.3 + + + + 525.5 + + + + 525.7 + + + + 526.0 + + + + 526.2 + + + + 526.4 + + + + 526.7 + + + + 526.9 + + + + 527.1 + + + + 527.4 + + + + 527.6 + + + + 527.8 + + + + 528.1 + + + + 528.3 + + + + 528.5 + + + + 528.7 + + + + 529.0 + + + + 529.2 + + + + 529.4 + + + + 529.6 + + + + 529.9 + + + + 530.1 + + + + 530.3 + + + + 530.5 + + + + 530.8 + + + + 531.0 + + + + 531.2 + + + + 531.5 + + + + 531.7 + + + + 531.9 + + + + 532.1 + + + + 532.3 + + + + 532.6 + + + + 532.8 + + + + 533.0 + + + + 533.3 + + + + 533.5 + + + + 533.8 + + + + 534.0 + + + + 534.2 + + + + 534.4 + + + + 534.6 + + + + 534.9 + + + + 535.1 + + + + 535.3 + + + + 535.6 + + + + 535.8 + + + + 536.0 + + + + 536.3 + + + + 536.5 + + + + 536.7 + + + + 536.9 + + + + 537.1 + + + + 537.3 + + + + 537.5 + + + + 537.7 + + + + 537.9 + + + + 538.2 + + + + 538.4 + + + + 538.6 + + + + 538.8 + + + + 539.0 + + + + 539.2 + + + + 539.4 + + + + 539.5 + + + + 539.7 + + + + 539.9 + + + + 540.0 + + + + 540.2 + + + + 540.4 + + + + 540.6 + + + + 540.8 + + + + 541.0 + + + + 541.1 + + + + 541.3 + + + + 541.5 + + + + 541.7 + + + + 541.9 + + + + 542.1 + + + + 542.2 + + + + 542.4 + + + + 542.6 + + + + 542.7 + + + + 542.9 + + + + 543.0 + + + + 543.2 + + + + 543.4 + + + + 543.6 + + + + 543.7 + + + + 543.9 + + + + 544.1 + + + + 544.3 + + + + 544.5 + + + + 544.7 + + + + 544.9 + + + + 545.0 + + + + 545.2 + + + + 545.4 + + + + 545.6 + + + + 545.7 + + + + 545.9 + + + + 546.1 + + + + 546.3 + + + + 546.5 + + + + 546.7 + + + + 546.8 + + + + 546.9 + + + + 547.1 + + + + 547.2 + + + + 547.4 + + + + 547.5 + + + + 547.7 + + + + 547.9 + + + + 548.0 + + + + 548.2 + + + + 548.3 + + + + 548.5 + + + + 548.6 + + + + 548.8 + + + + 549.0 + + + + 549.2 + + + + 549.4 + + + + 549.6 + + + + 549.8 + + + + 550.1 + + + + 550.3 + + + + 550.5 + + + + 550.7 + + + + 550.9 + + + + 551.1 + + + + 551.2 + + + + 551.3 + + + + 551.4 + + + + 551.5 + + + + 551.6 + + + + 551.7 + + + + 551.8 + + + + 551.8 + + + + 551.9 + + + + 552.1 + + + + 552.4 + + + + 552.6 + + + + 552.9 + + + + 553.1 + + + + 553.3 + + + + 553.5 + + + + 553.8 + + + + 554.0 + + + + 554.3 + + + + 554.5 + + + + 554.8 + + + + 555.1 + + + + 555.3 + + + + 555.6 + + + + 555.9 + + + + 556.1 + + + + 556.4 + + + + 556.6 + + + + 556.8 + + + + 557.0 + + + + 557.3 + + + + 557.5 + + + + 557.7 + + + + 557.9 + + + + 558.0 + + + + 558.0 + + + + 558.1 + + + + 558.1 + + + + 558.2 + + + + 558.2 + + + + 558.3 + + + + 558.5 + + + + 558.7 + + + + 558.9 + + + + 559.1 + + + + 559.3 + + + + 559.5 + + + + 559.7 + + + + 559.9 + + + + 560.1 + + + + 560.3 + + + + 560.6 + + + + 560.8 + + + + 561.0 + + + + 561.3 + + + + 561.5 + + + + 561.7 + + + + 562.0 + + + + 562.2 + + + + 562.4 + + + + 562.6 + + + + 562.8 + + + + 563.0 + + + + 563.2 + + + + 563.4 + + + + 563.6 + + + + 563.7 + + + + 563.9 + + + + 564.1 + + + + 564.3 + + + + 565.0 + + + + 565.0 + + + + 565.0 + + + + 565.0 + + + + 565.2 + + + + 565.3 + + + + 565.4 + + + + 565.5 + + + + 565.6 + + + + 565.8 + + + + 565.9 + + + + 566.0 + + + + 566.0 + + + + 566.1 + + + + 566.1 + + + + 566.2 + + + + 566.2 + + + + 566.2 + + + + 566.3 + + + + 566.3 + + + + 566.5 + + + + 566.8 + + + + 567.1 + + + + 567.4 + + + + 567.6 + + + + 567.9 + + + + 568.2 + + + + 568.5 + + + + 568.8 + + + + 569.1 + + + + 569.4 + + + + 569.7 + + + + 570.0 + + + + 570.3 + + + + 570.6 + + + + 570.8 + + + + 571.1 + + + + 571.4 + + + + 571.6 + + + + 571.9 + + + + 572.1 + + + + 572.4 + + + + 572.6 + + + + 572.9 + + + + 573.2 + + + + 573.4 + + + + 573.7 + + + + 574.0 + + + + 574.2 + + + + 574.4 + + + + 574.7 + + + + 574.9 + + + + 575.2 + + + + 575.3 + + + + 575.6 + + + + 575.8 + + + + 576.0 + + + + 576.2 + + + + 576.4 + + + + 576.7 + + + + 576.9 + + + + 577.0 + + + + 577.3 + + + + 577.6 + + + + 577.8 + + + + 578.1 + + + + 578.3 + + + + 578.6 + + + + 578.8 + + + + 579.1 + + + + 579.3 + + + + 579.6 + + + + 579.8 + + + + 580.1 + + + + 580.3 + + + + 580.6 + + + + 580.8 + + + + 581.0 + + + + 581.3 + + + + 581.5 + + + + 581.8 + + + + 582.0 + + + + 582.2 + + + + 582.4 + + + + 582.7 + + + + 582.8 + + + + 583.0 + + + + 583.2 + + + + 583.4 + + + + 583.6 + + + + 583.8 + + + + 583.9 + + + + 584.0 + + + + 584.1 + + + + 584.1 + + + + 584.1 + + + + 584.1 + + + + 584.1 + + + + 584.1 + + + + 584.1 + + + + 584.0 + + + + 583.9 + + + + 583.8 + + + + 583.7 + + + + 583.5 + + + + 583.3 + + + + 583.0 + + + + 582.8 + + + + 582.5 + + + + 582.2 + + + + 581.9 + + + + 581.5 + + + + 581.1 + + + + 580.7 + + + + 580.3 + + + + 579.9 + + + + 579.4 + + + + 578.9 + + + + 578.4 + + + + 577.9 + + + + 577.4 + + + + 576.9 + + + + 576.3 + + + + 575.7 + + + + 575.1 + + + + 574.5 + + + + 573.9 + + + + 573.3 + + + + 572.7 + + + + 572.2 + + + + 571.8 + + + + 571.5 + + + + 571.1 + + + + 570.7 + + + + 570.3 + + + + 570.0 + + + + 569.1 + + + + 568.2 + + + + 567.4 + + + + 566.8 + + + + 567.0 + + + + 567.1 + + + + 567.6 + + + + 567.1 + + + + 566.3 + + + + 564.7 + + + + 563.6 + + + + 563.0 + + + + 562.5 + + + + 562.0 + + + + 561.5 + + + + 561.1 + + + + 560.7 + + + + 560.3 + + + + 559.9 + + + + 559.5 + + + + 559.1 + + + + 558.7 + + + + 558.3 + + + + 558.0 + + + + 557.7 + + + + 557.3 + + + + 556.9 + + + + 556.6 + + + + 556.7 + + + + 556.9 + + + + 556.5 + + + + 555.9 + + + + 555.3 + + + + 554.6 + + + + 554.2 + + + + 554.0 + + + + 553.9 + + + + 553.8 + + + + 553.9 + + + + 554.1 + + + + 554.1 + + + + 554.3 + + + + 554.5 + + + + 554.9 + + + + 555.3 + + + + 555.7 + + + + 556.2 + + + + 556.6 + + + + 557.0 + + + + 557.4 + + + + 557.7 + + + + 558.1 + + + + 558.3 + + + + 558.6 + + + + 558.8 + + + + 559.1 + + + + 559.4 + + + + 559.6 + + + + 559.9 + + + + 560.1 + + + + 560.3 + + + + 560.5 + + + + 560.6 + + + + 560.8 + + + + 560.9 + + + + 561.0 + + + + 561.0 + + + + 561.1 + + + + 561.2 + + + + 561.4 + + + + 561.6 + + + + 561.7 + + + + 561.8 + + + + 561.9 + + + + 561.9 + + + + 562.0 + + + + 562.0 + + + + 562.1 + + + + 562.1 + + + + 562.1 + + + + 562.1 + + + + 562.0 + + + + 562.0 + + + + 561.9 + + + + 561.8 + + + + 561.7 + + + + 561.6 + + + + 561.5 + + + + 561.3 + + + + 561.2 + + + + 561.1 + + + + 561.0 + + + + 560.9 + + + + 560.8 + + + + 560.7 + + + + 560.6 + + + + 560.4 + + + + 560.3 + + + + 560.2 + + + + 560.0 + + + + 559.8 + + + + 559.6 + + + + 559.4 + + + + 559.2 + + + + 558.9 + + + + 558.6 + + + + 558.3 + + + + 558.0 + + + + 557.7 + + + + 557.5 + + + + 557.3 + + + + 557.0 + + + + 556.8 + + + + 556.5 + + + + 556.3 + + + + 556.1 + + + + 555.9 + + + + 555.7 + + + + 555.3 + + + + 554.8 + + + + 554.3 + + + + 553.8 + + + + 553.4 + + + + 553.1 + + + + 552.9 + + + + 552.8 + + + + 552.6 + + + + 552.5 + + + + 552.4 + + + + 552.3 + + + + 552.2 + + + + 552.2 + + + + 552.3 + + + + 552.4 + + + + 552.5 + + + + 552.7 + + + + 553.0 + + + + 553.2 + + + + 553.6 + + + + 553.9 + + + + 554.3 + + + + 554.7 + + + + 555.2 + + + + 555.6 + + + + 556.1 + + + + 556.5 + + + + 556.9 + + + + 557.3 + + + + 557.7 + + + + 558.0 + + + + 558.3 + + + + 558.6 + + + + 559.1 + + + + 559.6 + + + + 560.0 + + + + 560.5 + + + + 561.1 + + + + 561.5 + + + + 561.6 + + + + 561.6 + + + + 561.6 + + + + 561.5 + + + + 561.4 + + + + 561.3 + + + + 560.8 + + + + 560.2 + + + + 559.5 + + + + 558.8 + + + + 558.1 + + + + 557.4 + + + + 556.7 + + + + 556.0 + + + + 555.2 + + + + 554.3 + + + + 553.5 + + + + 552.7 + + + + 551.8 + + + + 551.0 + + + + 550.0 + + + + 549.0 + + + + 547.9 + + + + 546.7 + + + + 545.5 + + + + 544.1 + + + + 542.5 + + + + 541.1 + + + + 539.7 + + + + 538.4 + + + + 537.2 + + + + 536.0 + + + + 534.9 + + + + 533.8 + + + + 532.8 + + + + 531.7 + + + + 530.8 + + + + 529.8 + + + + 529.0 + + + + 528.2 + + + + 527.4 + + + + 526.6 + + + + 525.8 + + + + 525.0 + + + + 524.1 + + + + 523.3 + + + + 522.5 + + + + 521.7 + + + + 520.9 + + + + 520.2 + + + + 519.5 + + + + 518.7 + + + + 517.9 + + + + 517.2 + + + + 516.6 + + + + 516.2 + + + + 515.9 + + + + 515.2 + + + + 514.3 + + + + 513.5 + + + + 512.7 + + + + 511.9 + + + + 511.1 + + + + 510.3 + + + + 509.4 + + + + 508.4 + + + + 507.5 + + + + 506.5 + + + + 505.5 + + + + 504.5 + + + + 503.5 + + + + 502.6 + + + + 501.6 + + + + 500.5 + + + + 499.4 + + + + 498.5 + + + + 497.6 + + + + 497.3 + + + + 496.9 + + + + 496.4 + + + + 495.8 + + + + 495.3 + + + + 495.0 + + + + 494.7 + + + + 494.5 + + + + 494.4 + + + + 494.3 + + + + 494.1 + + + + 494.1 + + + + 494.0 + + + + 493.9 + + + + 493.8 + + + + 492.8 + + + + 492.3 + + + + 491.8 + + + + 491.4 + + + + 491.1 + + + + 490.8 + + + + 490.4 + + + + 490.1 + + + + 489.8 + + + + 489.6 + + + + 489.3 + + + + 489.0 + + + + 488.7 + + + + 488.4 + + + + 488.1 + + + + 487.8 + + + + 487.7 + + + + 487.4 + + + + 487.0 + + + + 486.6 + + + + 486.2 + + + + 485.7 + + + + 485.3 + + + + 484.8 + + + + 484.3 + + + + 483.9 + + + + 483.4 + + + + 482.9 + + + + 482.3 + + + + 481.8 + + + + 481.4 + + + + 481.2 + + + + 480.9 + + + + 480.6 + + + + 480.2 + + + + 479.9 + + + + 479.6 + + + + 479.6 + + + + 479.1 + + + + 478.6 + + + + 478.1 + + + + 477.5 + + + + 476.9 + + + + 476.3 + + + + 475.7 + + + + 475.1 + + + + 474.5 + + + + 473.9 + + + + 473.2 + + + + 472.6 + + + + 472.3 + + + + 471.9 + + + + 470.7 + + + + 470.7 + + + + 469.9 + + + + 469.6 + + + + 468.8 + + + + 467.9 + + + + 467.3 + + + + 466.4 + + + + 465.6 + + + + 464.9 + + + + 464.1 + + + + 463.2 + + + + 462.3 + + + + 461.5 + + + + 461.4 + + + + 461.1 + + + + 460.8 + + + + 460.6 + + + + 460.4 + + + + 460.3 + + + + 460.2 + + + + 460.1 + + + + 460.0 + + + + 459.8 + + + + 459.6 + + + + 459.4 + + + + 459.3 + + + + 459.1 + + + + 458.3 + + + + 458.1 + + + + 457.7 + + + + 457.3 + + + + 456.8 + + + + 456.2 + + + + 455.9 + + + + 455.1 + + + + 454.5 + + + + 453.9 + + + + 453.5 + + + + 453.1 + + + + 452.7 + + + + 452.6 + + + + 452.4 + + + + 452.3 + + + + 451.9 + + + + 452.0 + + + + 452.2 + + + + 452.6 + + + + 452.9 + + + + 453.2 + + + + 453.6 + + + + 454.0 + + + + 454.2 + + + + 454.6 + + + + 454.8 + + + + 455.2 + + + + 455.5 + + + + 455.8 + + + + 456.1 + + + + 456.5 + + + + 456.7 + + + + 457.0 + + + + 457.3 + + + + 457.6 + + + + 457.6 + + + + 457.6 + + + + 457.5 + + + + 457.5 + + + + 457.5 + + + + 457.4 + + + + 457.3 + + + + 457.2 + + + + 457.2 + + + + 457.1 + + + + 457.0 + + + + 456.9 + + + + 456.8 + + + + 456.7 + + + + 456.6 + + + + 456.5 + + + + 456.3 + + + + 456.2 + + + + 456.1 + + + + 455.9 + + + + 455.7 + + + + 455.5 + + + + 455.3 + + + + 455.1 + + + + 454.9 + + + + 454.7 + + + + 454.4 + + + + 454.2 + + + + 454.0 + + + + 453.9 + + + + 453.8 + + + + 453.7 + + + + 453.5 + + + + 453.4 + + + + 453.2 + + + + 453.0 + + + + 452.8 + + + + 452.6 + + + + 452.4 + + + + 452.2 + + + + 451.9 + + + + 451.7 + + + + 451.3 + + + + 450.9 + + + + 450.4 + + + + 449.9 + + + + 449.3 + + + + 448.7 + + + + 448.2 + + + + 447.7 + + + + 447.2 + + + + 446.8 + + + + 446.4 + + + + 445.9 + + + + 445.5 + + + + 445.0 + + + + 444.4 + + + + 443.6 + + + + 442.8 + + + + 441.9 + + + + 440.9 + + + + 439.9 + + + + 438.8 + + + + 437.8 + + + + 436.7 + + + + 435.9 + + + + 435.1 + + + + 434.4 + + + + 433.9 + + + + 433.0 + + + + 432.0 + + + + 431.0 + + + + 429.9 + + + + 428.9 + + + + 428.0 + + + + 427.1 + + + + 426.2 + + + + 425.5 + + + + 424.9 + + + + 424.7 + + + + 424.6 + + + + 424.3 + + + + 424.0 + + + + 423.9 + + + + 423.8 + + + + 423.8 + + + + 423.6 + + + + 423.5 + + + + 423.3 + + + + 423.1 + + + + 423.1 + + + + 421.8 + + + + 421.8 + + + + 421.6 + + + + 421.6 + + + + 421.6 + + + + 421.5 + + + + 421.5 + + + + 421.4 + + + + 421.2 + + + + 421.1 + + + + 420.9 + + + + 420.6 + + + + 420.4 + + + + 420.0 + + + + 419.6 + + + + 419.2 + + + + 418.7 + + + + 418.1 + + + + 417.4 + + + + 416.6 + + + + 415.6 + + + + 414.5 + + + + 413.3 + + + + 411.9 + + + + 410.5 + + + + 409.1 + + + + 407.7 + + + + 406.2 + + + + 404.7 + + + + 403.2 + + + + 401.8 + + + + 400.8 + + + + 400.1 + + + + 399.5 + + + + 399.1 + + + + 398.8 + + + + 398.7 + + + + 398.5 + + + + 398.4 + + + + 398.3 + + + + 398.2 + + + + 398.0 + + + + 397.9 + + + + 397.7 + + + + 397.4 + + + + 397.3 + + + + 397.2 + + + + 397.1 + + + + 396.8 + + + + 396.6 + + + + 396.4 + + + + 396.2 + + + + 396.0 + + + + 395.8 + + + + 395.6 + + + + 395.5 + + + + 395.3 + + + + 395.2 + + + + 395.0 + + + + 394.9 + + + + 394.7 + + + + 394.6 + + + + 394.5 + + + + 394.4 + + + + 394.3 + + + + 394.2 + + + + 394.0 + + + + 393.9 + + + + 393.8 + + + + 393.7 + + + + 393.6 + + + + 393.4 + + + + 393.2 + + + + 393.0 + + + + 392.8 + + + + 392.6 + + + + 392.4 + + + + 392.3 + + + + 392.2 + + + + 392.0 + + + + 391.9 + + + + 391.7 + + + + 391.7 + + + + 391.6 + + + + 391.5 + + + + 391.5 + + + + 391.4 + + + + 391.4 + + + + 391.4 + + + + 391.3 + + + + 391.3 + + + + 391.3 + + + + 391.3 + + + + 391.3 + + + + 391.3 + + + + 391.3 + + + + 391.2 + + + + 391.2 + + + + 391.1 + + + + 391.1 + + + + 391.0 + + + + 391.0 + + + + 390.9 + + + + 390.9 + + + + 390.8 + + + + 390.8 + + + + 390.7 + + + + 390.7 + + + + 390.6 + + + + 390.6 + + + + 390.6 + + + + 390.5 + + + + 390.5 + + + + 390.5 + + + + 390.5 + + + + 390.4 + + + + 390.4 + + + + 390.3 + + + + 390.3 + + + + 390.2 + + + + 390.1 + + + + 390.1 + + + + 390.0 + + + + 390.0 + + + + 389.9 + + + + 389.9 + + + + 389.9 + + + + 389.9 + + + + 389.8 + + + + 389.8 + + + + 389.7 + + + + 389.6 + + + + 389.5 + + + + 389.5 + + + + 389.4 + + + + 389.4 + + + + 389.3 + + + + 389.3 + + + + 389.3 + + + + 389.3 + + + + 389.2 + + + + 389.2 + + + + 389.2 + + + + 389.1 + + + + 389.1 + + + + 389.1 + + + + 389.1 + + + + 389.1 + + + + 389.1 + + + + 389.1 + + + + 389.1 + + + + 389.2 + + + + 389.2 + + + + 389.2 + + + + 389.3 + + + + 389.2 + + + + 389.2 + + + + 389.2 + + + + 389.2 + + + + 389.3 + + + + 389.3 + + + + 389.3 + + + + 389.4 + + + + 389.4 + + + + 389.5 + + + + 389.5 + + + + 389.5 + + + + 389.6 + + + + 389.6 + + + + 389.7 + + + + 389.8 + + + + 389.8 + + + + 389.9 + + + + 390.0 + + + + 390.0 + + + + 390.1 + + + + 390.2 + + + + 390.2 + + + + 390.2 + + + + 390.3 + + + + 390.3 + + + + 390.3 + + + + 390.3 + + + + 390.3 + + + + 390.4 + + + + 390.4 + + + + 390.4 + + + + 390.4 + + + + 390.4 + + + + 390.4 + + + + 390.4 + + + + 390.4 + + + + 390.4 + + + + 390.4 + + + + 390.4 + + + + 390.5 + + + + 390.5 + + + + 390.5 + + + + 390.6 + + + + 390.7 + + + + 390.7 + + + + 390.7 + + + + 390.6 + + + + 390.6 + + + + 390.4 + + + + 390.3 + + + + 390.1 + + + + 390.0 + + + + 389.8 + + + + 389.6 + + + + 389.5 + + + + 389.4 + + + + 389.3 + + + + 389.2 + + + + 389.2 + + + + 389.2 + + + + 389.2 + + + + 389.1 + + + + 389.1 + + + + 389.0 + + + + 388.9 + + + + 388.9 + + + + 388.8 + + + + 388.6 + + + + 388.5 + + + + 388.4 + + + + 388.3 + + + + 388.3 + + + + 388.2 + + + + 388.1 + + + + 388.0 + + + + 387.8 + + + + 387.7 + + + + 387.5 + + + + 387.3 + + + + 387.1 + + + + 386.9 + + + + 386.8 + + + + 386.6 + + + + 386.5 + + + + 386.4 + + + + 386.3 + + + + 386.2 + + + + 386.1 + + + + 385.9 + + + + 385.9 + + + + 385.7 + + + + 385.6 + + + + 385.5 + + + + 385.4 + + + + 385.3 + + + + 385.1 + + + + 384.9 + + + + 384.7 + + + + 384.6 + + + + 384.4 + + + + 384.2 + + + + 384.0 + + + + 383.8 + + + + 383.6 + + + + 383.4 + + + + 383.3 + + + + 383.2 + + + + 383.2 + + + + 383.1 + + + + 383.0 + + + + 383.0 + + + + 382.9 + + + + 382.9 + + + + 382.9 + + + + 382.8 + + + + 382.8 + + + + 382.8 + + + + 382.8 + + + + 382.7 + + + + 382.7 + + + + 382.6 + + + + 382.5 + + + + 382.4 + + + + 382.4 + + + + 382.3 + + + + 382.3 + + + + 382.2 + + + + 382.2 + + + + 382.1 + + + + 382.1 + + + + 382.1 + + + + 382.0 + + + + 382.0 + + + + 382.0 + + + + 382.0 + + + + 382.0 + + + + 382.0 + + + + 382.0 + + + + 382.0 + + + + 381.9 + + + + 381.9 + + + + 381.9 + + + + 381.9 + + + + 381.8 + + + + 381.8 + + + + 381.8 + + + + 381.8 + + + + 381.8 + + + + 381.8 + + + + 381.8 + + + + 381.8 + + + + 381.8 + + + + 381.8 + + + + 381.7 + + + + 381.7 + + + + 381.6 + + + + 381.6 + + + + 381.6 + + + + 381.5 + + + + 381.5 + + + + 381.5 + + + + 381.5 + + + + 381.4 + + + + 381.4 + + + + 381.4 + + + + 381.4 + + + + 381.4 + + + + 381.4 + + + + 381.4 + + + + 381.4 + + + + 381.4 + + + + 381.4 + + + + 381.4 + + + + 381.3 + + + + 381.3 + + + + 381.2 + + + + 381.2 + + + + 381.2 + + + + 381.1 + + + + 381.0 + + + + 380.9 + + + + 380.8 + + + + 380.7 + + + + 380.6 + + + + 380.5 + + + + 380.5 + + + + 380.4 + + + + 380.3 + + + + 380.3 + + + + 380.2 + + + + 380.1 + + + + 380.1 + + + + 380.0 + + + + 380.0 + + + + 379.9 + + + + 379.9 + + + + 379.8 + + + + 379.8 + + + + 379.8 + + + + 379.7 + + + + 379.7 + + + + 379.6 + + + + 379.6 + + + + 379.5 + + + + 379.5 + + + + 379.5 + + + + 379.4 + + + + 379.4 + + + + 379.3 + + + + 379.3 + + + + 379.2 + + + + 379.1 + + + + 379.0 + + + + 378.9 + + + + 378.8 + + + + 378.8 + + + + 378.7 + + + + 378.6 + + + + 378.6 + + + + 378.5 + + + + 378.4 + + + + 378.3 + + + + 378.2 + + + + 378.1 + + + + 377.9 + + + + 377.8 + + + + 377.7 + + + + 377.6 + + + + 377.5 + + + + 377.4 + + + + 377.3 + + + + 377.3 + + + + 377.2 + + + + 377.1 + + + + 377.0 + + + + 376.9 + + + + 376.9 + + + + 376.8 + + + + 376.8 + + + + 376.8 + + + + 376.7 + + + + 376.7 + + + + 376.7 + + + + 376.7 + + + + 376.7 + + + + 376.7 + + + + 376.7 + + + + 376.6 + + + + 376.6 + + + + 376.5 + + + + 376.5 + + + + 376.4 + + + + 376.4 + + + + 376.3 + + + + 376.3 + + + + 376.2 + + + + 376.1 + + + + 376.0 + + + + 376.0 + + + + 375.9 + + + + 375.8 + + + + 375.8 + + + + 375.8 + + + + 375.7 + + + + 375.7 + + + + 375.7 + + + + 375.6 + + + + 375.6 + + + + 375.6 + + + + 375.6 + + + + 375.6 + + + + 375.5 + + + + 375.5 + + + + 375.5 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.4 + + + + 375.3 + + + + 375.3 + + + + 375.2 + + + + 375.2 + + + + 375.1 + + + + 375.0 + + + + 374.9 + + + + 374.8 + + + + 374.7 + + + + 374.5 + + + + 374.4 + + + + 374.2 + + + + 374.0 + + + + 373.8 + + + + 373.7 + + + + 373.7 + + + + 373.6 + + + + 373.5 + + + + 373.3 + + + + 373.2 + + + + 373.0 + + + + 372.8 + + + + 372.6 + + + + 372.4 + + + + 372.2 + + + + 371.9 + + + + 371.7 + + + + 371.4 + + + + 371.2 + + + + 370.9 + + + + 370.7 + + + + 370.4 + + + + 370.2 + + + + 369.9 + + + + 369.7 + + + + 369.4 + + + + 369.3 + + + + 369.1 + + + + 368.9 + + + + 368.6 + + + + 368.3 + + + + 368.0 + + + + 367.7 + + + + 367.6 + + + + 367.4 + + + + 367.3 + + + + 367.1 + + + + 367.0 + + + + 366.9 + + + + 366.9 + + + + 366.7 + + + + 366.6 + + + + 366.6 + + + + 366.6 + + + + 366.6 + + + + 366.5 + + + + 366.5 + + + + 366.5 + + + + 366.4 + + + + 366.3 + + + + 366.2 + + + + 366.1 + + + + 365.9 + + + + 365.8 + + + + 365.8 + + + + 365.8 + + + + 365.6 + + + + 365.4 + + + + 365.1 + + + + 364.8 + + + + 364.4 + + + + 364.2 + + + + 363.9 + + + + 363.8 + + + + 363.7 + + + + 363.7 + + + + 363.7 + + + + 363.7 + + + + 363.7 + + + + 363.7 + + + + 363.7 + + + + 363.7 + + + + 363.8 + + + + 363.8 + + + + 363.8 + + + + 363.8 + + + + 363.8 + + + + 363.8 + + + + 363.8 + + + + 363.8 + + + + 363.8 + + + + 363.8 + + + + 363.8 + + + + 363.8 + + + + 363.8 + + + + 363.9 + + + + 363.9 + + + + 364.0 + + + + 364.2 + + + + 364.3 + + + + 364.4 + + + + 364.4 + + + + 364.4 + + + + 364.4 + + + + 364.4 + + + + 364.4 + + + + 363.9 + + + + 363.4 + + + + 363.0 + + + + 362.5 + + + + 362.0 + + + + 361.5 + + + + 361.0 + + + + 360.5 + + + + 360.0 + + + + 359.4 + + + + 358.9 + + + + 358.4 + + + + 357.9 + + + + 357.4 + + + + 356.9 + + + + 356.5 + + + + 356.1 + + + + 355.7 + + + + 355.3 + + + + 354.8 + + + + 354.3 + + + + 353.8 + + + + 353.4 + + + + 353.0 + + + + 352.6 + + + + 352.2 + + + + 351.9 + + + + 351.6 + + + + 351.4 + + + + 351.1 + + + + 350.8 + + + + 350.6 + + + + 350.3 + + + + 350.0 + + + + 349.8 + + + + 349.6 + + + + 349.4 + + + + 349.2 + + + + 348.9 + + + + 348.7 + + + + 348.5 + + + + 348.3 + + + + 348.0 + + + + 347.8 + + + + 347.6 + + + + 347.4 + + + + 347.2 + + + + 347.1 + + + + 347.0 + + + + 346.9 + + + + 346.8 + + + + 346.7 + + + + 346.6 + + + + 346.5 + + + + 346.5 + + + + 346.4 + + + + 346.4 + + + + 346.3 + + + + 346.2 + + + + 346.1 + + + + 346.0 + + + + 345.9 + + + + 345.8 + + + + 345.7 + + + + 345.6 + + + + 345.6 + + + + 345.5 + + + + 345.5 + + + + 345.4 + + + + 345.4 + + + + 345.4 + + + + 345.3 + + + + 345.3 + + + + 345.3 + + + + 345.3 + + + + 345.3 + + + + 345.3 + + + + 345.3 + + + + 345.2 + + + + 345.2 + + + + 345.1 + + + + 345.1 + + + + 345.0 + + + + 345.0 + + + + 345.0 + + + + 344.9 + + + + 344.9 + + + + 344.9 + + + + 344.9 + + + + 344.9 + + + + 344.9 + + + + 344.9 + + + + 344.8 + + + + 344.8 + + + + 344.7 + + + + 344.6 + + + + 344.6 + + + + 344.5 + + + + 344.5 + + + + 344.5 + + + + 344.5 + + + + 344.5 + + + + 344.4 + + + + 344.4 + + + + 344.4 + + + + 344.4 + + + + 344.4 + + + + 344.5 + + + + 344.5 + + + + 344.6 + + + + 344.6 + + + + 344.7 + + + + 344.8 + + + + 344.9 + + + + 344.9 + + + + 345.0 + + + + 345.1 + + + + 345.3 + + + + 345.5 + + + + 345.7 + + + + 345.9 + + + + 346.1 + + + + 346.3 + + + + 346.6 + + + + 346.9 + + + + 347.1 + + + + 347.4 + + + + 347.6 + + + + 347.9 + + + + 348.2 + + + + 348.4 + + + + 348.7 + + + + 349.0 + + + + 349.3 + + + + 349.6 + + + + 350.0 + + + + 350.3 + + + + 350.6 + + + + 350.9 + + + + 351.2 + + + + 351.6 + + + + 351.9 + + + + 352.2 + + + + 352.5 + + + + 352.8 + + + + 353.2 + + + + 353.4 + + + + 353.7 + + + + 353.9 + + + + 354.2 + + + + 354.3 + + + + 354.5 + + + + 354.7 + + + + 354.8 + + + + 355.0 + + + + 355.1 + + + + 355.2 + + + + 355.2 + + + + 355.3 + + + + 355.3 + + + + 355.4 + + + + 355.4 + + + + 355.4 + + + + 355.5 + + + + 355.6 + + + + 355.7 + + + + 355.7 + + + + 355.8 + + + + 355.9 + + + + 356.0 + + + + 356.1 + + + + 356.3 + + + + 356.5 + + + + 356.7 + + + + 356.9 + + + + 357.2 + + + + 357.5 + + + + 357.7 + + + + 358.0 + + + + 358.3 + + + + 358.6 + + + + 359.0 + + + + 359.3 + + + + 359.6 + + + + 359.9 + + + + 360.1 + + + + 360.4 + + + + 360.7 + + + + 360.8 + + + + 360.9 + + + + 361.0 + + + + 361.1 + + + + 361.1 + + + + 361.2 + + + + 361.2 + + + + 361.3 + + + + 361.3 + + + + 361.3 + + + + 361.4 + + + + 361.4 + + + + 361.4 + + + + 361.5 + + + + 361.5 + + + + 361.6 + + + + 361.6 + + + + 361.7 + + + + 361.7 + + + + 361.8 + + + + 361.8 + + + + 361.8 + + + + 361.8 + + + + 361.8 + + + + 361.5 + + + + 361.4 + + + + 361.4 + + + + 361.3 + + + + 361.3 + + + + 361.3 + + + + 361.3 + + + + 361.3 + + + + 361.2 + + + + 361.2 + + + + 361.2 + + + + 361.2 + + + + 361.2 + + + + 361.3 + + + + 361.3 + + + + 361.3 + + + + 361.3 + + + + 361.3 + + + + 361.3 + + + + 361.2 + + + + 361.2 + + + + 361.2 + + + + 361.3 + + + + 361.3 + + + + 361.3 + + + + 361.3 + + + + 361.4 + + + + 361.5 + + + + 361.6 + + + + 361.7 + + + + 361.7 + + + + 361.7 + + + + 361.6 + + + + 361.6 + + + + 361.6 + + + + 361.6 + + + + 361.6 + + + + 361.6 + + + + 361.6 + + + + 361.6 + + + + 361.5 + + + + 361.5 + + + + 361.5 + + + + 361.5 + + + + 361.5 + + + + 361.4 + + + + 361.4 + + + + 361.4 + + + + 361.4 + + + + 361.4 + + + + 361.4 + + + + 361.4 + + + + 361.4 + + + + 361.4 + + + + 361.4 + + + + 361.5 + + + + 361.5 + + + + 361.5 + + + + 361.5 + + + + 361.5 + + + + 361.5 + + + + 361.5 + + + + 361.5 + + + + 361.5 + + + + 361.5 + + + + 361.5 + + + + 361.5 + + + + 361.5 + + + + 361.5 + + + + 361.5 + + + + 361.5 + + + + 361.6 + + + + 361.6 + + + + 361.6 + + + + 361.6 + + + + 361.6 + + + + 361.6 + + + + 361.6 + + + + 361.6 + + + + 361.6 + + + + 361.6 + + + + 361.6 + + + + 361.6 + + + + 361.6 + + + + 361.5 + + + + 361.5 + + + + 361.5 + + + + 361.4 + + + + 361.4 + + + + 361.3 + + + + 361.3 + + + + 361.3 + + + + 361.2 + + + + 361.2 + + + + 361.1 + + + + 361.1 + + + + 361.0 + + + + 361.0 + + + + 360.9 + + + + 360.9 + + + + 360.8 + + + + 360.7 + + + + 360.7 + + + + 360.6 + + + + 360.6 + + + + 360.5 + + + + 360.4 + + + + 360.4 + + + + 360.3 + + + + 360.2 + + + + 360.2 + + + + 360.2 + + + + 360.1 + + + + 360.1 + + + + 360.1 + + + + 360.2 + + + + 360.2 + + + + 360.3 + + + + 360.3 + + + + 360.4 + + + + 360.4 + + + + 360.4 + + + + 360.4 + + + + 360.4 + + + + 360.3 + + + + 360.3 + + + + 360.3 + + + + 360.3 + + + + 360.3 + + + + 360.3 + + + + 360.2 + + + + 360.0 + + + + 359.9 + + + + 359.8 + + + + 359.6 + + + + 359.3 + + + + 358.9 + + + + 358.5 + + + + 357.9 + + + + 357.4 + + + + 356.7 + + + + 355.9 + + + + 355.1 + + + + 354.2 + + + + 353.4 + + + + 352.7 + + + + 352.0 + + + + 351.4 + + + + 350.8 + + + + 350.3 + + + + 349.8 + + + + 349.5 + + + + 349.3 + + + + 349.1 + + + + 348.9 + + + + 348.9 + + + + 348.9 + + + + 348.9 + + + + 349.0 + + + + 349.1 + + + + 349.2 + + + + 349.3 + + + + 349.4 + + + + 349.4 + + + + 349.5 + + + + 349.5 + + + + 349.6 + + + + 349.6 + + + + 349.7 + + + + 349.7 + + + + 349.8 + + + + 349.8 + + + + 349.9 + + + + 350.0 + + + + 350.0 + + + + 350.1 + + + + 350.1 + + + + 350.2 + + + + 350.2 + + + + 350.3 + + + + 350.4 + + + + 350.6 + + + + 350.7 + + + + 350.7 + + + + 350.7 + + + + 350.7 + + + + 350.7 + + + + 350.6 + + + + 350.5 + + + + 350.5 + + + + 350.5 + + + + 350.5 + + + + 350.6 + + + + 350.6 + + + + 350.7 + + + + 350.8 + + + + 350.9 + + + + 351.0 + + + + 351.2 + + + + 351.4 + + + + 351.6 + + + + 351.9 + + + + 352.2 + + + + 352.5 + + + + 352.9 + + + + 353.2 + + + + 353.6 + + + + 354.0 + + + + 354.6 + + + + 355.1 + + + + 355.6 + + + + 356.1 + + + + 356.6 + + + + 357.0 + + + + 357.4 + + + + 357.6 + + + + 357.8 + + + + 358.0 + + + + 359.3 + + + + 359.3 + + + + 359.3 + + + + 359.4 + + + + 359.4 + + + + 359.5 + + + + 359.5 + + + + 359.6 + + + + 359.6 + + + + 359.7 + + + + 359.8 + + + + 359.9 + + + + 360.1 + + + + 360.2 + + + + 360.3 + + + + 360.5 + + + + 360.6 + + + + 360.8 + + + + 360.9 + + + + 361.1 + + + + 361.3 + + + + 361.4 + + + + 361.6 + + + + 361.8 + + + + 362.0 + + + + 362.1 + + + + 362.3 + + + + 362.4 + + + + 362.5 + + + + 362.7 + + + + 362.8 + + + + 363.0 + + + + 363.1 + + + + 363.2 + + + + 363.3 + + + + 363.4 + + + + 363.5 + + + + 363.6 + + + + 363.6 + + + + 363.8 + + + + 363.8 + + + + 363.8 + + + + 363.9 + + + + 363.9 + + + + 363.9 + + + + 364.0 + + + + 364.0 + + + + 364.1 + + + + 364.1 + + + + 364.3 + + + + 364.3 + + + + 364.4 + + + + 364.5 + + + + 364.7 + + + + 364.8 + + + + 365.0 + + + + 365.1 + + + + 365.2 + + + + 365.3 + + + + 365.5 + + + + 365.6 + + + + 365.7 + + + + 365.9 + + + + 366.0 + + + + 366.1 + + + + 366.3 + + + + 366.4 + + + + 366.5 + + + + 366.6 + + + + 366.7 + + + + 366.8 + + + + 366.9 + + + + 367.0 + + + + 367.1 + + + + 367.2 + + + + 367.2 + + + + 367.3 + + + + 367.4 + + + + 367.4 + + + + 367.5 + + + + 367.6 + + + + 367.7 + + + + 367.7 + + + + 367.8 + + + + 367.9 + + + + 367.9 + + + + 368.1 + + + + 368.1 + + + + 368.2 + + + + 368.3 + + + + 368.4 + + + + 368.5 + + + + 368.5 + + + + 368.5 + + + + 368.8 + + + + 368.8 + + + + 368.9 + + + + 369.0 + + + + 369.1 + + + + 369.1 + + + + 369.2 + + + + 369.2 + + + + 369.3 + + + + 369.4 + + + + 369.5 + + + + 369.6 + + + + 369.7 + + + + 369.7 + + + + 369.8 + + + + 370.0 + + + + 370.1 + + + + 370.2 + + + + 370.3 + + + + 370.5 + + + + 370.6 + + + + 370.8 + + + + 371.2 + + + + 371.6 + + + + 371.9 + + + + 372.2 + + + + 374.4 + + + + 374.4 + + + + 374.4 + + + + 374.5 + + + + 374.6 + + + + 374.7 + + + + 374.8 + + + + 374.9 + + + + 375.0 + + + + 375.1 + + + + 375.1 + + + + 375.1 + + + + 375.1 + + + + 375.1 + + + + 375.1 + + + + 375.1 + + + + 375.1 + + + + 375.1 + + + + 375.1 + + + + 375.1 + + + + 375.1 + + + + 375.1 + + + + 375.1 + + + + 375.1 + + + + 375.2 + + + + 375.2 + + + + 375.2 + + + + 375.2 + + + + 375.3 + + + + 375.3 + + + + 375.3 + + + + 375.4 + + + + 375.4 + + + + 375.5 + + + + 375.5 + + + + 375.5 + + + + 375.6 + + + + 375.6 + + + + 375.7 + + + + 375.7 + + + + 375.8 + + + + 375.8 + + + + 375.9 + + + + 376.0 + + + + 376.0 + + + + 376.0 + + + + 376.1 + + + + 376.1 + + + + 376.2 + + + + 376.2 + + + + 376.3 + + + + 376.3 + + + + 376.3 + + + + 376.3 + + + + 376.2 + + + + 376.2 + + + + 376.2 + + + + 376.2 + + + + 376.2 + + + + 376.2 + + + + 376.2 + + + + 376.4 + + + + 376.5 + + + + 376.6 + + + + 376.6 + + + + 376.7 + + + + 376.8 + + + + 376.9 + + + + 377.0 + + + + 377.2 + + + + 377.3 + + + + 377.5 + + + + 377.7 + + + + 377.9 + + + + 378.0 + + + + 378.2 + + + + 378.3 + + + + 378.5 + + + + 378.7 + + + + 378.8 + + + + 378.9 + + + + 379.0 + + + + 379.1 + + + + 379.2 + + + + 379.3 + + + + 379.4 + + + + 379.5 + + + + 379.6 + + + + 380.0 + + + + 380.2 + + + + 380.3 + + + + 380.5 + + + + 380.6 + + + + 380.7 + + + + 380.9 + + + + 381.0 + + + + 381.4 + + + + 381.7 + + + + 382.1 + + + + 382.4 + + + + 382.7 + + + + 383.0 + + + + 383.2 + + + + 383.5 + + + + 383.9 + + + + 384.1 + + + + 384.4 + + + + 384.7 + + + + 385.0 + + + + 385.1 + + + + 385.3 + + + + + diff --git a/Sources/src/data/stub/repository/ActivityRepository.php b/Sources/src/data/stub/repository/ActivityRepository.php new file mode 100644 index 00000000..36abc11d --- /dev/null +++ b/Sources/src/data/stub/repository/ActivityRepository.php @@ -0,0 +1,72 @@ +Activities[] = new Activity(1, "Course", "Course à pied", "Sport", "2023-10-16", "08:00", "09:00", 5, 5, 5, 2, 50, 100, 10, 25); + $this->Activities[] = new Activity(2, "Natation", "Natation en piscine", "Sport", "2023-10-17", "10:00", "11:00", 4, 5, 5, 2, 55, 95, 20, 24); + $this->Activities[] = new Activity(3, "Vélo", "Vélo en montagne", "Sport", "2023-10-18", "14:00", "15:30", 6, 4, 4, 2, 45, 90, 15, 23); + $this->Activities[] = new Activity(4, "Marche", "Marche en forêt", "Loisir", "2023-10-19", "11:00", "12:00", 3, 4, 4, 2, 60, 85, 40, 22); + $this->Activities[] = new Activity(5, "Yoga", "Séance de yoga", "Sport", "2023-10-20", "16:00", "17:00", 2, 3, 3, 1, 70, 80, 65, 21); + } + public function getHeartRateDataByUserId(int $userId): array + { + return; + } + public function getItemById(int $id): ?Activity { + foreach ($this->Activities as $activity) { + if ($activity->ID_Activite === $id) { + return $activity; + } + } + return null; + } + + public function GetNbItems(): int { + return count($this->Activities); + } + + public function GetItems(int $index, int $count, ?string $orderingPropertyName = null, bool $descending = false): array { + return array_slice($this->Activities, $index, $count); + } + + public function GetItemsByName(string $substring, int $index, int $count, ?string $orderingPropertyName = null, bool $descending = false): array { + $filteredActivities = array_filter($this->Activities, function ($activity) use ($substring) { + return strpos(strtolower($activity->name), strtolower($substring)) !== false; + }); + return array_slice($filteredActivities, $index, $count); + } + + public function GetItemByName(string $substring, int $index, int $count, ?string $orderingPropertyName = null, bool $descending = false): array { + return $this->GetItemsByName($substring, $index, $count, $orderingPropertyName, $descending)[0]; + } + + public function UpdateItem(Activity $oldItem, Activity $newItem): void { + $index = array_search($oldItem, $this->Activities); + if ($index !== false) { + $this->Activities[$index] = $newItem; + } + } + + public function AddItem(Activity $item): void { + $this->Activities[] = $item; + } + + public function DeleteItem(Activity $item): bool { + $index = array_search($item, $this->Activities); + if ($index !== false) { + unset($this->Activities[$index]); + return true; + } + return false; + } +} + + +?> \ No newline at end of file diff --git a/Sources/index.php b/Sources/src/data/stub/repository/DataSourcesRepositoty.php similarity index 100% rename from Sources/index.php rename to Sources/src/data/stub/repository/DataSourcesRepositoty.php diff --git a/Sources/src/data/stub/repository/UserRepository.php b/Sources/src/data/stub/repository/UserRepository.php new file mode 100644 index 00000000..b1c3f1bf --- /dev/null +++ b/Sources/src/data/stub/repository/UserRepository.php @@ -0,0 +1,71 @@ +users[] = new User(1, "Doe", "John", "john.doe@example.com", "password123", new Role("Coach")); + $this->users[] = new User(2, "Smith", "Jane", "jane.smith@example.com", "secure456", new Role("User")); + $this->users[] = new User(3, "Martin", "Paul", "paul.martin@example.com", "super789", new Role("Coach")); + $this->users[] = new User(4, "Brown", "Anna", "anna.brown@example.com", "test000", new Role("User")); + $this->users[] = new User(5, "Lee", "Bruce", "bruce.lee@example.com", "hello321", new Role("User")); + } + + public function getItemById(int $id): ?User { + foreach ($this->users as $user) { + if ($user->id === $id) { + return $user; + } + } + return null; + } + + public function GetNbItems(): int { + return count($this->users); + } + + public function GetItems(int $index, int $count, ?string $orderingPropertyName = null, bool $descending = false): array { + // Cette méthode est un exemple simple, on ne gère pas l'ordonnancement ici + return array_slice($this->users, $index, $count); + } + + public function GetItemsByName(string $substring, int $index, int $count, ?string $orderingPropertyName = null, bool $descending = false): array { + $filteredUsers = array_filter($this->users, function ($user) use ($substring) { + return strpos(strtolower($user->nom), strtolower($substring)) !== false || strpos(strtolower($user->prenom), strtolower($substring)) !== false; + }); + return array_slice($filteredUsers, $index, $count); + } + public function GetItemByName(string $substring, int $index, int $count, ?string $orderingPropertyName = null, bool $descending = false):User { + return $this->GetItemsByName($substring, $index, $count, $orderingPropertyName, $descending)[0]; + } + + public function UpdateItem(User $oldUser, User $newUser): void { + $index = array_search($oldUser, $this->users); + if ($index !== false) { + $this->users[$index] = $newUser; + } + } + + public function AddItem(User $user): void { + $this->users[] = $user; + } + + public function DeleteItem(User $user): bool { + $index = array_search($user, $this->users); + if ($index !== false) { + unset($this->users[$index]); + return true; + } + return false; + } +} + +?> diff --git a/Sources/src/data/stub/service/AuthService.php b/Sources/src/data/stub/service/AuthService.php new file mode 100644 index 00000000..4041bd6e --- /dev/null +++ b/Sources/src/data/stub/service/AuthService.php @@ -0,0 +1,35 @@ +userRepository = $userRepository; + } + + public function login($username, $password) { + + $user = $this->userRepository->getUserByUsername($username); + + if (!$user) { + throw new \Exception('Unable to find user with that name'); + } + if ($user->isValidPassword($password)) { + return true; + } + + return false; + } + public function register(string $username, string $password, ...$data): bool + { + throw new NotImplementedException("register method not implemented"); + } + + public function logoutUser(): void + { + throw new NotImplementedException("logout method not implemented"); + } +} \ No newline at end of file diff --git a/Sources/src/utils/SplClassLoader.php b/Sources/src/utils/SplClassLoader.php deleted file mode 100644 index e1ed7530..00000000 --- a/Sources/src/utils/SplClassLoader.php +++ /dev/null @@ -1,208 +0,0 @@ -. - */ - -/** - * SplClassLoader implementation that implements the technical interoperability - * standards for PHP 5.3 namespaces and class names. - * - * http://groups.google.com/group/php-standards/web/psr-0-final-proposal?pli=1 - * - * // Example which loads classes for the Doctrine Common package in the - * // Doctrine\Common namespace. - * $classLoader = new SplClassLoader('Doctrine\Common', '/path/to/doctrine'); - * $classLoader->register(); - * - * @license http://www.opensource.org/licenses/mit-license.html MIT License - * @author Jonathan H. Wage - * @author Roman S. Borschel - * @author Matthew Weier O'Phinney - * @author Kris Wallsmith - * @author Fabien Potencier - */ -class SplClassLoader -{ - private $_fileExtension = '.php'; - private $_namespace; - private $_includePath; - private $_namespaceSeparator = '\\'; - - /** - * Creates a new SplClassLoader that loads classes of the - * specified namespace. - * - * @param string $ns The namespace to use. - */ - public function __construct(string $ns = null, string $includePath = null) - { - $this->_namespace = $ns; - $this->_includePath = $includePath; - } - - /** - * Sets the namespace separator used by classes in the namespace of this class loader. - * - * @param string $sep The separator to use. - */ - public function setNamespaceSeparator(string $sep) - { - $this->_namespaceSeparator = $sep; - } - - /** - * Gets the namespace seperator used by classes in the namespace of this class loader. - * - * @return void - */ - public function getNamespaceSeparator() - { - return $this->_namespaceSeparator; - } - - /** - * Sets the base include path for all class files in the namespace of this class loader. - * - * @param string $includePath - */ - public function setIncludePath(string $includePath) - { - $this->_includePath = $includePath; - } - - /** - * Gets the base include path for all class files in the namespace of this class loader. - * - * @return string $includePath - */ - public function getIncludePath() - { - return $this->_includePath; - } - - /** - * Sets the file extension of class files in the namespace of this class loader. - * - * @param string $fileExtension - */ - public function setFileExtension($fileExtension) - { - $this->_fileExtension = $fileExtension; - } - - /** - * Gets the file extension of class files in the namespace of this class loader. - * - * @return string $fileExtension - */ - public function getFileExtension() - { - return $this->_fileExtension; - } - - /** - * Installs this class loader on the SPL autoload stack. - */ - public function register() - { - spl_autoload_register(array($this, 'loadClass')); - } - - /** - * Uninstalls this class loader from the SPL autoloader 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 void - */ - public function loadClass(string $className) - { - if (null === $this->_namespace || $this->_namespace . $this->_namespaceSeparator === substr($className, 0, strlen($this->_namespace . $this->_namespaceSeparator))) { - $fileName = ''; - $namespace = ''; - if (false !== ($lastNsPos = strripos($className, $this->_namespaceSeparator))) { - $namespace = substr($className, 0, $lastNsPos); - $className = substr($className, $lastNsPos + 1); - $fileName = str_replace($this->_namespaceSeparator, DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR; - } - $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . $this->_fileExtension; - - require ($this->_includePath !== null ? $this->_includePath . DIRECTORY_SEPARATOR : '') . $fileName; - } - } -} - - -// \ No newline at end of file diff --git a/Sources/vendor/autoload.php b/Sources/vendor/autoload.php new file mode 100644 index 00000000..e3a96f19 --- /dev/null +++ b/Sources/vendor/autoload.php @@ -0,0 +1,25 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see https://www.php-fig.org/psr/psr-0/ + * @see https://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + /** @var \Closure(string):void */ + private static $includeFile; + + /** @var string|null */ + private $vendorDir; + + // PSR-4 + /** + * @var array> + */ + private $prefixLengthsPsr4 = array(); + /** + * @var array> + */ + private $prefixDirsPsr4 = array(); + /** + * @var list + */ + private $fallbackDirsPsr4 = array(); + + // PSR-0 + /** + * List of PSR-0 prefixes + * + * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) + * + * @var array>> + */ + private $prefixesPsr0 = array(); + /** + * @var list + */ + private $fallbackDirsPsr0 = array(); + + /** @var bool */ + private $useIncludePath = false; + + /** + * @var array + */ + private $classMap = array(); + + /** @var bool */ + private $classMapAuthoritative = false; + + /** + * @var array + */ + private $missingClasses = array(); + + /** @var string|null */ + private $apcuPrefix; + + /** + * @var array + */ + private static $registeredLoaders = array(); + + /** + * @param string|null $vendorDir + */ + public function __construct($vendorDir = null) + { + $this->vendorDir = $vendorDir; + self::initializeIncludeClosure(); + } + + /** + * @return array> + */ + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); + } + + return array(); + } + + /** + * @return array> + */ + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + /** + * @return list + */ + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + /** + * @return list + */ + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + /** + * @return array Array of classname => path + */ + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array $classMap Class to filename map + * + * @return void + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * 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 prefix + * @param list|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + * + * @return void + */ + public function add($prefix, $paths, $prepend = false) + { + $paths = (array) $paths; + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + $paths + ); + } + } + + /** + * 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 list|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + $paths = (array) $paths; + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + $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] = $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + $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 list|string $paths The PSR-0 base directories + * + * @return void + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * 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 list|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + * + * @return void + */ + 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; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + * + * @return void + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + 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 + * + * @return void + */ + 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; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + * + * @return void + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + * + * @return void + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + + if (null === $this->vendorDir) { + return; + } + + if ($prepend) { + self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; + } else { + unset(self::$registeredLoaders[$this->vendorDir]); + self::$registeredLoaders[$this->vendorDir] = $this; + } + } + + /** + * Unregisters this instance as an autoloader. + * + * @return void + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + + if (null !== $this->vendorDir) { + unset(self::$registeredLoaders[$this->vendorDir]); + } + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return true|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + $includeFile = self::$includeFile; + $includeFile($file); + + return true; + } + + return null; + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + /** + * Returns the currently registered loaders keyed by their corresponding vendor directories. + * + * @return array + */ + public static function getRegisteredLoaders() + { + return self::$registeredLoaders; + } + + /** + * @param string $class + * @param string $ext + * @return string|false + */ + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath . '\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + 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 + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + 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; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } + + /** + * @return void + */ + private static function initializeIncludeClosure() + { + if (self::$includeFile !== null) { + return; + } + + /** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + * + * @param string $file + * @return void + */ + self::$includeFile = \Closure::bind(static function($file) { + include $file; + }, null, null); + } +} diff --git a/Sources/vendor/composer/InstalledVersions.php b/Sources/vendor/composer/InstalledVersions.php new file mode 100644 index 00000000..51e734a7 --- /dev/null +++ b/Sources/vendor/composer/InstalledVersions.php @@ -0,0 +1,359 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer; + +use Composer\Autoload\ClassLoader; +use Composer\Semver\VersionParser; + +/** + * This class is copied in every Composer installed project and available to all + * + * See also https://getcomposer.org/doc/07-runtime.md#installed-versions + * + * To require its presence, you can require `composer-runtime-api ^2.0` + * + * @final + */ +class InstalledVersions +{ + /** + * @var mixed[]|null + * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null + */ + private static $installed; + + /** + * @var bool|null + */ + private static $canGetVendors; + + /** + * @var array[] + * @psalm-var array}> + */ + private static $installedByVendor = array(); + + /** + * Returns a list of all package names which are present, either by being installed, replaced or provided + * + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackages() + { + $packages = array(); + foreach (self::getInstalled() as $installed) { + $packages[] = array_keys($installed['versions']); + } + + if (1 === \count($packages)) { + return $packages[0]; + } + + return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); + } + + /** + * Returns a list of all package names with a specific type e.g. 'library' + * + * @param string $type + * @return string[] + * @psalm-return list + */ + public static function getInstalledPackagesByType($type) + { + $packagesByType = array(); + + foreach (self::getInstalled() as $installed) { + foreach ($installed['versions'] as $name => $package) { + if (isset($package['type']) && $package['type'] === $type) { + $packagesByType[] = $name; + } + } + } + + return $packagesByType; + } + + /** + * Checks whether the given package is installed + * + * This also returns true if the package name is provided or replaced by another package + * + * @param string $packageName + * @param bool $includeDevRequirements + * @return bool + */ + public static function isInstalled($packageName, $includeDevRequirements = true) + { + foreach (self::getInstalled() as $installed) { + if (isset($installed['versions'][$packageName])) { + return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; + } + } + + return false; + } + + /** + * Checks whether the given package satisfies a version constraint + * + * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: + * + * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') + * + * @param VersionParser $parser Install composer/semver to have access to this class and functionality + * @param string $packageName + * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package + * @return bool + */ + public static function satisfies(VersionParser $parser, $packageName, $constraint) + { + $constraint = $parser->parseConstraints((string) $constraint); + $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); + + return $provided->matches($constraint); + } + + /** + * Returns a version constraint representing all the range(s) which are installed for a given package + * + * It is easier to use this via isInstalled() with the $constraint argument if you need to check + * whether a given version of a package is installed, and not just whether it exists + * + * @param string $packageName + * @return string Version constraint usable with composer/semver + */ + public static function getVersionRanges($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + $ranges = array(); + if (isset($installed['versions'][$packageName]['pretty_version'])) { + $ranges[] = $installed['versions'][$packageName]['pretty_version']; + } + if (array_key_exists('aliases', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); + } + if (array_key_exists('replaced', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); + } + if (array_key_exists('provided', $installed['versions'][$packageName])) { + $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); + } + + return implode(' || ', $ranges); + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['version'])) { + return null; + } + + return $installed['versions'][$packageName]['version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present + */ + public static function getPrettyVersion($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['pretty_version'])) { + return null; + } + + return $installed['versions'][$packageName]['pretty_version']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference + */ + public static function getReference($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + if (!isset($installed['versions'][$packageName]['reference'])) { + return null; + } + + return $installed['versions'][$packageName]['reference']; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @param string $packageName + * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. + */ + public static function getInstallPath($packageName) + { + foreach (self::getInstalled() as $installed) { + if (!isset($installed['versions'][$packageName])) { + continue; + } + + return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; + } + + throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); + } + + /** + * @return array + * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} + */ + public static function getRootPackage() + { + $installed = self::getInstalled(); + + return $installed[0]['root']; + } + + /** + * Returns the raw installed.php data for custom implementations + * + * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. + * @return array[] + * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} + */ + public static function getRawData() + { + @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + self::$installed = include __DIR__ . '/installed.php'; + } else { + self::$installed = array(); + } + } + + return self::$installed; + } + + /** + * Returns the raw data of all installed.php which are currently loaded for custom implementations + * + * @return array[] + * @psalm-return list}> + */ + public static function getAllRawData() + { + return self::getInstalled(); + } + + /** + * Lets you reload the static array from another file + * + * This is only useful for complex integrations in which a project needs to use + * this class but then also needs to execute another project's autoloader in process, + * and wants to ensure both projects have access to their version of installed.php. + * + * A typical case would be PHPUnit, where it would need to make sure it reads all + * the data it needs from this class, then call reload() with + * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure + * the project in which it runs can then also use this class safely, without + * interference between PHPUnit's dependencies and the project's dependencies. + * + * @param array[] $data A vendor/composer/installed.php data set + * @return void + * + * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data + */ + public static function reload($data) + { + self::$installed = $data; + self::$installedByVendor = array(); + } + + /** + * @return array[] + * @psalm-return list}> + */ + private static function getInstalled() + { + if (null === self::$canGetVendors) { + self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); + } + + $installed = array(); + + if (self::$canGetVendors) { + foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { + if (isset(self::$installedByVendor[$vendorDir])) { + $installed[] = self::$installedByVendor[$vendorDir]; + } elseif (is_file($vendorDir.'/composer/installed.php')) { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require $vendorDir.'/composer/installed.php'; + $installed[] = self::$installedByVendor[$vendorDir] = $required; + if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { + self::$installed = $installed[count($installed) - 1]; + } + } + } + } + + if (null === self::$installed) { + // only require the installed.php file if this file is loaded from its dumped location, + // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 + if (substr(__DIR__, -8, 1) !== 'C') { + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require __DIR__ . '/installed.php'; + self::$installed = $required; + } else { + self::$installed = array(); + } + } + + if (self::$installed !== array()) { + $installed[] = self::$installed; + } + + return $installed; + } +} diff --git a/Sources/vendor/composer/LICENSE b/Sources/vendor/composer/LICENSE new file mode 100644 index 00000000..f27399a0 --- /dev/null +++ b/Sources/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +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/Sources/vendor/composer/autoload_classmap.php b/Sources/vendor/composer/autoload_classmap.php new file mode 100644 index 00000000..0fb0a2c1 --- /dev/null +++ b/Sources/vendor/composer/autoload_classmap.php @@ -0,0 +1,10 @@ + $vendorDir . '/composer/InstalledVersions.php', +); diff --git a/Sources/vendor/composer/autoload_files.php b/Sources/vendor/composer/autoload_files.php new file mode 100644 index 00000000..c64234b5 --- /dev/null +++ b/Sources/vendor/composer/autoload_files.php @@ -0,0 +1,11 @@ + $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', + '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', +); diff --git a/Sources/vendor/composer/autoload_namespaces.php b/Sources/vendor/composer/autoload_namespaces.php new file mode 100644 index 00000000..15a2ff3a --- /dev/null +++ b/Sources/vendor/composer/autoload_namespaces.php @@ -0,0 +1,9 @@ + array($baseDir . '/src/utils'), + 'Twig\\' => array($vendorDir . '/twig/twig/src'), + 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), + 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), + 'Service\\' => array($baseDir . '/src/core/network/service'), + 'Router\\' => array($baseDir . '/src/shared/router'), + 'Response\\' => array($baseDir . '/src/shared/response'), + 'Request\\' => array($baseDir . '/src/shared/request'), + 'Repository\\' => array($baseDir . '/src/core/repository'), + 'Core\\' => array($baseDir . '/src/core'), + 'Controller\\' => array($baseDir . '/src/controller'), + 'App\\' => array($baseDir . '/src'), +); diff --git a/Sources/vendor/composer/autoload_real.php b/Sources/vendor/composer/autoload_real.php new file mode 100644 index 00000000..6a48a027 --- /dev/null +++ b/Sources/vendor/composer/autoload_real.php @@ -0,0 +1,50 @@ +register(true); + + $filesToLoad = \Composer\Autoload\ComposerStaticInit420147ec9d8ca086267ab4a8dc6cab80::$files; + $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + + require $file; + } + }, null, null); + foreach ($filesToLoad as $fileIdentifier => $file) { + $requireFile($fileIdentifier, $file); + } + + return $loader; + } +} diff --git a/Sources/vendor/composer/autoload_static.php b/Sources/vendor/composer/autoload_static.php new file mode 100644 index 00000000..37cd9380 --- /dev/null +++ b/Sources/vendor/composer/autoload_static.php @@ -0,0 +1,111 @@ + __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', + '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', + ); + + public static $prefixLengthsPsr4 = array ( + 'U' => + array ( + 'Utils\\' => 6, + ), + 'T' => + array ( + 'Twig\\' => 5, + ), + 'S' => + array ( + 'Symfony\\Polyfill\\Mbstring\\' => 26, + 'Symfony\\Polyfill\\Ctype\\' => 23, + 'Service\\' => 8, + ), + 'R' => + array ( + 'Router\\' => 7, + 'Response\\' => 9, + 'Request\\' => 8, + 'Repository\\' => 11, + ), + 'C' => + array ( + 'Core\\' => 5, + 'Controller\\' => 11, + ), + 'A' => + array ( + 'App\\' => 4, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'Utils\\' => + array ( + 0 => __DIR__ . '/../..' . '/src/utils', + ), + 'Twig\\' => + array ( + 0 => __DIR__ . '/..' . '/twig/twig/src', + ), + 'Symfony\\Polyfill\\Mbstring\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring', + ), + 'Symfony\\Polyfill\\Ctype\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-ctype', + ), + 'Service\\' => + array ( + 0 => __DIR__ . '/../..' . '/src/core/network/service', + ), + 'Router\\' => + array ( + 0 => __DIR__ . '/../..' . '/src/shared/router', + ), + 'Response\\' => + array ( + 0 => __DIR__ . '/../..' . '/src/shared/response', + ), + 'Request\\' => + array ( + 0 => __DIR__ . '/../..' . '/src/shared/request', + ), + 'Repository\\' => + array ( + 0 => __DIR__ . '/../..' . '/src/core/repository', + ), + 'Core\\' => + array ( + 0 => __DIR__ . '/../..' . '/src/core', + ), + 'Controller\\' => + array ( + 0 => __DIR__ . '/../..' . '/src/controller', + ), + 'App\\' => + array ( + 0 => __DIR__ . '/../..' . '/src', + ), + ); + + public static $classMap = array ( + 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInit420147ec9d8ca086267ab4a8dc6cab80::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit420147ec9d8ca086267ab4a8dc6cab80::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInit420147ec9d8ca086267ab4a8dc6cab80::$classMap; + + }, null, ClassLoader::class); + } +} diff --git a/Sources/vendor/composer/installed.json b/Sources/vendor/composer/installed.json new file mode 100644 index 00000000..61ded2b4 --- /dev/null +++ b/Sources/vendor/composer/installed.json @@ -0,0 +1,251 @@ +{ + "packages": [ + { + "name": "symfony/polyfill-ctype", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "time": "2023-01-26T09:26:14+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-ctype" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "42292d99c55abe617799667f454222c54c60e229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", + "reference": "42292d99c55abe617799667f454222c54c60e229", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "time": "2023-07-28T09:04:16+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-mbstring" + }, + { + "name": "twig/twig", + "version": "v3.7.1", + "version_normalized": "3.7.1.0", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "a0ce373a0ca3bf6c64b9e3e2124aca502ba39554" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/a0ce373a0ca3bf6c64b9e3e2124aca502ba39554", + "reference": "a0ce373a0ca3bf6c64b9e3e2124aca502ba39554", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-mbstring": "^1.3" + }, + "require-dev": { + "psr/container": "^1.0|^2.0", + "symfony/phpunit-bridge": "^5.4.9|^6.3" + }, + "time": "2023-08-28T11:09:02+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Twig\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "https://twig.symfony.com", + "keywords": [ + "templating" + ], + "support": { + "issues": "https://github.com/twigphp/Twig/issues", + "source": "https://github.com/twigphp/Twig/tree/v3.7.1" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/twig/twig", + "type": "tidelift" + } + ], + "install-path": "../twig/twig" + } + ], + "dev": true, + "dev-package-names": [] +} diff --git a/Sources/vendor/composer/installed.php b/Sources/vendor/composer/installed.php new file mode 100644 index 00000000..9a029d43 --- /dev/null +++ b/Sources/vendor/composer/installed.php @@ -0,0 +1,50 @@ + array( + 'name' => 'hearttrack/package', + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'reference' => '3d31abede6b4ca97fe664ffedb59608d3a6f0e7e', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev' => true, + ), + 'versions' => array( + 'hearttrack/package' => array( + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'reference' => '3d31abede6b4ca97fe664ffedb59608d3a6f0e7e', + 'type' => 'library', + 'install_path' => __DIR__ . '/../../', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/polyfill-ctype' => array( + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => 'ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'symfony/polyfill-mbstring' => array( + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => '42292d99c55abe617799667f454222c54c60e229', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'twig/twig' => array( + 'pretty_version' => 'v3.7.1', + 'version' => '3.7.1.0', + 'reference' => 'a0ce373a0ca3bf6c64b9e3e2124aca502ba39554', + 'type' => 'library', + 'install_path' => __DIR__ . '/../twig/twig', + 'aliases' => array(), + 'dev_requirement' => false, + ), + ), +); diff --git a/Sources/vendor/composer/platform_check.php b/Sources/vendor/composer/platform_check.php new file mode 100644 index 00000000..a8b98d5c --- /dev/null +++ b/Sources/vendor/composer/platform_check.php @@ -0,0 +1,26 @@ += 70205)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.5". You are running ' . PHP_VERSION . '.'; +} + +if ($issues) { + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); + } elseif (!headers_sent()) { + echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; + } + } + trigger_error( + 'Composer detected issues in your platform: ' . implode(' ', $issues), + E_USER_ERROR + ); +} diff --git a/Sources/vendor/symfony/polyfill-ctype/Ctype.php b/Sources/vendor/symfony/polyfill-ctype/Ctype.php new file mode 100644 index 00000000..ba75a2c9 --- /dev/null +++ b/Sources/vendor/symfony/polyfill-ctype/Ctype.php @@ -0,0 +1,232 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Ctype; + +/** + * Ctype implementation through regex. + * + * @internal + * + * @author Gert de Pagter + */ +final class Ctype +{ + /** + * Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise. + * + * @see https://php.net/ctype-alnum + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_alnum($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text); + } + + /** + * Returns TRUE if every character in text is a letter, FALSE otherwise. + * + * @see https://php.net/ctype-alpha + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_alpha($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text); + } + + /** + * Returns TRUE if every character in text is a control character from the current locale, FALSE otherwise. + * + * @see https://php.net/ctype-cntrl + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_cntrl($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^\x00-\x1f\x7f]/', $text); + } + + /** + * Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise. + * + * @see https://php.net/ctype-digit + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_digit($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text); + } + + /** + * Returns TRUE if every character in text is printable and actually creates visible output (no white space), FALSE otherwise. + * + * @see https://php.net/ctype-graph + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_graph($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text); + } + + /** + * Returns TRUE if every character in text is a lowercase letter. + * + * @see https://php.net/ctype-lower + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_lower($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text); + } + + /** + * Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if text contains control characters or characters that do not have any output or control function at all. + * + * @see https://php.net/ctype-print + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_print($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text); + } + + /** + * Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise. + * + * @see https://php.net/ctype-punct + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_punct($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^!-\/\:-@\[-`\{-~]/', $text); + } + + /** + * Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters. + * + * @see https://php.net/ctype-space + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_space($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^\s]/', $text); + } + + /** + * Returns TRUE if every character in text is an uppercase letter. + * + * @see https://php.net/ctype-upper + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_upper($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text); + } + + /** + * Returns TRUE if every character in text is a hexadecimal 'digit', that is a decimal digit or a character from [A-Fa-f] , FALSE otherwise. + * + * @see https://php.net/ctype-xdigit + * + * @param mixed $text + * + * @return bool + */ + public static function ctype_xdigit($text) + { + $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__); + + return \is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text); + } + + /** + * Converts integers to their char versions according to normal ctype behaviour, if needed. + * + * If an integer between -128 and 255 inclusive is provided, + * it is interpreted as the ASCII value of a single character + * (negative values have 256 added in order to allow characters in the Extended ASCII range). + * Any other integer is interpreted as a string containing the decimal digits of the integer. + * + * @param mixed $int + * @param string $function + * + * @return mixed + */ + private static function convert_int_to_char_for_ctype($int, $function) + { + if (!\is_int($int)) { + return $int; + } + + if ($int < -128 || $int > 255) { + return (string) $int; + } + + if (\PHP_VERSION_ID >= 80100) { + @trigger_error($function.'(): Argument of type int will be interpreted as string in the future', \E_USER_DEPRECATED); + } + + if ($int < 0) { + $int += 256; + } + + return \chr($int); + } +} diff --git a/Sources/vendor/symfony/polyfill-ctype/LICENSE b/Sources/vendor/symfony/polyfill-ctype/LICENSE new file mode 100644 index 00000000..7536caea --- /dev/null +++ b/Sources/vendor/symfony/polyfill-ctype/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2018-present Fabien Potencier + +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/Sources/vendor/symfony/polyfill-ctype/README.md b/Sources/vendor/symfony/polyfill-ctype/README.md new file mode 100644 index 00000000..b144d03c --- /dev/null +++ b/Sources/vendor/symfony/polyfill-ctype/README.md @@ -0,0 +1,12 @@ +Symfony Polyfill / Ctype +======================== + +This component provides `ctype_*` functions to users who run php versions without the ctype extension. + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/Sources/vendor/symfony/polyfill-ctype/bootstrap.php b/Sources/vendor/symfony/polyfill-ctype/bootstrap.php new file mode 100644 index 00000000..d54524b3 --- /dev/null +++ b/Sources/vendor/symfony/polyfill-ctype/bootstrap.php @@ -0,0 +1,50 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Ctype as p; + +if (\PHP_VERSION_ID >= 80000) { + return require __DIR__.'/bootstrap80.php'; +} + +if (!function_exists('ctype_alnum')) { + function ctype_alnum($text) { return p\Ctype::ctype_alnum($text); } +} +if (!function_exists('ctype_alpha')) { + function ctype_alpha($text) { return p\Ctype::ctype_alpha($text); } +} +if (!function_exists('ctype_cntrl')) { + function ctype_cntrl($text) { return p\Ctype::ctype_cntrl($text); } +} +if (!function_exists('ctype_digit')) { + function ctype_digit($text) { return p\Ctype::ctype_digit($text); } +} +if (!function_exists('ctype_graph')) { + function ctype_graph($text) { return p\Ctype::ctype_graph($text); } +} +if (!function_exists('ctype_lower')) { + function ctype_lower($text) { return p\Ctype::ctype_lower($text); } +} +if (!function_exists('ctype_print')) { + function ctype_print($text) { return p\Ctype::ctype_print($text); } +} +if (!function_exists('ctype_punct')) { + function ctype_punct($text) { return p\Ctype::ctype_punct($text); } +} +if (!function_exists('ctype_space')) { + function ctype_space($text) { return p\Ctype::ctype_space($text); } +} +if (!function_exists('ctype_upper')) { + function ctype_upper($text) { return p\Ctype::ctype_upper($text); } +} +if (!function_exists('ctype_xdigit')) { + function ctype_xdigit($text) { return p\Ctype::ctype_xdigit($text); } +} diff --git a/Sources/vendor/symfony/polyfill-ctype/bootstrap80.php b/Sources/vendor/symfony/polyfill-ctype/bootstrap80.php new file mode 100644 index 00000000..ab2f8611 --- /dev/null +++ b/Sources/vendor/symfony/polyfill-ctype/bootstrap80.php @@ -0,0 +1,46 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Ctype as p; + +if (!function_exists('ctype_alnum')) { + function ctype_alnum(mixed $text): bool { return p\Ctype::ctype_alnum($text); } +} +if (!function_exists('ctype_alpha')) { + function ctype_alpha(mixed $text): bool { return p\Ctype::ctype_alpha($text); } +} +if (!function_exists('ctype_cntrl')) { + function ctype_cntrl(mixed $text): bool { return p\Ctype::ctype_cntrl($text); } +} +if (!function_exists('ctype_digit')) { + function ctype_digit(mixed $text): bool { return p\Ctype::ctype_digit($text); } +} +if (!function_exists('ctype_graph')) { + function ctype_graph(mixed $text): bool { return p\Ctype::ctype_graph($text); } +} +if (!function_exists('ctype_lower')) { + function ctype_lower(mixed $text): bool { return p\Ctype::ctype_lower($text); } +} +if (!function_exists('ctype_print')) { + function ctype_print(mixed $text): bool { return p\Ctype::ctype_print($text); } +} +if (!function_exists('ctype_punct')) { + function ctype_punct(mixed $text): bool { return p\Ctype::ctype_punct($text); } +} +if (!function_exists('ctype_space')) { + function ctype_space(mixed $text): bool { return p\Ctype::ctype_space($text); } +} +if (!function_exists('ctype_upper')) { + function ctype_upper(mixed $text): bool { return p\Ctype::ctype_upper($text); } +} +if (!function_exists('ctype_xdigit')) { + function ctype_xdigit(mixed $text): bool { return p\Ctype::ctype_xdigit($text); } +} diff --git a/Sources/vendor/symfony/polyfill-ctype/composer.json b/Sources/vendor/symfony/polyfill-ctype/composer.json new file mode 100644 index 00000000..e5c978f1 --- /dev/null +++ b/Sources/vendor/symfony/polyfill-ctype/composer.json @@ -0,0 +1,41 @@ +{ + "name": "symfony/polyfill-ctype", + "type": "library", + "description": "Symfony polyfill for ctype functions", + "keywords": ["polyfill", "compatibility", "portable", "ctype"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" }, + "files": [ "bootstrap.php" ] + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + } +} diff --git a/Sources/vendor/symfony/polyfill-mbstring/LICENSE b/Sources/vendor/symfony/polyfill-mbstring/LICENSE new file mode 100644 index 00000000..6e3afce6 --- /dev/null +++ b/Sources/vendor/symfony/polyfill-mbstring/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015-present Fabien Potencier + +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/Sources/vendor/symfony/polyfill-mbstring/Mbstring.php b/Sources/vendor/symfony/polyfill-mbstring/Mbstring.php new file mode 100644 index 00000000..2e0b9694 --- /dev/null +++ b/Sources/vendor/symfony/polyfill-mbstring/Mbstring.php @@ -0,0 +1,947 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Mbstring; + +/** + * Partial mbstring implementation in PHP, iconv based, UTF-8 centric. + * + * Implemented: + * - mb_chr - Returns a specific character from its Unicode code point + * - mb_convert_encoding - Convert character encoding + * - mb_convert_variables - Convert character code in variable(s) + * - mb_decode_mimeheader - Decode string in MIME header field + * - mb_encode_mimeheader - Encode string for MIME header XXX NATIVE IMPLEMENTATION IS REALLY BUGGED + * - mb_decode_numericentity - Decode HTML numeric string reference to character + * - mb_encode_numericentity - Encode character to HTML numeric string reference + * - mb_convert_case - Perform case folding on a string + * - mb_detect_encoding - Detect character encoding + * - mb_get_info - Get internal settings of mbstring + * - mb_http_input - Detect HTTP input character encoding + * - mb_http_output - Set/Get HTTP output character encoding + * - mb_internal_encoding - Set/Get internal character encoding + * - mb_list_encodings - Returns an array of all supported encodings + * - mb_ord - Returns the Unicode code point of a character + * - mb_output_handler - Callback function converts character encoding in output buffer + * - mb_scrub - Replaces ill-formed byte sequences with substitute characters + * - mb_strlen - Get string length + * - mb_strpos - Find position of first occurrence of string in a string + * - mb_strrpos - Find position of last occurrence of a string in a string + * - mb_str_split - Convert a string to an array + * - mb_strtolower - Make a string lowercase + * - mb_strtoupper - Make a string uppercase + * - mb_substitute_character - Set/Get substitution character + * - mb_substr - Get part of string + * - mb_stripos - Finds position of first occurrence of a string within another, case insensitive + * - mb_stristr - Finds first occurrence of a string within another, case insensitive + * - mb_strrchr - Finds the last occurrence of a character in a string within another + * - mb_strrichr - Finds the last occurrence of a character in a string within another, case insensitive + * - mb_strripos - Finds position of last occurrence of a string within another, case insensitive + * - mb_strstr - Finds first occurrence of a string within another + * - mb_strwidth - Return width of string + * - mb_substr_count - Count the number of substring occurrences + * + * Not implemented: + * - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more) + * - mb_ereg_* - Regular expression with multibyte support + * - mb_parse_str - Parse GET/POST/COOKIE data and set global variable + * - mb_preferred_mime_name - Get MIME charset string + * - mb_regex_encoding - Returns current encoding for multibyte regex as string + * - mb_regex_set_options - Set/Get the default options for mbregex functions + * - mb_send_mail - Send encoded mail + * - mb_split - Split multibyte string using regular expression + * - mb_strcut - Get part of string + * - mb_strimwidth - Get truncated string with specified width + * + * @author Nicolas Grekas + * + * @internal + */ +final class Mbstring +{ + public const MB_CASE_FOLD = \PHP_INT_MAX; + + private const SIMPLE_CASE_FOLD = [ + ['µ', 'ſ', "\xCD\x85", 'ς', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"], + ['μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', "\xE1\xB9\xA1", 'ι'], + ]; + + private static $encodingList = ['ASCII', 'UTF-8']; + private static $language = 'neutral'; + private static $internalEncoding = 'UTF-8'; + + public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null) + { + if (\is_array($fromEncoding) || (null !== $fromEncoding && false !== strpos($fromEncoding, ','))) { + $fromEncoding = self::mb_detect_encoding($s, $fromEncoding); + } else { + $fromEncoding = self::getEncoding($fromEncoding); + } + + $toEncoding = self::getEncoding($toEncoding); + + if ('BASE64' === $fromEncoding) { + $s = base64_decode($s); + $fromEncoding = $toEncoding; + } + + if ('BASE64' === $toEncoding) { + return base64_encode($s); + } + + if ('HTML-ENTITIES' === $toEncoding || 'HTML' === $toEncoding) { + if ('HTML-ENTITIES' === $fromEncoding || 'HTML' === $fromEncoding) { + $fromEncoding = 'Windows-1252'; + } + if ('UTF-8' !== $fromEncoding) { + $s = iconv($fromEncoding, 'UTF-8//IGNORE', $s); + } + + return preg_replace_callback('/[\x80-\xFF]+/', [__CLASS__, 'html_encoding_callback'], $s); + } + + if ('HTML-ENTITIES' === $fromEncoding) { + $s = html_entity_decode($s, \ENT_COMPAT, 'UTF-8'); + $fromEncoding = 'UTF-8'; + } + + return iconv($fromEncoding, $toEncoding.'//IGNORE', $s); + } + + public static function mb_convert_variables($toEncoding, $fromEncoding, &...$vars) + { + $ok = true; + array_walk_recursive($vars, function (&$v) use (&$ok, $toEncoding, $fromEncoding) { + if (false === $v = self::mb_convert_encoding($v, $toEncoding, $fromEncoding)) { + $ok = false; + } + }); + + return $ok ? $fromEncoding : false; + } + + public static function mb_decode_mimeheader($s) + { + return iconv_mime_decode($s, 2, self::$internalEncoding); + } + + public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null) + { + trigger_error('mb_encode_mimeheader() is bugged. Please use iconv_mime_encode() instead', \E_USER_WARNING); + } + + public static function mb_decode_numericentity($s, $convmap, $encoding = null) + { + if (null !== $s && !\is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) { + trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING); + + return null; + } + + if (!\is_array($convmap) || (80000 > \PHP_VERSION_ID && !$convmap)) { + return false; + } + + if (null !== $encoding && !\is_scalar($encoding)) { + trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING); + + return ''; // Instead of null (cf. mb_encode_numericentity). + } + + $s = (string) $s; + if ('' === $s) { + return ''; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $s)) { + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); + } + } else { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + $cnt = floor(\count($convmap) / 4) * 4; + + for ($i = 0; $i < $cnt; $i += 4) { + // collector_decode_htmlnumericentity ignores $convmap[$i + 3] + $convmap[$i] += $convmap[$i + 2]; + $convmap[$i + 1] += $convmap[$i + 2]; + } + + $s = preg_replace_callback('/&#(?:0*([0-9]+)|x0*([0-9a-fA-F]+))(?!&);?/', function (array $m) use ($cnt, $convmap) { + $c = isset($m[2]) ? (int) hexdec($m[2]) : $m[1]; + for ($i = 0; $i < $cnt; $i += 4) { + if ($c >= $convmap[$i] && $c <= $convmap[$i + 1]) { + return self::mb_chr($c - $convmap[$i + 2]); + } + } + + return $m[0]; + }, $s); + + if (null === $encoding) { + return $s; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $s); + } + + public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false) + { + if (null !== $s && !\is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) { + trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING); + + return null; + } + + if (!\is_array($convmap) || (80000 > \PHP_VERSION_ID && !$convmap)) { + return false; + } + + if (null !== $encoding && !\is_scalar($encoding)) { + trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING); + + return null; // Instead of '' (cf. mb_decode_numericentity). + } + + if (null !== $is_hex && !\is_scalar($is_hex)) { + trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', \E_USER_WARNING); + + return null; + } + + $s = (string) $s; + if ('' === $s) { + return ''; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $s)) { + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); + } + } else { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4]; + + $cnt = floor(\count($convmap) / 4) * 4; + $i = 0; + $len = \strlen($s); + $result = ''; + + while ($i < $len) { + $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; + $uchr = substr($s, $i, $ulen); + $i += $ulen; + $c = self::mb_ord($uchr); + + for ($j = 0; $j < $cnt; $j += 4) { + if ($c >= $convmap[$j] && $c <= $convmap[$j + 1]) { + $cOffset = ($c + $convmap[$j + 2]) & $convmap[$j + 3]; + $result .= $is_hex ? sprintf('&#x%X;', $cOffset) : '&#'.$cOffset.';'; + continue 2; + } + } + $result .= $uchr; + } + + if (null === $encoding) { + return $result; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $result); + } + + public static function mb_convert_case($s, $mode, $encoding = null) + { + $s = (string) $s; + if ('' === $s) { + return ''; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $s)) { + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); + } + } else { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + if (\MB_CASE_TITLE == $mode) { + static $titleRegexp = null; + if (null === $titleRegexp) { + $titleRegexp = self::getData('titleCaseRegexp'); + } + $s = preg_replace_callback($titleRegexp, [__CLASS__, 'title_case'], $s); + } else { + if (\MB_CASE_UPPER == $mode) { + static $upper = null; + if (null === $upper) { + $upper = self::getData('upperCase'); + } + $map = $upper; + } else { + if (self::MB_CASE_FOLD === $mode) { + static $caseFolding = null; + if (null === $caseFolding) { + $caseFolding = self::getData('caseFolding'); + } + $s = strtr($s, $caseFolding); + } + + static $lower = null; + if (null === $lower) { + $lower = self::getData('lowerCase'); + } + $map = $lower; + } + + static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4]; + + $i = 0; + $len = \strlen($s); + + while ($i < $len) { + $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; + $uchr = substr($s, $i, $ulen); + $i += $ulen; + + if (isset($map[$uchr])) { + $uchr = $map[$uchr]; + $nlen = \strlen($uchr); + + if ($nlen == $ulen) { + $nlen = $i; + do { + $s[--$nlen] = $uchr[--$ulen]; + } while ($ulen); + } else { + $s = substr_replace($s, $uchr, $i - $ulen, $ulen); + $len += $nlen - $ulen; + $i += $nlen - $ulen; + } + } + } + } + + if (null === $encoding) { + return $s; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $s); + } + + public static function mb_internal_encoding($encoding = null) + { + if (null === $encoding) { + return self::$internalEncoding; + } + + $normalizedEncoding = self::getEncoding($encoding); + + if ('UTF-8' === $normalizedEncoding || false !== @iconv($normalizedEncoding, $normalizedEncoding, ' ')) { + self::$internalEncoding = $normalizedEncoding; + + return true; + } + + if (80000 > \PHP_VERSION_ID) { + return false; + } + + throw new \ValueError(sprintf('Argument #1 ($encoding) must be a valid encoding, "%s" given', $encoding)); + } + + public static function mb_language($lang = null) + { + if (null === $lang) { + return self::$language; + } + + switch ($normalizedLang = strtolower($lang)) { + case 'uni': + case 'neutral': + self::$language = $normalizedLang; + + return true; + } + + if (80000 > \PHP_VERSION_ID) { + return false; + } + + throw new \ValueError(sprintf('Argument #1 ($language) must be a valid language, "%s" given', $lang)); + } + + public static function mb_list_encodings() + { + return ['UTF-8']; + } + + public static function mb_encoding_aliases($encoding) + { + switch (strtoupper($encoding)) { + case 'UTF8': + case 'UTF-8': + return ['utf8']; + } + + return false; + } + + public static function mb_check_encoding($var = null, $encoding = null) + { + if (PHP_VERSION_ID < 70200 && \is_array($var)) { + trigger_error('mb_check_encoding() expects parameter 1 to be string, array given', \E_USER_WARNING); + + return null; + } + + if (null === $encoding) { + if (null === $var) { + return false; + } + $encoding = self::$internalEncoding; + } + + if (!\is_array($var)) { + return self::mb_detect_encoding($var, [$encoding]) || false !== @iconv($encoding, $encoding, $var); + } + + foreach ($var as $key => $value) { + if (!self::mb_check_encoding($key, $encoding)) { + return false; + } + if (!self::mb_check_encoding($value, $encoding)) { + return false; + } + } + + return true; + + } + + public static function mb_detect_encoding($str, $encodingList = null, $strict = false) + { + if (null === $encodingList) { + $encodingList = self::$encodingList; + } else { + if (!\is_array($encodingList)) { + $encodingList = array_map('trim', explode(',', $encodingList)); + } + $encodingList = array_map('strtoupper', $encodingList); + } + + foreach ($encodingList as $enc) { + switch ($enc) { + case 'ASCII': + if (!preg_match('/[\x80-\xFF]/', $str)) { + return $enc; + } + break; + + case 'UTF8': + case 'UTF-8': + if (preg_match('//u', $str)) { + return 'UTF-8'; + } + break; + + default: + if (0 === strncmp($enc, 'ISO-8859-', 9)) { + return $enc; + } + } + } + + return false; + } + + public static function mb_detect_order($encodingList = null) + { + if (null === $encodingList) { + return self::$encodingList; + } + + if (!\is_array($encodingList)) { + $encodingList = array_map('trim', explode(',', $encodingList)); + } + $encodingList = array_map('strtoupper', $encodingList); + + foreach ($encodingList as $enc) { + switch ($enc) { + default: + if (strncmp($enc, 'ISO-8859-', 9)) { + return false; + } + // no break + case 'ASCII': + case 'UTF8': + case 'UTF-8': + } + } + + self::$encodingList = $encodingList; + + return true; + } + + public static function mb_strlen($s, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return \strlen($s); + } + + return @iconv_strlen($s, $encoding); + } + + public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return strpos($haystack, $needle, $offset); + } + + $needle = (string) $needle; + if ('' === $needle) { + if (80000 > \PHP_VERSION_ID) { + trigger_error(__METHOD__.': Empty delimiter', \E_USER_WARNING); + + return false; + } + + return 0; + } + + return iconv_strpos($haystack, $needle, $offset, $encoding); + } + + public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return strrpos($haystack, $needle, $offset); + } + + if ($offset != (int) $offset) { + $offset = 0; + } elseif ($offset = (int) $offset) { + if ($offset < 0) { + if (0 > $offset += self::mb_strlen($needle)) { + $haystack = self::mb_substr($haystack, 0, $offset, $encoding); + } + $offset = 0; + } else { + $haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding); + } + } + + $pos = '' !== $needle || 80000 > \PHP_VERSION_ID + ? iconv_strrpos($haystack, $needle, $encoding) + : self::mb_strlen($haystack, $encoding); + + return false !== $pos ? $offset + $pos : false; + } + + public static function mb_str_split($string, $split_length = 1, $encoding = null) + { + if (null !== $string && !\is_scalar($string) && !(\is_object($string) && method_exists($string, '__toString'))) { + trigger_error('mb_str_split() expects parameter 1 to be string, '.\gettype($string).' given', \E_USER_WARNING); + + return null; + } + + if (1 > $split_length = (int) $split_length) { + if (80000 > \PHP_VERSION_ID) { + trigger_error('The length of each segment must be greater than zero', \E_USER_WARNING); + + return false; + } + + throw new \ValueError('Argument #2 ($length) must be greater than 0'); + } + + if (null === $encoding) { + $encoding = mb_internal_encoding(); + } + + if ('UTF-8' === $encoding = self::getEncoding($encoding)) { + $rx = '/('; + while (65535 < $split_length) { + $rx .= '.{65535}'; + $split_length -= 65535; + } + $rx .= '.{'.$split_length.'})/us'; + + return preg_split($rx, $string, -1, \PREG_SPLIT_DELIM_CAPTURE | \PREG_SPLIT_NO_EMPTY); + } + + $result = []; + $length = mb_strlen($string, $encoding); + + for ($i = 0; $i < $length; $i += $split_length) { + $result[] = mb_substr($string, $i, $split_length, $encoding); + } + + return $result; + } + + public static function mb_strtolower($s, $encoding = null) + { + return self::mb_convert_case($s, \MB_CASE_LOWER, $encoding); + } + + public static function mb_strtoupper($s, $encoding = null) + { + return self::mb_convert_case($s, \MB_CASE_UPPER, $encoding); + } + + public static function mb_substitute_character($c = null) + { + if (null === $c) { + return 'none'; + } + if (0 === strcasecmp($c, 'none')) { + return true; + } + if (80000 > \PHP_VERSION_ID) { + return false; + } + if (\is_int($c) || 'long' === $c || 'entity' === $c) { + return false; + } + + throw new \ValueError('Argument #1 ($substitute_character) must be "none", "long", "entity" or a valid codepoint'); + } + + public static function mb_substr($s, $start, $length = null, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return (string) substr($s, $start, null === $length ? 2147483647 : $length); + } + + if ($start < 0) { + $start = iconv_strlen($s, $encoding) + $start; + if ($start < 0) { + $start = 0; + } + } + + if (null === $length) { + $length = 2147483647; + } elseif ($length < 0) { + $length = iconv_strlen($s, $encoding) + $length - $start; + if ($length < 0) { + return ''; + } + } + + return (string) iconv_substr($s, $start, $length, $encoding); + } + + public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) + { + [$haystack, $needle] = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], [ + self::mb_convert_case($haystack, \MB_CASE_LOWER, $encoding), + self::mb_convert_case($needle, \MB_CASE_LOWER, $encoding), + ]); + + return self::mb_strpos($haystack, $needle, $offset, $encoding); + } + + public static function mb_stristr($haystack, $needle, $part = false, $encoding = null) + { + $pos = self::mb_stripos($haystack, $needle, 0, $encoding); + + return self::getSubpart($pos, $part, $haystack, $encoding); + } + + public static function mb_strrchr($haystack, $needle, $part = false, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + $pos = strrpos($haystack, $needle); + } else { + $needle = self::mb_substr($needle, 0, 1, $encoding); + $pos = iconv_strrpos($haystack, $needle, $encoding); + } + + return self::getSubpart($pos, $part, $haystack, $encoding); + } + + public static function mb_strrichr($haystack, $needle, $part = false, $encoding = null) + { + $needle = self::mb_substr($needle, 0, 1, $encoding); + $pos = self::mb_strripos($haystack, $needle, $encoding); + + return self::getSubpart($pos, $part, $haystack, $encoding); + } + + public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null) + { + $haystack = self::mb_convert_case($haystack, \MB_CASE_LOWER, $encoding); + $needle = self::mb_convert_case($needle, \MB_CASE_LOWER, $encoding); + + $haystack = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], $haystack); + $needle = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], $needle); + + return self::mb_strrpos($haystack, $needle, $offset, $encoding); + } + + public static function mb_strstr($haystack, $needle, $part = false, $encoding = null) + { + $pos = strpos($haystack, $needle); + if (false === $pos) { + return false; + } + if ($part) { + return substr($haystack, 0, $pos); + } + + return substr($haystack, $pos); + } + + public static function mb_get_info($type = 'all') + { + $info = [ + 'internal_encoding' => self::$internalEncoding, + 'http_output' => 'pass', + 'http_output_conv_mimetypes' => '^(text/|application/xhtml\+xml)', + 'func_overload' => 0, + 'func_overload_list' => 'no overload', + 'mail_charset' => 'UTF-8', + 'mail_header_encoding' => 'BASE64', + 'mail_body_encoding' => 'BASE64', + 'illegal_chars' => 0, + 'encoding_translation' => 'Off', + 'language' => self::$language, + 'detect_order' => self::$encodingList, + 'substitute_character' => 'none', + 'strict_detection' => 'Off', + ]; + + if ('all' === $type) { + return $info; + } + if (isset($info[$type])) { + return $info[$type]; + } + + return false; + } + + public static function mb_http_input($type = '') + { + return false; + } + + public static function mb_http_output($encoding = null) + { + return null !== $encoding ? 'pass' === $encoding : 'pass'; + } + + public static function mb_strwidth($s, $encoding = null) + { + $encoding = self::getEncoding($encoding); + + if ('UTF-8' !== $encoding) { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + $s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide); + + return ($wide << 1) + iconv_strlen($s, 'UTF-8'); + } + + public static function mb_substr_count($haystack, $needle, $encoding = null) + { + return substr_count($haystack, $needle); + } + + public static function mb_output_handler($contents, $status) + { + return $contents; + } + + public static function mb_chr($code, $encoding = null) + { + if (0x80 > $code %= 0x200000) { + $s = \chr($code); + } elseif (0x800 > $code) { + $s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F); + } elseif (0x10000 > $code) { + $s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); + } else { + $s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); + } + + if ('UTF-8' !== $encoding = self::getEncoding($encoding)) { + $s = mb_convert_encoding($s, $encoding, 'UTF-8'); + } + + return $s; + } + + public static function mb_ord($s, $encoding = null) + { + if ('UTF-8' !== $encoding = self::getEncoding($encoding)) { + $s = mb_convert_encoding($s, 'UTF-8', $encoding); + } + + if (1 === \strlen($s)) { + return \ord($s); + } + + $code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0; + if (0xF0 <= $code) { + return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80; + } + if (0xE0 <= $code) { + return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80; + } + if (0xC0 <= $code) { + return (($code - 0xC0) << 6) + $s[2] - 0x80; + } + + return $code; + } + + public static function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = \STR_PAD_RIGHT, string $encoding = null): string + { + if (!\in_array($pad_type, [\STR_PAD_RIGHT, \STR_PAD_LEFT, \STR_PAD_BOTH], true)) { + throw new \ValueError('mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH'); + } + + if (null === $encoding) { + $encoding = self::mb_internal_encoding(); + } + + try { + $validEncoding = @self::mb_check_encoding('', $encoding); + } catch (\ValueError $e) { + throw new \ValueError(sprintf('mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given', $encoding)); + } + + // BC for PHP 7.3 and lower + if (!$validEncoding) { + throw new \ValueError(sprintf('mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given', $encoding)); + } + + if (self::mb_strlen($pad_string, $encoding) <= 0) { + throw new \ValueError('mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string'); + } + + $paddingRequired = $length - self::mb_strlen($string, $encoding); + + if ($paddingRequired < 1) { + return $string; + } + + switch ($pad_type) { + case \STR_PAD_LEFT: + return self::mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding).$string; + case \STR_PAD_RIGHT: + return $string.self::mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding); + default: + $leftPaddingLength = floor($paddingRequired / 2); + $rightPaddingLength = $paddingRequired - $leftPaddingLength; + + return self::mb_substr(str_repeat($pad_string, $leftPaddingLength), 0, $leftPaddingLength, $encoding).$string.self::mb_substr(str_repeat($pad_string, $rightPaddingLength), 0, $rightPaddingLength, $encoding); + } + } + + private static function getSubpart($pos, $part, $haystack, $encoding) + { + if (false === $pos) { + return false; + } + if ($part) { + return self::mb_substr($haystack, 0, $pos, $encoding); + } + + return self::mb_substr($haystack, $pos, null, $encoding); + } + + private static function html_encoding_callback(array $m) + { + $i = 1; + $entities = ''; + $m = unpack('C*', htmlentities($m[0], \ENT_COMPAT, 'UTF-8')); + + while (isset($m[$i])) { + if (0x80 > $m[$i]) { + $entities .= \chr($m[$i++]); + continue; + } + if (0xF0 <= $m[$i]) { + $c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80; + } elseif (0xE0 <= $m[$i]) { + $c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80; + } else { + $c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80; + } + + $entities .= '&#'.$c.';'; + } + + return $entities; + } + + private static function title_case(array $s) + { + return self::mb_convert_case($s[1], \MB_CASE_UPPER, 'UTF-8').self::mb_convert_case($s[2], \MB_CASE_LOWER, 'UTF-8'); + } + + private static function getData($file) + { + if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) { + return require $file; + } + + return false; + } + + private static function getEncoding($encoding) + { + if (null === $encoding) { + return self::$internalEncoding; + } + + if ('UTF-8' === $encoding) { + return 'UTF-8'; + } + + $encoding = strtoupper($encoding); + + if ('8BIT' === $encoding || 'BINARY' === $encoding) { + return 'CP850'; + } + + if ('UTF8' === $encoding) { + return 'UTF-8'; + } + + return $encoding; + } +} diff --git a/Sources/vendor/symfony/polyfill-mbstring/README.md b/Sources/vendor/symfony/polyfill-mbstring/README.md new file mode 100644 index 00000000..478b40da --- /dev/null +++ b/Sources/vendor/symfony/polyfill-mbstring/README.md @@ -0,0 +1,13 @@ +Symfony Polyfill / Mbstring +=========================== + +This component provides a partial, native PHP implementation for the +[Mbstring](https://php.net/mbstring) extension. + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/Sources/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php b/Sources/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php new file mode 100644 index 00000000..512bba0b --- /dev/null +++ b/Sources/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php @@ -0,0 +1,119 @@ + 'i̇', + 'µ' => 'μ', + 'ſ' => 's', + 'ͅ' => 'ι', + 'ς' => 'σ', + 'ϐ' => 'β', + 'ϑ' => 'θ', + 'ϕ' => 'φ', + 'ϖ' => 'π', + 'ϰ' => 'κ', + 'ϱ' => 'ρ', + 'ϵ' => 'ε', + 'ẛ' => 'ṡ', + 'ι' => 'ι', + 'ß' => 'ss', + 'ʼn' => 'ʼn', + 'ǰ' => 'ǰ', + 'ΐ' => 'ΐ', + 'ΰ' => 'ΰ', + 'և' => 'եւ', + 'ẖ' => 'ẖ', + 'ẗ' => 'ẗ', + 'ẘ' => 'ẘ', + 'ẙ' => 'ẙ', + 'ẚ' => 'aʾ', + 'ẞ' => 'ss', + 'ὐ' => 'ὐ', + 'ὒ' => 'ὒ', + 'ὔ' => 'ὔ', + 'ὖ' => 'ὖ', + 'ᾀ' => 'ἀι', + 'ᾁ' => 'ἁι', + 'ᾂ' => 'ἂι', + 'ᾃ' => 'ἃι', + 'ᾄ' => 'ἄι', + 'ᾅ' => 'ἅι', + 'ᾆ' => 'ἆι', + 'ᾇ' => 'ἇι', + 'ᾈ' => 'ἀι', + 'ᾉ' => 'ἁι', + 'ᾊ' => 'ἂι', + 'ᾋ' => 'ἃι', + 'ᾌ' => 'ἄι', + 'ᾍ' => 'ἅι', + 'ᾎ' => 'ἆι', + 'ᾏ' => 'ἇι', + 'ᾐ' => 'ἠι', + 'ᾑ' => 'ἡι', + 'ᾒ' => 'ἢι', + 'ᾓ' => 'ἣι', + 'ᾔ' => 'ἤι', + 'ᾕ' => 'ἥι', + 'ᾖ' => 'ἦι', + 'ᾗ' => 'ἧι', + 'ᾘ' => 'ἠι', + 'ᾙ' => 'ἡι', + 'ᾚ' => 'ἢι', + 'ᾛ' => 'ἣι', + 'ᾜ' => 'ἤι', + 'ᾝ' => 'ἥι', + 'ᾞ' => 'ἦι', + 'ᾟ' => 'ἧι', + 'ᾠ' => 'ὠι', + 'ᾡ' => 'ὡι', + 'ᾢ' => 'ὢι', + 'ᾣ' => 'ὣι', + 'ᾤ' => 'ὤι', + 'ᾥ' => 'ὥι', + 'ᾦ' => 'ὦι', + 'ᾧ' => 'ὧι', + 'ᾨ' => 'ὠι', + 'ᾩ' => 'ὡι', + 'ᾪ' => 'ὢι', + 'ᾫ' => 'ὣι', + 'ᾬ' => 'ὤι', + 'ᾭ' => 'ὥι', + 'ᾮ' => 'ὦι', + 'ᾯ' => 'ὧι', + 'ᾲ' => 'ὰι', + 'ᾳ' => 'αι', + 'ᾴ' => 'άι', + 'ᾶ' => 'ᾶ', + 'ᾷ' => 'ᾶι', + 'ᾼ' => 'αι', + 'ῂ' => 'ὴι', + 'ῃ' => 'ηι', + 'ῄ' => 'ήι', + 'ῆ' => 'ῆ', + 'ῇ' => 'ῆι', + 'ῌ' => 'ηι', + 'ῒ' => 'ῒ', + 'ῖ' => 'ῖ', + 'ῗ' => 'ῗ', + 'ῢ' => 'ῢ', + 'ῤ' => 'ῤ', + 'ῦ' => 'ῦ', + 'ῧ' => 'ῧ', + 'ῲ' => 'ὼι', + 'ῳ' => 'ωι', + 'ῴ' => 'ώι', + 'ῶ' => 'ῶ', + 'ῷ' => 'ῶι', + 'ῼ' => 'ωι', + 'ff' => 'ff', + 'fi' => 'fi', + 'fl' => 'fl', + 'ffi' => 'ffi', + 'ffl' => 'ffl', + 'ſt' => 'st', + 'st' => 'st', + 'ﬓ' => 'մն', + 'ﬔ' => 'մե', + 'ﬕ' => 'մի', + 'ﬖ' => 'վն', + 'ﬗ' => 'մխ', +]; diff --git a/Sources/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php b/Sources/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php new file mode 100644 index 00000000..fac60b08 --- /dev/null +++ b/Sources/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php @@ -0,0 +1,1397 @@ + 'a', + 'B' => 'b', + 'C' => 'c', + 'D' => 'd', + 'E' => 'e', + 'F' => 'f', + 'G' => 'g', + 'H' => 'h', + 'I' => 'i', + 'J' => 'j', + 'K' => 'k', + 'L' => 'l', + 'M' => 'm', + 'N' => 'n', + 'O' => 'o', + 'P' => 'p', + 'Q' => 'q', + 'R' => 'r', + 'S' => 's', + 'T' => 't', + 'U' => 'u', + 'V' => 'v', + 'W' => 'w', + 'X' => 'x', + 'Y' => 'y', + 'Z' => 'z', + 'À' => 'à', + 'Á' => 'á', + 'Â' => 'â', + 'Ã' => 'ã', + 'Ä' => 'ä', + 'Å' => 'å', + 'Æ' => 'æ', + 'Ç' => 'ç', + 'È' => 'è', + 'É' => 'é', + 'Ê' => 'ê', + 'Ë' => 'ë', + 'Ì' => 'ì', + 'Í' => 'í', + 'Î' => 'î', + 'Ï' => 'ï', + 'Ð' => 'ð', + 'Ñ' => 'ñ', + 'Ò' => 'ò', + 'Ó' => 'ó', + 'Ô' => 'ô', + 'Õ' => 'õ', + 'Ö' => 'ö', + 'Ø' => 'ø', + 'Ù' => 'ù', + 'Ú' => 'ú', + 'Û' => 'û', + 'Ü' => 'ü', + 'Ý' => 'ý', + 'Þ' => 'þ', + 'Ā' => 'ā', + 'Ă' => 'ă', + 'Ą' => 'ą', + 'Ć' => 'ć', + 'Ĉ' => 'ĉ', + 'Ċ' => 'ċ', + 'Č' => 'č', + 'Ď' => 'ď', + 'Đ' => 'đ', + 'Ē' => 'ē', + 'Ĕ' => 'ĕ', + 'Ė' => 'ė', + 'Ę' => 'ę', + 'Ě' => 'ě', + 'Ĝ' => 'ĝ', + 'Ğ' => 'ğ', + 'Ġ' => 'ġ', + 'Ģ' => 'ģ', + 'Ĥ' => 'ĥ', + 'Ħ' => 'ħ', + 'Ĩ' => 'ĩ', + 'Ī' => 'ī', + 'Ĭ' => 'ĭ', + 'Į' => 'į', + 'İ' => 'i̇', + 'IJ' => 'ij', + 'Ĵ' => 'ĵ', + 'Ķ' => 'ķ', + 'Ĺ' => 'ĺ', + 'Ļ' => 'ļ', + 'Ľ' => 'ľ', + 'Ŀ' => 'ŀ', + 'Ł' => 'ł', + 'Ń' => 'ń', + 'Ņ' => 'ņ', + 'Ň' => 'ň', + 'Ŋ' => 'ŋ', + 'Ō' => 'ō', + 'Ŏ' => 'ŏ', + 'Ő' => 'ő', + 'Œ' => 'œ', + 'Ŕ' => 'ŕ', + 'Ŗ' => 'ŗ', + 'Ř' => 'ř', + 'Ś' => 'ś', + 'Ŝ' => 'ŝ', + 'Ş' => 'ş', + 'Š' => 'š', + 'Ţ' => 'ţ', + 'Ť' => 'ť', + 'Ŧ' => 'ŧ', + 'Ũ' => 'ũ', + 'Ū' => 'ū', + 'Ŭ' => 'ŭ', + 'Ů' => 'ů', + 'Ű' => 'ű', + 'Ų' => 'ų', + 'Ŵ' => 'ŵ', + 'Ŷ' => 'ŷ', + 'Ÿ' => 'ÿ', + 'Ź' => 'ź', + 'Ż' => 'ż', + 'Ž' => 'ž', + 'Ɓ' => 'ɓ', + 'Ƃ' => 'ƃ', + 'Ƅ' => 'ƅ', + 'Ɔ' => 'ɔ', + 'Ƈ' => 'ƈ', + 'Ɖ' => 'ɖ', + 'Ɗ' => 'ɗ', + 'Ƌ' => 'ƌ', + 'Ǝ' => 'ǝ', + 'Ə' => 'ə', + 'Ɛ' => 'ɛ', + 'Ƒ' => 'ƒ', + 'Ɠ' => 'ɠ', + 'Ɣ' => 'ɣ', + 'Ɩ' => 'ɩ', + 'Ɨ' => 'ɨ', + 'Ƙ' => 'ƙ', + 'Ɯ' => 'ɯ', + 'Ɲ' => 'ɲ', + 'Ɵ' => 'ɵ', + 'Ơ' => 'ơ', + 'Ƣ' => 'ƣ', + 'Ƥ' => 'ƥ', + 'Ʀ' => 'ʀ', + 'Ƨ' => 'ƨ', + 'Ʃ' => 'ʃ', + 'Ƭ' => 'ƭ', + 'Ʈ' => 'ʈ', + 'Ư' => 'ư', + 'Ʊ' => 'ʊ', + 'Ʋ' => 'ʋ', + 'Ƴ' => 'ƴ', + 'Ƶ' => 'ƶ', + 'Ʒ' => 'ʒ', + 'Ƹ' => 'ƹ', + 'Ƽ' => 'ƽ', + 'DŽ' => 'dž', + 'Dž' => 'dž', + 'LJ' => 'lj', + 'Lj' => 'lj', + 'NJ' => 'nj', + 'Nj' => 'nj', + 'Ǎ' => 'ǎ', + 'Ǐ' => 'ǐ', + 'Ǒ' => 'ǒ', + 'Ǔ' => 'ǔ', + 'Ǖ' => 'ǖ', + 'Ǘ' => 'ǘ', + 'Ǚ' => 'ǚ', + 'Ǜ' => 'ǜ', + 'Ǟ' => 'ǟ', + 'Ǡ' => 'ǡ', + 'Ǣ' => 'ǣ', + 'Ǥ' => 'ǥ', + 'Ǧ' => 'ǧ', + 'Ǩ' => 'ǩ', + 'Ǫ' => 'ǫ', + 'Ǭ' => 'ǭ', + 'Ǯ' => 'ǯ', + 'DZ' => 'dz', + 'Dz' => 'dz', + 'Ǵ' => 'ǵ', + 'Ƕ' => 'ƕ', + 'Ƿ' => 'ƿ', + 'Ǹ' => 'ǹ', + 'Ǻ' => 'ǻ', + 'Ǽ' => 'ǽ', + 'Ǿ' => 'ǿ', + 'Ȁ' => 'ȁ', + 'Ȃ' => 'ȃ', + 'Ȅ' => 'ȅ', + 'Ȇ' => 'ȇ', + 'Ȉ' => 'ȉ', + 'Ȋ' => 'ȋ', + 'Ȍ' => 'ȍ', + 'Ȏ' => 'ȏ', + 'Ȑ' => 'ȑ', + 'Ȓ' => 'ȓ', + 'Ȕ' => 'ȕ', + 'Ȗ' => 'ȗ', + 'Ș' => 'ș', + 'Ț' => 'ț', + 'Ȝ' => 'ȝ', + 'Ȟ' => 'ȟ', + 'Ƞ' => 'ƞ', + 'Ȣ' => 'ȣ', + 'Ȥ' => 'ȥ', + 'Ȧ' => 'ȧ', + 'Ȩ' => 'ȩ', + 'Ȫ' => 'ȫ', + 'Ȭ' => 'ȭ', + 'Ȯ' => 'ȯ', + 'Ȱ' => 'ȱ', + 'Ȳ' => 'ȳ', + 'Ⱥ' => 'ⱥ', + 'Ȼ' => 'ȼ', + 'Ƚ' => 'ƚ', + 'Ⱦ' => 'ⱦ', + 'Ɂ' => 'ɂ', + 'Ƀ' => 'ƀ', + 'Ʉ' => 'ʉ', + 'Ʌ' => 'ʌ', + 'Ɇ' => 'ɇ', + 'Ɉ' => 'ɉ', + 'Ɋ' => 'ɋ', + 'Ɍ' => 'ɍ', + 'Ɏ' => 'ɏ', + 'Ͱ' => 'ͱ', + 'Ͳ' => 'ͳ', + 'Ͷ' => 'ͷ', + 'Ϳ' => 'ϳ', + 'Ά' => 'ά', + 'Έ' => 'έ', + 'Ή' => 'ή', + 'Ί' => 'ί', + 'Ό' => 'ό', + 'Ύ' => 'ύ', + 'Ώ' => 'ώ', + 'Α' => 'α', + 'Β' => 'β', + 'Γ' => 'γ', + 'Δ' => 'δ', + 'Ε' => 'ε', + 'Ζ' => 'ζ', + 'Η' => 'η', + 'Θ' => 'θ', + 'Ι' => 'ι', + 'Κ' => 'κ', + 'Λ' => 'λ', + 'Μ' => 'μ', + 'Ν' => 'ν', + 'Ξ' => 'ξ', + 'Ο' => 'ο', + 'Π' => 'π', + 'Ρ' => 'ρ', + 'Σ' => 'σ', + 'Τ' => 'τ', + 'Υ' => 'υ', + 'Φ' => 'φ', + 'Χ' => 'χ', + 'Ψ' => 'ψ', + 'Ω' => 'ω', + 'Ϊ' => 'ϊ', + 'Ϋ' => 'ϋ', + 'Ϗ' => 'ϗ', + 'Ϙ' => 'ϙ', + 'Ϛ' => 'ϛ', + 'Ϝ' => 'ϝ', + 'Ϟ' => 'ϟ', + 'Ϡ' => 'ϡ', + 'Ϣ' => 'ϣ', + 'Ϥ' => 'ϥ', + 'Ϧ' => 'ϧ', + 'Ϩ' => 'ϩ', + 'Ϫ' => 'ϫ', + 'Ϭ' => 'ϭ', + 'Ϯ' => 'ϯ', + 'ϴ' => 'θ', + 'Ϸ' => 'ϸ', + 'Ϲ' => 'ϲ', + 'Ϻ' => 'ϻ', + 'Ͻ' => 'ͻ', + 'Ͼ' => 'ͼ', + 'Ͽ' => 'ͽ', + 'Ѐ' => 'ѐ', + 'Ё' => 'ё', + 'Ђ' => 'ђ', + 'Ѓ' => 'ѓ', + 'Є' => 'є', + 'Ѕ' => 'ѕ', + 'І' => 'і', + 'Ї' => 'ї', + 'Ј' => 'ј', + 'Љ' => 'љ', + 'Њ' => 'њ', + 'Ћ' => 'ћ', + 'Ќ' => 'ќ', + 'Ѝ' => 'ѝ', + 'Ў' => 'ў', + 'Џ' => 'џ', + 'А' => 'а', + 'Б' => 'б', + 'В' => 'в', + 'Г' => 'г', + 'Д' => 'д', + 'Е' => 'е', + 'Ж' => 'ж', + 'З' => 'з', + 'И' => 'и', + 'Й' => 'й', + 'К' => 'к', + 'Л' => 'л', + 'М' => 'м', + 'Н' => 'н', + 'О' => 'о', + 'П' => 'п', + 'Р' => 'р', + 'С' => 'с', + 'Т' => 'т', + 'У' => 'у', + 'Ф' => 'ф', + 'Х' => 'х', + 'Ц' => 'ц', + 'Ч' => 'ч', + 'Ш' => 'ш', + 'Щ' => 'щ', + 'Ъ' => 'ъ', + 'Ы' => 'ы', + 'Ь' => 'ь', + 'Э' => 'э', + 'Ю' => 'ю', + 'Я' => 'я', + 'Ѡ' => 'ѡ', + 'Ѣ' => 'ѣ', + 'Ѥ' => 'ѥ', + 'Ѧ' => 'ѧ', + 'Ѩ' => 'ѩ', + 'Ѫ' => 'ѫ', + 'Ѭ' => 'ѭ', + 'Ѯ' => 'ѯ', + 'Ѱ' => 'ѱ', + 'Ѳ' => 'ѳ', + 'Ѵ' => 'ѵ', + 'Ѷ' => 'ѷ', + 'Ѹ' => 'ѹ', + 'Ѻ' => 'ѻ', + 'Ѽ' => 'ѽ', + 'Ѿ' => 'ѿ', + 'Ҁ' => 'ҁ', + 'Ҋ' => 'ҋ', + 'Ҍ' => 'ҍ', + 'Ҏ' => 'ҏ', + 'Ґ' => 'ґ', + 'Ғ' => 'ғ', + 'Ҕ' => 'ҕ', + 'Җ' => 'җ', + 'Ҙ' => 'ҙ', + 'Қ' => 'қ', + 'Ҝ' => 'ҝ', + 'Ҟ' => 'ҟ', + 'Ҡ' => 'ҡ', + 'Ң' => 'ң', + 'Ҥ' => 'ҥ', + 'Ҧ' => 'ҧ', + 'Ҩ' => 'ҩ', + 'Ҫ' => 'ҫ', + 'Ҭ' => 'ҭ', + 'Ү' => 'ү', + 'Ұ' => 'ұ', + 'Ҳ' => 'ҳ', + 'Ҵ' => 'ҵ', + 'Ҷ' => 'ҷ', + 'Ҹ' => 'ҹ', + 'Һ' => 'һ', + 'Ҽ' => 'ҽ', + 'Ҿ' => 'ҿ', + 'Ӏ' => 'ӏ', + 'Ӂ' => 'ӂ', + 'Ӄ' => 'ӄ', + 'Ӆ' => 'ӆ', + 'Ӈ' => 'ӈ', + 'Ӊ' => 'ӊ', + 'Ӌ' => 'ӌ', + 'Ӎ' => 'ӎ', + 'Ӑ' => 'ӑ', + 'Ӓ' => 'ӓ', + 'Ӕ' => 'ӕ', + 'Ӗ' => 'ӗ', + 'Ә' => 'ә', + 'Ӛ' => 'ӛ', + 'Ӝ' => 'ӝ', + 'Ӟ' => 'ӟ', + 'Ӡ' => 'ӡ', + 'Ӣ' => 'ӣ', + 'Ӥ' => 'ӥ', + 'Ӧ' => 'ӧ', + 'Ө' => 'ө', + 'Ӫ' => 'ӫ', + 'Ӭ' => 'ӭ', + 'Ӯ' => 'ӯ', + 'Ӱ' => 'ӱ', + 'Ӳ' => 'ӳ', + 'Ӵ' => 'ӵ', + 'Ӷ' => 'ӷ', + 'Ӹ' => 'ӹ', + 'Ӻ' => 'ӻ', + 'Ӽ' => 'ӽ', + 'Ӿ' => 'ӿ', + 'Ԁ' => 'ԁ', + 'Ԃ' => 'ԃ', + 'Ԅ' => 'ԅ', + 'Ԇ' => 'ԇ', + 'Ԉ' => 'ԉ', + 'Ԋ' => 'ԋ', + 'Ԍ' => 'ԍ', + 'Ԏ' => 'ԏ', + 'Ԑ' => 'ԑ', + 'Ԓ' => 'ԓ', + 'Ԕ' => 'ԕ', + 'Ԗ' => 'ԗ', + 'Ԙ' => 'ԙ', + 'Ԛ' => 'ԛ', + 'Ԝ' => 'ԝ', + 'Ԟ' => 'ԟ', + 'Ԡ' => 'ԡ', + 'Ԣ' => 'ԣ', + 'Ԥ' => 'ԥ', + 'Ԧ' => 'ԧ', + 'Ԩ' => 'ԩ', + 'Ԫ' => 'ԫ', + 'Ԭ' => 'ԭ', + 'Ԯ' => 'ԯ', + 'Ա' => 'ա', + 'Բ' => 'բ', + 'Գ' => 'գ', + 'Դ' => 'դ', + 'Ե' => 'ե', + 'Զ' => 'զ', + 'Է' => 'է', + 'Ը' => 'ը', + 'Թ' => 'թ', + 'Ժ' => 'ժ', + 'Ի' => 'ի', + 'Լ' => 'լ', + 'Խ' => 'խ', + 'Ծ' => 'ծ', + 'Կ' => 'կ', + 'Հ' => 'հ', + 'Ձ' => 'ձ', + 'Ղ' => 'ղ', + 'Ճ' => 'ճ', + 'Մ' => 'մ', + 'Յ' => 'յ', + 'Ն' => 'ն', + 'Շ' => 'շ', + 'Ո' => 'ո', + 'Չ' => 'չ', + 'Պ' => 'պ', + 'Ջ' => 'ջ', + 'Ռ' => 'ռ', + 'Ս' => 'ս', + 'Վ' => 'վ', + 'Տ' => 'տ', + 'Ր' => 'ր', + 'Ց' => 'ց', + 'Ւ' => 'ւ', + 'Փ' => 'փ', + 'Ք' => 'ք', + 'Օ' => 'օ', + 'Ֆ' => 'ֆ', + 'Ⴀ' => 'ⴀ', + 'Ⴁ' => 'ⴁ', + 'Ⴂ' => 'ⴂ', + 'Ⴃ' => 'ⴃ', + 'Ⴄ' => 'ⴄ', + 'Ⴅ' => 'ⴅ', + 'Ⴆ' => 'ⴆ', + 'Ⴇ' => 'ⴇ', + 'Ⴈ' => 'ⴈ', + 'Ⴉ' => 'ⴉ', + 'Ⴊ' => 'ⴊ', + 'Ⴋ' => 'ⴋ', + 'Ⴌ' => 'ⴌ', + 'Ⴍ' => 'ⴍ', + 'Ⴎ' => 'ⴎ', + 'Ⴏ' => 'ⴏ', + 'Ⴐ' => 'ⴐ', + 'Ⴑ' => 'ⴑ', + 'Ⴒ' => 'ⴒ', + 'Ⴓ' => 'ⴓ', + 'Ⴔ' => 'ⴔ', + 'Ⴕ' => 'ⴕ', + 'Ⴖ' => 'ⴖ', + 'Ⴗ' => 'ⴗ', + 'Ⴘ' => 'ⴘ', + 'Ⴙ' => 'ⴙ', + 'Ⴚ' => 'ⴚ', + 'Ⴛ' => 'ⴛ', + 'Ⴜ' => 'ⴜ', + 'Ⴝ' => 'ⴝ', + 'Ⴞ' => 'ⴞ', + 'Ⴟ' => 'ⴟ', + 'Ⴠ' => 'ⴠ', + 'Ⴡ' => 'ⴡ', + 'Ⴢ' => 'ⴢ', + 'Ⴣ' => 'ⴣ', + 'Ⴤ' => 'ⴤ', + 'Ⴥ' => 'ⴥ', + 'Ⴧ' => 'ⴧ', + 'Ⴭ' => 'ⴭ', + 'Ꭰ' => 'ꭰ', + 'Ꭱ' => 'ꭱ', + 'Ꭲ' => 'ꭲ', + 'Ꭳ' => 'ꭳ', + 'Ꭴ' => 'ꭴ', + 'Ꭵ' => 'ꭵ', + 'Ꭶ' => 'ꭶ', + 'Ꭷ' => 'ꭷ', + 'Ꭸ' => 'ꭸ', + 'Ꭹ' => 'ꭹ', + 'Ꭺ' => 'ꭺ', + 'Ꭻ' => 'ꭻ', + 'Ꭼ' => 'ꭼ', + 'Ꭽ' => 'ꭽ', + 'Ꭾ' => 'ꭾ', + 'Ꭿ' => 'ꭿ', + 'Ꮀ' => 'ꮀ', + 'Ꮁ' => 'ꮁ', + 'Ꮂ' => 'ꮂ', + 'Ꮃ' => 'ꮃ', + 'Ꮄ' => 'ꮄ', + 'Ꮅ' => 'ꮅ', + 'Ꮆ' => 'ꮆ', + 'Ꮇ' => 'ꮇ', + 'Ꮈ' => 'ꮈ', + 'Ꮉ' => 'ꮉ', + 'Ꮊ' => 'ꮊ', + 'Ꮋ' => 'ꮋ', + 'Ꮌ' => 'ꮌ', + 'Ꮍ' => 'ꮍ', + 'Ꮎ' => 'ꮎ', + 'Ꮏ' => 'ꮏ', + 'Ꮐ' => 'ꮐ', + 'Ꮑ' => 'ꮑ', + 'Ꮒ' => 'ꮒ', + 'Ꮓ' => 'ꮓ', + 'Ꮔ' => 'ꮔ', + 'Ꮕ' => 'ꮕ', + 'Ꮖ' => 'ꮖ', + 'Ꮗ' => 'ꮗ', + 'Ꮘ' => 'ꮘ', + 'Ꮙ' => 'ꮙ', + 'Ꮚ' => 'ꮚ', + 'Ꮛ' => 'ꮛ', + 'Ꮜ' => 'ꮜ', + 'Ꮝ' => 'ꮝ', + 'Ꮞ' => 'ꮞ', + 'Ꮟ' => 'ꮟ', + 'Ꮠ' => 'ꮠ', + 'Ꮡ' => 'ꮡ', + 'Ꮢ' => 'ꮢ', + 'Ꮣ' => 'ꮣ', + 'Ꮤ' => 'ꮤ', + 'Ꮥ' => 'ꮥ', + 'Ꮦ' => 'ꮦ', + 'Ꮧ' => 'ꮧ', + 'Ꮨ' => 'ꮨ', + 'Ꮩ' => 'ꮩ', + 'Ꮪ' => 'ꮪ', + 'Ꮫ' => 'ꮫ', + 'Ꮬ' => 'ꮬ', + 'Ꮭ' => 'ꮭ', + 'Ꮮ' => 'ꮮ', + 'Ꮯ' => 'ꮯ', + 'Ꮰ' => 'ꮰ', + 'Ꮱ' => 'ꮱ', + 'Ꮲ' => 'ꮲ', + 'Ꮳ' => 'ꮳ', + 'Ꮴ' => 'ꮴ', + 'Ꮵ' => 'ꮵ', + 'Ꮶ' => 'ꮶ', + 'Ꮷ' => 'ꮷ', + 'Ꮸ' => 'ꮸ', + 'Ꮹ' => 'ꮹ', + 'Ꮺ' => 'ꮺ', + 'Ꮻ' => 'ꮻ', + 'Ꮼ' => 'ꮼ', + 'Ꮽ' => 'ꮽ', + 'Ꮾ' => 'ꮾ', + 'Ꮿ' => 'ꮿ', + 'Ᏸ' => 'ᏸ', + 'Ᏹ' => 'ᏹ', + 'Ᏺ' => 'ᏺ', + 'Ᏻ' => 'ᏻ', + 'Ᏼ' => 'ᏼ', + 'Ᏽ' => 'ᏽ', + 'Ა' => 'ა', + 'Ბ' => 'ბ', + 'Გ' => 'გ', + 'Დ' => 'დ', + 'Ე' => 'ე', + 'Ვ' => 'ვ', + 'Ზ' => 'ზ', + 'Თ' => 'თ', + 'Ი' => 'ი', + 'Კ' => 'კ', + 'Ლ' => 'ლ', + 'Მ' => 'მ', + 'Ნ' => 'ნ', + 'Ო' => 'ო', + 'Პ' => 'პ', + 'Ჟ' => 'ჟ', + 'Რ' => 'რ', + 'Ს' => 'ს', + 'Ტ' => 'ტ', + 'Უ' => 'უ', + 'Ფ' => 'ფ', + 'Ქ' => 'ქ', + 'Ღ' => 'ღ', + 'Ყ' => 'ყ', + 'Შ' => 'შ', + 'Ჩ' => 'ჩ', + 'Ც' => 'ც', + 'Ძ' => 'ძ', + 'Წ' => 'წ', + 'Ჭ' => 'ჭ', + 'Ხ' => 'ხ', + 'Ჯ' => 'ჯ', + 'Ჰ' => 'ჰ', + 'Ჱ' => 'ჱ', + 'Ჲ' => 'ჲ', + 'Ჳ' => 'ჳ', + 'Ჴ' => 'ჴ', + 'Ჵ' => 'ჵ', + 'Ჶ' => 'ჶ', + 'Ჷ' => 'ჷ', + 'Ჸ' => 'ჸ', + 'Ჹ' => 'ჹ', + 'Ჺ' => 'ჺ', + 'Ჽ' => 'ჽ', + 'Ჾ' => 'ჾ', + 'Ჿ' => 'ჿ', + 'Ḁ' => 'ḁ', + 'Ḃ' => 'ḃ', + 'Ḅ' => 'ḅ', + 'Ḇ' => 'ḇ', + 'Ḉ' => 'ḉ', + 'Ḋ' => 'ḋ', + 'Ḍ' => 'ḍ', + 'Ḏ' => 'ḏ', + 'Ḑ' => 'ḑ', + 'Ḓ' => 'ḓ', + 'Ḕ' => 'ḕ', + 'Ḗ' => 'ḗ', + 'Ḙ' => 'ḙ', + 'Ḛ' => 'ḛ', + 'Ḝ' => 'ḝ', + 'Ḟ' => 'ḟ', + 'Ḡ' => 'ḡ', + 'Ḣ' => 'ḣ', + 'Ḥ' => 'ḥ', + 'Ḧ' => 'ḧ', + 'Ḩ' => 'ḩ', + 'Ḫ' => 'ḫ', + 'Ḭ' => 'ḭ', + 'Ḯ' => 'ḯ', + 'Ḱ' => 'ḱ', + 'Ḳ' => 'ḳ', + 'Ḵ' => 'ḵ', + 'Ḷ' => 'ḷ', + 'Ḹ' => 'ḹ', + 'Ḻ' => 'ḻ', + 'Ḽ' => 'ḽ', + 'Ḿ' => 'ḿ', + 'Ṁ' => 'ṁ', + 'Ṃ' => 'ṃ', + 'Ṅ' => 'ṅ', + 'Ṇ' => 'ṇ', + 'Ṉ' => 'ṉ', + 'Ṋ' => 'ṋ', + 'Ṍ' => 'ṍ', + 'Ṏ' => 'ṏ', + 'Ṑ' => 'ṑ', + 'Ṓ' => 'ṓ', + 'Ṕ' => 'ṕ', + 'Ṗ' => 'ṗ', + 'Ṙ' => 'ṙ', + 'Ṛ' => 'ṛ', + 'Ṝ' => 'ṝ', + 'Ṟ' => 'ṟ', + 'Ṡ' => 'ṡ', + 'Ṣ' => 'ṣ', + 'Ṥ' => 'ṥ', + 'Ṧ' => 'ṧ', + 'Ṩ' => 'ṩ', + 'Ṫ' => 'ṫ', + 'Ṭ' => 'ṭ', + 'Ṯ' => 'ṯ', + 'Ṱ' => 'ṱ', + 'Ṳ' => 'ṳ', + 'Ṵ' => 'ṵ', + 'Ṷ' => 'ṷ', + 'Ṹ' => 'ṹ', + 'Ṻ' => 'ṻ', + 'Ṽ' => 'ṽ', + 'Ṿ' => 'ṿ', + 'Ẁ' => 'ẁ', + 'Ẃ' => 'ẃ', + 'Ẅ' => 'ẅ', + 'Ẇ' => 'ẇ', + 'Ẉ' => 'ẉ', + 'Ẋ' => 'ẋ', + 'Ẍ' => 'ẍ', + 'Ẏ' => 'ẏ', + 'Ẑ' => 'ẑ', + 'Ẓ' => 'ẓ', + 'Ẕ' => 'ẕ', + 'ẞ' => 'ß', + 'Ạ' => 'ạ', + 'Ả' => 'ả', + 'Ấ' => 'ấ', + 'Ầ' => 'ầ', + 'Ẩ' => 'ẩ', + 'Ẫ' => 'ẫ', + 'Ậ' => 'ậ', + 'Ắ' => 'ắ', + 'Ằ' => 'ằ', + 'Ẳ' => 'ẳ', + 'Ẵ' => 'ẵ', + 'Ặ' => 'ặ', + 'Ẹ' => 'ẹ', + 'Ẻ' => 'ẻ', + 'Ẽ' => 'ẽ', + 'Ế' => 'ế', + 'Ề' => 'ề', + 'Ể' => 'ể', + 'Ễ' => 'ễ', + 'Ệ' => 'ệ', + 'Ỉ' => 'ỉ', + 'Ị' => 'ị', + 'Ọ' => 'ọ', + 'Ỏ' => 'ỏ', + 'Ố' => 'ố', + 'Ồ' => 'ồ', + 'Ổ' => 'ổ', + 'Ỗ' => 'ỗ', + 'Ộ' => 'ộ', + 'Ớ' => 'ớ', + 'Ờ' => 'ờ', + 'Ở' => 'ở', + 'Ỡ' => 'ỡ', + 'Ợ' => 'ợ', + 'Ụ' => 'ụ', + 'Ủ' => 'ủ', + 'Ứ' => 'ứ', + 'Ừ' => 'ừ', + 'Ử' => 'ử', + 'Ữ' => 'ữ', + 'Ự' => 'ự', + 'Ỳ' => 'ỳ', + 'Ỵ' => 'ỵ', + 'Ỷ' => 'ỷ', + 'Ỹ' => 'ỹ', + 'Ỻ' => 'ỻ', + 'Ỽ' => 'ỽ', + 'Ỿ' => 'ỿ', + 'Ἀ' => 'ἀ', + 'Ἁ' => 'ἁ', + 'Ἂ' => 'ἂ', + 'Ἃ' => 'ἃ', + 'Ἄ' => 'ἄ', + 'Ἅ' => 'ἅ', + 'Ἆ' => 'ἆ', + 'Ἇ' => 'ἇ', + 'Ἐ' => 'ἐ', + 'Ἑ' => 'ἑ', + 'Ἒ' => 'ἒ', + 'Ἓ' => 'ἓ', + 'Ἔ' => 'ἔ', + 'Ἕ' => 'ἕ', + 'Ἠ' => 'ἠ', + 'Ἡ' => 'ἡ', + 'Ἢ' => 'ἢ', + 'Ἣ' => 'ἣ', + 'Ἤ' => 'ἤ', + 'Ἥ' => 'ἥ', + 'Ἦ' => 'ἦ', + 'Ἧ' => 'ἧ', + 'Ἰ' => 'ἰ', + 'Ἱ' => 'ἱ', + 'Ἲ' => 'ἲ', + 'Ἳ' => 'ἳ', + 'Ἴ' => 'ἴ', + 'Ἵ' => 'ἵ', + 'Ἶ' => 'ἶ', + 'Ἷ' => 'ἷ', + 'Ὀ' => 'ὀ', + 'Ὁ' => 'ὁ', + 'Ὂ' => 'ὂ', + 'Ὃ' => 'ὃ', + 'Ὄ' => 'ὄ', + 'Ὅ' => 'ὅ', + 'Ὑ' => 'ὑ', + 'Ὓ' => 'ὓ', + 'Ὕ' => 'ὕ', + 'Ὗ' => 'ὗ', + 'Ὠ' => 'ὠ', + 'Ὡ' => 'ὡ', + 'Ὢ' => 'ὢ', + 'Ὣ' => 'ὣ', + 'Ὤ' => 'ὤ', + 'Ὥ' => 'ὥ', + 'Ὦ' => 'ὦ', + 'Ὧ' => 'ὧ', + 'ᾈ' => 'ᾀ', + 'ᾉ' => 'ᾁ', + 'ᾊ' => 'ᾂ', + 'ᾋ' => 'ᾃ', + 'ᾌ' => 'ᾄ', + 'ᾍ' => 'ᾅ', + 'ᾎ' => 'ᾆ', + 'ᾏ' => 'ᾇ', + 'ᾘ' => 'ᾐ', + 'ᾙ' => 'ᾑ', + 'ᾚ' => 'ᾒ', + 'ᾛ' => 'ᾓ', + 'ᾜ' => 'ᾔ', + 'ᾝ' => 'ᾕ', + 'ᾞ' => 'ᾖ', + 'ᾟ' => 'ᾗ', + 'ᾨ' => 'ᾠ', + 'ᾩ' => 'ᾡ', + 'ᾪ' => 'ᾢ', + 'ᾫ' => 'ᾣ', + 'ᾬ' => 'ᾤ', + 'ᾭ' => 'ᾥ', + 'ᾮ' => 'ᾦ', + 'ᾯ' => 'ᾧ', + 'Ᾰ' => 'ᾰ', + 'Ᾱ' => 'ᾱ', + 'Ὰ' => 'ὰ', + 'Ά' => 'ά', + 'ᾼ' => 'ᾳ', + 'Ὲ' => 'ὲ', + 'Έ' => 'έ', + 'Ὴ' => 'ὴ', + 'Ή' => 'ή', + 'ῌ' => 'ῃ', + 'Ῐ' => 'ῐ', + 'Ῑ' => 'ῑ', + 'Ὶ' => 'ὶ', + 'Ί' => 'ί', + 'Ῠ' => 'ῠ', + 'Ῡ' => 'ῡ', + 'Ὺ' => 'ὺ', + 'Ύ' => 'ύ', + 'Ῥ' => 'ῥ', + 'Ὸ' => 'ὸ', + 'Ό' => 'ό', + 'Ὼ' => 'ὼ', + 'Ώ' => 'ώ', + 'ῼ' => 'ῳ', + 'Ω' => 'ω', + 'K' => 'k', + 'Å' => 'å', + 'Ⅎ' => 'ⅎ', + 'Ⅰ' => 'ⅰ', + 'Ⅱ' => 'ⅱ', + 'Ⅲ' => 'ⅲ', + 'Ⅳ' => 'ⅳ', + 'Ⅴ' => 'ⅴ', + 'Ⅵ' => 'ⅵ', + 'Ⅶ' => 'ⅶ', + 'Ⅷ' => 'ⅷ', + 'Ⅸ' => 'ⅸ', + 'Ⅹ' => 'ⅹ', + 'Ⅺ' => 'ⅺ', + 'Ⅻ' => 'ⅻ', + 'Ⅼ' => 'ⅼ', + 'Ⅽ' => 'ⅽ', + 'Ⅾ' => 'ⅾ', + 'Ⅿ' => 'ⅿ', + 'Ↄ' => 'ↄ', + 'Ⓐ' => 'ⓐ', + 'Ⓑ' => 'ⓑ', + 'Ⓒ' => 'ⓒ', + 'Ⓓ' => 'ⓓ', + 'Ⓔ' => 'ⓔ', + 'Ⓕ' => 'ⓕ', + 'Ⓖ' => 'ⓖ', + 'Ⓗ' => 'ⓗ', + 'Ⓘ' => 'ⓘ', + 'Ⓙ' => 'ⓙ', + 'Ⓚ' => 'ⓚ', + 'Ⓛ' => 'ⓛ', + 'Ⓜ' => 'ⓜ', + 'Ⓝ' => 'ⓝ', + 'Ⓞ' => 'ⓞ', + 'Ⓟ' => 'ⓟ', + 'Ⓠ' => 'ⓠ', + 'Ⓡ' => 'ⓡ', + 'Ⓢ' => 'ⓢ', + 'Ⓣ' => 'ⓣ', + 'Ⓤ' => 'ⓤ', + 'Ⓥ' => 'ⓥ', + 'Ⓦ' => 'ⓦ', + 'Ⓧ' => 'ⓧ', + 'Ⓨ' => 'ⓨ', + 'Ⓩ' => 'ⓩ', + 'Ⰰ' => 'ⰰ', + 'Ⰱ' => 'ⰱ', + 'Ⰲ' => 'ⰲ', + 'Ⰳ' => 'ⰳ', + 'Ⰴ' => 'ⰴ', + 'Ⰵ' => 'ⰵ', + 'Ⰶ' => 'ⰶ', + 'Ⰷ' => 'ⰷ', + 'Ⰸ' => 'ⰸ', + 'Ⰹ' => 'ⰹ', + 'Ⰺ' => 'ⰺ', + 'Ⰻ' => 'ⰻ', + 'Ⰼ' => 'ⰼ', + 'Ⰽ' => 'ⰽ', + 'Ⰾ' => 'ⰾ', + 'Ⰿ' => 'ⰿ', + 'Ⱀ' => 'ⱀ', + 'Ⱁ' => 'ⱁ', + 'Ⱂ' => 'ⱂ', + 'Ⱃ' => 'ⱃ', + 'Ⱄ' => 'ⱄ', + 'Ⱅ' => 'ⱅ', + 'Ⱆ' => 'ⱆ', + 'Ⱇ' => 'ⱇ', + 'Ⱈ' => 'ⱈ', + 'Ⱉ' => 'ⱉ', + 'Ⱊ' => 'ⱊ', + 'Ⱋ' => 'ⱋ', + 'Ⱌ' => 'ⱌ', + 'Ⱍ' => 'ⱍ', + 'Ⱎ' => 'ⱎ', + 'Ⱏ' => 'ⱏ', + 'Ⱐ' => 'ⱐ', + 'Ⱑ' => 'ⱑ', + 'Ⱒ' => 'ⱒ', + 'Ⱓ' => 'ⱓ', + 'Ⱔ' => 'ⱔ', + 'Ⱕ' => 'ⱕ', + 'Ⱖ' => 'ⱖ', + 'Ⱗ' => 'ⱗ', + 'Ⱘ' => 'ⱘ', + 'Ⱙ' => 'ⱙ', + 'Ⱚ' => 'ⱚ', + 'Ⱛ' => 'ⱛ', + 'Ⱜ' => 'ⱜ', + 'Ⱝ' => 'ⱝ', + 'Ⱞ' => 'ⱞ', + 'Ⱡ' => 'ⱡ', + 'Ɫ' => 'ɫ', + 'Ᵽ' => 'ᵽ', + 'Ɽ' => 'ɽ', + 'Ⱨ' => 'ⱨ', + 'Ⱪ' => 'ⱪ', + 'Ⱬ' => 'ⱬ', + 'Ɑ' => 'ɑ', + 'Ɱ' => 'ɱ', + 'Ɐ' => 'ɐ', + 'Ɒ' => 'ɒ', + 'Ⱳ' => 'ⱳ', + 'Ⱶ' => 'ⱶ', + 'Ȿ' => 'ȿ', + 'Ɀ' => 'ɀ', + 'Ⲁ' => 'ⲁ', + 'Ⲃ' => 'ⲃ', + 'Ⲅ' => 'ⲅ', + 'Ⲇ' => 'ⲇ', + 'Ⲉ' => 'ⲉ', + 'Ⲋ' => 'ⲋ', + 'Ⲍ' => 'ⲍ', + 'Ⲏ' => 'ⲏ', + 'Ⲑ' => 'ⲑ', + 'Ⲓ' => 'ⲓ', + 'Ⲕ' => 'ⲕ', + 'Ⲗ' => 'ⲗ', + 'Ⲙ' => 'ⲙ', + 'Ⲛ' => 'ⲛ', + 'Ⲝ' => 'ⲝ', + 'Ⲟ' => 'ⲟ', + 'Ⲡ' => 'ⲡ', + 'Ⲣ' => 'ⲣ', + 'Ⲥ' => 'ⲥ', + 'Ⲧ' => 'ⲧ', + 'Ⲩ' => 'ⲩ', + 'Ⲫ' => 'ⲫ', + 'Ⲭ' => 'ⲭ', + 'Ⲯ' => 'ⲯ', + 'Ⲱ' => 'ⲱ', + 'Ⲳ' => 'ⲳ', + 'Ⲵ' => 'ⲵ', + 'Ⲷ' => 'ⲷ', + 'Ⲹ' => 'ⲹ', + 'Ⲻ' => 'ⲻ', + 'Ⲽ' => 'ⲽ', + 'Ⲿ' => 'ⲿ', + 'Ⳁ' => 'ⳁ', + 'Ⳃ' => 'ⳃ', + 'Ⳅ' => 'ⳅ', + 'Ⳇ' => 'ⳇ', + 'Ⳉ' => 'ⳉ', + 'Ⳋ' => 'ⳋ', + 'Ⳍ' => 'ⳍ', + 'Ⳏ' => 'ⳏ', + 'Ⳑ' => 'ⳑ', + 'Ⳓ' => 'ⳓ', + 'Ⳕ' => 'ⳕ', + 'Ⳗ' => 'ⳗ', + 'Ⳙ' => 'ⳙ', + 'Ⳛ' => 'ⳛ', + 'Ⳝ' => 'ⳝ', + 'Ⳟ' => 'ⳟ', + 'Ⳡ' => 'ⳡ', + 'Ⳣ' => 'ⳣ', + 'Ⳬ' => 'ⳬ', + 'Ⳮ' => 'ⳮ', + 'Ⳳ' => 'ⳳ', + 'Ꙁ' => 'ꙁ', + 'Ꙃ' => 'ꙃ', + 'Ꙅ' => 'ꙅ', + 'Ꙇ' => 'ꙇ', + 'Ꙉ' => 'ꙉ', + 'Ꙋ' => 'ꙋ', + 'Ꙍ' => 'ꙍ', + 'Ꙏ' => 'ꙏ', + 'Ꙑ' => 'ꙑ', + 'Ꙓ' => 'ꙓ', + 'Ꙕ' => 'ꙕ', + 'Ꙗ' => 'ꙗ', + 'Ꙙ' => 'ꙙ', + 'Ꙛ' => 'ꙛ', + 'Ꙝ' => 'ꙝ', + 'Ꙟ' => 'ꙟ', + 'Ꙡ' => 'ꙡ', + 'Ꙣ' => 'ꙣ', + 'Ꙥ' => 'ꙥ', + 'Ꙧ' => 'ꙧ', + 'Ꙩ' => 'ꙩ', + 'Ꙫ' => 'ꙫ', + 'Ꙭ' => 'ꙭ', + 'Ꚁ' => 'ꚁ', + 'Ꚃ' => 'ꚃ', + 'Ꚅ' => 'ꚅ', + 'Ꚇ' => 'ꚇ', + 'Ꚉ' => 'ꚉ', + 'Ꚋ' => 'ꚋ', + 'Ꚍ' => 'ꚍ', + 'Ꚏ' => 'ꚏ', + 'Ꚑ' => 'ꚑ', + 'Ꚓ' => 'ꚓ', + 'Ꚕ' => 'ꚕ', + 'Ꚗ' => 'ꚗ', + 'Ꚙ' => 'ꚙ', + 'Ꚛ' => 'ꚛ', + 'Ꜣ' => 'ꜣ', + 'Ꜥ' => 'ꜥ', + 'Ꜧ' => 'ꜧ', + 'Ꜩ' => 'ꜩ', + 'Ꜫ' => 'ꜫ', + 'Ꜭ' => 'ꜭ', + 'Ꜯ' => 'ꜯ', + 'Ꜳ' => 'ꜳ', + 'Ꜵ' => 'ꜵ', + 'Ꜷ' => 'ꜷ', + 'Ꜹ' => 'ꜹ', + 'Ꜻ' => 'ꜻ', + 'Ꜽ' => 'ꜽ', + 'Ꜿ' => 'ꜿ', + 'Ꝁ' => 'ꝁ', + 'Ꝃ' => 'ꝃ', + 'Ꝅ' => 'ꝅ', + 'Ꝇ' => 'ꝇ', + 'Ꝉ' => 'ꝉ', + 'Ꝋ' => 'ꝋ', + 'Ꝍ' => 'ꝍ', + 'Ꝏ' => 'ꝏ', + 'Ꝑ' => 'ꝑ', + 'Ꝓ' => 'ꝓ', + 'Ꝕ' => 'ꝕ', + 'Ꝗ' => 'ꝗ', + 'Ꝙ' => 'ꝙ', + 'Ꝛ' => 'ꝛ', + 'Ꝝ' => 'ꝝ', + 'Ꝟ' => 'ꝟ', + 'Ꝡ' => 'ꝡ', + 'Ꝣ' => 'ꝣ', + 'Ꝥ' => 'ꝥ', + 'Ꝧ' => 'ꝧ', + 'Ꝩ' => 'ꝩ', + 'Ꝫ' => 'ꝫ', + 'Ꝭ' => 'ꝭ', + 'Ꝯ' => 'ꝯ', + 'Ꝺ' => 'ꝺ', + 'Ꝼ' => 'ꝼ', + 'Ᵹ' => 'ᵹ', + 'Ꝿ' => 'ꝿ', + 'Ꞁ' => 'ꞁ', + 'Ꞃ' => 'ꞃ', + 'Ꞅ' => 'ꞅ', + 'Ꞇ' => 'ꞇ', + 'Ꞌ' => 'ꞌ', + 'Ɥ' => 'ɥ', + 'Ꞑ' => 'ꞑ', + 'Ꞓ' => 'ꞓ', + 'Ꞗ' => 'ꞗ', + 'Ꞙ' => 'ꞙ', + 'Ꞛ' => 'ꞛ', + 'Ꞝ' => 'ꞝ', + 'Ꞟ' => 'ꞟ', + 'Ꞡ' => 'ꞡ', + 'Ꞣ' => 'ꞣ', + 'Ꞥ' => 'ꞥ', + 'Ꞧ' => 'ꞧ', + 'Ꞩ' => 'ꞩ', + 'Ɦ' => 'ɦ', + 'Ɜ' => 'ɜ', + 'Ɡ' => 'ɡ', + 'Ɬ' => 'ɬ', + 'Ɪ' => 'ɪ', + 'Ʞ' => 'ʞ', + 'Ʇ' => 'ʇ', + 'Ʝ' => 'ʝ', + 'Ꭓ' => 'ꭓ', + 'Ꞵ' => 'ꞵ', + 'Ꞷ' => 'ꞷ', + 'Ꞹ' => 'ꞹ', + 'Ꞻ' => 'ꞻ', + 'Ꞽ' => 'ꞽ', + 'Ꞿ' => 'ꞿ', + 'Ꟃ' => 'ꟃ', + 'Ꞔ' => 'ꞔ', + 'Ʂ' => 'ʂ', + 'Ᶎ' => 'ᶎ', + 'Ꟈ' => 'ꟈ', + 'Ꟊ' => 'ꟊ', + 'Ꟶ' => 'ꟶ', + 'A' => 'a', + 'B' => 'b', + 'C' => 'c', + 'D' => 'd', + 'E' => 'e', + 'F' => 'f', + 'G' => 'g', + 'H' => 'h', + 'I' => 'i', + 'J' => 'j', + 'K' => 'k', + 'L' => 'l', + 'M' => 'm', + 'N' => 'n', + 'O' => 'o', + 'P' => 'p', + 'Q' => 'q', + 'R' => 'r', + 'S' => 's', + 'T' => 't', + 'U' => 'u', + 'V' => 'v', + 'W' => 'w', + 'X' => 'x', + 'Y' => 'y', + 'Z' => 'z', + '𐐀' => '𐐨', + '𐐁' => '𐐩', + '𐐂' => '𐐪', + '𐐃' => '𐐫', + '𐐄' => '𐐬', + '𐐅' => '𐐭', + '𐐆' => '𐐮', + '𐐇' => '𐐯', + '𐐈' => '𐐰', + '𐐉' => '𐐱', + '𐐊' => '𐐲', + '𐐋' => '𐐳', + '𐐌' => '𐐴', + '𐐍' => '𐐵', + '𐐎' => '𐐶', + '𐐏' => '𐐷', + '𐐐' => '𐐸', + '𐐑' => '𐐹', + '𐐒' => '𐐺', + '𐐓' => '𐐻', + '𐐔' => '𐐼', + '𐐕' => '𐐽', + '𐐖' => '𐐾', + '𐐗' => '𐐿', + '𐐘' => '𐑀', + '𐐙' => '𐑁', + '𐐚' => '𐑂', + '𐐛' => '𐑃', + '𐐜' => '𐑄', + '𐐝' => '𐑅', + '𐐞' => '𐑆', + '𐐟' => '𐑇', + '𐐠' => '𐑈', + '𐐡' => '𐑉', + '𐐢' => '𐑊', + '𐐣' => '𐑋', + '𐐤' => '𐑌', + '𐐥' => '𐑍', + '𐐦' => '𐑎', + '𐐧' => '𐑏', + '𐒰' => '𐓘', + '𐒱' => '𐓙', + '𐒲' => '𐓚', + '𐒳' => '𐓛', + '𐒴' => '𐓜', + '𐒵' => '𐓝', + '𐒶' => '𐓞', + '𐒷' => '𐓟', + '𐒸' => '𐓠', + '𐒹' => '𐓡', + '𐒺' => '𐓢', + '𐒻' => '𐓣', + '𐒼' => '𐓤', + '𐒽' => '𐓥', + '𐒾' => '𐓦', + '𐒿' => '𐓧', + '𐓀' => '𐓨', + '𐓁' => '𐓩', + '𐓂' => '𐓪', + '𐓃' => '𐓫', + '𐓄' => '𐓬', + '𐓅' => '𐓭', + '𐓆' => '𐓮', + '𐓇' => '𐓯', + '𐓈' => '𐓰', + '𐓉' => '𐓱', + '𐓊' => '𐓲', + '𐓋' => '𐓳', + '𐓌' => '𐓴', + '𐓍' => '𐓵', + '𐓎' => '𐓶', + '𐓏' => '𐓷', + '𐓐' => '𐓸', + '𐓑' => '𐓹', + '𐓒' => '𐓺', + '𐓓' => '𐓻', + '𐲀' => '𐳀', + '𐲁' => '𐳁', + '𐲂' => '𐳂', + '𐲃' => '𐳃', + '𐲄' => '𐳄', + '𐲅' => '𐳅', + '𐲆' => '𐳆', + '𐲇' => '𐳇', + '𐲈' => '𐳈', + '𐲉' => '𐳉', + '𐲊' => '𐳊', + '𐲋' => '𐳋', + '𐲌' => '𐳌', + '𐲍' => '𐳍', + '𐲎' => '𐳎', + '𐲏' => '𐳏', + '𐲐' => '𐳐', + '𐲑' => '𐳑', + '𐲒' => '𐳒', + '𐲓' => '𐳓', + '𐲔' => '𐳔', + '𐲕' => '𐳕', + '𐲖' => '𐳖', + '𐲗' => '𐳗', + '𐲘' => '𐳘', + '𐲙' => '𐳙', + '𐲚' => '𐳚', + '𐲛' => '𐳛', + '𐲜' => '𐳜', + '𐲝' => '𐳝', + '𐲞' => '𐳞', + '𐲟' => '𐳟', + '𐲠' => '𐳠', + '𐲡' => '𐳡', + '𐲢' => '𐳢', + '𐲣' => '𐳣', + '𐲤' => '𐳤', + '𐲥' => '𐳥', + '𐲦' => '𐳦', + '𐲧' => '𐳧', + '𐲨' => '𐳨', + '𐲩' => '𐳩', + '𐲪' => '𐳪', + '𐲫' => '𐳫', + '𐲬' => '𐳬', + '𐲭' => '𐳭', + '𐲮' => '𐳮', + '𐲯' => '𐳯', + '𐲰' => '𐳰', + '𐲱' => '𐳱', + '𐲲' => '𐳲', + '𑢠' => '𑣀', + '𑢡' => '𑣁', + '𑢢' => '𑣂', + '𑢣' => '𑣃', + '𑢤' => '𑣄', + '𑢥' => '𑣅', + '𑢦' => '𑣆', + '𑢧' => '𑣇', + '𑢨' => '𑣈', + '𑢩' => '𑣉', + '𑢪' => '𑣊', + '𑢫' => '𑣋', + '𑢬' => '𑣌', + '𑢭' => '𑣍', + '𑢮' => '𑣎', + '𑢯' => '𑣏', + '𑢰' => '𑣐', + '𑢱' => '𑣑', + '𑢲' => '𑣒', + '𑢳' => '𑣓', + '𑢴' => '𑣔', + '𑢵' => '𑣕', + '𑢶' => '𑣖', + '𑢷' => '𑣗', + '𑢸' => '𑣘', + '𑢹' => '𑣙', + '𑢺' => '𑣚', + '𑢻' => '𑣛', + '𑢼' => '𑣜', + '𑢽' => '𑣝', + '𑢾' => '𑣞', + '𑢿' => '𑣟', + '𖹀' => '𖹠', + '𖹁' => '𖹡', + '𖹂' => '𖹢', + '𖹃' => '𖹣', + '𖹄' => '𖹤', + '𖹅' => '𖹥', + '𖹆' => '𖹦', + '𖹇' => '𖹧', + '𖹈' => '𖹨', + '𖹉' => '𖹩', + '𖹊' => '𖹪', + '𖹋' => '𖹫', + '𖹌' => '𖹬', + '𖹍' => '𖹭', + '𖹎' => '𖹮', + '𖹏' => '𖹯', + '𖹐' => '𖹰', + '𖹑' => '𖹱', + '𖹒' => '𖹲', + '𖹓' => '𖹳', + '𖹔' => '𖹴', + '𖹕' => '𖹵', + '𖹖' => '𖹶', + '𖹗' => '𖹷', + '𖹘' => '𖹸', + '𖹙' => '𖹹', + '𖹚' => '𖹺', + '𖹛' => '𖹻', + '𖹜' => '𖹼', + '𖹝' => '𖹽', + '𖹞' => '𖹾', + '𖹟' => '𖹿', + '𞤀' => '𞤢', + '𞤁' => '𞤣', + '𞤂' => '𞤤', + '𞤃' => '𞤥', + '𞤄' => '𞤦', + '𞤅' => '𞤧', + '𞤆' => '𞤨', + '𞤇' => '𞤩', + '𞤈' => '𞤪', + '𞤉' => '𞤫', + '𞤊' => '𞤬', + '𞤋' => '𞤭', + '𞤌' => '𞤮', + '𞤍' => '𞤯', + '𞤎' => '𞤰', + '𞤏' => '𞤱', + '𞤐' => '𞤲', + '𞤑' => '𞤳', + '𞤒' => '𞤴', + '𞤓' => '𞤵', + '𞤔' => '𞤶', + '𞤕' => '𞤷', + '𞤖' => '𞤸', + '𞤗' => '𞤹', + '𞤘' => '𞤺', + '𞤙' => '𞤻', + '𞤚' => '𞤼', + '𞤛' => '𞤽', + '𞤜' => '𞤾', + '𞤝' => '𞤿', + '𞤞' => '𞥀', + '𞤟' => '𞥁', + '𞤠' => '𞥂', + '𞤡' => '𞥃', +); diff --git a/Sources/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php b/Sources/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php new file mode 100644 index 00000000..2a8f6e73 --- /dev/null +++ b/Sources/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php @@ -0,0 +1,5 @@ + 'A', + 'b' => 'B', + 'c' => 'C', + 'd' => 'D', + 'e' => 'E', + 'f' => 'F', + 'g' => 'G', + 'h' => 'H', + 'i' => 'I', + 'j' => 'J', + 'k' => 'K', + 'l' => 'L', + 'm' => 'M', + 'n' => 'N', + 'o' => 'O', + 'p' => 'P', + 'q' => 'Q', + 'r' => 'R', + 's' => 'S', + 't' => 'T', + 'u' => 'U', + 'v' => 'V', + 'w' => 'W', + 'x' => 'X', + 'y' => 'Y', + 'z' => 'Z', + 'µ' => 'Μ', + 'à' => 'À', + 'á' => 'Á', + 'â' => 'Â', + 'ã' => 'Ã', + 'ä' => 'Ä', + 'å' => 'Å', + 'æ' => 'Æ', + 'ç' => 'Ç', + 'è' => 'È', + 'é' => 'É', + 'ê' => 'Ê', + 'ë' => 'Ë', + 'ì' => 'Ì', + 'í' => 'Í', + 'î' => 'Î', + 'ï' => 'Ï', + 'ð' => 'Ð', + 'ñ' => 'Ñ', + 'ò' => 'Ò', + 'ó' => 'Ó', + 'ô' => 'Ô', + 'õ' => 'Õ', + 'ö' => 'Ö', + 'ø' => 'Ø', + 'ù' => 'Ù', + 'ú' => 'Ú', + 'û' => 'Û', + 'ü' => 'Ü', + 'ý' => 'Ý', + 'þ' => 'Þ', + 'ÿ' => 'Ÿ', + 'ā' => 'Ā', + 'ă' => 'Ă', + 'ą' => 'Ą', + 'ć' => 'Ć', + 'ĉ' => 'Ĉ', + 'ċ' => 'Ċ', + 'č' => 'Č', + 'ď' => 'Ď', + 'đ' => 'Đ', + 'ē' => 'Ē', + 'ĕ' => 'Ĕ', + 'ė' => 'Ė', + 'ę' => 'Ę', + 'ě' => 'Ě', + 'ĝ' => 'Ĝ', + 'ğ' => 'Ğ', + 'ġ' => 'Ġ', + 'ģ' => 'Ģ', + 'ĥ' => 'Ĥ', + 'ħ' => 'Ħ', + 'ĩ' => 'Ĩ', + 'ī' => 'Ī', + 'ĭ' => 'Ĭ', + 'į' => 'Į', + 'ı' => 'I', + 'ij' => 'IJ', + 'ĵ' => 'Ĵ', + 'ķ' => 'Ķ', + 'ĺ' => 'Ĺ', + 'ļ' => 'Ļ', + 'ľ' => 'Ľ', + 'ŀ' => 'Ŀ', + 'ł' => 'Ł', + 'ń' => 'Ń', + 'ņ' => 'Ņ', + 'ň' => 'Ň', + 'ŋ' => 'Ŋ', + 'ō' => 'Ō', + 'ŏ' => 'Ŏ', + 'ő' => 'Ő', + 'œ' => 'Œ', + 'ŕ' => 'Ŕ', + 'ŗ' => 'Ŗ', + 'ř' => 'Ř', + 'ś' => 'Ś', + 'ŝ' => 'Ŝ', + 'ş' => 'Ş', + 'š' => 'Š', + 'ţ' => 'Ţ', + 'ť' => 'Ť', + 'ŧ' => 'Ŧ', + 'ũ' => 'Ũ', + 'ū' => 'Ū', + 'ŭ' => 'Ŭ', + 'ů' => 'Ů', + 'ű' => 'Ű', + 'ų' => 'Ų', + 'ŵ' => 'Ŵ', + 'ŷ' => 'Ŷ', + 'ź' => 'Ź', + 'ż' => 'Ż', + 'ž' => 'Ž', + 'ſ' => 'S', + 'ƀ' => 'Ƀ', + 'ƃ' => 'Ƃ', + 'ƅ' => 'Ƅ', + 'ƈ' => 'Ƈ', + 'ƌ' => 'Ƌ', + 'ƒ' => 'Ƒ', + 'ƕ' => 'Ƕ', + 'ƙ' => 'Ƙ', + 'ƚ' => 'Ƚ', + 'ƞ' => 'Ƞ', + 'ơ' => 'Ơ', + 'ƣ' => 'Ƣ', + 'ƥ' => 'Ƥ', + 'ƨ' => 'Ƨ', + 'ƭ' => 'Ƭ', + 'ư' => 'Ư', + 'ƴ' => 'Ƴ', + 'ƶ' => 'Ƶ', + 'ƹ' => 'Ƹ', + 'ƽ' => 'Ƽ', + 'ƿ' => 'Ƿ', + 'Dž' => 'DŽ', + 'dž' => 'DŽ', + 'Lj' => 'LJ', + 'lj' => 'LJ', + 'Nj' => 'NJ', + 'nj' => 'NJ', + 'ǎ' => 'Ǎ', + 'ǐ' => 'Ǐ', + 'ǒ' => 'Ǒ', + 'ǔ' => 'Ǔ', + 'ǖ' => 'Ǖ', + 'ǘ' => 'Ǘ', + 'ǚ' => 'Ǚ', + 'ǜ' => 'Ǜ', + 'ǝ' => 'Ǝ', + 'ǟ' => 'Ǟ', + 'ǡ' => 'Ǡ', + 'ǣ' => 'Ǣ', + 'ǥ' => 'Ǥ', + 'ǧ' => 'Ǧ', + 'ǩ' => 'Ǩ', + 'ǫ' => 'Ǫ', + 'ǭ' => 'Ǭ', + 'ǯ' => 'Ǯ', + 'Dz' => 'DZ', + 'dz' => 'DZ', + 'ǵ' => 'Ǵ', + 'ǹ' => 'Ǹ', + 'ǻ' => 'Ǻ', + 'ǽ' => 'Ǽ', + 'ǿ' => 'Ǿ', + 'ȁ' => 'Ȁ', + 'ȃ' => 'Ȃ', + 'ȅ' => 'Ȅ', + 'ȇ' => 'Ȇ', + 'ȉ' => 'Ȉ', + 'ȋ' => 'Ȋ', + 'ȍ' => 'Ȍ', + 'ȏ' => 'Ȏ', + 'ȑ' => 'Ȑ', + 'ȓ' => 'Ȓ', + 'ȕ' => 'Ȕ', + 'ȗ' => 'Ȗ', + 'ș' => 'Ș', + 'ț' => 'Ț', + 'ȝ' => 'Ȝ', + 'ȟ' => 'Ȟ', + 'ȣ' => 'Ȣ', + 'ȥ' => 'Ȥ', + 'ȧ' => 'Ȧ', + 'ȩ' => 'Ȩ', + 'ȫ' => 'Ȫ', + 'ȭ' => 'Ȭ', + 'ȯ' => 'Ȯ', + 'ȱ' => 'Ȱ', + 'ȳ' => 'Ȳ', + 'ȼ' => 'Ȼ', + 'ȿ' => 'Ȿ', + 'ɀ' => 'Ɀ', + 'ɂ' => 'Ɂ', + 'ɇ' => 'Ɇ', + 'ɉ' => 'Ɉ', + 'ɋ' => 'Ɋ', + 'ɍ' => 'Ɍ', + 'ɏ' => 'Ɏ', + 'ɐ' => 'Ɐ', + 'ɑ' => 'Ɑ', + 'ɒ' => 'Ɒ', + 'ɓ' => 'Ɓ', + 'ɔ' => 'Ɔ', + 'ɖ' => 'Ɖ', + 'ɗ' => 'Ɗ', + 'ə' => 'Ə', + 'ɛ' => 'Ɛ', + 'ɜ' => 'Ɜ', + 'ɠ' => 'Ɠ', + 'ɡ' => 'Ɡ', + 'ɣ' => 'Ɣ', + 'ɥ' => 'Ɥ', + 'ɦ' => 'Ɦ', + 'ɨ' => 'Ɨ', + 'ɩ' => 'Ɩ', + 'ɪ' => 'Ɪ', + 'ɫ' => 'Ɫ', + 'ɬ' => 'Ɬ', + 'ɯ' => 'Ɯ', + 'ɱ' => 'Ɱ', + 'ɲ' => 'Ɲ', + 'ɵ' => 'Ɵ', + 'ɽ' => 'Ɽ', + 'ʀ' => 'Ʀ', + 'ʂ' => 'Ʂ', + 'ʃ' => 'Ʃ', + 'ʇ' => 'Ʇ', + 'ʈ' => 'Ʈ', + 'ʉ' => 'Ʉ', + 'ʊ' => 'Ʊ', + 'ʋ' => 'Ʋ', + 'ʌ' => 'Ʌ', + 'ʒ' => 'Ʒ', + 'ʝ' => 'Ʝ', + 'ʞ' => 'Ʞ', + 'ͅ' => 'Ι', + 'ͱ' => 'Ͱ', + 'ͳ' => 'Ͳ', + 'ͷ' => 'Ͷ', + 'ͻ' => 'Ͻ', + 'ͼ' => 'Ͼ', + 'ͽ' => 'Ͽ', + 'ά' => 'Ά', + 'έ' => 'Έ', + 'ή' => 'Ή', + 'ί' => 'Ί', + 'α' => 'Α', + 'β' => 'Β', + 'γ' => 'Γ', + 'δ' => 'Δ', + 'ε' => 'Ε', + 'ζ' => 'Ζ', + 'η' => 'Η', + 'θ' => 'Θ', + 'ι' => 'Ι', + 'κ' => 'Κ', + 'λ' => 'Λ', + 'μ' => 'Μ', + 'ν' => 'Ν', + 'ξ' => 'Ξ', + 'ο' => 'Ο', + 'π' => 'Π', + 'ρ' => 'Ρ', + 'ς' => 'Σ', + 'σ' => 'Σ', + 'τ' => 'Τ', + 'υ' => 'Υ', + 'φ' => 'Φ', + 'χ' => 'Χ', + 'ψ' => 'Ψ', + 'ω' => 'Ω', + 'ϊ' => 'Ϊ', + 'ϋ' => 'Ϋ', + 'ό' => 'Ό', + 'ύ' => 'Ύ', + 'ώ' => 'Ώ', + 'ϐ' => 'Β', + 'ϑ' => 'Θ', + 'ϕ' => 'Φ', + 'ϖ' => 'Π', + 'ϗ' => 'Ϗ', + 'ϙ' => 'Ϙ', + 'ϛ' => 'Ϛ', + 'ϝ' => 'Ϝ', + 'ϟ' => 'Ϟ', + 'ϡ' => 'Ϡ', + 'ϣ' => 'Ϣ', + 'ϥ' => 'Ϥ', + 'ϧ' => 'Ϧ', + 'ϩ' => 'Ϩ', + 'ϫ' => 'Ϫ', + 'ϭ' => 'Ϭ', + 'ϯ' => 'Ϯ', + 'ϰ' => 'Κ', + 'ϱ' => 'Ρ', + 'ϲ' => 'Ϲ', + 'ϳ' => 'Ϳ', + 'ϵ' => 'Ε', + 'ϸ' => 'Ϸ', + 'ϻ' => 'Ϻ', + 'а' => 'А', + 'б' => 'Б', + 'в' => 'В', + 'г' => 'Г', + 'д' => 'Д', + 'е' => 'Е', + 'ж' => 'Ж', + 'з' => 'З', + 'и' => 'И', + 'й' => 'Й', + 'к' => 'К', + 'л' => 'Л', + 'м' => 'М', + 'н' => 'Н', + 'о' => 'О', + 'п' => 'П', + 'р' => 'Р', + 'с' => 'С', + 'т' => 'Т', + 'у' => 'У', + 'ф' => 'Ф', + 'х' => 'Х', + 'ц' => 'Ц', + 'ч' => 'Ч', + 'ш' => 'Ш', + 'щ' => 'Щ', + 'ъ' => 'Ъ', + 'ы' => 'Ы', + 'ь' => 'Ь', + 'э' => 'Э', + 'ю' => 'Ю', + 'я' => 'Я', + 'ѐ' => 'Ѐ', + 'ё' => 'Ё', + 'ђ' => 'Ђ', + 'ѓ' => 'Ѓ', + 'є' => 'Є', + 'ѕ' => 'Ѕ', + 'і' => 'І', + 'ї' => 'Ї', + 'ј' => 'Ј', + 'љ' => 'Љ', + 'њ' => 'Њ', + 'ћ' => 'Ћ', + 'ќ' => 'Ќ', + 'ѝ' => 'Ѝ', + 'ў' => 'Ў', + 'џ' => 'Џ', + 'ѡ' => 'Ѡ', + 'ѣ' => 'Ѣ', + 'ѥ' => 'Ѥ', + 'ѧ' => 'Ѧ', + 'ѩ' => 'Ѩ', + 'ѫ' => 'Ѫ', + 'ѭ' => 'Ѭ', + 'ѯ' => 'Ѯ', + 'ѱ' => 'Ѱ', + 'ѳ' => 'Ѳ', + 'ѵ' => 'Ѵ', + 'ѷ' => 'Ѷ', + 'ѹ' => 'Ѹ', + 'ѻ' => 'Ѻ', + 'ѽ' => 'Ѽ', + 'ѿ' => 'Ѿ', + 'ҁ' => 'Ҁ', + 'ҋ' => 'Ҋ', + 'ҍ' => 'Ҍ', + 'ҏ' => 'Ҏ', + 'ґ' => 'Ґ', + 'ғ' => 'Ғ', + 'ҕ' => 'Ҕ', + 'җ' => 'Җ', + 'ҙ' => 'Ҙ', + 'қ' => 'Қ', + 'ҝ' => 'Ҝ', + 'ҟ' => 'Ҟ', + 'ҡ' => 'Ҡ', + 'ң' => 'Ң', + 'ҥ' => 'Ҥ', + 'ҧ' => 'Ҧ', + 'ҩ' => 'Ҩ', + 'ҫ' => 'Ҫ', + 'ҭ' => 'Ҭ', + 'ү' => 'Ү', + 'ұ' => 'Ұ', + 'ҳ' => 'Ҳ', + 'ҵ' => 'Ҵ', + 'ҷ' => 'Ҷ', + 'ҹ' => 'Ҹ', + 'һ' => 'Һ', + 'ҽ' => 'Ҽ', + 'ҿ' => 'Ҿ', + 'ӂ' => 'Ӂ', + 'ӄ' => 'Ӄ', + 'ӆ' => 'Ӆ', + 'ӈ' => 'Ӈ', + 'ӊ' => 'Ӊ', + 'ӌ' => 'Ӌ', + 'ӎ' => 'Ӎ', + 'ӏ' => 'Ӏ', + 'ӑ' => 'Ӑ', + 'ӓ' => 'Ӓ', + 'ӕ' => 'Ӕ', + 'ӗ' => 'Ӗ', + 'ә' => 'Ә', + 'ӛ' => 'Ӛ', + 'ӝ' => 'Ӝ', + 'ӟ' => 'Ӟ', + 'ӡ' => 'Ӡ', + 'ӣ' => 'Ӣ', + 'ӥ' => 'Ӥ', + 'ӧ' => 'Ӧ', + 'ө' => 'Ө', + 'ӫ' => 'Ӫ', + 'ӭ' => 'Ӭ', + 'ӯ' => 'Ӯ', + 'ӱ' => 'Ӱ', + 'ӳ' => 'Ӳ', + 'ӵ' => 'Ӵ', + 'ӷ' => 'Ӷ', + 'ӹ' => 'Ӹ', + 'ӻ' => 'Ӻ', + 'ӽ' => 'Ӽ', + 'ӿ' => 'Ӿ', + 'ԁ' => 'Ԁ', + 'ԃ' => 'Ԃ', + 'ԅ' => 'Ԅ', + 'ԇ' => 'Ԇ', + 'ԉ' => 'Ԉ', + 'ԋ' => 'Ԋ', + 'ԍ' => 'Ԍ', + 'ԏ' => 'Ԏ', + 'ԑ' => 'Ԑ', + 'ԓ' => 'Ԓ', + 'ԕ' => 'Ԕ', + 'ԗ' => 'Ԗ', + 'ԙ' => 'Ԙ', + 'ԛ' => 'Ԛ', + 'ԝ' => 'Ԝ', + 'ԟ' => 'Ԟ', + 'ԡ' => 'Ԡ', + 'ԣ' => 'Ԣ', + 'ԥ' => 'Ԥ', + 'ԧ' => 'Ԧ', + 'ԩ' => 'Ԩ', + 'ԫ' => 'Ԫ', + 'ԭ' => 'Ԭ', + 'ԯ' => 'Ԯ', + 'ա' => 'Ա', + 'բ' => 'Բ', + 'գ' => 'Գ', + 'դ' => 'Դ', + 'ե' => 'Ե', + 'զ' => 'Զ', + 'է' => 'Է', + 'ը' => 'Ը', + 'թ' => 'Թ', + 'ժ' => 'Ժ', + 'ի' => 'Ի', + 'լ' => 'Լ', + 'խ' => 'Խ', + 'ծ' => 'Ծ', + 'կ' => 'Կ', + 'հ' => 'Հ', + 'ձ' => 'Ձ', + 'ղ' => 'Ղ', + 'ճ' => 'Ճ', + 'մ' => 'Մ', + 'յ' => 'Յ', + 'ն' => 'Ն', + 'շ' => 'Շ', + 'ո' => 'Ո', + 'չ' => 'Չ', + 'պ' => 'Պ', + 'ջ' => 'Ջ', + 'ռ' => 'Ռ', + 'ս' => 'Ս', + 'վ' => 'Վ', + 'տ' => 'Տ', + 'ր' => 'Ր', + 'ց' => 'Ց', + 'ւ' => 'Ւ', + 'փ' => 'Փ', + 'ք' => 'Ք', + 'օ' => 'Օ', + 'ֆ' => 'Ֆ', + 'ა' => 'Ა', + 'ბ' => 'Ბ', + 'გ' => 'Გ', + 'დ' => 'Დ', + 'ე' => 'Ე', + 'ვ' => 'Ვ', + 'ზ' => 'Ზ', + 'თ' => 'Თ', + 'ი' => 'Ი', + 'კ' => 'Კ', + 'ლ' => 'Ლ', + 'მ' => 'Მ', + 'ნ' => 'Ნ', + 'ო' => 'Ო', + 'პ' => 'Პ', + 'ჟ' => 'Ჟ', + 'რ' => 'Რ', + 'ს' => 'Ს', + 'ტ' => 'Ტ', + 'უ' => 'Უ', + 'ფ' => 'Ფ', + 'ქ' => 'Ქ', + 'ღ' => 'Ღ', + 'ყ' => 'Ყ', + 'შ' => 'Შ', + 'ჩ' => 'Ჩ', + 'ც' => 'Ც', + 'ძ' => 'Ძ', + 'წ' => 'Წ', + 'ჭ' => 'Ჭ', + 'ხ' => 'Ხ', + 'ჯ' => 'Ჯ', + 'ჰ' => 'Ჰ', + 'ჱ' => 'Ჱ', + 'ჲ' => 'Ჲ', + 'ჳ' => 'Ჳ', + 'ჴ' => 'Ჴ', + 'ჵ' => 'Ჵ', + 'ჶ' => 'Ჶ', + 'ჷ' => 'Ჷ', + 'ჸ' => 'Ჸ', + 'ჹ' => 'Ჹ', + 'ჺ' => 'Ჺ', + 'ჽ' => 'Ჽ', + 'ჾ' => 'Ჾ', + 'ჿ' => 'Ჿ', + 'ᏸ' => 'Ᏸ', + 'ᏹ' => 'Ᏹ', + 'ᏺ' => 'Ᏺ', + 'ᏻ' => 'Ᏻ', + 'ᏼ' => 'Ᏼ', + 'ᏽ' => 'Ᏽ', + 'ᲀ' => 'В', + 'ᲁ' => 'Д', + 'ᲂ' => 'О', + 'ᲃ' => 'С', + 'ᲄ' => 'Т', + 'ᲅ' => 'Т', + 'ᲆ' => 'Ъ', + 'ᲇ' => 'Ѣ', + 'ᲈ' => 'Ꙋ', + 'ᵹ' => 'Ᵹ', + 'ᵽ' => 'Ᵽ', + 'ᶎ' => 'Ᶎ', + 'ḁ' => 'Ḁ', + 'ḃ' => 'Ḃ', + 'ḅ' => 'Ḅ', + 'ḇ' => 'Ḇ', + 'ḉ' => 'Ḉ', + 'ḋ' => 'Ḋ', + 'ḍ' => 'Ḍ', + 'ḏ' => 'Ḏ', + 'ḑ' => 'Ḑ', + 'ḓ' => 'Ḓ', + 'ḕ' => 'Ḕ', + 'ḗ' => 'Ḗ', + 'ḙ' => 'Ḙ', + 'ḛ' => 'Ḛ', + 'ḝ' => 'Ḝ', + 'ḟ' => 'Ḟ', + 'ḡ' => 'Ḡ', + 'ḣ' => 'Ḣ', + 'ḥ' => 'Ḥ', + 'ḧ' => 'Ḧ', + 'ḩ' => 'Ḩ', + 'ḫ' => 'Ḫ', + 'ḭ' => 'Ḭ', + 'ḯ' => 'Ḯ', + 'ḱ' => 'Ḱ', + 'ḳ' => 'Ḳ', + 'ḵ' => 'Ḵ', + 'ḷ' => 'Ḷ', + 'ḹ' => 'Ḹ', + 'ḻ' => 'Ḻ', + 'ḽ' => 'Ḽ', + 'ḿ' => 'Ḿ', + 'ṁ' => 'Ṁ', + 'ṃ' => 'Ṃ', + 'ṅ' => 'Ṅ', + 'ṇ' => 'Ṇ', + 'ṉ' => 'Ṉ', + 'ṋ' => 'Ṋ', + 'ṍ' => 'Ṍ', + 'ṏ' => 'Ṏ', + 'ṑ' => 'Ṑ', + 'ṓ' => 'Ṓ', + 'ṕ' => 'Ṕ', + 'ṗ' => 'Ṗ', + 'ṙ' => 'Ṙ', + 'ṛ' => 'Ṛ', + 'ṝ' => 'Ṝ', + 'ṟ' => 'Ṟ', + 'ṡ' => 'Ṡ', + 'ṣ' => 'Ṣ', + 'ṥ' => 'Ṥ', + 'ṧ' => 'Ṧ', + 'ṩ' => 'Ṩ', + 'ṫ' => 'Ṫ', + 'ṭ' => 'Ṭ', + 'ṯ' => 'Ṯ', + 'ṱ' => 'Ṱ', + 'ṳ' => 'Ṳ', + 'ṵ' => 'Ṵ', + 'ṷ' => 'Ṷ', + 'ṹ' => 'Ṹ', + 'ṻ' => 'Ṻ', + 'ṽ' => 'Ṽ', + 'ṿ' => 'Ṿ', + 'ẁ' => 'Ẁ', + 'ẃ' => 'Ẃ', + 'ẅ' => 'Ẅ', + 'ẇ' => 'Ẇ', + 'ẉ' => 'Ẉ', + 'ẋ' => 'Ẋ', + 'ẍ' => 'Ẍ', + 'ẏ' => 'Ẏ', + 'ẑ' => 'Ẑ', + 'ẓ' => 'Ẓ', + 'ẕ' => 'Ẕ', + 'ẛ' => 'Ṡ', + 'ạ' => 'Ạ', + 'ả' => 'Ả', + 'ấ' => 'Ấ', + 'ầ' => 'Ầ', + 'ẩ' => 'Ẩ', + 'ẫ' => 'Ẫ', + 'ậ' => 'Ậ', + 'ắ' => 'Ắ', + 'ằ' => 'Ằ', + 'ẳ' => 'Ẳ', + 'ẵ' => 'Ẵ', + 'ặ' => 'Ặ', + 'ẹ' => 'Ẹ', + 'ẻ' => 'Ẻ', + 'ẽ' => 'Ẽ', + 'ế' => 'Ế', + 'ề' => 'Ề', + 'ể' => 'Ể', + 'ễ' => 'Ễ', + 'ệ' => 'Ệ', + 'ỉ' => 'Ỉ', + 'ị' => 'Ị', + 'ọ' => 'Ọ', + 'ỏ' => 'Ỏ', + 'ố' => 'Ố', + 'ồ' => 'Ồ', + 'ổ' => 'Ổ', + 'ỗ' => 'Ỗ', + 'ộ' => 'Ộ', + 'ớ' => 'Ớ', + 'ờ' => 'Ờ', + 'ở' => 'Ở', + 'ỡ' => 'Ỡ', + 'ợ' => 'Ợ', + 'ụ' => 'Ụ', + 'ủ' => 'Ủ', + 'ứ' => 'Ứ', + 'ừ' => 'Ừ', + 'ử' => 'Ử', + 'ữ' => 'Ữ', + 'ự' => 'Ự', + 'ỳ' => 'Ỳ', + 'ỵ' => 'Ỵ', + 'ỷ' => 'Ỷ', + 'ỹ' => 'Ỹ', + 'ỻ' => 'Ỻ', + 'ỽ' => 'Ỽ', + 'ỿ' => 'Ỿ', + 'ἀ' => 'Ἀ', + 'ἁ' => 'Ἁ', + 'ἂ' => 'Ἂ', + 'ἃ' => 'Ἃ', + 'ἄ' => 'Ἄ', + 'ἅ' => 'Ἅ', + 'ἆ' => 'Ἆ', + 'ἇ' => 'Ἇ', + 'ἐ' => 'Ἐ', + 'ἑ' => 'Ἑ', + 'ἒ' => 'Ἒ', + 'ἓ' => 'Ἓ', + 'ἔ' => 'Ἔ', + 'ἕ' => 'Ἕ', + 'ἠ' => 'Ἠ', + 'ἡ' => 'Ἡ', + 'ἢ' => 'Ἢ', + 'ἣ' => 'Ἣ', + 'ἤ' => 'Ἤ', + 'ἥ' => 'Ἥ', + 'ἦ' => 'Ἦ', + 'ἧ' => 'Ἧ', + 'ἰ' => 'Ἰ', + 'ἱ' => 'Ἱ', + 'ἲ' => 'Ἲ', + 'ἳ' => 'Ἳ', + 'ἴ' => 'Ἴ', + 'ἵ' => 'Ἵ', + 'ἶ' => 'Ἶ', + 'ἷ' => 'Ἷ', + 'ὀ' => 'Ὀ', + 'ὁ' => 'Ὁ', + 'ὂ' => 'Ὂ', + 'ὃ' => 'Ὃ', + 'ὄ' => 'Ὄ', + 'ὅ' => 'Ὅ', + 'ὑ' => 'Ὑ', + 'ὓ' => 'Ὓ', + 'ὕ' => 'Ὕ', + 'ὗ' => 'Ὗ', + 'ὠ' => 'Ὠ', + 'ὡ' => 'Ὡ', + 'ὢ' => 'Ὢ', + 'ὣ' => 'Ὣ', + 'ὤ' => 'Ὤ', + 'ὥ' => 'Ὥ', + 'ὦ' => 'Ὦ', + 'ὧ' => 'Ὧ', + 'ὰ' => 'Ὰ', + 'ά' => 'Ά', + 'ὲ' => 'Ὲ', + 'έ' => 'Έ', + 'ὴ' => 'Ὴ', + 'ή' => 'Ή', + 'ὶ' => 'Ὶ', + 'ί' => 'Ί', + 'ὸ' => 'Ὸ', + 'ό' => 'Ό', + 'ὺ' => 'Ὺ', + 'ύ' => 'Ύ', + 'ὼ' => 'Ὼ', + 'ώ' => 'Ώ', + 'ᾀ' => 'ἈΙ', + 'ᾁ' => 'ἉΙ', + 'ᾂ' => 'ἊΙ', + 'ᾃ' => 'ἋΙ', + 'ᾄ' => 'ἌΙ', + 'ᾅ' => 'ἍΙ', + 'ᾆ' => 'ἎΙ', + 'ᾇ' => 'ἏΙ', + 'ᾐ' => 'ἨΙ', + 'ᾑ' => 'ἩΙ', + 'ᾒ' => 'ἪΙ', + 'ᾓ' => 'ἫΙ', + 'ᾔ' => 'ἬΙ', + 'ᾕ' => 'ἭΙ', + 'ᾖ' => 'ἮΙ', + 'ᾗ' => 'ἯΙ', + 'ᾠ' => 'ὨΙ', + 'ᾡ' => 'ὩΙ', + 'ᾢ' => 'ὪΙ', + 'ᾣ' => 'ὫΙ', + 'ᾤ' => 'ὬΙ', + 'ᾥ' => 'ὭΙ', + 'ᾦ' => 'ὮΙ', + 'ᾧ' => 'ὯΙ', + 'ᾰ' => 'Ᾰ', + 'ᾱ' => 'Ᾱ', + 'ᾳ' => 'ΑΙ', + 'ι' => 'Ι', + 'ῃ' => 'ΗΙ', + 'ῐ' => 'Ῐ', + 'ῑ' => 'Ῑ', + 'ῠ' => 'Ῠ', + 'ῡ' => 'Ῡ', + 'ῥ' => 'Ῥ', + 'ῳ' => 'ΩΙ', + 'ⅎ' => 'Ⅎ', + 'ⅰ' => 'Ⅰ', + 'ⅱ' => 'Ⅱ', + 'ⅲ' => 'Ⅲ', + 'ⅳ' => 'Ⅳ', + 'ⅴ' => 'Ⅴ', + 'ⅵ' => 'Ⅵ', + 'ⅶ' => 'Ⅶ', + 'ⅷ' => 'Ⅷ', + 'ⅸ' => 'Ⅸ', + 'ⅹ' => 'Ⅹ', + 'ⅺ' => 'Ⅺ', + 'ⅻ' => 'Ⅻ', + 'ⅼ' => 'Ⅼ', + 'ⅽ' => 'Ⅽ', + 'ⅾ' => 'Ⅾ', + 'ⅿ' => 'Ⅿ', + 'ↄ' => 'Ↄ', + 'ⓐ' => 'Ⓐ', + 'ⓑ' => 'Ⓑ', + 'ⓒ' => 'Ⓒ', + 'ⓓ' => 'Ⓓ', + 'ⓔ' => 'Ⓔ', + 'ⓕ' => 'Ⓕ', + 'ⓖ' => 'Ⓖ', + 'ⓗ' => 'Ⓗ', + 'ⓘ' => 'Ⓘ', + 'ⓙ' => 'Ⓙ', + 'ⓚ' => 'Ⓚ', + 'ⓛ' => 'Ⓛ', + 'ⓜ' => 'Ⓜ', + 'ⓝ' => 'Ⓝ', + 'ⓞ' => 'Ⓞ', + 'ⓟ' => 'Ⓟ', + 'ⓠ' => 'Ⓠ', + 'ⓡ' => 'Ⓡ', + 'ⓢ' => 'Ⓢ', + 'ⓣ' => 'Ⓣ', + 'ⓤ' => 'Ⓤ', + 'ⓥ' => 'Ⓥ', + 'ⓦ' => 'Ⓦ', + 'ⓧ' => 'Ⓧ', + 'ⓨ' => 'Ⓨ', + 'ⓩ' => 'Ⓩ', + 'ⰰ' => 'Ⰰ', + 'ⰱ' => 'Ⰱ', + 'ⰲ' => 'Ⰲ', + 'ⰳ' => 'Ⰳ', + 'ⰴ' => 'Ⰴ', + 'ⰵ' => 'Ⰵ', + 'ⰶ' => 'Ⰶ', + 'ⰷ' => 'Ⰷ', + 'ⰸ' => 'Ⰸ', + 'ⰹ' => 'Ⰹ', + 'ⰺ' => 'Ⰺ', + 'ⰻ' => 'Ⰻ', + 'ⰼ' => 'Ⰼ', + 'ⰽ' => 'Ⰽ', + 'ⰾ' => 'Ⰾ', + 'ⰿ' => 'Ⰿ', + 'ⱀ' => 'Ⱀ', + 'ⱁ' => 'Ⱁ', + 'ⱂ' => 'Ⱂ', + 'ⱃ' => 'Ⱃ', + 'ⱄ' => 'Ⱄ', + 'ⱅ' => 'Ⱅ', + 'ⱆ' => 'Ⱆ', + 'ⱇ' => 'Ⱇ', + 'ⱈ' => 'Ⱈ', + 'ⱉ' => 'Ⱉ', + 'ⱊ' => 'Ⱊ', + 'ⱋ' => 'Ⱋ', + 'ⱌ' => 'Ⱌ', + 'ⱍ' => 'Ⱍ', + 'ⱎ' => 'Ⱎ', + 'ⱏ' => 'Ⱏ', + 'ⱐ' => 'Ⱐ', + 'ⱑ' => 'Ⱑ', + 'ⱒ' => 'Ⱒ', + 'ⱓ' => 'Ⱓ', + 'ⱔ' => 'Ⱔ', + 'ⱕ' => 'Ⱕ', + 'ⱖ' => 'Ⱖ', + 'ⱗ' => 'Ⱗ', + 'ⱘ' => 'Ⱘ', + 'ⱙ' => 'Ⱙ', + 'ⱚ' => 'Ⱚ', + 'ⱛ' => 'Ⱛ', + 'ⱜ' => 'Ⱜ', + 'ⱝ' => 'Ⱝ', + 'ⱞ' => 'Ⱞ', + 'ⱡ' => 'Ⱡ', + 'ⱥ' => 'Ⱥ', + 'ⱦ' => 'Ⱦ', + 'ⱨ' => 'Ⱨ', + 'ⱪ' => 'Ⱪ', + 'ⱬ' => 'Ⱬ', + 'ⱳ' => 'Ⱳ', + 'ⱶ' => 'Ⱶ', + 'ⲁ' => 'Ⲁ', + 'ⲃ' => 'Ⲃ', + 'ⲅ' => 'Ⲅ', + 'ⲇ' => 'Ⲇ', + 'ⲉ' => 'Ⲉ', + 'ⲋ' => 'Ⲋ', + 'ⲍ' => 'Ⲍ', + 'ⲏ' => 'Ⲏ', + 'ⲑ' => 'Ⲑ', + 'ⲓ' => 'Ⲓ', + 'ⲕ' => 'Ⲕ', + 'ⲗ' => 'Ⲗ', + 'ⲙ' => 'Ⲙ', + 'ⲛ' => 'Ⲛ', + 'ⲝ' => 'Ⲝ', + 'ⲟ' => 'Ⲟ', + 'ⲡ' => 'Ⲡ', + 'ⲣ' => 'Ⲣ', + 'ⲥ' => 'Ⲥ', + 'ⲧ' => 'Ⲧ', + 'ⲩ' => 'Ⲩ', + 'ⲫ' => 'Ⲫ', + 'ⲭ' => 'Ⲭ', + 'ⲯ' => 'Ⲯ', + 'ⲱ' => 'Ⲱ', + 'ⲳ' => 'Ⲳ', + 'ⲵ' => 'Ⲵ', + 'ⲷ' => 'Ⲷ', + 'ⲹ' => 'Ⲹ', + 'ⲻ' => 'Ⲻ', + 'ⲽ' => 'Ⲽ', + 'ⲿ' => 'Ⲿ', + 'ⳁ' => 'Ⳁ', + 'ⳃ' => 'Ⳃ', + 'ⳅ' => 'Ⳅ', + 'ⳇ' => 'Ⳇ', + 'ⳉ' => 'Ⳉ', + 'ⳋ' => 'Ⳋ', + 'ⳍ' => 'Ⳍ', + 'ⳏ' => 'Ⳏ', + 'ⳑ' => 'Ⳑ', + 'ⳓ' => 'Ⳓ', + 'ⳕ' => 'Ⳕ', + 'ⳗ' => 'Ⳗ', + 'ⳙ' => 'Ⳙ', + 'ⳛ' => 'Ⳛ', + 'ⳝ' => 'Ⳝ', + 'ⳟ' => 'Ⳟ', + 'ⳡ' => 'Ⳡ', + 'ⳣ' => 'Ⳣ', + 'ⳬ' => 'Ⳬ', + 'ⳮ' => 'Ⳮ', + 'ⳳ' => 'Ⳳ', + 'ⴀ' => 'Ⴀ', + 'ⴁ' => 'Ⴁ', + 'ⴂ' => 'Ⴂ', + 'ⴃ' => 'Ⴃ', + 'ⴄ' => 'Ⴄ', + 'ⴅ' => 'Ⴅ', + 'ⴆ' => 'Ⴆ', + 'ⴇ' => 'Ⴇ', + 'ⴈ' => 'Ⴈ', + 'ⴉ' => 'Ⴉ', + 'ⴊ' => 'Ⴊ', + 'ⴋ' => 'Ⴋ', + 'ⴌ' => 'Ⴌ', + 'ⴍ' => 'Ⴍ', + 'ⴎ' => 'Ⴎ', + 'ⴏ' => 'Ⴏ', + 'ⴐ' => 'Ⴐ', + 'ⴑ' => 'Ⴑ', + 'ⴒ' => 'Ⴒ', + 'ⴓ' => 'Ⴓ', + 'ⴔ' => 'Ⴔ', + 'ⴕ' => 'Ⴕ', + 'ⴖ' => 'Ⴖ', + 'ⴗ' => 'Ⴗ', + 'ⴘ' => 'Ⴘ', + 'ⴙ' => 'Ⴙ', + 'ⴚ' => 'Ⴚ', + 'ⴛ' => 'Ⴛ', + 'ⴜ' => 'Ⴜ', + 'ⴝ' => 'Ⴝ', + 'ⴞ' => 'Ⴞ', + 'ⴟ' => 'Ⴟ', + 'ⴠ' => 'Ⴠ', + 'ⴡ' => 'Ⴡ', + 'ⴢ' => 'Ⴢ', + 'ⴣ' => 'Ⴣ', + 'ⴤ' => 'Ⴤ', + 'ⴥ' => 'Ⴥ', + 'ⴧ' => 'Ⴧ', + 'ⴭ' => 'Ⴭ', + 'ꙁ' => 'Ꙁ', + 'ꙃ' => 'Ꙃ', + 'ꙅ' => 'Ꙅ', + 'ꙇ' => 'Ꙇ', + 'ꙉ' => 'Ꙉ', + 'ꙋ' => 'Ꙋ', + 'ꙍ' => 'Ꙍ', + 'ꙏ' => 'Ꙏ', + 'ꙑ' => 'Ꙑ', + 'ꙓ' => 'Ꙓ', + 'ꙕ' => 'Ꙕ', + 'ꙗ' => 'Ꙗ', + 'ꙙ' => 'Ꙙ', + 'ꙛ' => 'Ꙛ', + 'ꙝ' => 'Ꙝ', + 'ꙟ' => 'Ꙟ', + 'ꙡ' => 'Ꙡ', + 'ꙣ' => 'Ꙣ', + 'ꙥ' => 'Ꙥ', + 'ꙧ' => 'Ꙧ', + 'ꙩ' => 'Ꙩ', + 'ꙫ' => 'Ꙫ', + 'ꙭ' => 'Ꙭ', + 'ꚁ' => 'Ꚁ', + 'ꚃ' => 'Ꚃ', + 'ꚅ' => 'Ꚅ', + 'ꚇ' => 'Ꚇ', + 'ꚉ' => 'Ꚉ', + 'ꚋ' => 'Ꚋ', + 'ꚍ' => 'Ꚍ', + 'ꚏ' => 'Ꚏ', + 'ꚑ' => 'Ꚑ', + 'ꚓ' => 'Ꚓ', + 'ꚕ' => 'Ꚕ', + 'ꚗ' => 'Ꚗ', + 'ꚙ' => 'Ꚙ', + 'ꚛ' => 'Ꚛ', + 'ꜣ' => 'Ꜣ', + 'ꜥ' => 'Ꜥ', + 'ꜧ' => 'Ꜧ', + 'ꜩ' => 'Ꜩ', + 'ꜫ' => 'Ꜫ', + 'ꜭ' => 'Ꜭ', + 'ꜯ' => 'Ꜯ', + 'ꜳ' => 'Ꜳ', + 'ꜵ' => 'Ꜵ', + 'ꜷ' => 'Ꜷ', + 'ꜹ' => 'Ꜹ', + 'ꜻ' => 'Ꜻ', + 'ꜽ' => 'Ꜽ', + 'ꜿ' => 'Ꜿ', + 'ꝁ' => 'Ꝁ', + 'ꝃ' => 'Ꝃ', + 'ꝅ' => 'Ꝅ', + 'ꝇ' => 'Ꝇ', + 'ꝉ' => 'Ꝉ', + 'ꝋ' => 'Ꝋ', + 'ꝍ' => 'Ꝍ', + 'ꝏ' => 'Ꝏ', + 'ꝑ' => 'Ꝑ', + 'ꝓ' => 'Ꝓ', + 'ꝕ' => 'Ꝕ', + 'ꝗ' => 'Ꝗ', + 'ꝙ' => 'Ꝙ', + 'ꝛ' => 'Ꝛ', + 'ꝝ' => 'Ꝝ', + 'ꝟ' => 'Ꝟ', + 'ꝡ' => 'Ꝡ', + 'ꝣ' => 'Ꝣ', + 'ꝥ' => 'Ꝥ', + 'ꝧ' => 'Ꝧ', + 'ꝩ' => 'Ꝩ', + 'ꝫ' => 'Ꝫ', + 'ꝭ' => 'Ꝭ', + 'ꝯ' => 'Ꝯ', + 'ꝺ' => 'Ꝺ', + 'ꝼ' => 'Ꝼ', + 'ꝿ' => 'Ꝿ', + 'ꞁ' => 'Ꞁ', + 'ꞃ' => 'Ꞃ', + 'ꞅ' => 'Ꞅ', + 'ꞇ' => 'Ꞇ', + 'ꞌ' => 'Ꞌ', + 'ꞑ' => 'Ꞑ', + 'ꞓ' => 'Ꞓ', + 'ꞔ' => 'Ꞔ', + 'ꞗ' => 'Ꞗ', + 'ꞙ' => 'Ꞙ', + 'ꞛ' => 'Ꞛ', + 'ꞝ' => 'Ꞝ', + 'ꞟ' => 'Ꞟ', + 'ꞡ' => 'Ꞡ', + 'ꞣ' => 'Ꞣ', + 'ꞥ' => 'Ꞥ', + 'ꞧ' => 'Ꞧ', + 'ꞩ' => 'Ꞩ', + 'ꞵ' => 'Ꞵ', + 'ꞷ' => 'Ꞷ', + 'ꞹ' => 'Ꞹ', + 'ꞻ' => 'Ꞻ', + 'ꞽ' => 'Ꞽ', + 'ꞿ' => 'Ꞿ', + 'ꟃ' => 'Ꟃ', + 'ꟈ' => 'Ꟈ', + 'ꟊ' => 'Ꟊ', + 'ꟶ' => 'Ꟶ', + 'ꭓ' => 'Ꭓ', + 'ꭰ' => 'Ꭰ', + 'ꭱ' => 'Ꭱ', + 'ꭲ' => 'Ꭲ', + 'ꭳ' => 'Ꭳ', + 'ꭴ' => 'Ꭴ', + 'ꭵ' => 'Ꭵ', + 'ꭶ' => 'Ꭶ', + 'ꭷ' => 'Ꭷ', + 'ꭸ' => 'Ꭸ', + 'ꭹ' => 'Ꭹ', + 'ꭺ' => 'Ꭺ', + 'ꭻ' => 'Ꭻ', + 'ꭼ' => 'Ꭼ', + 'ꭽ' => 'Ꭽ', + 'ꭾ' => 'Ꭾ', + 'ꭿ' => 'Ꭿ', + 'ꮀ' => 'Ꮀ', + 'ꮁ' => 'Ꮁ', + 'ꮂ' => 'Ꮂ', + 'ꮃ' => 'Ꮃ', + 'ꮄ' => 'Ꮄ', + 'ꮅ' => 'Ꮅ', + 'ꮆ' => 'Ꮆ', + 'ꮇ' => 'Ꮇ', + 'ꮈ' => 'Ꮈ', + 'ꮉ' => 'Ꮉ', + 'ꮊ' => 'Ꮊ', + 'ꮋ' => 'Ꮋ', + 'ꮌ' => 'Ꮌ', + 'ꮍ' => 'Ꮍ', + 'ꮎ' => 'Ꮎ', + 'ꮏ' => 'Ꮏ', + 'ꮐ' => 'Ꮐ', + 'ꮑ' => 'Ꮑ', + 'ꮒ' => 'Ꮒ', + 'ꮓ' => 'Ꮓ', + 'ꮔ' => 'Ꮔ', + 'ꮕ' => 'Ꮕ', + 'ꮖ' => 'Ꮖ', + 'ꮗ' => 'Ꮗ', + 'ꮘ' => 'Ꮘ', + 'ꮙ' => 'Ꮙ', + 'ꮚ' => 'Ꮚ', + 'ꮛ' => 'Ꮛ', + 'ꮜ' => 'Ꮜ', + 'ꮝ' => 'Ꮝ', + 'ꮞ' => 'Ꮞ', + 'ꮟ' => 'Ꮟ', + 'ꮠ' => 'Ꮠ', + 'ꮡ' => 'Ꮡ', + 'ꮢ' => 'Ꮢ', + 'ꮣ' => 'Ꮣ', + 'ꮤ' => 'Ꮤ', + 'ꮥ' => 'Ꮥ', + 'ꮦ' => 'Ꮦ', + 'ꮧ' => 'Ꮧ', + 'ꮨ' => 'Ꮨ', + 'ꮩ' => 'Ꮩ', + 'ꮪ' => 'Ꮪ', + 'ꮫ' => 'Ꮫ', + 'ꮬ' => 'Ꮬ', + 'ꮭ' => 'Ꮭ', + 'ꮮ' => 'Ꮮ', + 'ꮯ' => 'Ꮯ', + 'ꮰ' => 'Ꮰ', + 'ꮱ' => 'Ꮱ', + 'ꮲ' => 'Ꮲ', + 'ꮳ' => 'Ꮳ', + 'ꮴ' => 'Ꮴ', + 'ꮵ' => 'Ꮵ', + 'ꮶ' => 'Ꮶ', + 'ꮷ' => 'Ꮷ', + 'ꮸ' => 'Ꮸ', + 'ꮹ' => 'Ꮹ', + 'ꮺ' => 'Ꮺ', + 'ꮻ' => 'Ꮻ', + 'ꮼ' => 'Ꮼ', + 'ꮽ' => 'Ꮽ', + 'ꮾ' => 'Ꮾ', + 'ꮿ' => 'Ꮿ', + 'a' => 'A', + 'b' => 'B', + 'c' => 'C', + 'd' => 'D', + 'e' => 'E', + 'f' => 'F', + 'g' => 'G', + 'h' => 'H', + 'i' => 'I', + 'j' => 'J', + 'k' => 'K', + 'l' => 'L', + 'm' => 'M', + 'n' => 'N', + 'o' => 'O', + 'p' => 'P', + 'q' => 'Q', + 'r' => 'R', + 's' => 'S', + 't' => 'T', + 'u' => 'U', + 'v' => 'V', + 'w' => 'W', + 'x' => 'X', + 'y' => 'Y', + 'z' => 'Z', + '𐐨' => '𐐀', + '𐐩' => '𐐁', + '𐐪' => '𐐂', + '𐐫' => '𐐃', + '𐐬' => '𐐄', + '𐐭' => '𐐅', + '𐐮' => '𐐆', + '𐐯' => '𐐇', + '𐐰' => '𐐈', + '𐐱' => '𐐉', + '𐐲' => '𐐊', + '𐐳' => '𐐋', + '𐐴' => '𐐌', + '𐐵' => '𐐍', + '𐐶' => '𐐎', + '𐐷' => '𐐏', + '𐐸' => '𐐐', + '𐐹' => '𐐑', + '𐐺' => '𐐒', + '𐐻' => '𐐓', + '𐐼' => '𐐔', + '𐐽' => '𐐕', + '𐐾' => '𐐖', + '𐐿' => '𐐗', + '𐑀' => '𐐘', + '𐑁' => '𐐙', + '𐑂' => '𐐚', + '𐑃' => '𐐛', + '𐑄' => '𐐜', + '𐑅' => '𐐝', + '𐑆' => '𐐞', + '𐑇' => '𐐟', + '𐑈' => '𐐠', + '𐑉' => '𐐡', + '𐑊' => '𐐢', + '𐑋' => '𐐣', + '𐑌' => '𐐤', + '𐑍' => '𐐥', + '𐑎' => '𐐦', + '𐑏' => '𐐧', + '𐓘' => '𐒰', + '𐓙' => '𐒱', + '𐓚' => '𐒲', + '𐓛' => '𐒳', + '𐓜' => '𐒴', + '𐓝' => '𐒵', + '𐓞' => '𐒶', + '𐓟' => '𐒷', + '𐓠' => '𐒸', + '𐓡' => '𐒹', + '𐓢' => '𐒺', + '𐓣' => '𐒻', + '𐓤' => '𐒼', + '𐓥' => '𐒽', + '𐓦' => '𐒾', + '𐓧' => '𐒿', + '𐓨' => '𐓀', + '𐓩' => '𐓁', + '𐓪' => '𐓂', + '𐓫' => '𐓃', + '𐓬' => '𐓄', + '𐓭' => '𐓅', + '𐓮' => '𐓆', + '𐓯' => '𐓇', + '𐓰' => '𐓈', + '𐓱' => '𐓉', + '𐓲' => '𐓊', + '𐓳' => '𐓋', + '𐓴' => '𐓌', + '𐓵' => '𐓍', + '𐓶' => '𐓎', + '𐓷' => '𐓏', + '𐓸' => '𐓐', + '𐓹' => '𐓑', + '𐓺' => '𐓒', + '𐓻' => '𐓓', + '𐳀' => '𐲀', + '𐳁' => '𐲁', + '𐳂' => '𐲂', + '𐳃' => '𐲃', + '𐳄' => '𐲄', + '𐳅' => '𐲅', + '𐳆' => '𐲆', + '𐳇' => '𐲇', + '𐳈' => '𐲈', + '𐳉' => '𐲉', + '𐳊' => '𐲊', + '𐳋' => '𐲋', + '𐳌' => '𐲌', + '𐳍' => '𐲍', + '𐳎' => '𐲎', + '𐳏' => '𐲏', + '𐳐' => '𐲐', + '𐳑' => '𐲑', + '𐳒' => '𐲒', + '𐳓' => '𐲓', + '𐳔' => '𐲔', + '𐳕' => '𐲕', + '𐳖' => '𐲖', + '𐳗' => '𐲗', + '𐳘' => '𐲘', + '𐳙' => '𐲙', + '𐳚' => '𐲚', + '𐳛' => '𐲛', + '𐳜' => '𐲜', + '𐳝' => '𐲝', + '𐳞' => '𐲞', + '𐳟' => '𐲟', + '𐳠' => '𐲠', + '𐳡' => '𐲡', + '𐳢' => '𐲢', + '𐳣' => '𐲣', + '𐳤' => '𐲤', + '𐳥' => '𐲥', + '𐳦' => '𐲦', + '𐳧' => '𐲧', + '𐳨' => '𐲨', + '𐳩' => '𐲩', + '𐳪' => '𐲪', + '𐳫' => '𐲫', + '𐳬' => '𐲬', + '𐳭' => '𐲭', + '𐳮' => '𐲮', + '𐳯' => '𐲯', + '𐳰' => '𐲰', + '𐳱' => '𐲱', + '𐳲' => '𐲲', + '𑣀' => '𑢠', + '𑣁' => '𑢡', + '𑣂' => '𑢢', + '𑣃' => '𑢣', + '𑣄' => '𑢤', + '𑣅' => '𑢥', + '𑣆' => '𑢦', + '𑣇' => '𑢧', + '𑣈' => '𑢨', + '𑣉' => '𑢩', + '𑣊' => '𑢪', + '𑣋' => '𑢫', + '𑣌' => '𑢬', + '𑣍' => '𑢭', + '𑣎' => '𑢮', + '𑣏' => '𑢯', + '𑣐' => '𑢰', + '𑣑' => '𑢱', + '𑣒' => '𑢲', + '𑣓' => '𑢳', + '𑣔' => '𑢴', + '𑣕' => '𑢵', + '𑣖' => '𑢶', + '𑣗' => '𑢷', + '𑣘' => '𑢸', + '𑣙' => '𑢹', + '𑣚' => '𑢺', + '𑣛' => '𑢻', + '𑣜' => '𑢼', + '𑣝' => '𑢽', + '𑣞' => '𑢾', + '𑣟' => '𑢿', + '𖹠' => '𖹀', + '𖹡' => '𖹁', + '𖹢' => '𖹂', + '𖹣' => '𖹃', + '𖹤' => '𖹄', + '𖹥' => '𖹅', + '𖹦' => '𖹆', + '𖹧' => '𖹇', + '𖹨' => '𖹈', + '𖹩' => '𖹉', + '𖹪' => '𖹊', + '𖹫' => '𖹋', + '𖹬' => '𖹌', + '𖹭' => '𖹍', + '𖹮' => '𖹎', + '𖹯' => '𖹏', + '𖹰' => '𖹐', + '𖹱' => '𖹑', + '𖹲' => '𖹒', + '𖹳' => '𖹓', + '𖹴' => '𖹔', + '𖹵' => '𖹕', + '𖹶' => '𖹖', + '𖹷' => '𖹗', + '𖹸' => '𖹘', + '𖹹' => '𖹙', + '𖹺' => '𖹚', + '𖹻' => '𖹛', + '𖹼' => '𖹜', + '𖹽' => '𖹝', + '𖹾' => '𖹞', + '𖹿' => '𖹟', + '𞤢' => '𞤀', + '𞤣' => '𞤁', + '𞤤' => '𞤂', + '𞤥' => '𞤃', + '𞤦' => '𞤄', + '𞤧' => '𞤅', + '𞤨' => '𞤆', + '𞤩' => '𞤇', + '𞤪' => '𞤈', + '𞤫' => '𞤉', + '𞤬' => '𞤊', + '𞤭' => '𞤋', + '𞤮' => '𞤌', + '𞤯' => '𞤍', + '𞤰' => '𞤎', + '𞤱' => '𞤏', + '𞤲' => '𞤐', + '𞤳' => '𞤑', + '𞤴' => '𞤒', + '𞤵' => '𞤓', + '𞤶' => '𞤔', + '𞤷' => '𞤕', + '𞤸' => '𞤖', + '𞤹' => '𞤗', + '𞤺' => '𞤘', + '𞤻' => '𞤙', + '𞤼' => '𞤚', + '𞤽' => '𞤛', + '𞤾' => '𞤜', + '𞤿' => '𞤝', + '𞥀' => '𞤞', + '𞥁' => '𞤟', + '𞥂' => '𞤠', + '𞥃' => '𞤡', + 'ß' => 'SS', + 'ff' => 'FF', + 'fi' => 'FI', + 'fl' => 'FL', + 'ffi' => 'FFI', + 'ffl' => 'FFL', + 'ſt' => 'ST', + 'st' => 'ST', + 'և' => 'ԵՒ', + 'ﬓ' => 'ՄՆ', + 'ﬔ' => 'ՄԵ', + 'ﬕ' => 'ՄԻ', + 'ﬖ' => 'ՎՆ', + 'ﬗ' => 'ՄԽ', + 'ʼn' => 'ʼN', + 'ΐ' => 'Ϊ́', + 'ΰ' => 'Ϋ́', + 'ǰ' => 'J̌', + 'ẖ' => 'H̱', + 'ẗ' => 'T̈', + 'ẘ' => 'W̊', + 'ẙ' => 'Y̊', + 'ẚ' => 'Aʾ', + 'ὐ' => 'Υ̓', + 'ὒ' => 'Υ̓̀', + 'ὔ' => 'Υ̓́', + 'ὖ' => 'Υ̓͂', + 'ᾶ' => 'Α͂', + 'ῆ' => 'Η͂', + 'ῒ' => 'Ϊ̀', + 'ΐ' => 'Ϊ́', + 'ῖ' => 'Ι͂', + 'ῗ' => 'Ϊ͂', + 'ῢ' => 'Ϋ̀', + 'ΰ' => 'Ϋ́', + 'ῤ' => 'Ρ̓', + 'ῦ' => 'Υ͂', + 'ῧ' => 'Ϋ͂', + 'ῶ' => 'Ω͂', + 'ᾈ' => 'ἈΙ', + 'ᾉ' => 'ἉΙ', + 'ᾊ' => 'ἊΙ', + 'ᾋ' => 'ἋΙ', + 'ᾌ' => 'ἌΙ', + 'ᾍ' => 'ἍΙ', + 'ᾎ' => 'ἎΙ', + 'ᾏ' => 'ἏΙ', + 'ᾘ' => 'ἨΙ', + 'ᾙ' => 'ἩΙ', + 'ᾚ' => 'ἪΙ', + 'ᾛ' => 'ἫΙ', + 'ᾜ' => 'ἬΙ', + 'ᾝ' => 'ἭΙ', + 'ᾞ' => 'ἮΙ', + 'ᾟ' => 'ἯΙ', + 'ᾨ' => 'ὨΙ', + 'ᾩ' => 'ὩΙ', + 'ᾪ' => 'ὪΙ', + 'ᾫ' => 'ὫΙ', + 'ᾬ' => 'ὬΙ', + 'ᾭ' => 'ὭΙ', + 'ᾮ' => 'ὮΙ', + 'ᾯ' => 'ὯΙ', + 'ᾼ' => 'ΑΙ', + 'ῌ' => 'ΗΙ', + 'ῼ' => 'ΩΙ', + 'ᾲ' => 'ᾺΙ', + 'ᾴ' => 'ΆΙ', + 'ῂ' => 'ῊΙ', + 'ῄ' => 'ΉΙ', + 'ῲ' => 'ῺΙ', + 'ῴ' => 'ΏΙ', + 'ᾷ' => 'Α͂Ι', + 'ῇ' => 'Η͂Ι', + 'ῷ' => 'Ω͂Ι', +); diff --git a/Sources/vendor/symfony/polyfill-mbstring/bootstrap.php b/Sources/vendor/symfony/polyfill-mbstring/bootstrap.php new file mode 100644 index 00000000..ecf1a035 --- /dev/null +++ b/Sources/vendor/symfony/polyfill-mbstring/bootstrap.php @@ -0,0 +1,151 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Mbstring as p; + +if (\PHP_VERSION_ID >= 80000) { + return require __DIR__.'/bootstrap80.php'; +} + +if (!function_exists('mb_convert_encoding')) { + function mb_convert_encoding($string, $to_encoding, $from_encoding = null) { return p\Mbstring::mb_convert_encoding($string, $to_encoding, $from_encoding); } +} +if (!function_exists('mb_decode_mimeheader')) { + function mb_decode_mimeheader($string) { return p\Mbstring::mb_decode_mimeheader($string); } +} +if (!function_exists('mb_encode_mimeheader')) { + function mb_encode_mimeheader($string, $charset = null, $transfer_encoding = null, $newline = "\r\n", $indent = 0) { return p\Mbstring::mb_encode_mimeheader($string, $charset, $transfer_encoding, $newline, $indent); } +} +if (!function_exists('mb_decode_numericentity')) { + function mb_decode_numericentity($string, $map, $encoding = null) { return p\Mbstring::mb_decode_numericentity($string, $map, $encoding); } +} +if (!function_exists('mb_encode_numericentity')) { + function mb_encode_numericentity($string, $map, $encoding = null, $hex = false) { return p\Mbstring::mb_encode_numericentity($string, $map, $encoding, $hex); } +} +if (!function_exists('mb_convert_case')) { + function mb_convert_case($string, $mode, $encoding = null) { return p\Mbstring::mb_convert_case($string, $mode, $encoding); } +} +if (!function_exists('mb_internal_encoding')) { + function mb_internal_encoding($encoding = null) { return p\Mbstring::mb_internal_encoding($encoding); } +} +if (!function_exists('mb_language')) { + function mb_language($language = null) { return p\Mbstring::mb_language($language); } +} +if (!function_exists('mb_list_encodings')) { + function mb_list_encodings() { return p\Mbstring::mb_list_encodings(); } +} +if (!function_exists('mb_encoding_aliases')) { + function mb_encoding_aliases($encoding) { return p\Mbstring::mb_encoding_aliases($encoding); } +} +if (!function_exists('mb_check_encoding')) { + function mb_check_encoding($value = null, $encoding = null) { return p\Mbstring::mb_check_encoding($value, $encoding); } +} +if (!function_exists('mb_detect_encoding')) { + function mb_detect_encoding($string, $encodings = null, $strict = false) { return p\Mbstring::mb_detect_encoding($string, $encodings, $strict); } +} +if (!function_exists('mb_detect_order')) { + function mb_detect_order($encoding = null) { return p\Mbstring::mb_detect_order($encoding); } +} +if (!function_exists('mb_parse_str')) { + function mb_parse_str($string, &$result = []) { parse_str($string, $result); return (bool) $result; } +} +if (!function_exists('mb_strlen')) { + function mb_strlen($string, $encoding = null) { return p\Mbstring::mb_strlen($string, $encoding); } +} +if (!function_exists('mb_strpos')) { + function mb_strpos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strpos($haystack, $needle, $offset, $encoding); } +} +if (!function_exists('mb_strtolower')) { + function mb_strtolower($string, $encoding = null) { return p\Mbstring::mb_strtolower($string, $encoding); } +} +if (!function_exists('mb_strtoupper')) { + function mb_strtoupper($string, $encoding = null) { return p\Mbstring::mb_strtoupper($string, $encoding); } +} +if (!function_exists('mb_substitute_character')) { + function mb_substitute_character($substitute_character = null) { return p\Mbstring::mb_substitute_character($substitute_character); } +} +if (!function_exists('mb_substr')) { + function mb_substr($string, $start, $length = 2147483647, $encoding = null) { return p\Mbstring::mb_substr($string, $start, $length, $encoding); } +} +if (!function_exists('mb_stripos')) { + function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_stripos($haystack, $needle, $offset, $encoding); } +} +if (!function_exists('mb_stristr')) { + function mb_stristr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_stristr($haystack, $needle, $before_needle, $encoding); } +} +if (!function_exists('mb_strrchr')) { + function mb_strrchr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strrchr($haystack, $needle, $before_needle, $encoding); } +} +if (!function_exists('mb_strrichr')) { + function mb_strrichr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strrichr($haystack, $needle, $before_needle, $encoding); } +} +if (!function_exists('mb_strripos')) { + function mb_strripos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strripos($haystack, $needle, $offset, $encoding); } +} +if (!function_exists('mb_strrpos')) { + function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null) { return p\Mbstring::mb_strrpos($haystack, $needle, $offset, $encoding); } +} +if (!function_exists('mb_strstr')) { + function mb_strstr($haystack, $needle, $before_needle = false, $encoding = null) { return p\Mbstring::mb_strstr($haystack, $needle, $before_needle, $encoding); } +} +if (!function_exists('mb_get_info')) { + function mb_get_info($type = 'all') { return p\Mbstring::mb_get_info($type); } +} +if (!function_exists('mb_http_output')) { + function mb_http_output($encoding = null) { return p\Mbstring::mb_http_output($encoding); } +} +if (!function_exists('mb_strwidth')) { + function mb_strwidth($string, $encoding = null) { return p\Mbstring::mb_strwidth($string, $encoding); } +} +if (!function_exists('mb_substr_count')) { + function mb_substr_count($haystack, $needle, $encoding = null) { return p\Mbstring::mb_substr_count($haystack, $needle, $encoding); } +} +if (!function_exists('mb_output_handler')) { + function mb_output_handler($string, $status) { return p\Mbstring::mb_output_handler($string, $status); } +} +if (!function_exists('mb_http_input')) { + function mb_http_input($type = null) { return p\Mbstring::mb_http_input($type); } +} + +if (!function_exists('mb_convert_variables')) { + function mb_convert_variables($to_encoding, $from_encoding, &...$vars) { return p\Mbstring::mb_convert_variables($to_encoding, $from_encoding, ...$vars); } +} + +if (!function_exists('mb_ord')) { + function mb_ord($string, $encoding = null) { return p\Mbstring::mb_ord($string, $encoding); } +} +if (!function_exists('mb_chr')) { + function mb_chr($codepoint, $encoding = null) { return p\Mbstring::mb_chr($codepoint, $encoding); } +} +if (!function_exists('mb_scrub')) { + function mb_scrub($string, $encoding = null) { $encoding = null === $encoding ? mb_internal_encoding() : $encoding; return mb_convert_encoding($string, $encoding, $encoding); } +} +if (!function_exists('mb_str_split')) { + function mb_str_split($string, $length = 1, $encoding = null) { return p\Mbstring::mb_str_split($string, $length, $encoding); } +} + +if (!function_exists('mb_str_pad')) { + function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Mbstring::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); } +} + +if (extension_loaded('mbstring')) { + return; +} + +if (!defined('MB_CASE_UPPER')) { + define('MB_CASE_UPPER', 0); +} +if (!defined('MB_CASE_LOWER')) { + define('MB_CASE_LOWER', 1); +} +if (!defined('MB_CASE_TITLE')) { + define('MB_CASE_TITLE', 2); +} diff --git a/Sources/vendor/symfony/polyfill-mbstring/bootstrap80.php b/Sources/vendor/symfony/polyfill-mbstring/bootstrap80.php new file mode 100644 index 00000000..2f9fb5b4 --- /dev/null +++ b/Sources/vendor/symfony/polyfill-mbstring/bootstrap80.php @@ -0,0 +1,147 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Mbstring as p; + +if (!function_exists('mb_convert_encoding')) { + function mb_convert_encoding(array|string|null $string, ?string $to_encoding, array|string|null $from_encoding = null): array|string|false { return p\Mbstring::mb_convert_encoding($string ?? '', (string) $to_encoding, $from_encoding); } +} +if (!function_exists('mb_decode_mimeheader')) { + function mb_decode_mimeheader(?string $string): string { return p\Mbstring::mb_decode_mimeheader((string) $string); } +} +if (!function_exists('mb_encode_mimeheader')) { + function mb_encode_mimeheader(?string $string, ?string $charset = null, ?string $transfer_encoding = null, ?string $newline = "\r\n", ?int $indent = 0): string { return p\Mbstring::mb_encode_mimeheader((string) $string, $charset, $transfer_encoding, (string) $newline, (int) $indent); } +} +if (!function_exists('mb_decode_numericentity')) { + function mb_decode_numericentity(?string $string, array $map, ?string $encoding = null): string { return p\Mbstring::mb_decode_numericentity((string) $string, $map, $encoding); } +} +if (!function_exists('mb_encode_numericentity')) { + function mb_encode_numericentity(?string $string, array $map, ?string $encoding = null, ?bool $hex = false): string { return p\Mbstring::mb_encode_numericentity((string) $string, $map, $encoding, (bool) $hex); } +} +if (!function_exists('mb_convert_case')) { + function mb_convert_case(?string $string, ?int $mode, ?string $encoding = null): string { return p\Mbstring::mb_convert_case((string) $string, (int) $mode, $encoding); } +} +if (!function_exists('mb_internal_encoding')) { + function mb_internal_encoding(?string $encoding = null): string|bool { return p\Mbstring::mb_internal_encoding($encoding); } +} +if (!function_exists('mb_language')) { + function mb_language(?string $language = null): string|bool { return p\Mbstring::mb_language($language); } +} +if (!function_exists('mb_list_encodings')) { + function mb_list_encodings(): array { return p\Mbstring::mb_list_encodings(); } +} +if (!function_exists('mb_encoding_aliases')) { + function mb_encoding_aliases(?string $encoding): array { return p\Mbstring::mb_encoding_aliases((string) $encoding); } +} +if (!function_exists('mb_check_encoding')) { + function mb_check_encoding(array|string|null $value = null, ?string $encoding = null): bool { return p\Mbstring::mb_check_encoding($value, $encoding); } +} +if (!function_exists('mb_detect_encoding')) { + function mb_detect_encoding(?string $string, array|string|null $encodings = null, ?bool $strict = false): string|false { return p\Mbstring::mb_detect_encoding((string) $string, $encodings, (bool) $strict); } +} +if (!function_exists('mb_detect_order')) { + function mb_detect_order(array|string|null $encoding = null): array|bool { return p\Mbstring::mb_detect_order($encoding); } +} +if (!function_exists('mb_parse_str')) { + function mb_parse_str(?string $string, &$result = []): bool { parse_str((string) $string, $result); return (bool) $result; } +} +if (!function_exists('mb_strlen')) { + function mb_strlen(?string $string, ?string $encoding = null): int { return p\Mbstring::mb_strlen((string) $string, $encoding); } +} +if (!function_exists('mb_strpos')) { + function mb_strpos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strpos((string) $haystack, (string) $needle, (int) $offset, $encoding); } +} +if (!function_exists('mb_strtolower')) { + function mb_strtolower(?string $string, ?string $encoding = null): string { return p\Mbstring::mb_strtolower((string) $string, $encoding); } +} +if (!function_exists('mb_strtoupper')) { + function mb_strtoupper(?string $string, ?string $encoding = null): string { return p\Mbstring::mb_strtoupper((string) $string, $encoding); } +} +if (!function_exists('mb_substitute_character')) { + function mb_substitute_character(string|int|null $substitute_character = null): string|int|bool { return p\Mbstring::mb_substitute_character($substitute_character); } +} +if (!function_exists('mb_substr')) { + function mb_substr(?string $string, ?int $start, ?int $length = null, ?string $encoding = null): string { return p\Mbstring::mb_substr((string) $string, (int) $start, $length, $encoding); } +} +if (!function_exists('mb_stripos')) { + function mb_stripos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_stripos((string) $haystack, (string) $needle, (int) $offset, $encoding); } +} +if (!function_exists('mb_stristr')) { + function mb_stristr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_stristr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); } +} +if (!function_exists('mb_strrchr')) { + function mb_strrchr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strrchr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); } +} +if (!function_exists('mb_strrichr')) { + function mb_strrichr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strrichr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); } +} +if (!function_exists('mb_strripos')) { + function mb_strripos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strripos((string) $haystack, (string) $needle, (int) $offset, $encoding); } +} +if (!function_exists('mb_strrpos')) { + function mb_strrpos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\Mbstring::mb_strrpos((string) $haystack, (string) $needle, (int) $offset, $encoding); } +} +if (!function_exists('mb_strstr')) { + function mb_strstr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\Mbstring::mb_strstr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); } +} +if (!function_exists('mb_get_info')) { + function mb_get_info(?string $type = 'all'): array|string|int|false { return p\Mbstring::mb_get_info((string) $type); } +} +if (!function_exists('mb_http_output')) { + function mb_http_output(?string $encoding = null): string|bool { return p\Mbstring::mb_http_output($encoding); } +} +if (!function_exists('mb_strwidth')) { + function mb_strwidth(?string $string, ?string $encoding = null): int { return p\Mbstring::mb_strwidth((string) $string, $encoding); } +} +if (!function_exists('mb_substr_count')) { + function mb_substr_count(?string $haystack, ?string $needle, ?string $encoding = null): int { return p\Mbstring::mb_substr_count((string) $haystack, (string) $needle, $encoding); } +} +if (!function_exists('mb_output_handler')) { + function mb_output_handler(?string $string, ?int $status): string { return p\Mbstring::mb_output_handler((string) $string, (int) $status); } +} +if (!function_exists('mb_http_input')) { + function mb_http_input(?string $type = null): array|string|false { return p\Mbstring::mb_http_input($type); } +} + +if (!function_exists('mb_convert_variables')) { + function mb_convert_variables(?string $to_encoding, array|string|null $from_encoding, mixed &$var, mixed &...$vars): string|false { return p\Mbstring::mb_convert_variables((string) $to_encoding, $from_encoding ?? '', $var, ...$vars); } +} + +if (!function_exists('mb_ord')) { + function mb_ord(?string $string, ?string $encoding = null): int|false { return p\Mbstring::mb_ord((string) $string, $encoding); } +} +if (!function_exists('mb_chr')) { + function mb_chr(?int $codepoint, ?string $encoding = null): string|false { return p\Mbstring::mb_chr((int) $codepoint, $encoding); } +} +if (!function_exists('mb_scrub')) { + function mb_scrub(?string $string, ?string $encoding = null): string { $encoding ??= mb_internal_encoding(); return mb_convert_encoding((string) $string, $encoding, $encoding); } +} +if (!function_exists('mb_str_split')) { + function mb_str_split(?string $string, ?int $length = 1, ?string $encoding = null): array { return p\Mbstring::mb_str_split((string) $string, (int) $length, $encoding); } +} + +if (!function_exists('mb_str_pad')) { + function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Mbstring::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); } +} + +if (extension_loaded('mbstring')) { + return; +} + +if (!defined('MB_CASE_UPPER')) { + define('MB_CASE_UPPER', 0); +} +if (!defined('MB_CASE_LOWER')) { + define('MB_CASE_LOWER', 1); +} +if (!defined('MB_CASE_TITLE')) { + define('MB_CASE_TITLE', 2); +} diff --git a/Sources/vendor/symfony/polyfill-mbstring/composer.json b/Sources/vendor/symfony/polyfill-mbstring/composer.json new file mode 100644 index 00000000..943e5029 --- /dev/null +++ b/Sources/vendor/symfony/polyfill-mbstring/composer.json @@ -0,0 +1,41 @@ +{ + "name": "symfony/polyfill-mbstring", + "type": "library", + "description": "Symfony polyfill for the Mbstring extension", + "keywords": ["polyfill", "shim", "compatibility", "portable", "mbstring"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" }, + "files": [ "bootstrap.php" ] + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + } +} diff --git a/Sources/vendor/twig/twig/CHANGELOG b/Sources/vendor/twig/twig/CHANGELOG new file mode 100644 index 00000000..5ee51886 --- /dev/null +++ b/Sources/vendor/twig/twig/CHANGELOG @@ -0,0 +1,185 @@ +# 3.7.1 (2023-08-28) + + * Fix some phpdocs + +# 3.7.0 (2023-07-26) + + * Add support for the ...spread operator on arrays and hashes + +# 3.6.1 (2023-06-08) + + * Suppress some native return type deprecation messages + +# 3.6.0 (2023-05-03) + + * Allow psr/container 2.0 + * Add the new PHP 8.0 IntlDateFormatter::RELATIVE_* constants for date formatting + * Make the Lexer initialize itself lazily + +# 3.5.1 (2023-02-08) + + * Arrow functions passed to the "reduce" filter now accept the current key as a third argument + * Restores the leniency of the matches twig comparison + * Fix error messages in sandboxed mode for "has some" and "has every" + +# 3.5.0 (2022-12-27) + + * Make Twig\ExpressionParser non-internal + * Add "has some" and "has every" operators + * Add Compile::reset() + * Throw a better runtime error when the "matches" regexp is not valid + * Add "twig *_names" intl functions + * Fix optimizing closures callbacks + * Add a better exception when getting an undefined constant via `constant` + * Fix `if` nodes when outside of a block and with an empty body + +# 3.4.3 (2022-09-28) + + * Fix a security issue on filesystem loader (possibility to load a template outside a configured directory) + +# 3.4.2 (2022-08-12) + + * Allow inherited magic method to still run with calling class + * Fix CallExpression::reflectCallable() throwing TypeError + * Fix typo in naming (currency_code) + +# 3.4.1 (2022-05-17) + +* Fix optimizing non-public named closures + +# 3.4.0 (2022-05-22) + + * Add support for named closures + +# 3.3.10 (2022-04-06) + + * Enable bytecode invalidation when auto_reload is enabled + +# 3.3.9 (2022-03-25) + + * Fix custom escapers when using multiple Twig environments + * Add support for "constant('class', object)" + * Do not reuse internally generated variable names during parsing + +# 3.3.8 (2022-02-04) + + * Fix a security issue when in a sandbox: the `sort` filter must require a Closure for the `arrow` parameter + * Fix deprecation notice on `round` + * Fix call to deprecated `convertToHtml` method + +# 3.3.7 (2022-01-03) + +* Allow more null support when Twig expects a string (for better 8.1 support) +* Only use Commonmark extensions if markdown enabled + +# 3.3.6 (2022-01-03) + +* Only use Commonmark extensions if markdown enabled + +# 3.3.5 (2022-01-03) + +* Allow CommonMark extensions to easily be added +* Allow null when Twig expects a string (for better 8.1 support) +* Make some performance optimizations +* Allow Symfony translation contract v3+ + +# 3.3.4 (2021-11-25) + + * Bump minimum supported Symfony component versions + * Fix a deprecated message + +# 3.3.3 (2021-09-17) + + * Allow Symfony 6 + * Improve compatibility with PHP 8.1 + * Explicitly specify the encoding for mb_ord in JS escaper + +# 3.3.2 (2021-05-16) + + * Revert "Throw a proper exception when a template name is an absolute path (as it has never been supported)" + +# 3.3.1 (2021-05-12) + + * Fix PHP 8.1 compatibility + * Throw a proper exception when a template name is an absolute path (as it has never been supported) + +# 3.3.0 (2021-02-08) + + * Fix macro calls in a "cache" tag + * Add the slug filter + * Allow extra bundle to be compatible with Twig 2 + +# 3.2.1 (2021-01-05) + + * Fix extra bundle compat with older versions of Symfony + +# 3.2.0 (2021-01-05) + + * Add the Cache extension in the "extra" repositories: "cache" tag + * Add "registerUndefinedTokenParserCallback" + * Mark built-in node visitors as @internal + * Fix "odd" not working for negative numbers + +# 3.1.1 (2020-10-27) + + * Fix "include(template_from_string())" + +# 3.1.0 (2020-10-21) + + * Fix sandbox support when using "include(template_from_string())" + * Make round brackets optional for one argument tests like "same as" or "divisible by" + * Add support for ES2015 style object initialisation shortcut { a } is the same as { 'a': a } + +# 3.0.5 (2020-08-05) + + * Fix twig_compare w.r.t. whitespace trimming + * Fix sandbox not disabled if syntax error occurs within {% sandbox %} tag + * Fix a regression when not using a space before an operator + * Restrict callables to closures in filters + * Allow trailing commas in argument lists (in calls as well as definitions) + +# 3.0.4 (2020-07-05) + + * Fix comparison operators + * Fix options not taken into account when using "Michelf\MarkdownExtra" + * Fix "Twig\Extra\Intl\IntlExtension::getCountryName()" to accept "null" as a first argument + * Throw exception in case non-Traversable data is passed to "filter" + * Fix context optimization on PHP 7.4 + * Fix PHP 8 compatibility + * Fix ambiguous syntax parsing + +# 3.0.3 (2020-02-11) + + * Add a check to ensure that iconv() is defined + +# 3.0.2 (2020-02-11) + + * Avoid exceptions when an intl resource is not found + * Fix implementation of case-insensitivity for method names + +# 3.0.1 (2019-12-28) + + * fixed Symfony 5.0 support for the HTML extra extension + +# 3.0.0 (2019-11-15) + + * fixed number formatter in Intl extra extension when using a formatter prototype + +# 3.0.0-BETA1 (2019-11-11) + + * removed the "if" condition support on the "for" tag + * made the in, <, >, <=, >=, ==, and != operators more strict when comparing strings and integers/floats + * removed the "filter" tag + * added type hints everywhere + * changed Environment::resolveTemplate() to always return a TemplateWrapper instance + * removed Template::__toString() + * removed Parser::isReservedMacroName() + * removed SanboxedPrintNode + * removed Node::setTemplateName() + * made classes maked as "@final" final + * removed InitRuntimeInterface, ExistsLoaderInterface, and SourceContextLoaderInterface + * removed the "spaceless" tag + * removed Twig\Environment::getBaseTemplateClass() and Twig\Environment::setBaseTemplateClass() + * removed the "base_template_class" option on Twig\Environment + * bumped minimum PHP version to 7.2 + * removed PSR-0 classes diff --git a/Sources/vendor/twig/twig/LICENSE b/Sources/vendor/twig/twig/LICENSE new file mode 100644 index 00000000..fd8234e5 --- /dev/null +++ b/Sources/vendor/twig/twig/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009-present by the Twig Team. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of Twig nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Sources/vendor/twig/twig/README.rst b/Sources/vendor/twig/twig/README.rst new file mode 100644 index 00000000..fbe7e9a9 --- /dev/null +++ b/Sources/vendor/twig/twig/README.rst @@ -0,0 +1,23 @@ +Twig, the flexible, fast, and secure template language for PHP +============================================================== + +Twig is a template language for PHP. + +Twig uses a syntax similar to the Django and Jinja template languages which +inspired the Twig runtime environment. + +Sponsors +-------- + +.. raw:: html + + + Blackfire.io + + +More Information +---------------- + +Read the `documentation`_ for more information. + +.. _documentation: https://twig.symfony.com/documentation diff --git a/Sources/vendor/twig/twig/composer.json b/Sources/vendor/twig/twig/composer.json new file mode 100644 index 00000000..ad83aeb1 --- /dev/null +++ b/Sources/vendor/twig/twig/composer.json @@ -0,0 +1,45 @@ +{ + "name": "twig/twig", + "type": "library", + "description": "Twig, the flexible, fast, and secure template language for PHP", + "keywords": ["templating"], + "homepage": "https://twig.symfony.com", + "license": "BSD-3-Clause", + "minimum-stability": "dev", + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Twig Team", + "role": "Contributors" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + } + ], + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-ctype": "^1.8" + }, + "require-dev": { + "symfony/phpunit-bridge": "^5.4.9|^6.3", + "psr/container": "^1.0|^2.0" + }, + "autoload": { + "psr-4" : { + "Twig\\" : "src/" + } + }, + "autoload-dev": { + "psr-4" : { + "Twig\\Tests\\" : "tests/" + } + } +} diff --git a/Sources/vendor/twig/twig/src/Cache/CacheInterface.php b/Sources/vendor/twig/twig/src/Cache/CacheInterface.php new file mode 100644 index 00000000..6e8c409b --- /dev/null +++ b/Sources/vendor/twig/twig/src/Cache/CacheInterface.php @@ -0,0 +1,46 @@ + + */ +interface CacheInterface +{ + /** + * Generates a cache key for the given template class name. + */ + public function generateKey(string $name, string $className): string; + + /** + * Writes the compiled template to cache. + * + * @param string $content The template representation as a PHP class + */ + public function write(string $key, string $content): void; + + /** + * Loads a template from the cache. + */ + public function load(string $key): void; + + /** + * Returns the modification timestamp of a key. + */ + public function getTimestamp(string $key): int; +} diff --git a/Sources/vendor/twig/twig/src/Cache/FilesystemCache.php b/Sources/vendor/twig/twig/src/Cache/FilesystemCache.php new file mode 100644 index 00000000..e075563a --- /dev/null +++ b/Sources/vendor/twig/twig/src/Cache/FilesystemCache.php @@ -0,0 +1,87 @@ + + */ +class FilesystemCache implements CacheInterface +{ + public const FORCE_BYTECODE_INVALIDATION = 1; + + private $directory; + private $options; + + public function __construct(string $directory, int $options = 0) + { + $this->directory = rtrim($directory, '\/').'/'; + $this->options = $options; + } + + public function generateKey(string $name, string $className): string + { + $hash = hash(\PHP_VERSION_ID < 80100 ? 'sha256' : 'xxh128', $className); + + return $this->directory.$hash[0].$hash[1].'/'.$hash.'.php'; + } + + public function load(string $key): void + { + if (is_file($key)) { + @include_once $key; + } + } + + public function write(string $key, string $content): void + { + $dir = \dirname($key); + if (!is_dir($dir)) { + if (false === @mkdir($dir, 0777, true)) { + clearstatcache(true, $dir); + if (!is_dir($dir)) { + throw new \RuntimeException(sprintf('Unable to create the cache directory (%s).', $dir)); + } + } + } elseif (!is_writable($dir)) { + throw new \RuntimeException(sprintf('Unable to write in the cache directory (%s).', $dir)); + } + + $tmpFile = tempnam($dir, basename($key)); + if (false !== @file_put_contents($tmpFile, $content) && @rename($tmpFile, $key)) { + @chmod($key, 0666 & ~umask()); + + if (self::FORCE_BYTECODE_INVALIDATION == ($this->options & self::FORCE_BYTECODE_INVALIDATION)) { + // Compile cached file into bytecode cache + if (\function_exists('opcache_invalidate') && filter_var(ini_get('opcache.enable'), \FILTER_VALIDATE_BOOLEAN)) { + @opcache_invalidate($key, true); + } elseif (\function_exists('apc_compile_file')) { + apc_compile_file($key); + } + } + + return; + } + + throw new \RuntimeException(sprintf('Failed to write cache file "%s".', $key)); + } + + public function getTimestamp(string $key): int + { + if (!is_file($key)) { + return 0; + } + + return (int) @filemtime($key); + } +} diff --git a/Sources/vendor/twig/twig/src/Cache/NullCache.php b/Sources/vendor/twig/twig/src/Cache/NullCache.php new file mode 100644 index 00000000..8d20d59d --- /dev/null +++ b/Sources/vendor/twig/twig/src/Cache/NullCache.php @@ -0,0 +1,38 @@ + + */ +final class NullCache implements CacheInterface +{ + public function generateKey(string $name, string $className): string + { + return ''; + } + + public function write(string $key, string $content): void + { + } + + public function load(string $key): void + { + } + + public function getTimestamp(string $key): int + { + return 0; + } +} diff --git a/Sources/vendor/twig/twig/src/Compiler.php b/Sources/vendor/twig/twig/src/Compiler.php new file mode 100644 index 00000000..eb652c61 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Compiler.php @@ -0,0 +1,223 @@ + + */ +class Compiler +{ + private $lastLine; + private $source; + private $indentation; + private $env; + private $debugInfo = []; + private $sourceOffset; + private $sourceLine; + private $varNameSalt = 0; + + public function __construct(Environment $env) + { + $this->env = $env; + } + + public function getEnvironment(): Environment + { + return $this->env; + } + + public function getSource(): string + { + return $this->source; + } + + /** + * @return $this + */ + public function reset(int $indentation = 0) + { + $this->lastLine = null; + $this->source = ''; + $this->debugInfo = []; + $this->sourceOffset = 0; + // source code starts at 1 (as we then increment it when we encounter new lines) + $this->sourceLine = 1; + $this->indentation = $indentation; + $this->varNameSalt = 0; + + return $this; + } + + /** + * @return $this + */ + public function compile(Node $node, int $indentation = 0) + { + $this->reset($indentation); + $node->compile($this); + + return $this; + } + + /** + * @return $this + */ + public function subcompile(Node $node, bool $raw = true) + { + if (false === $raw) { + $this->source .= str_repeat(' ', $this->indentation * 4); + } + + $node->compile($this); + + return $this; + } + + /** + * Adds a raw string to the compiled code. + * + * @return $this + */ + public function raw(string $string) + { + $this->source .= $string; + + return $this; + } + + /** + * Writes a string to the compiled code by adding indentation. + * + * @return $this + */ + public function write(...$strings) + { + foreach ($strings as $string) { + $this->source .= str_repeat(' ', $this->indentation * 4).$string; + } + + return $this; + } + + /** + * Adds a quoted string to the compiled code. + * + * @return $this + */ + public function string(string $value) + { + $this->source .= sprintf('"%s"', addcslashes($value, "\0\t\"\$\\")); + + return $this; + } + + /** + * Returns a PHP representation of a given value. + * + * @return $this + */ + public function repr($value) + { + if (\is_int($value) || \is_float($value)) { + if (false !== $locale = setlocale(\LC_NUMERIC, '0')) { + setlocale(\LC_NUMERIC, 'C'); + } + + $this->raw(var_export($value, true)); + + if (false !== $locale) { + setlocale(\LC_NUMERIC, $locale); + } + } elseif (null === $value) { + $this->raw('null'); + } elseif (\is_bool($value)) { + $this->raw($value ? 'true' : 'false'); + } elseif (\is_array($value)) { + $this->raw('array('); + $first = true; + foreach ($value as $key => $v) { + if (!$first) { + $this->raw(', '); + } + $first = false; + $this->repr($key); + $this->raw(' => '); + $this->repr($v); + } + $this->raw(')'); + } else { + $this->string($value); + } + + return $this; + } + + /** + * @return $this + */ + public function addDebugInfo(Node $node) + { + if ($node->getTemplateLine() != $this->lastLine) { + $this->write(sprintf("// line %d\n", $node->getTemplateLine())); + + $this->sourceLine += substr_count($this->source, "\n", $this->sourceOffset); + $this->sourceOffset = \strlen($this->source); + $this->debugInfo[$this->sourceLine] = $node->getTemplateLine(); + + $this->lastLine = $node->getTemplateLine(); + } + + return $this; + } + + public function getDebugInfo(): array + { + ksort($this->debugInfo); + + return $this->debugInfo; + } + + /** + * @return $this + */ + public function indent(int $step = 1) + { + $this->indentation += $step; + + return $this; + } + + /** + * @return $this + * + * @throws \LogicException When trying to outdent too much so the indentation would become negative + */ + public function outdent(int $step = 1) + { + // can't outdent by more steps than the current indentation level + if ($this->indentation < $step) { + throw new \LogicException('Unable to call outdent() as the indentation would become negative.'); + } + + $this->indentation -= $step; + + return $this; + } + + public function getVarName(): string + { + return sprintf('__internal_compile_%d', $this->varNameSalt++); + } +} diff --git a/Sources/vendor/twig/twig/src/Environment.php b/Sources/vendor/twig/twig/src/Environment.php new file mode 100644 index 00000000..a01c366c --- /dev/null +++ b/Sources/vendor/twig/twig/src/Environment.php @@ -0,0 +1,841 @@ + + */ +class Environment +{ + public const VERSION = '3.7.1'; + public const VERSION_ID = 30701; + public const MAJOR_VERSION = 3; + public const MINOR_VERSION = 7; + public const RELEASE_VERSION = 1; + public const EXTRA_VERSION = ''; + + private $charset; + private $loader; + private $debug; + private $autoReload; + private $cache; + private $lexer; + private $parser; + private $compiler; + /** @var array */ + private $globals = []; + private $resolvedGlobals; + private $loadedTemplates; + private $strictVariables; + private $templateClassPrefix = '__TwigTemplate_'; + private $originalCache; + private $extensionSet; + private $runtimeLoaders = []; + private $runtimes = []; + private $optionsHash; + + /** + * Constructor. + * + * Available options: + * + * * debug: When set to true, it automatically set "auto_reload" to true as + * well (default to false). + * + * * charset: The charset used by the templates (default to UTF-8). + * + * * cache: An absolute path where to store the compiled templates, + * a \Twig\Cache\CacheInterface implementation, + * or false to disable compilation cache (default). + * + * * auto_reload: Whether to reload the template if the original source changed. + * If you don't provide the auto_reload option, it will be + * determined automatically based on the debug value. + * + * * strict_variables: Whether to ignore invalid variables in templates + * (default to false). + * + * * autoescape: Whether to enable auto-escaping (default to html): + * * false: disable auto-escaping + * * html, js: set the autoescaping to one of the supported strategies + * * name: set the autoescaping strategy based on the template name extension + * * PHP callback: a PHP callback that returns an escaping strategy based on the template "name" + * + * * optimizations: A flag that indicates which optimizations to apply + * (default to -1 which means that all optimizations are enabled; + * set it to 0 to disable). + */ + public function __construct(LoaderInterface $loader, $options = []) + { + $this->setLoader($loader); + + $options = array_merge([ + 'debug' => false, + 'charset' => 'UTF-8', + 'strict_variables' => false, + 'autoescape' => 'html', + 'cache' => false, + 'auto_reload' => null, + 'optimizations' => -1, + ], $options); + + $this->debug = (bool) $options['debug']; + $this->setCharset($options['charset'] ?? 'UTF-8'); + $this->autoReload = null === $options['auto_reload'] ? $this->debug : (bool) $options['auto_reload']; + $this->strictVariables = (bool) $options['strict_variables']; + $this->setCache($options['cache']); + $this->extensionSet = new ExtensionSet(); + + $this->addExtension(new CoreExtension()); + $this->addExtension(new EscaperExtension($options['autoescape'])); + $this->addExtension(new OptimizerExtension($options['optimizations'])); + } + + /** + * Enables debugging mode. + */ + public function enableDebug() + { + $this->debug = true; + $this->updateOptionsHash(); + } + + /** + * Disables debugging mode. + */ + public function disableDebug() + { + $this->debug = false; + $this->updateOptionsHash(); + } + + /** + * Checks if debug mode is enabled. + * + * @return bool true if debug mode is enabled, false otherwise + */ + public function isDebug() + { + return $this->debug; + } + + /** + * Enables the auto_reload option. + */ + public function enableAutoReload() + { + $this->autoReload = true; + } + + /** + * Disables the auto_reload option. + */ + public function disableAutoReload() + { + $this->autoReload = false; + } + + /** + * Checks if the auto_reload option is enabled. + * + * @return bool true if auto_reload is enabled, false otherwise + */ + public function isAutoReload() + { + return $this->autoReload; + } + + /** + * Enables the strict_variables option. + */ + public function enableStrictVariables() + { + $this->strictVariables = true; + $this->updateOptionsHash(); + } + + /** + * Disables the strict_variables option. + */ + public function disableStrictVariables() + { + $this->strictVariables = false; + $this->updateOptionsHash(); + } + + /** + * Checks if the strict_variables option is enabled. + * + * @return bool true if strict_variables is enabled, false otherwise + */ + public function isStrictVariables() + { + return $this->strictVariables; + } + + /** + * Gets the current cache implementation. + * + * @param bool $original Whether to return the original cache option or the real cache instance + * + * @return CacheInterface|string|false A Twig\Cache\CacheInterface implementation, + * an absolute path to the compiled templates, + * or false to disable cache + */ + public function getCache($original = true) + { + return $original ? $this->originalCache : $this->cache; + } + + /** + * Sets the current cache implementation. + * + * @param CacheInterface|string|false $cache A Twig\Cache\CacheInterface implementation, + * an absolute path to the compiled templates, + * or false to disable cache + */ + public function setCache($cache) + { + if (\is_string($cache)) { + $this->originalCache = $cache; + $this->cache = new FilesystemCache($cache, $this->autoReload ? FilesystemCache::FORCE_BYTECODE_INVALIDATION : 0); + } elseif (false === $cache) { + $this->originalCache = $cache; + $this->cache = new NullCache(); + } elseif ($cache instanceof CacheInterface) { + $this->originalCache = $this->cache = $cache; + } else { + throw new \LogicException('Cache can only be a string, false, or a \Twig\Cache\CacheInterface implementation.'); + } + } + + /** + * Gets the template class associated with the given string. + * + * The generated template class is based on the following parameters: + * + * * The cache key for the given template; + * * The currently enabled extensions; + * * Whether the Twig C extension is available or not; + * * PHP version; + * * Twig version; + * * Options with what environment was created. + * + * @param string $name The name for which to calculate the template class name + * @param int|null $index The index if it is an embedded template + * + * @internal + */ + public function getTemplateClass(string $name, int $index = null): string + { + $key = $this->getLoader()->getCacheKey($name).$this->optionsHash; + + return $this->templateClassPrefix.hash(\PHP_VERSION_ID < 80100 ? 'sha256' : 'xxh128', $key).(null === $index ? '' : '___'.$index); + } + + /** + * Renders a template. + * + * @param string|TemplateWrapper $name The template name + * + * @throws LoaderError When the template cannot be found + * @throws SyntaxError When an error occurred during compilation + * @throws RuntimeError When an error occurred during rendering + */ + public function render($name, array $context = []): string + { + return $this->load($name)->render($context); + } + + /** + * Displays a template. + * + * @param string|TemplateWrapper $name The template name + * + * @throws LoaderError When the template cannot be found + * @throws SyntaxError When an error occurred during compilation + * @throws RuntimeError When an error occurred during rendering + */ + public function display($name, array $context = []): void + { + $this->load($name)->display($context); + } + + /** + * Loads a template. + * + * @param string|TemplateWrapper $name The template name + * + * @throws LoaderError When the template cannot be found + * @throws RuntimeError When a previously generated cache is corrupted + * @throws SyntaxError When an error occurred during compilation + */ + public function load($name): TemplateWrapper + { + if ($name instanceof TemplateWrapper) { + return $name; + } + + return new TemplateWrapper($this, $this->loadTemplate($this->getTemplateClass($name), $name)); + } + + /** + * Loads a template internal representation. + * + * This method is for internal use only and should never be called + * directly. + * + * @param string $name The template name + * @param int $index The index if it is an embedded template + * + * @throws LoaderError When the template cannot be found + * @throws RuntimeError When a previously generated cache is corrupted + * @throws SyntaxError When an error occurred during compilation + * + * @internal + */ + public function loadTemplate(string $cls, string $name, int $index = null): Template + { + $mainCls = $cls; + if (null !== $index) { + $cls .= '___'.$index; + } + + if (isset($this->loadedTemplates[$cls])) { + return $this->loadedTemplates[$cls]; + } + + if (!class_exists($cls, false)) { + $key = $this->cache->generateKey($name, $mainCls); + + if (!$this->isAutoReload() || $this->isTemplateFresh($name, $this->cache->getTimestamp($key))) { + $this->cache->load($key); + } + + $source = null; + if (!class_exists($cls, false)) { + $source = $this->getLoader()->getSourceContext($name); + $content = $this->compileSource($source); + $this->cache->write($key, $content); + $this->cache->load($key); + + if (!class_exists($mainCls, false)) { + /* Last line of defense if either $this->bcWriteCacheFile was used, + * $this->cache is implemented as a no-op or we have a race condition + * where the cache was cleared between the above calls to write to and load from + * the cache. + */ + eval('?>'.$content); + } + + if (!class_exists($cls, false)) { + throw new RuntimeError(sprintf('Failed to load Twig template "%s", index "%s": cache might be corrupted.', $name, $index), -1, $source); + } + } + } + + $this->extensionSet->initRuntime(); + + return $this->loadedTemplates[$cls] = new $cls($this); + } + + /** + * Creates a template from source. + * + * This method should not be used as a generic way to load templates. + * + * @param string $template The template source + * @param string $name An optional name of the template to be used in error messages + * + * @throws LoaderError When the template cannot be found + * @throws SyntaxError When an error occurred during compilation + */ + public function createTemplate(string $template, string $name = null): TemplateWrapper + { + $hash = hash(\PHP_VERSION_ID < 80100 ? 'sha256' : 'xxh128', $template, false); + if (null !== $name) { + $name = sprintf('%s (string template %s)', $name, $hash); + } else { + $name = sprintf('__string_template__%s', $hash); + } + + $loader = new ChainLoader([ + new ArrayLoader([$name => $template]), + $current = $this->getLoader(), + ]); + + $this->setLoader($loader); + try { + return new TemplateWrapper($this, $this->loadTemplate($this->getTemplateClass($name), $name)); + } finally { + $this->setLoader($current); + } + } + + /** + * Returns true if the template is still fresh. + * + * Besides checking the loader for freshness information, + * this method also checks if the enabled extensions have + * not changed. + * + * @param int $time The last modification time of the cached template + */ + public function isTemplateFresh(string $name, int $time): bool + { + return $this->extensionSet->getLastModified() <= $time && $this->getLoader()->isFresh($name, $time); + } + + /** + * Tries to load a template consecutively from an array. + * + * Similar to load() but it also accepts instances of \Twig\Template and + * \Twig\TemplateWrapper, and an array of templates where each is tried to be loaded. + * + * @param string|TemplateWrapper|array $names A template or an array of templates to try consecutively + * + * @throws LoaderError When none of the templates can be found + * @throws SyntaxError When an error occurred during compilation + */ + public function resolveTemplate($names): TemplateWrapper + { + if (!\is_array($names)) { + return $this->load($names); + } + + $count = \count($names); + foreach ($names as $name) { + if ($name instanceof Template) { + return $name; + } + if ($name instanceof TemplateWrapper) { + return $name; + } + + if (1 !== $count && !$this->getLoader()->exists($name)) { + continue; + } + + return $this->load($name); + } + + throw new LoaderError(sprintf('Unable to find one of the following templates: "%s".', implode('", "', $names))); + } + + public function setLexer(Lexer $lexer) + { + $this->lexer = $lexer; + } + + /** + * @throws SyntaxError When the code is syntactically wrong + */ + public function tokenize(Source $source): TokenStream + { + if (null === $this->lexer) { + $this->lexer = new Lexer($this); + } + + return $this->lexer->tokenize($source); + } + + public function setParser(Parser $parser) + { + $this->parser = $parser; + } + + /** + * Converts a token stream to a node tree. + * + * @throws SyntaxError When the token stream is syntactically or semantically wrong + */ + public function parse(TokenStream $stream): ModuleNode + { + if (null === $this->parser) { + $this->parser = new Parser($this); + } + + return $this->parser->parse($stream); + } + + public function setCompiler(Compiler $compiler) + { + $this->compiler = $compiler; + } + + /** + * Compiles a node and returns the PHP code. + */ + public function compile(Node $node): string + { + if (null === $this->compiler) { + $this->compiler = new Compiler($this); + } + + return $this->compiler->compile($node)->getSource(); + } + + /** + * Compiles a template source code. + * + * @throws SyntaxError When there was an error during tokenizing, parsing or compiling + */ + public function compileSource(Source $source): string + { + try { + return $this->compile($this->parse($this->tokenize($source))); + } catch (Error $e) { + $e->setSourceContext($source); + throw $e; + } catch (\Exception $e) { + throw new SyntaxError(sprintf('An exception has been thrown during the compilation of a template ("%s").', $e->getMessage()), -1, $source, $e); + } + } + + public function setLoader(LoaderInterface $loader) + { + $this->loader = $loader; + } + + public function getLoader(): LoaderInterface + { + return $this->loader; + } + + public function setCharset(string $charset) + { + if ('UTF8' === $charset = null === $charset ? null : strtoupper($charset)) { + // iconv on Windows requires "UTF-8" instead of "UTF8" + $charset = 'UTF-8'; + } + + $this->charset = $charset; + } + + public function getCharset(): string + { + return $this->charset; + } + + public function hasExtension(string $class): bool + { + return $this->extensionSet->hasExtension($class); + } + + public function addRuntimeLoader(RuntimeLoaderInterface $loader) + { + $this->runtimeLoaders[] = $loader; + } + + /** + * @template TExtension of ExtensionInterface + * + * @param class-string $class + * + * @return TExtension + */ + public function getExtension(string $class): ExtensionInterface + { + return $this->extensionSet->getExtension($class); + } + + /** + * Returns the runtime implementation of a Twig element (filter/function/tag/test). + * + * @template TRuntime of object + * + * @param class-string $class A runtime class name + * + * @return TRuntime The runtime implementation + * + * @throws RuntimeError When the template cannot be found + */ + public function getRuntime(string $class) + { + if (isset($this->runtimes[$class])) { + return $this->runtimes[$class]; + } + + foreach ($this->runtimeLoaders as $loader) { + if (null !== $runtime = $loader->load($class)) { + return $this->runtimes[$class] = $runtime; + } + } + + throw new RuntimeError(sprintf('Unable to load the "%s" runtime.', $class)); + } + + public function addExtension(ExtensionInterface $extension) + { + $this->extensionSet->addExtension($extension); + $this->updateOptionsHash(); + } + + /** + * @param ExtensionInterface[] $extensions An array of extensions + */ + public function setExtensions(array $extensions) + { + $this->extensionSet->setExtensions($extensions); + $this->updateOptionsHash(); + } + + /** + * @return ExtensionInterface[] An array of extensions (keys are for internal usage only and should not be relied on) + */ + public function getExtensions(): array + { + return $this->extensionSet->getExtensions(); + } + + public function addTokenParser(TokenParserInterface $parser) + { + $this->extensionSet->addTokenParser($parser); + } + + /** + * @return TokenParserInterface[] + * + * @internal + */ + public function getTokenParsers(): array + { + return $this->extensionSet->getTokenParsers(); + } + + /** + * @internal + */ + public function getTokenParser(string $name): ?TokenParserInterface + { + return $this->extensionSet->getTokenParser($name); + } + + public function registerUndefinedTokenParserCallback(callable $callable): void + { + $this->extensionSet->registerUndefinedTokenParserCallback($callable); + } + + public function addNodeVisitor(NodeVisitorInterface $visitor) + { + $this->extensionSet->addNodeVisitor($visitor); + } + + /** + * @return NodeVisitorInterface[] + * + * @internal + */ + public function getNodeVisitors(): array + { + return $this->extensionSet->getNodeVisitors(); + } + + public function addFilter(TwigFilter $filter) + { + $this->extensionSet->addFilter($filter); + } + + /** + * @internal + */ + public function getFilter(string $name): ?TwigFilter + { + return $this->extensionSet->getFilter($name); + } + + public function registerUndefinedFilterCallback(callable $callable): void + { + $this->extensionSet->registerUndefinedFilterCallback($callable); + } + + /** + * Gets the registered Filters. + * + * Be warned that this method cannot return filters defined with registerUndefinedFilterCallback. + * + * @return TwigFilter[] + * + * @see registerUndefinedFilterCallback + * + * @internal + */ + public function getFilters(): array + { + return $this->extensionSet->getFilters(); + } + + public function addTest(TwigTest $test) + { + $this->extensionSet->addTest($test); + } + + /** + * @return TwigTest[] + * + * @internal + */ + public function getTests(): array + { + return $this->extensionSet->getTests(); + } + + /** + * @internal + */ + public function getTest(string $name): ?TwigTest + { + return $this->extensionSet->getTest($name); + } + + public function addFunction(TwigFunction $function) + { + $this->extensionSet->addFunction($function); + } + + /** + * @internal + */ + public function getFunction(string $name): ?TwigFunction + { + return $this->extensionSet->getFunction($name); + } + + public function registerUndefinedFunctionCallback(callable $callable): void + { + $this->extensionSet->registerUndefinedFunctionCallback($callable); + } + + /** + * Gets registered functions. + * + * Be warned that this method cannot return functions defined with registerUndefinedFunctionCallback. + * + * @return TwigFunction[] + * + * @see registerUndefinedFunctionCallback + * + * @internal + */ + public function getFunctions(): array + { + return $this->extensionSet->getFunctions(); + } + + /** + * Registers a Global. + * + * New globals can be added before compiling or rendering a template; + * but after, you can only update existing globals. + * + * @param mixed $value The global value + */ + public function addGlobal(string $name, $value) + { + if ($this->extensionSet->isInitialized() && !\array_key_exists($name, $this->getGlobals())) { + throw new \LogicException(sprintf('Unable to add global "%s" as the runtime or the extensions have already been initialized.', $name)); + } + + if (null !== $this->resolvedGlobals) { + $this->resolvedGlobals[$name] = $value; + } else { + $this->globals[$name] = $value; + } + } + + /** + * @internal + * + * @return array + */ + public function getGlobals(): array + { + if ($this->extensionSet->isInitialized()) { + if (null === $this->resolvedGlobals) { + $this->resolvedGlobals = array_merge($this->extensionSet->getGlobals(), $this->globals); + } + + return $this->resolvedGlobals; + } + + return array_merge($this->extensionSet->getGlobals(), $this->globals); + } + + public function mergeGlobals(array $context): array + { + // we don't use array_merge as the context being generally + // bigger than globals, this code is faster. + foreach ($this->getGlobals() as $key => $value) { + if (!\array_key_exists($key, $context)) { + $context[$key] = $value; + } + } + + return $context; + } + + /** + * @internal + * + * @return array}> + */ + public function getUnaryOperators(): array + { + return $this->extensionSet->getUnaryOperators(); + } + + /** + * @internal + * + * @return array, associativity: ExpressionParser::OPERATOR_*}> + */ + public function getBinaryOperators(): array + { + return $this->extensionSet->getBinaryOperators(); + } + + private function updateOptionsHash(): void + { + $this->optionsHash = implode(':', [ + $this->extensionSet->getSignature(), + \PHP_MAJOR_VERSION, + \PHP_MINOR_VERSION, + self::VERSION, + (int) $this->debug, + (int) $this->strictVariables, + ]); + } +} diff --git a/Sources/vendor/twig/twig/src/Error/Error.php b/Sources/vendor/twig/twig/src/Error/Error.php new file mode 100644 index 00000000..a68be65f --- /dev/null +++ b/Sources/vendor/twig/twig/src/Error/Error.php @@ -0,0 +1,227 @@ + + */ +class Error extends \Exception +{ + private $lineno; + private $name; + private $rawMessage; + private $sourcePath; + private $sourceCode; + + /** + * Constructor. + * + * By default, automatic guessing is enabled. + * + * @param string $message The error message + * @param int $lineno The template line where the error occurred + * @param Source|null $source The source context where the error occurred + */ + public function __construct(string $message, int $lineno = -1, Source $source = null, \Exception $previous = null) + { + parent::__construct('', 0, $previous); + + if (null === $source) { + $name = null; + } else { + $name = $source->getName(); + $this->sourceCode = $source->getCode(); + $this->sourcePath = $source->getPath(); + } + + $this->lineno = $lineno; + $this->name = $name; + $this->rawMessage = $message; + $this->updateRepr(); + } + + public function getRawMessage(): string + { + return $this->rawMessage; + } + + public function getTemplateLine(): int + { + return $this->lineno; + } + + public function setTemplateLine(int $lineno): void + { + $this->lineno = $lineno; + + $this->updateRepr(); + } + + public function getSourceContext(): ?Source + { + return $this->name ? new Source($this->sourceCode, $this->name, $this->sourcePath) : null; + } + + public function setSourceContext(Source $source = null): void + { + if (null === $source) { + $this->sourceCode = $this->name = $this->sourcePath = null; + } else { + $this->sourceCode = $source->getCode(); + $this->name = $source->getName(); + $this->sourcePath = $source->getPath(); + } + + $this->updateRepr(); + } + + public function guess(): void + { + $this->guessTemplateInfo(); + $this->updateRepr(); + } + + public function appendMessage($rawMessage): void + { + $this->rawMessage .= $rawMessage; + $this->updateRepr(); + } + + private function updateRepr(): void + { + $this->message = $this->rawMessage; + + if ($this->sourcePath && $this->lineno > 0) { + $this->file = $this->sourcePath; + $this->line = $this->lineno; + + return; + } + + $dot = false; + if ('.' === substr($this->message, -1)) { + $this->message = substr($this->message, 0, -1); + $dot = true; + } + + $questionMark = false; + if ('?' === substr($this->message, -1)) { + $this->message = substr($this->message, 0, -1); + $questionMark = true; + } + + if ($this->name) { + if (\is_string($this->name) || (\is_object($this->name) && method_exists($this->name, '__toString'))) { + $name = sprintf('"%s"', $this->name); + } else { + $name = json_encode($this->name); + } + $this->message .= sprintf(' in %s', $name); + } + + if ($this->lineno && $this->lineno >= 0) { + $this->message .= sprintf(' at line %d', $this->lineno); + } + + if ($dot) { + $this->message .= '.'; + } + + if ($questionMark) { + $this->message .= '?'; + } + } + + private function guessTemplateInfo(): void + { + $template = null; + $templateClass = null; + + $backtrace = debug_backtrace(\DEBUG_BACKTRACE_IGNORE_ARGS | \DEBUG_BACKTRACE_PROVIDE_OBJECT); + foreach ($backtrace as $trace) { + if (isset($trace['object']) && $trace['object'] instanceof Template) { + $currentClass = \get_class($trace['object']); + $isEmbedContainer = null === $templateClass ? false : 0 === strpos($templateClass, $currentClass); + if (null === $this->name || ($this->name == $trace['object']->getTemplateName() && !$isEmbedContainer)) { + $template = $trace['object']; + $templateClass = \get_class($trace['object']); + } + } + } + + // update template name + if (null !== $template && null === $this->name) { + $this->name = $template->getTemplateName(); + } + + // update template path if any + if (null !== $template && null === $this->sourcePath) { + $src = $template->getSourceContext(); + $this->sourceCode = $src->getCode(); + $this->sourcePath = $src->getPath(); + } + + if (null === $template || $this->lineno > -1) { + return; + } + + $r = new \ReflectionObject($template); + $file = $r->getFileName(); + + $exceptions = [$e = $this]; + while ($e = $e->getPrevious()) { + $exceptions[] = $e; + } + + while ($e = array_pop($exceptions)) { + $traces = $e->getTrace(); + array_unshift($traces, ['file' => $e->getFile(), 'line' => $e->getLine()]); + + while ($trace = array_shift($traces)) { + if (!isset($trace['file']) || !isset($trace['line']) || $file != $trace['file']) { + continue; + } + + foreach ($template->getDebugInfo() as $codeLine => $templateLine) { + if ($codeLine <= $trace['line']) { + // update template line + $this->lineno = $templateLine; + + return; + } + } + } + } + } +} diff --git a/Sources/vendor/twig/twig/src/Error/LoaderError.php b/Sources/vendor/twig/twig/src/Error/LoaderError.php new file mode 100644 index 00000000..7c8c23c1 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Error/LoaderError.php @@ -0,0 +1,21 @@ + + */ +class LoaderError extends Error +{ +} diff --git a/Sources/vendor/twig/twig/src/Error/RuntimeError.php b/Sources/vendor/twig/twig/src/Error/RuntimeError.php new file mode 100644 index 00000000..f6b84766 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Error/RuntimeError.php @@ -0,0 +1,22 @@ + + */ +class RuntimeError extends Error +{ +} diff --git a/Sources/vendor/twig/twig/src/Error/SyntaxError.php b/Sources/vendor/twig/twig/src/Error/SyntaxError.php new file mode 100644 index 00000000..726b3309 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Error/SyntaxError.php @@ -0,0 +1,46 @@ + + */ +class SyntaxError extends Error +{ + /** + * Tweaks the error message to include suggestions. + * + * @param string $name The original name of the item that does not exist + * @param array $items An array of possible items + */ + public function addSuggestions(string $name, array $items): void + { + $alternatives = []; + foreach ($items as $item) { + $lev = levenshtein($name, $item); + if ($lev <= \strlen($name) / 3 || false !== strpos($item, $name)) { + $alternatives[$item] = $lev; + } + } + + if (!$alternatives) { + return; + } + + asort($alternatives); + + $this->appendMessage(sprintf(' Did you mean "%s"?', implode('", "', array_keys($alternatives)))); + } +} diff --git a/Sources/vendor/twig/twig/src/ExpressionParser.php b/Sources/vendor/twig/twig/src/ExpressionParser.php new file mode 100644 index 00000000..38347cb3 --- /dev/null +++ b/Sources/vendor/twig/twig/src/ExpressionParser.php @@ -0,0 +1,842 @@ + + */ +class ExpressionParser +{ + public const OPERATOR_LEFT = 1; + public const OPERATOR_RIGHT = 2; + + private $parser; + private $env; + /** @var array}> */ + private $unaryOperators; + /** @var array, associativity: self::OPERATOR_*}> */ + private $binaryOperators; + + public function __construct(Parser $parser, Environment $env) + { + $this->parser = $parser; + $this->env = $env; + $this->unaryOperators = $env->getUnaryOperators(); + $this->binaryOperators = $env->getBinaryOperators(); + } + + public function parseExpression($precedence = 0, $allowArrow = false) + { + if ($allowArrow && $arrow = $this->parseArrow()) { + return $arrow; + } + + $expr = $this->getPrimary(); + $token = $this->parser->getCurrentToken(); + while ($this->isBinary($token) && $this->binaryOperators[$token->getValue()]['precedence'] >= $precedence) { + $op = $this->binaryOperators[$token->getValue()]; + $this->parser->getStream()->next(); + + if ('is not' === $token->getValue()) { + $expr = $this->parseNotTestExpression($expr); + } elseif ('is' === $token->getValue()) { + $expr = $this->parseTestExpression($expr); + } elseif (isset($op['callable'])) { + $expr = $op['callable']($this->parser, $expr); + } else { + $expr1 = $this->parseExpression(self::OPERATOR_LEFT === $op['associativity'] ? $op['precedence'] + 1 : $op['precedence'], true); + $class = $op['class']; + $expr = new $class($expr, $expr1, $token->getLine()); + } + + $token = $this->parser->getCurrentToken(); + } + + if (0 === $precedence) { + return $this->parseConditionalExpression($expr); + } + + return $expr; + } + + /** + * @return ArrowFunctionExpression|null + */ + private function parseArrow() + { + $stream = $this->parser->getStream(); + + // short array syntax (one argument, no parentheses)? + if ($stream->look(1)->test(/* Token::ARROW_TYPE */ 12)) { + $line = $stream->getCurrent()->getLine(); + $token = $stream->expect(/* Token::NAME_TYPE */ 5); + $names = [new AssignNameExpression($token->getValue(), $token->getLine())]; + $stream->expect(/* Token::ARROW_TYPE */ 12); + + return new ArrowFunctionExpression($this->parseExpression(0), new Node($names), $line); + } + + // first, determine if we are parsing an arrow function by finding => (long form) + $i = 0; + if (!$stream->look($i)->test(/* Token::PUNCTUATION_TYPE */ 9, '(')) { + return null; + } + ++$i; + while (true) { + // variable name + ++$i; + if (!$stream->look($i)->test(/* Token::PUNCTUATION_TYPE */ 9, ',')) { + break; + } + ++$i; + } + if (!$stream->look($i)->test(/* Token::PUNCTUATION_TYPE */ 9, ')')) { + return null; + } + ++$i; + if (!$stream->look($i)->test(/* Token::ARROW_TYPE */ 12)) { + return null; + } + + // yes, let's parse it properly + $token = $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, '('); + $line = $token->getLine(); + + $names = []; + while (true) { + $token = $stream->expect(/* Token::NAME_TYPE */ 5); + $names[] = new AssignNameExpression($token->getValue(), $token->getLine()); + + if (!$stream->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ',')) { + break; + } + } + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ')'); + $stream->expect(/* Token::ARROW_TYPE */ 12); + + return new ArrowFunctionExpression($this->parseExpression(0), new Node($names), $line); + } + + private function getPrimary(): AbstractExpression + { + $token = $this->parser->getCurrentToken(); + + if ($this->isUnary($token)) { + $operator = $this->unaryOperators[$token->getValue()]; + $this->parser->getStream()->next(); + $expr = $this->parseExpression($operator['precedence']); + $class = $operator['class']; + + return $this->parsePostfixExpression(new $class($expr, $token->getLine())); + } elseif ($token->test(/* Token::PUNCTUATION_TYPE */ 9, '(')) { + $this->parser->getStream()->next(); + $expr = $this->parseExpression(); + $this->parser->getStream()->expect(/* Token::PUNCTUATION_TYPE */ 9, ')', 'An opened parenthesis is not properly closed'); + + return $this->parsePostfixExpression($expr); + } + + return $this->parsePrimaryExpression(); + } + + private function parseConditionalExpression($expr): AbstractExpression + { + while ($this->parser->getStream()->nextIf(/* Token::PUNCTUATION_TYPE */ 9, '?')) { + if (!$this->parser->getStream()->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ':')) { + $expr2 = $this->parseExpression(); + if ($this->parser->getStream()->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ':')) { + $expr3 = $this->parseExpression(); + } else { + $expr3 = new ConstantExpression('', $this->parser->getCurrentToken()->getLine()); + } + } else { + $expr2 = $expr; + $expr3 = $this->parseExpression(); + } + + $expr = new ConditionalExpression($expr, $expr2, $expr3, $this->parser->getCurrentToken()->getLine()); + } + + return $expr; + } + + private function isUnary(Token $token): bool + { + return $token->test(/* Token::OPERATOR_TYPE */ 8) && isset($this->unaryOperators[$token->getValue()]); + } + + private function isBinary(Token $token): bool + { + return $token->test(/* Token::OPERATOR_TYPE */ 8) && isset($this->binaryOperators[$token->getValue()]); + } + + public function parsePrimaryExpression() + { + $token = $this->parser->getCurrentToken(); + switch ($token->getType()) { + case /* Token::NAME_TYPE */ 5: + $this->parser->getStream()->next(); + switch ($token->getValue()) { + case 'true': + case 'TRUE': + $node = new ConstantExpression(true, $token->getLine()); + break; + + case 'false': + case 'FALSE': + $node = new ConstantExpression(false, $token->getLine()); + break; + + case 'none': + case 'NONE': + case 'null': + case 'NULL': + $node = new ConstantExpression(null, $token->getLine()); + break; + + default: + if ('(' === $this->parser->getCurrentToken()->getValue()) { + $node = $this->getFunctionNode($token->getValue(), $token->getLine()); + } else { + $node = new NameExpression($token->getValue(), $token->getLine()); + } + } + break; + + case /* Token::NUMBER_TYPE */ 6: + $this->parser->getStream()->next(); + $node = new ConstantExpression($token->getValue(), $token->getLine()); + break; + + case /* Token::STRING_TYPE */ 7: + case /* Token::INTERPOLATION_START_TYPE */ 10: + $node = $this->parseStringExpression(); + break; + + case /* Token::OPERATOR_TYPE */ 8: + if (preg_match(Lexer::REGEX_NAME, $token->getValue(), $matches) && $matches[0] == $token->getValue()) { + // in this context, string operators are variable names + $this->parser->getStream()->next(); + $node = new NameExpression($token->getValue(), $token->getLine()); + break; + } + + if (isset($this->unaryOperators[$token->getValue()])) { + $class = $this->unaryOperators[$token->getValue()]['class']; + if (!\in_array($class, [NegUnary::class, PosUnary::class])) { + throw new SyntaxError(sprintf('Unexpected unary operator "%s".', $token->getValue()), $token->getLine(), $this->parser->getStream()->getSourceContext()); + } + + $this->parser->getStream()->next(); + $expr = $this->parsePrimaryExpression(); + + $node = new $class($expr, $token->getLine()); + break; + } + + // no break + default: + if ($token->test(/* Token::PUNCTUATION_TYPE */ 9, '[')) { + $node = $this->parseArrayExpression(); + } elseif ($token->test(/* Token::PUNCTUATION_TYPE */ 9, '{')) { + $node = $this->parseHashExpression(); + } elseif ($token->test(/* Token::OPERATOR_TYPE */ 8, '=') && ('==' === $this->parser->getStream()->look(-1)->getValue() || '!=' === $this->parser->getStream()->look(-1)->getValue())) { + throw new SyntaxError(sprintf('Unexpected operator of value "%s". Did you try to use "===" or "!==" for strict comparison? Use "is same as(value)" instead.', $token->getValue()), $token->getLine(), $this->parser->getStream()->getSourceContext()); + } else { + throw new SyntaxError(sprintf('Unexpected token "%s" of value "%s".', Token::typeToEnglish($token->getType()), $token->getValue()), $token->getLine(), $this->parser->getStream()->getSourceContext()); + } + } + + return $this->parsePostfixExpression($node); + } + + public function parseStringExpression() + { + $stream = $this->parser->getStream(); + + $nodes = []; + // a string cannot be followed by another string in a single expression + $nextCanBeString = true; + while (true) { + if ($nextCanBeString && $token = $stream->nextIf(/* Token::STRING_TYPE */ 7)) { + $nodes[] = new ConstantExpression($token->getValue(), $token->getLine()); + $nextCanBeString = false; + } elseif ($stream->nextIf(/* Token::INTERPOLATION_START_TYPE */ 10)) { + $nodes[] = $this->parseExpression(); + $stream->expect(/* Token::INTERPOLATION_END_TYPE */ 11); + $nextCanBeString = true; + } else { + break; + } + } + + $expr = array_shift($nodes); + foreach ($nodes as $node) { + $expr = new ConcatBinary($expr, $node, $node->getTemplateLine()); + } + + return $expr; + } + + public function parseArrayExpression() + { + $stream = $this->parser->getStream(); + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, '[', 'An array element was expected'); + + $node = new ArrayExpression([], $stream->getCurrent()->getLine()); + $first = true; + while (!$stream->test(/* Token::PUNCTUATION_TYPE */ 9, ']')) { + if (!$first) { + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ',', 'An array element must be followed by a comma'); + + // trailing ,? + if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, ']')) { + break; + } + } + $first = false; + + if ($stream->test(/* Token::SPREAD_TYPE */ 13)) { + $stream->next(); + $expr = $this->parseExpression(); + $expr->setAttribute('spread', true); + $node->addElement($expr); + } else { + $node->addElement($this->parseExpression()); + } + } + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ']', 'An opened array is not properly closed'); + + return $node; + } + + public function parseHashExpression() + { + $stream = $this->parser->getStream(); + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, '{', 'A hash element was expected'); + + $node = new ArrayExpression([], $stream->getCurrent()->getLine()); + $first = true; + while (!$stream->test(/* Token::PUNCTUATION_TYPE */ 9, '}')) { + if (!$first) { + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ',', 'A hash value must be followed by a comma'); + + // trailing ,? + if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, '}')) { + break; + } + } + $first = false; + + if ($stream->test(/* Token::SPREAD_TYPE */ 13)) { + $stream->next(); + $value = $this->parseExpression(); + $value->setAttribute('spread', true); + $node->addElement($value); + continue; + } + + // a hash key can be: + // + // * a number -- 12 + // * a string -- 'a' + // * a name, which is equivalent to a string -- a + // * an expression, which must be enclosed in parentheses -- (1 + 2) + if ($token = $stream->nextIf(/* Token::NAME_TYPE */ 5)) { + $key = new ConstantExpression($token->getValue(), $token->getLine()); + + // {a} is a shortcut for {a:a} + if ($stream->test(Token::PUNCTUATION_TYPE, [',', '}'])) { + $value = new NameExpression($key->getAttribute('value'), $key->getTemplateLine()); + $node->addElement($value, $key); + continue; + } + } elseif (($token = $stream->nextIf(/* Token::STRING_TYPE */ 7)) || $token = $stream->nextIf(/* Token::NUMBER_TYPE */ 6)) { + $key = new ConstantExpression($token->getValue(), $token->getLine()); + } elseif ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, '(')) { + $key = $this->parseExpression(); + } else { + $current = $stream->getCurrent(); + + throw new SyntaxError(sprintf('A hash key must be a quoted string, a number, a name, or an expression enclosed in parentheses (unexpected token "%s" of value "%s".', Token::typeToEnglish($current->getType()), $current->getValue()), $current->getLine(), $stream->getSourceContext()); + } + + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ':', 'A hash key must be followed by a colon (:)'); + $value = $this->parseExpression(); + + $node->addElement($value, $key); + } + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, '}', 'An opened hash is not properly closed'); + + return $node; + } + + public function parsePostfixExpression($node) + { + while (true) { + $token = $this->parser->getCurrentToken(); + if (/* Token::PUNCTUATION_TYPE */ 9 == $token->getType()) { + if ('.' == $token->getValue() || '[' == $token->getValue()) { + $node = $this->parseSubscriptExpression($node); + } elseif ('|' == $token->getValue()) { + $node = $this->parseFilterExpression($node); + } else { + break; + } + } else { + break; + } + } + + return $node; + } + + public function getFunctionNode($name, $line) + { + switch ($name) { + case 'parent': + $this->parseArguments(); + if (!\count($this->parser->getBlockStack())) { + throw new SyntaxError('Calling "parent" outside a block is forbidden.', $line, $this->parser->getStream()->getSourceContext()); + } + + if (!$this->parser->getParent() && !$this->parser->hasTraits()) { + throw new SyntaxError('Calling "parent" on a template that does not extend nor "use" another template is forbidden.', $line, $this->parser->getStream()->getSourceContext()); + } + + return new ParentExpression($this->parser->peekBlockStack(), $line); + case 'block': + $args = $this->parseArguments(); + if (\count($args) < 1) { + throw new SyntaxError('The "block" function takes one argument (the block name).', $line, $this->parser->getStream()->getSourceContext()); + } + + return new BlockReferenceExpression($args->getNode(0), \count($args) > 1 ? $args->getNode(1) : null, $line); + case 'attribute': + $args = $this->parseArguments(); + if (\count($args) < 2) { + throw new SyntaxError('The "attribute" function takes at least two arguments (the variable and the attributes).', $line, $this->parser->getStream()->getSourceContext()); + } + + return new GetAttrExpression($args->getNode(0), $args->getNode(1), \count($args) > 2 ? $args->getNode(2) : null, Template::ANY_CALL, $line); + default: + if (null !== $alias = $this->parser->getImportedSymbol('function', $name)) { + $arguments = new ArrayExpression([], $line); + foreach ($this->parseArguments() as $n) { + $arguments->addElement($n); + } + + $node = new MethodCallExpression($alias['node'], $alias['name'], $arguments, $line); + $node->setAttribute('safe', true); + + return $node; + } + + $args = $this->parseArguments(true); + $class = $this->getFunctionNodeClass($name, $line); + + return new $class($name, $args, $line); + } + } + + public function parseSubscriptExpression($node) + { + $stream = $this->parser->getStream(); + $token = $stream->next(); + $lineno = $token->getLine(); + $arguments = new ArrayExpression([], $lineno); + $type = Template::ANY_CALL; + if ('.' == $token->getValue()) { + $token = $stream->next(); + if ( + /* Token::NAME_TYPE */ 5 == $token->getType() + || + /* Token::NUMBER_TYPE */ 6 == $token->getType() + || + (/* Token::OPERATOR_TYPE */ 8 == $token->getType() && preg_match(Lexer::REGEX_NAME, $token->getValue())) + ) { + $arg = new ConstantExpression($token->getValue(), $lineno); + + if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, '(')) { + $type = Template::METHOD_CALL; + foreach ($this->parseArguments() as $n) { + $arguments->addElement($n); + } + } + } else { + throw new SyntaxError(sprintf('Expected name or number, got value "%s" of type %s.', $token->getValue(), Token::typeToEnglish($token->getType())), $lineno, $stream->getSourceContext()); + } + + if ($node instanceof NameExpression && null !== $this->parser->getImportedSymbol('template', $node->getAttribute('name'))) { + if (!$arg instanceof ConstantExpression) { + throw new SyntaxError(sprintf('Dynamic macro names are not supported (called on "%s").', $node->getAttribute('name')), $token->getLine(), $stream->getSourceContext()); + } + + $name = $arg->getAttribute('value'); + + $node = new MethodCallExpression($node, 'macro_'.$name, $arguments, $lineno); + $node->setAttribute('safe', true); + + return $node; + } + } else { + $type = Template::ARRAY_CALL; + + // slice? + $slice = false; + if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, ':')) { + $slice = true; + $arg = new ConstantExpression(0, $token->getLine()); + } else { + $arg = $this->parseExpression(); + } + + if ($stream->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ':')) { + $slice = true; + } + + if ($slice) { + if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, ']')) { + $length = new ConstantExpression(null, $token->getLine()); + } else { + $length = $this->parseExpression(); + } + + $class = $this->getFilterNodeClass('slice', $token->getLine()); + $arguments = new Node([$arg, $length]); + $filter = new $class($node, new ConstantExpression('slice', $token->getLine()), $arguments, $token->getLine()); + + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ']'); + + return $filter; + } + + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ']'); + } + + return new GetAttrExpression($node, $arg, $arguments, $type, $lineno); + } + + public function parseFilterExpression($node) + { + $this->parser->getStream()->next(); + + return $this->parseFilterExpressionRaw($node); + } + + public function parseFilterExpressionRaw($node, $tag = null) + { + while (true) { + $token = $this->parser->getStream()->expect(/* Token::NAME_TYPE */ 5); + + $name = new ConstantExpression($token->getValue(), $token->getLine()); + if (!$this->parser->getStream()->test(/* Token::PUNCTUATION_TYPE */ 9, '(')) { + $arguments = new Node(); + } else { + $arguments = $this->parseArguments(true, false, true); + } + + $class = $this->getFilterNodeClass($name->getAttribute('value'), $token->getLine()); + + $node = new $class($node, $name, $arguments, $token->getLine(), $tag); + + if (!$this->parser->getStream()->test(/* Token::PUNCTUATION_TYPE */ 9, '|')) { + break; + } + + $this->parser->getStream()->next(); + } + + return $node; + } + + /** + * Parses arguments. + * + * @param bool $namedArguments Whether to allow named arguments or not + * @param bool $definition Whether we are parsing arguments for a function definition + * + * @return Node + * + * @throws SyntaxError + */ + public function parseArguments($namedArguments = false, $definition = false, $allowArrow = false) + { + $args = []; + $stream = $this->parser->getStream(); + + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, '(', 'A list of arguments must begin with an opening parenthesis'); + while (!$stream->test(/* Token::PUNCTUATION_TYPE */ 9, ')')) { + if (!empty($args)) { + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ',', 'Arguments must be separated by a comma'); + + // if the comma above was a trailing comma, early exit the argument parse loop + if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, ')')) { + break; + } + } + + if ($definition) { + $token = $stream->expect(/* Token::NAME_TYPE */ 5, null, 'An argument must be a name'); + $value = new NameExpression($token->getValue(), $this->parser->getCurrentToken()->getLine()); + } else { + $value = $this->parseExpression(0, $allowArrow); + } + + $name = null; + if ($namedArguments && $token = $stream->nextIf(/* Token::OPERATOR_TYPE */ 8, '=')) { + if (!$value instanceof NameExpression) { + throw new SyntaxError(sprintf('A parameter name must be a string, "%s" given.', \get_class($value)), $token->getLine(), $stream->getSourceContext()); + } + $name = $value->getAttribute('name'); + + if ($definition) { + $value = $this->parsePrimaryExpression(); + + if (!$this->checkConstantExpression($value)) { + throw new SyntaxError('A default value for an argument must be a constant (a boolean, a string, a number, or an array).', $token->getLine(), $stream->getSourceContext()); + } + } else { + $value = $this->parseExpression(0, $allowArrow); + } + } + + if ($definition) { + if (null === $name) { + $name = $value->getAttribute('name'); + $value = new ConstantExpression(null, $this->parser->getCurrentToken()->getLine()); + } + $args[$name] = $value; + } else { + if (null === $name) { + $args[] = $value; + } else { + $args[$name] = $value; + } + } + } + $stream->expect(/* Token::PUNCTUATION_TYPE */ 9, ')', 'A list of arguments must be closed by a parenthesis'); + + return new Node($args); + } + + public function parseAssignmentExpression() + { + $stream = $this->parser->getStream(); + $targets = []; + while (true) { + $token = $this->parser->getCurrentToken(); + if ($stream->test(/* Token::OPERATOR_TYPE */ 8) && preg_match(Lexer::REGEX_NAME, $token->getValue())) { + // in this context, string operators are variable names + $this->parser->getStream()->next(); + } else { + $stream->expect(/* Token::NAME_TYPE */ 5, null, 'Only variables can be assigned to'); + } + $value = $token->getValue(); + if (\in_array(strtr($value, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), ['true', 'false', 'none', 'null'])) { + throw new SyntaxError(sprintf('You cannot assign a value to "%s".', $value), $token->getLine(), $stream->getSourceContext()); + } + $targets[] = new AssignNameExpression($value, $token->getLine()); + + if (!$stream->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ',')) { + break; + } + } + + return new Node($targets); + } + + public function parseMultitargetExpression() + { + $targets = []; + while (true) { + $targets[] = $this->parseExpression(); + if (!$this->parser->getStream()->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ',')) { + break; + } + } + + return new Node($targets); + } + + private function parseNotTestExpression(Node $node): NotUnary + { + return new NotUnary($this->parseTestExpression($node), $this->parser->getCurrentToken()->getLine()); + } + + private function parseTestExpression(Node $node): TestExpression + { + $stream = $this->parser->getStream(); + list($name, $test) = $this->getTest($node->getTemplateLine()); + + $class = $this->getTestNodeClass($test); + $arguments = null; + if ($stream->test(/* Token::PUNCTUATION_TYPE */ 9, '(')) { + $arguments = $this->parseArguments(true); + } elseif ($test->hasOneMandatoryArgument()) { + $arguments = new Node([0 => $this->parsePrimaryExpression()]); + } + + if ('defined' === $name && $node instanceof NameExpression && null !== $alias = $this->parser->getImportedSymbol('function', $node->getAttribute('name'))) { + $node = new MethodCallExpression($alias['node'], $alias['name'], new ArrayExpression([], $node->getTemplateLine()), $node->getTemplateLine()); + $node->setAttribute('safe', true); + } + + return new $class($node, $name, $arguments, $this->parser->getCurrentToken()->getLine()); + } + + private function getTest(int $line): array + { + $stream = $this->parser->getStream(); + $name = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + + if ($test = $this->env->getTest($name)) { + return [$name, $test]; + } + + if ($stream->test(/* Token::NAME_TYPE */ 5)) { + // try 2-words tests + $name = $name.' '.$this->parser->getCurrentToken()->getValue(); + + if ($test = $this->env->getTest($name)) { + $stream->next(); + + return [$name, $test]; + } + } + + $e = new SyntaxError(sprintf('Unknown "%s" test.', $name), $line, $stream->getSourceContext()); + $e->addSuggestions($name, array_keys($this->env->getTests())); + + throw $e; + } + + private function getTestNodeClass(TwigTest $test): string + { + if ($test->isDeprecated()) { + $stream = $this->parser->getStream(); + $message = sprintf('Twig Test "%s" is deprecated', $test->getName()); + + if ($test->getDeprecatedVersion()) { + $message .= sprintf(' since version %s', $test->getDeprecatedVersion()); + } + if ($test->getAlternative()) { + $message .= sprintf('. Use "%s" instead', $test->getAlternative()); + } + $src = $stream->getSourceContext(); + $message .= sprintf(' in %s at line %d.', $src->getPath() ?: $src->getName(), $stream->getCurrent()->getLine()); + + @trigger_error($message, \E_USER_DEPRECATED); + } + + return $test->getNodeClass(); + } + + private function getFunctionNodeClass(string $name, int $line): string + { + if (!$function = $this->env->getFunction($name)) { + $e = new SyntaxError(sprintf('Unknown "%s" function.', $name), $line, $this->parser->getStream()->getSourceContext()); + $e->addSuggestions($name, array_keys($this->env->getFunctions())); + + throw $e; + } + + if ($function->isDeprecated()) { + $message = sprintf('Twig Function "%s" is deprecated', $function->getName()); + if ($function->getDeprecatedVersion()) { + $message .= sprintf(' since version %s', $function->getDeprecatedVersion()); + } + if ($function->getAlternative()) { + $message .= sprintf('. Use "%s" instead', $function->getAlternative()); + } + $src = $this->parser->getStream()->getSourceContext(); + $message .= sprintf(' in %s at line %d.', $src->getPath() ?: $src->getName(), $line); + + @trigger_error($message, \E_USER_DEPRECATED); + } + + return $function->getNodeClass(); + } + + private function getFilterNodeClass(string $name, int $line): string + { + if (!$filter = $this->env->getFilter($name)) { + $e = new SyntaxError(sprintf('Unknown "%s" filter.', $name), $line, $this->parser->getStream()->getSourceContext()); + $e->addSuggestions($name, array_keys($this->env->getFilters())); + + throw $e; + } + + if ($filter->isDeprecated()) { + $message = sprintf('Twig Filter "%s" is deprecated', $filter->getName()); + if ($filter->getDeprecatedVersion()) { + $message .= sprintf(' since version %s', $filter->getDeprecatedVersion()); + } + if ($filter->getAlternative()) { + $message .= sprintf('. Use "%s" instead', $filter->getAlternative()); + } + $src = $this->parser->getStream()->getSourceContext(); + $message .= sprintf(' in %s at line %d.', $src->getPath() ?: $src->getName(), $line); + + @trigger_error($message, \E_USER_DEPRECATED); + } + + return $filter->getNodeClass(); + } + + // checks that the node only contains "constant" elements + private function checkConstantExpression(Node $node): bool + { + if (!($node instanceof ConstantExpression || $node instanceof ArrayExpression + || $node instanceof NegUnary || $node instanceof PosUnary + )) { + return false; + } + + foreach ($node as $n) { + if (!$this->checkConstantExpression($n)) { + return false; + } + } + + return true; + } +} diff --git a/Sources/vendor/twig/twig/src/Extension/AbstractExtension.php b/Sources/vendor/twig/twig/src/Extension/AbstractExtension.php new file mode 100644 index 00000000..422925f3 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Extension/AbstractExtension.php @@ -0,0 +1,45 @@ +dateFormats[0] = $format; + } + + if (null !== $dateIntervalFormat) { + $this->dateFormats[1] = $dateIntervalFormat; + } + } + + /** + * Gets the default format to be used by the date filter. + * + * @return array The default date format string and the default date interval format string + */ + public function getDateFormat() + { + return $this->dateFormats; + } + + /** + * Sets the default timezone to be used by the date filter. + * + * @param \DateTimeZone|string $timezone The default timezone string or a \DateTimeZone object + */ + public function setTimezone($timezone) + { + $this->timezone = $timezone instanceof \DateTimeZone ? $timezone : new \DateTimeZone($timezone); + } + + /** + * Gets the default timezone to be used by the date filter. + * + * @return \DateTimeZone The default timezone currently in use + */ + public function getTimezone() + { + if (null === $this->timezone) { + $this->timezone = new \DateTimeZone(date_default_timezone_get()); + } + + return $this->timezone; + } + + /** + * Sets the default format to be used by the number_format filter. + * + * @param int $decimal the number of decimal places to use + * @param string $decimalPoint the character(s) to use for the decimal point + * @param string $thousandSep the character(s) to use for the thousands separator + */ + public function setNumberFormat($decimal, $decimalPoint, $thousandSep) + { + $this->numberFormat = [$decimal, $decimalPoint, $thousandSep]; + } + + /** + * Get the default format used by the number_format filter. + * + * @return array The arguments for number_format() + */ + public function getNumberFormat() + { + return $this->numberFormat; + } + + public function getTokenParsers(): array + { + return [ + new ApplyTokenParser(), + new ForTokenParser(), + new IfTokenParser(), + new ExtendsTokenParser(), + new IncludeTokenParser(), + new BlockTokenParser(), + new UseTokenParser(), + new MacroTokenParser(), + new ImportTokenParser(), + new FromTokenParser(), + new SetTokenParser(), + new FlushTokenParser(), + new DoTokenParser(), + new EmbedTokenParser(), + new WithTokenParser(), + new DeprecatedTokenParser(), + ]; + } + + public function getFilters(): array + { + return [ + // formatting filters + new TwigFilter('date', 'twig_date_format_filter', ['needs_environment' => true]), + new TwigFilter('date_modify', 'twig_date_modify_filter', ['needs_environment' => true]), + new TwigFilter('format', 'twig_sprintf'), + new TwigFilter('replace', 'twig_replace_filter'), + new TwigFilter('number_format', 'twig_number_format_filter', ['needs_environment' => true]), + new TwigFilter('abs', 'abs'), + new TwigFilter('round', 'twig_round'), + + // encoding + new TwigFilter('url_encode', 'twig_urlencode_filter'), + new TwigFilter('json_encode', 'json_encode'), + new TwigFilter('convert_encoding', 'twig_convert_encoding'), + + // string filters + new TwigFilter('title', 'twig_title_string_filter', ['needs_environment' => true]), + new TwigFilter('capitalize', 'twig_capitalize_string_filter', ['needs_environment' => true]), + new TwigFilter('upper', 'twig_upper_filter', ['needs_environment' => true]), + new TwigFilter('lower', 'twig_lower_filter', ['needs_environment' => true]), + new TwigFilter('striptags', 'twig_striptags'), + new TwigFilter('trim', 'twig_trim_filter'), + new TwigFilter('nl2br', 'twig_nl2br', ['pre_escape' => 'html', 'is_safe' => ['html']]), + new TwigFilter('spaceless', 'twig_spaceless', ['is_safe' => ['html']]), + + // array helpers + new TwigFilter('join', 'twig_join_filter'), + new TwigFilter('split', 'twig_split_filter', ['needs_environment' => true]), + new TwigFilter('sort', 'twig_sort_filter', ['needs_environment' => true]), + new TwigFilter('merge', 'twig_array_merge'), + new TwigFilter('batch', 'twig_array_batch'), + new TwigFilter('column', 'twig_array_column'), + new TwigFilter('filter', 'twig_array_filter', ['needs_environment' => true]), + new TwigFilter('map', 'twig_array_map', ['needs_environment' => true]), + new TwigFilter('reduce', 'twig_array_reduce', ['needs_environment' => true]), + + // string/array filters + new TwigFilter('reverse', 'twig_reverse_filter', ['needs_environment' => true]), + new TwigFilter('length', 'twig_length_filter', ['needs_environment' => true]), + new TwigFilter('slice', 'twig_slice', ['needs_environment' => true]), + new TwigFilter('first', 'twig_first', ['needs_environment' => true]), + new TwigFilter('last', 'twig_last', ['needs_environment' => true]), + + // iteration and runtime + new TwigFilter('default', '_twig_default_filter', ['node_class' => DefaultFilter::class]), + new TwigFilter('keys', 'twig_get_array_keys_filter'), + ]; + } + + public function getFunctions(): array + { + return [ + new TwigFunction('max', 'max'), + new TwigFunction('min', 'min'), + new TwigFunction('range', 'range'), + new TwigFunction('constant', 'twig_constant'), + new TwigFunction('cycle', 'twig_cycle'), + new TwigFunction('random', 'twig_random', ['needs_environment' => true]), + new TwigFunction('date', 'twig_date_converter', ['needs_environment' => true]), + new TwigFunction('include', 'twig_include', ['needs_environment' => true, 'needs_context' => true, 'is_safe' => ['all']]), + new TwigFunction('source', 'twig_source', ['needs_environment' => true, 'is_safe' => ['all']]), + ]; + } + + public function getTests(): array + { + return [ + new TwigTest('even', null, ['node_class' => EvenTest::class]), + new TwigTest('odd', null, ['node_class' => OddTest::class]), + new TwigTest('defined', null, ['node_class' => DefinedTest::class]), + new TwigTest('same as', null, ['node_class' => SameasTest::class, 'one_mandatory_argument' => true]), + new TwigTest('none', null, ['node_class' => NullTest::class]), + new TwigTest('null', null, ['node_class' => NullTest::class]), + new TwigTest('divisible by', null, ['node_class' => DivisiblebyTest::class, 'one_mandatory_argument' => true]), + new TwigTest('constant', null, ['node_class' => ConstantTest::class]), + new TwigTest('empty', 'twig_test_empty'), + new TwigTest('iterable', 'twig_test_iterable'), + ]; + } + + public function getNodeVisitors(): array + { + return [new MacroAutoImportNodeVisitor()]; + } + + public function getOperators(): array + { + return [ + [ + 'not' => ['precedence' => 50, 'class' => NotUnary::class], + '-' => ['precedence' => 500, 'class' => NegUnary::class], + '+' => ['precedence' => 500, 'class' => PosUnary::class], + ], + [ + 'or' => ['precedence' => 10, 'class' => OrBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'and' => ['precedence' => 15, 'class' => AndBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'b-or' => ['precedence' => 16, 'class' => BitwiseOrBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'b-xor' => ['precedence' => 17, 'class' => BitwiseXorBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'b-and' => ['precedence' => 18, 'class' => BitwiseAndBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '==' => ['precedence' => 20, 'class' => EqualBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '!=' => ['precedence' => 20, 'class' => NotEqualBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '<=>' => ['precedence' => 20, 'class' => SpaceshipBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '<' => ['precedence' => 20, 'class' => LessBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '>' => ['precedence' => 20, 'class' => GreaterBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '>=' => ['precedence' => 20, 'class' => GreaterEqualBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '<=' => ['precedence' => 20, 'class' => LessEqualBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'not in' => ['precedence' => 20, 'class' => NotInBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'in' => ['precedence' => 20, 'class' => InBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'matches' => ['precedence' => 20, 'class' => MatchesBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'starts with' => ['precedence' => 20, 'class' => StartsWithBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'ends with' => ['precedence' => 20, 'class' => EndsWithBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'has some' => ['precedence' => 20, 'class' => HasSomeBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'has every' => ['precedence' => 20, 'class' => HasEveryBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '..' => ['precedence' => 25, 'class' => RangeBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '+' => ['precedence' => 30, 'class' => AddBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '-' => ['precedence' => 30, 'class' => SubBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '~' => ['precedence' => 40, 'class' => ConcatBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '*' => ['precedence' => 60, 'class' => MulBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '/' => ['precedence' => 60, 'class' => DivBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '//' => ['precedence' => 60, 'class' => FloorDivBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '%' => ['precedence' => 60, 'class' => ModBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'is' => ['precedence' => 100, 'associativity' => ExpressionParser::OPERATOR_LEFT], + 'is not' => ['precedence' => 100, 'associativity' => ExpressionParser::OPERATOR_LEFT], + '**' => ['precedence' => 200, 'class' => PowerBinary::class, 'associativity' => ExpressionParser::OPERATOR_RIGHT], + '??' => ['precedence' => 300, 'class' => NullCoalesceExpression::class, 'associativity' => ExpressionParser::OPERATOR_RIGHT], + ], + ]; + } +} +} + +namespace { + use Twig\Environment; + use Twig\Error\LoaderError; + use Twig\Error\RuntimeError; + use Twig\Extension\CoreExtension; + use Twig\Extension\SandboxExtension; + use Twig\Markup; + use Twig\Source; + use Twig\Template; + use Twig\TemplateWrapper; + +/** + * Cycles over a value. + * + * @param \ArrayAccess|array $values + * @param int $position The cycle position + * + * @return string The next value in the cycle + */ +function twig_cycle($values, $position) +{ + if (!\is_array($values) && !$values instanceof \ArrayAccess) { + return $values; + } + + return $values[$position % \count($values)]; +} + +/** + * Returns a random value depending on the supplied parameter type: + * - a random item from a \Traversable or array + * - a random character from a string + * - a random integer between 0 and the integer parameter. + * + * @param \Traversable|array|int|float|string $values The values to pick a random item from + * @param int|null $max Maximum value used when $values is an int + * + * @throws RuntimeError when $values is an empty array (does not apply to an empty string which is returned as is) + * + * @return mixed A random value from the given sequence + */ +function twig_random(Environment $env, $values = null, $max = null) +{ + if (null === $values) { + return null === $max ? mt_rand() : mt_rand(0, (int) $max); + } + + if (\is_int($values) || \is_float($values)) { + if (null === $max) { + if ($values < 0) { + $max = 0; + $min = $values; + } else { + $max = $values; + $min = 0; + } + } else { + $min = $values; + $max = $max; + } + + return mt_rand((int) $min, (int) $max); + } + + if (\is_string($values)) { + if ('' === $values) { + return ''; + } + + $charset = $env->getCharset(); + + if ('UTF-8' !== $charset) { + $values = twig_convert_encoding($values, 'UTF-8', $charset); + } + + // unicode version of str_split() + // split at all positions, but not after the start and not before the end + $values = preg_split('/(? $value) { + $values[$i] = twig_convert_encoding($value, $charset, 'UTF-8'); + } + } + } + + if (!twig_test_iterable($values)) { + return $values; + } + + $values = twig_to_array($values); + + if (0 === \count($values)) { + throw new RuntimeError('The random function cannot pick from an empty array.'); + } + + return $values[array_rand($values, 1)]; +} + +/** + * Converts a date to the given format. + * + * {{ post.published_at|date("m/d/Y") }} + * + * @param \DateTimeInterface|\DateInterval|string $date A date + * @param string|null $format The target format, null to use the default + * @param \DateTimeZone|string|false|null $timezone The target timezone, null to use the default, false to leave unchanged + * + * @return string The formatted date + */ +function twig_date_format_filter(Environment $env, $date, $format = null, $timezone = null) +{ + if (null === $format) { + $formats = $env->getExtension(CoreExtension::class)->getDateFormat(); + $format = $date instanceof \DateInterval ? $formats[1] : $formats[0]; + } + + if ($date instanceof \DateInterval) { + return $date->format($format); + } + + return twig_date_converter($env, $date, $timezone)->format($format); +} + +/** + * Returns a new date object modified. + * + * {{ post.published_at|date_modify("-1day")|date("m/d/Y") }} + * + * @param \DateTimeInterface|string $date A date + * @param string $modifier A modifier string + * + * @return \DateTimeInterface + */ +function twig_date_modify_filter(Environment $env, $date, $modifier) +{ + $date = twig_date_converter($env, $date, false); + + return $date->modify($modifier); +} + +/** + * Returns a formatted string. + * + * @param string|null $format + * @param ...$values + * + * @return string + */ +function twig_sprintf($format, ...$values) +{ + return sprintf($format ?? '', ...$values); +} + +/** + * Converts an input to a \DateTime instance. + * + * {% if date(user.created_at) < date('+2days') %} + * {# do something #} + * {% endif %} + * + * @param \DateTimeInterface|string|null $date A date or null to use the current time + * @param \DateTimeZone|string|false|null $timezone The target timezone, null to use the default, false to leave unchanged + * + * @return \DateTimeInterface + */ +function twig_date_converter(Environment $env, $date = null, $timezone = null) +{ + // determine the timezone + if (false !== $timezone) { + if (null === $timezone) { + $timezone = $env->getExtension(CoreExtension::class)->getTimezone(); + } elseif (!$timezone instanceof \DateTimeZone) { + $timezone = new \DateTimeZone($timezone); + } + } + + // immutable dates + if ($date instanceof \DateTimeImmutable) { + return false !== $timezone ? $date->setTimezone($timezone) : $date; + } + + if ($date instanceof \DateTimeInterface) { + $date = clone $date; + if (false !== $timezone) { + $date->setTimezone($timezone); + } + + return $date; + } + + if (null === $date || 'now' === $date) { + if (null === $date) { + $date = 'now'; + } + + return new \DateTime($date, false !== $timezone ? $timezone : $env->getExtension(CoreExtension::class)->getTimezone()); + } + + $asString = (string) $date; + if (ctype_digit($asString) || (!empty($asString) && '-' === $asString[0] && ctype_digit(substr($asString, 1)))) { + $date = new \DateTime('@'.$date); + } else { + $date = new \DateTime($date, $env->getExtension(CoreExtension::class)->getTimezone()); + } + + if (false !== $timezone) { + $date->setTimezone($timezone); + } + + return $date; +} + +/** + * Replaces strings within a string. + * + * @param string|null $str String to replace in + * @param array|\Traversable $from Replace values + * + * @return string + */ +function twig_replace_filter($str, $from) +{ + if (!twig_test_iterable($from)) { + throw new RuntimeError(sprintf('The "replace" filter expects an array or "Traversable" as replace values, got "%s".', \is_object($from) ? \get_class($from) : \gettype($from))); + } + + return strtr($str ?? '', twig_to_array($from)); +} + +/** + * Rounds a number. + * + * @param int|float|string|null $value The value to round + * @param int|float $precision The rounding precision + * @param string $method The method to use for rounding + * + * @return int|float The rounded number + */ +function twig_round($value, $precision = 0, $method = 'common') +{ + $value = (float) $value; + + if ('common' === $method) { + return round($value, $precision); + } + + if ('ceil' !== $method && 'floor' !== $method) { + throw new RuntimeError('The round filter only supports the "common", "ceil", and "floor" methods.'); + } + + return $method($value * 10 ** $precision) / 10 ** $precision; +} + +/** + * Number format filter. + * + * All of the formatting options can be left null, in that case the defaults will + * be used. Supplying any of the parameters will override the defaults set in the + * environment object. + * + * @param mixed $number A float/int/string of the number to format + * @param int $decimal the number of decimal points to display + * @param string $decimalPoint the character(s) to use for the decimal point + * @param string $thousandSep the character(s) to use for the thousands separator + * + * @return string The formatted number + */ +function twig_number_format_filter(Environment $env, $number, $decimal = null, $decimalPoint = null, $thousandSep = null) +{ + $defaults = $env->getExtension(CoreExtension::class)->getNumberFormat(); + if (null === $decimal) { + $decimal = $defaults[0]; + } + + if (null === $decimalPoint) { + $decimalPoint = $defaults[1]; + } + + if (null === $thousandSep) { + $thousandSep = $defaults[2]; + } + + return number_format((float) $number, $decimal, $decimalPoint, $thousandSep); +} + +/** + * URL encodes (RFC 3986) a string as a path segment or an array as a query string. + * + * @param string|array|null $url A URL or an array of query parameters + * + * @return string The URL encoded value + */ +function twig_urlencode_filter($url) +{ + if (\is_array($url)) { + return http_build_query($url, '', '&', \PHP_QUERY_RFC3986); + } + + return rawurlencode($url ?? ''); +} + +/** + * Merges any number of arrays or Traversable objects. + * + * {% set items = { 'apple': 'fruit', 'orange': 'fruit' } %} + * + * {% set items = items|merge({ 'peugeot': 'car' }, { 'banana': 'fruit' }) %} + * + * {# items now contains { 'apple': 'fruit', 'orange': 'fruit', 'peugeot': 'car', 'banana': 'fruit' } #} + * + * @param array|\Traversable ...$arrays Any number of arrays or Traversable objects to merge + * + * @return array The merged array + */ +function twig_array_merge(...$arrays) +{ + $result = []; + + foreach ($arrays as $argNumber => $array) { + if (!twig_test_iterable($array)) { + throw new RuntimeError(sprintf('The merge filter only works with arrays or "Traversable", got "%s" for argument %d.', \gettype($array), $argNumber + 1)); + } + + $result = array_merge($result, twig_to_array($array)); + } + + return $result; +} + + +/** + * Slices a variable. + * + * @param mixed $item A variable + * @param int $start Start of the slice + * @param int $length Size of the slice + * @param bool $preserveKeys Whether to preserve key or not (when the input is an array) + * + * @return mixed The sliced variable + */ +function twig_slice(Environment $env, $item, $start, $length = null, $preserveKeys = false) +{ + if ($item instanceof \Traversable) { + while ($item instanceof \IteratorAggregate) { + $item = $item->getIterator(); + } + + if ($start >= 0 && $length >= 0 && $item instanceof \Iterator) { + try { + return iterator_to_array(new \LimitIterator($item, $start, null === $length ? -1 : $length), $preserveKeys); + } catch (\OutOfBoundsException $e) { + return []; + } + } + + $item = iterator_to_array($item, $preserveKeys); + } + + if (\is_array($item)) { + return \array_slice($item, $start, $length, $preserveKeys); + } + + return (string) mb_substr((string) $item, $start, $length, $env->getCharset()); +} + +/** + * Returns the first element of the item. + * + * @param mixed $item A variable + * + * @return mixed The first element of the item + */ +function twig_first(Environment $env, $item) +{ + $elements = twig_slice($env, $item, 0, 1, false); + + return \is_string($elements) ? $elements : current($elements); +} + +/** + * Returns the last element of the item. + * + * @param mixed $item A variable + * + * @return mixed The last element of the item + */ +function twig_last(Environment $env, $item) +{ + $elements = twig_slice($env, $item, -1, 1, false); + + return \is_string($elements) ? $elements : current($elements); +} + +/** + * Joins the values to a string. + * + * The separators between elements are empty strings per default, you can define them with the optional parameters. + * + * {{ [1, 2, 3]|join(', ', ' and ') }} + * {# returns 1, 2 and 3 #} + * + * {{ [1, 2, 3]|join('|') }} + * {# returns 1|2|3 #} + * + * {{ [1, 2, 3]|join }} + * {# returns 123 #} + * + * @param array $value An array + * @param string $glue The separator + * @param string|null $and The separator for the last pair + * + * @return string The concatenated string + */ +function twig_join_filter($value, $glue = '', $and = null) +{ + if (!twig_test_iterable($value)) { + $value = (array) $value; + } + + $value = twig_to_array($value, false); + + if (0 === \count($value)) { + return ''; + } + + if (null === $and || $and === $glue) { + return implode($glue, $value); + } + + if (1 === \count($value)) { + return $value[0]; + } + + return implode($glue, \array_slice($value, 0, -1)).$and.$value[\count($value) - 1]; +} + +/** + * Splits the string into an array. + * + * {{ "one,two,three"|split(',') }} + * {# returns [one, two, three] #} + * + * {{ "one,two,three,four,five"|split(',', 3) }} + * {# returns [one, two, "three,four,five"] #} + * + * {{ "123"|split('') }} + * {# returns [1, 2, 3] #} + * + * {{ "aabbcc"|split('', 2) }} + * {# returns [aa, bb, cc] #} + * + * @param string|null $value A string + * @param string $delimiter The delimiter + * @param int $limit The limit + * + * @return array The split string as an array + */ +function twig_split_filter(Environment $env, $value, $delimiter, $limit = null) +{ + $value = $value ?? ''; + + if (\strlen($delimiter) > 0) { + return null === $limit ? explode($delimiter, $value) : explode($delimiter, $value, $limit); + } + + if ($limit <= 1) { + return preg_split('/(?getCharset()); + if ($length < $limit) { + return [$value]; + } + + $r = []; + for ($i = 0; $i < $length; $i += $limit) { + $r[] = mb_substr($value, $i, $limit, $env->getCharset()); + } + + return $r; +} + +// The '_default' filter is used internally to avoid using the ternary operator +// which costs a lot for big contexts (before PHP 5.4). So, on average, +// a function call is cheaper. +/** + * @internal + */ +function _twig_default_filter($value, $default = '') +{ + if (twig_test_empty($value)) { + return $default; + } + + return $value; +} + +/** + * Returns the keys for the given array. + * + * It is useful when you want to iterate over the keys of an array: + * + * {% for key in array|keys %} + * {# ... #} + * {% endfor %} + * + * @param array $array An array + * + * @return array The keys + */ +function twig_get_array_keys_filter($array) +{ + if ($array instanceof \Traversable) { + while ($array instanceof \IteratorAggregate) { + $array = $array->getIterator(); + } + + $keys = []; + if ($array instanceof \Iterator) { + $array->rewind(); + while ($array->valid()) { + $keys[] = $array->key(); + $array->next(); + } + + return $keys; + } + + foreach ($array as $key => $item) { + $keys[] = $key; + } + + return $keys; + } + + if (!\is_array($array)) { + return []; + } + + return array_keys($array); +} + +/** + * Reverses a variable. + * + * @param array|\Traversable|string|null $item An array, a \Traversable instance, or a string + * @param bool $preserveKeys Whether to preserve key or not + * + * @return mixed The reversed input + */ +function twig_reverse_filter(Environment $env, $item, $preserveKeys = false) +{ + if ($item instanceof \Traversable) { + return array_reverse(iterator_to_array($item), $preserveKeys); + } + + if (\is_array($item)) { + return array_reverse($item, $preserveKeys); + } + + $string = (string) $item; + + $charset = $env->getCharset(); + + if ('UTF-8' !== $charset) { + $string = twig_convert_encoding($string, 'UTF-8', $charset); + } + + preg_match_all('/./us', $string, $matches); + + $string = implode('', array_reverse($matches[0])); + + if ('UTF-8' !== $charset) { + $string = twig_convert_encoding($string, $charset, 'UTF-8'); + } + + return $string; +} + +/** + * Sorts an array. + * + * @param array|\Traversable $array + * + * @return array + */ +function twig_sort_filter(Environment $env, $array, $arrow = null) +{ + if ($array instanceof \Traversable) { + $array = iterator_to_array($array); + } elseif (!\is_array($array)) { + throw new RuntimeError(sprintf('The sort filter only works with arrays or "Traversable", got "%s".', \gettype($array))); + } + + if (null !== $arrow) { + twig_check_arrow_in_sandbox($env, $arrow, 'sort', 'filter'); + + uasort($array, $arrow); + } else { + asort($array); + } + + return $array; +} + +/** + * @internal + */ +function twig_in_filter($value, $compare) +{ + if ($value instanceof Markup) { + $value = (string) $value; + } + if ($compare instanceof Markup) { + $compare = (string) $compare; + } + + if (\is_string($compare)) { + if (\is_string($value) || \is_int($value) || \is_float($value)) { + return '' === $value || false !== strpos($compare, (string) $value); + } + + return false; + } + + if (!is_iterable($compare)) { + return false; + } + + if (\is_object($value) || \is_resource($value)) { + if (!\is_array($compare)) { + foreach ($compare as $item) { + if ($item === $value) { + return true; + } + } + + return false; + } + + return \in_array($value, $compare, true); + } + + foreach ($compare as $item) { + if (0 === twig_compare($value, $item)) { + return true; + } + } + + return false; +} + +/** + * Compares two values using a more strict version of the PHP non-strict comparison operator. + * + * @see https://wiki.php.net/rfc/string_to_number_comparison + * @see https://wiki.php.net/rfc/trailing_whitespace_numerics + * + * @internal + */ +function twig_compare($a, $b) +{ + // int <=> string + if (\is_int($a) && \is_string($b)) { + $bTrim = trim($b, " \t\n\r\v\f"); + if (!is_numeric($bTrim)) { + return (string) $a <=> $b; + } + if ((int) $bTrim == $bTrim) { + return $a <=> (int) $bTrim; + } else { + return (float) $a <=> (float) $bTrim; + } + } + if (\is_string($a) && \is_int($b)) { + $aTrim = trim($a, " \t\n\r\v\f"); + if (!is_numeric($aTrim)) { + return $a <=> (string) $b; + } + if ((int) $aTrim == $aTrim) { + return (int) $aTrim <=> $b; + } else { + return (float) $aTrim <=> (float) $b; + } + } + + // float <=> string + if (\is_float($a) && \is_string($b)) { + if (is_nan($a)) { + return 1; + } + $bTrim = trim($b, " \t\n\r\v\f"); + if (!is_numeric($bTrim)) { + return (string) $a <=> $b; + } + + return $a <=> (float) $bTrim; + } + if (\is_string($a) && \is_float($b)) { + if (is_nan($b)) { + return 1; + } + $aTrim = trim($a, " \t\n\r\v\f"); + if (!is_numeric($aTrim)) { + return $a <=> (string) $b; + } + + return (float) $aTrim <=> $b; + } + + // fallback to <=> + return $a <=> $b; +} + +/** + * @param string $pattern + * @param string|null $subject + * + * @return int + * + * @throws RuntimeError When an invalid pattern is used + */ +function twig_matches(string $regexp, ?string $str) +{ + set_error_handler(function ($t, $m) use ($regexp) { + throw new RuntimeError(sprintf('Regexp "%s" passed to "matches" is not valid', $regexp).substr($m, 12)); + }); + try { + return preg_match($regexp, $str ?? ''); + } finally { + restore_error_handler(); + } +} + +/** + * Returns a trimmed string. + * + * @param string|null $string + * @param string|null $characterMask + * @param string $side + * + * @return string + * + * @throws RuntimeError When an invalid trimming side is used (not a string or not 'left', 'right', or 'both') + */ +function twig_trim_filter($string, $characterMask = null, $side = 'both') +{ + if (null === $characterMask) { + $characterMask = " \t\n\r\0\x0B"; + } + + switch ($side) { + case 'both': + return trim($string ?? '', $characterMask); + case 'left': + return ltrim($string ?? '', $characterMask); + case 'right': + return rtrim($string ?? '', $characterMask); + default: + throw new RuntimeError('Trimming side must be "left", "right" or "both".'); + } +} + +/** + * Inserts HTML line breaks before all newlines in a string. + * + * @param string|null $string + * + * @return string + */ +function twig_nl2br($string) +{ + return nl2br($string ?? ''); +} + +/** + * Removes whitespaces between HTML tags. + * + * @param string|null $string + * + * @return string + */ +function twig_spaceless($content) +{ + return trim(preg_replace('/>\s+<', $content ?? '')); +} + +/** + * @param string|null $string + * @param string $to + * @param string $from + * + * @return string + */ +function twig_convert_encoding($string, $to, $from) +{ + if (!\function_exists('iconv')) { + throw new RuntimeError('Unable to convert encoding: required function iconv() does not exist. You should install ext-iconv or symfony/polyfill-iconv.'); + } + + return iconv($from, $to, $string ?? ''); +} + +/** + * Returns the length of a variable. + * + * @param mixed $thing A variable + * + * @return int The length of the value + */ +function twig_length_filter(Environment $env, $thing) +{ + if (null === $thing) { + return 0; + } + + if (is_scalar($thing)) { + return mb_strlen($thing, $env->getCharset()); + } + + if ($thing instanceof \Countable || \is_array($thing) || $thing instanceof \SimpleXMLElement) { + return \count($thing); + } + + if ($thing instanceof \Traversable) { + return iterator_count($thing); + } + + if (method_exists($thing, '__toString') && !$thing instanceof \Countable) { + return mb_strlen((string) $thing, $env->getCharset()); + } + + return 1; +} + +/** + * Converts a string to uppercase. + * + * @param string|null $string A string + * + * @return string The uppercased string + */ +function twig_upper_filter(Environment $env, $string) +{ + return mb_strtoupper($string ?? '', $env->getCharset()); +} + +/** + * Converts a string to lowercase. + * + * @param string|null $string A string + * + * @return string The lowercased string + */ +function twig_lower_filter(Environment $env, $string) +{ + return mb_strtolower($string ?? '', $env->getCharset()); +} + +/** + * Strips HTML and PHP tags from a string. + * + * @param string|null $string + * @param string[]|string|null $string + * + * @return string + */ +function twig_striptags($string, $allowable_tags = null) +{ + return strip_tags($string ?? '', $allowable_tags); +} + +/** + * Returns a titlecased string. + * + * @param string|null $string A string + * + * @return string The titlecased string + */ +function twig_title_string_filter(Environment $env, $string) +{ + if (null !== $charset = $env->getCharset()) { + return mb_convert_case($string ?? '', \MB_CASE_TITLE, $charset); + } + + return ucwords(strtolower($string ?? '')); +} + +/** + * Returns a capitalized string. + * + * @param string|null $string A string + * + * @return string The capitalized string + */ +function twig_capitalize_string_filter(Environment $env, $string) +{ + $charset = $env->getCharset(); + + return mb_strtoupper(mb_substr($string ?? '', 0, 1, $charset), $charset).mb_strtolower(mb_substr($string ?? '', 1, null, $charset), $charset); +} + +/** + * @internal + */ +function twig_call_macro(Template $template, string $method, array $args, int $lineno, array $context, Source $source) +{ + if (!method_exists($template, $method)) { + $parent = $template; + while ($parent = $parent->getParent($context)) { + if (method_exists($parent, $method)) { + return $parent->$method(...$args); + } + } + + throw new RuntimeError(sprintf('Macro "%s" is not defined in template "%s".', substr($method, \strlen('macro_')), $template->getTemplateName()), $lineno, $source); + } + + return $template->$method(...$args); +} + +/** + * @internal + */ +function twig_ensure_traversable($seq) +{ + if ($seq instanceof \Traversable || \is_array($seq)) { + return $seq; + } + + return []; +} + +/** + * @internal + */ +function twig_to_array($seq, $preserveKeys = true) +{ + if ($seq instanceof \Traversable) { + return iterator_to_array($seq, $preserveKeys); + } + + if (!\is_array($seq)) { + return $seq; + } + + return $preserveKeys ? $seq : array_values($seq); +} + +/** + * Checks if a variable is empty. + * + * {# evaluates to true if the foo variable is null, false, or the empty string #} + * {% if foo is empty %} + * {# ... #} + * {% endif %} + * + * @param mixed $value A variable + * + * @return bool true if the value is empty, false otherwise + */ +function twig_test_empty($value) +{ + if ($value instanceof \Countable) { + return 0 === \count($value); + } + + if ($value instanceof \Traversable) { + return !iterator_count($value); + } + + if (\is_object($value) && method_exists($value, '__toString')) { + return '' === (string) $value; + } + + return '' === $value || false === $value || null === $value || [] === $value; +} + +/** + * Checks if a variable is traversable. + * + * {# evaluates to true if the foo variable is an array or a traversable object #} + * {% if foo is iterable %} + * {# ... #} + * {% endif %} + * + * @param mixed $value A variable + * + * @return bool true if the value is traversable + */ +function twig_test_iterable($value) +{ + return $value instanceof \Traversable || \is_array($value); +} + +/** + * Renders a template. + * + * @param array $context + * @param string|array $template The template to render or an array of templates to try consecutively + * @param array $variables The variables to pass to the template + * @param bool $withContext + * @param bool $ignoreMissing Whether to ignore missing templates or not + * @param bool $sandboxed Whether to sandbox the template or not + * + * @return string The rendered template + */ +function twig_include(Environment $env, $context, $template, $variables = [], $withContext = true, $ignoreMissing = false, $sandboxed = false) +{ + $alreadySandboxed = false; + $sandbox = null; + if ($withContext) { + $variables = array_merge($context, $variables); + } + + if ($isSandboxed = $sandboxed && $env->hasExtension(SandboxExtension::class)) { + $sandbox = $env->getExtension(SandboxExtension::class); + if (!$alreadySandboxed = $sandbox->isSandboxed()) { + $sandbox->enableSandbox(); + } + + foreach ((\is_array($template) ? $template : [$template]) as $name) { + // if a Template instance is passed, it might have been instantiated outside of a sandbox, check security + if ($name instanceof TemplateWrapper || $name instanceof Template) { + $name->unwrap()->checkSecurity(); + } + } + } + + try { + $loaded = null; + try { + $loaded = $env->resolveTemplate($template); + } catch (LoaderError $e) { + if (!$ignoreMissing) { + throw $e; + } + } + + return $loaded ? $loaded->render($variables) : ''; + } finally { + if ($isSandboxed && !$alreadySandboxed) { + $sandbox->disableSandbox(); + } + } +} + +/** + * Returns a template content without rendering it. + * + * @param string $name The template name + * @param bool $ignoreMissing Whether to ignore missing templates or not + * + * @return string The template source + */ +function twig_source(Environment $env, $name, $ignoreMissing = false) +{ + $loader = $env->getLoader(); + try { + return $loader->getSourceContext($name)->getCode(); + } catch (LoaderError $e) { + if (!$ignoreMissing) { + throw $e; + } + } +} + +/** + * Provides the ability to get constants from instances as well as class/global constants. + * + * @param string $constant The name of the constant + * @param object|null $object The object to get the constant from + * + * @return string + */ +function twig_constant($constant, $object = null) +{ + if (null !== $object) { + if ('class' === $constant) { + return \get_class($object); + } + + $constant = \get_class($object).'::'.$constant; + } + + if (!\defined($constant)) { + throw new RuntimeError(sprintf('Constant "%s" is undefined.', $constant)); + } + + return \constant($constant); +} + +/** + * Checks if a constant exists. + * + * @param string $constant The name of the constant + * @param object|null $object The object to get the constant from + * + * @return bool + */ +function twig_constant_is_defined($constant, $object = null) +{ + if (null !== $object) { + if ('class' === $constant) { + return true; + } + + $constant = \get_class($object).'::'.$constant; + } + + return \defined($constant); +} + +/** + * Batches item. + * + * @param array $items An array of items + * @param int $size The size of the batch + * @param mixed $fill A value used to fill missing items + * + * @return array + */ +function twig_array_batch($items, $size, $fill = null, $preserveKeys = true) +{ + if (!twig_test_iterable($items)) { + throw new RuntimeError(sprintf('The "batch" filter expects an array or "Traversable", got "%s".', \is_object($items) ? \get_class($items) : \gettype($items))); + } + + $size = ceil($size); + + $result = array_chunk(twig_to_array($items, $preserveKeys), $size, $preserveKeys); + + if (null !== $fill && $result) { + $last = \count($result) - 1; + if ($fillCount = $size - \count($result[$last])) { + for ($i = 0; $i < $fillCount; ++$i) { + $result[$last][] = $fill; + } + } + } + + return $result; +} + +/** + * Returns the attribute value for a given array/object. + * + * @param mixed $object The object or array from where to get the item + * @param mixed $item The item to get from the array or object + * @param array $arguments An array of arguments to pass if the item is an object method + * @param string $type The type of attribute (@see \Twig\Template constants) + * @param bool $isDefinedTest Whether this is only a defined check + * @param bool $ignoreStrictCheck Whether to ignore the strict attribute check or not + * @param int $lineno The template line where the attribute was called + * + * @return mixed The attribute value, or a Boolean when $isDefinedTest is true, or null when the attribute is not set and $ignoreStrictCheck is true + * + * @throws RuntimeError if the attribute does not exist and Twig is running in strict mode and $isDefinedTest is false + * + * @internal + */ +function twig_get_attribute(Environment $env, Source $source, $object, $item, array $arguments = [], $type = /* Template::ANY_CALL */ 'any', $isDefinedTest = false, $ignoreStrictCheck = false, $sandboxed = false, int $lineno = -1) +{ + // array + if (/* Template::METHOD_CALL */ 'method' !== $type) { + $arrayItem = \is_bool($item) || \is_float($item) ? (int) $item : $item; + + if (((\is_array($object) || $object instanceof \ArrayObject) && (isset($object[$arrayItem]) || \array_key_exists($arrayItem, (array) $object))) + || ($object instanceof ArrayAccess && isset($object[$arrayItem])) + ) { + if ($isDefinedTest) { + return true; + } + + return $object[$arrayItem]; + } + + if (/* Template::ARRAY_CALL */ 'array' === $type || !\is_object($object)) { + if ($isDefinedTest) { + return false; + } + + if ($ignoreStrictCheck || !$env->isStrictVariables()) { + return; + } + + if ($object instanceof ArrayAccess) { + $message = sprintf('Key "%s" in object with ArrayAccess of class "%s" does not exist.', $arrayItem, \get_class($object)); + } elseif (\is_object($object)) { + $message = sprintf('Impossible to access a key "%s" on an object of class "%s" that does not implement ArrayAccess interface.', $item, \get_class($object)); + } elseif (\is_array($object)) { + if (empty($object)) { + $message = sprintf('Key "%s" does not exist as the array is empty.', $arrayItem); + } else { + $message = sprintf('Key "%s" for array with keys "%s" does not exist.', $arrayItem, implode(', ', array_keys($object))); + } + } elseif (/* Template::ARRAY_CALL */ 'array' === $type) { + if (null === $object) { + $message = sprintf('Impossible to access a key ("%s") on a null variable.', $item); + } else { + $message = sprintf('Impossible to access a key ("%s") on a %s variable ("%s").', $item, \gettype($object), $object); + } + } elseif (null === $object) { + $message = sprintf('Impossible to access an attribute ("%s") on a null variable.', $item); + } else { + $message = sprintf('Impossible to access an attribute ("%s") on a %s variable ("%s").', $item, \gettype($object), $object); + } + + throw new RuntimeError($message, $lineno, $source); + } + } + + if (!\is_object($object)) { + if ($isDefinedTest) { + return false; + } + + if ($ignoreStrictCheck || !$env->isStrictVariables()) { + return; + } + + if (null === $object) { + $message = sprintf('Impossible to invoke a method ("%s") on a null variable.', $item); + } elseif (\is_array($object)) { + $message = sprintf('Impossible to invoke a method ("%s") on an array.', $item); + } else { + $message = sprintf('Impossible to invoke a method ("%s") on a %s variable ("%s").', $item, \gettype($object), $object); + } + + throw new RuntimeError($message, $lineno, $source); + } + + if ($object instanceof Template) { + throw new RuntimeError('Accessing \Twig\Template attributes is forbidden.', $lineno, $source); + } + + // object property + if (/* Template::METHOD_CALL */ 'method' !== $type) { + if (isset($object->$item) || \array_key_exists((string) $item, (array) $object)) { + if ($isDefinedTest) { + return true; + } + + if ($sandboxed) { + $env->getExtension(SandboxExtension::class)->checkPropertyAllowed($object, $item, $lineno, $source); + } + + return $object->$item; + } + } + + static $cache = []; + + $class = \get_class($object); + + // object method + // precedence: getXxx() > isXxx() > hasXxx() + if (!isset($cache[$class])) { + $methods = get_class_methods($object); + sort($methods); + $lcMethods = array_map(function ($value) { return strtr($value, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'); }, $methods); + $classCache = []; + foreach ($methods as $i => $method) { + $classCache[$method] = $method; + $classCache[$lcName = $lcMethods[$i]] = $method; + + if ('g' === $lcName[0] && 0 === strpos($lcName, 'get')) { + $name = substr($method, 3); + $lcName = substr($lcName, 3); + } elseif ('i' === $lcName[0] && 0 === strpos($lcName, 'is')) { + $name = substr($method, 2); + $lcName = substr($lcName, 2); + } elseif ('h' === $lcName[0] && 0 === strpos($lcName, 'has')) { + $name = substr($method, 3); + $lcName = substr($lcName, 3); + if (\in_array('is'.$lcName, $lcMethods)) { + continue; + } + } else { + continue; + } + + // skip get() and is() methods (in which case, $name is empty) + if ($name) { + if (!isset($classCache[$name])) { + $classCache[$name] = $method; + } + + if (!isset($classCache[$lcName])) { + $classCache[$lcName] = $method; + } + } + } + $cache[$class] = $classCache; + } + + $call = false; + if (isset($cache[$class][$item])) { + $method = $cache[$class][$item]; + } elseif (isset($cache[$class][$lcItem = strtr($item, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')])) { + $method = $cache[$class][$lcItem]; + } elseif (isset($cache[$class]['__call'])) { + $method = $item; + $call = true; + } else { + if ($isDefinedTest) { + return false; + } + + if ($ignoreStrictCheck || !$env->isStrictVariables()) { + return; + } + + throw new RuntimeError(sprintf('Neither the property "%1$s" nor one of the methods "%1$s()", "get%1$s()"/"is%1$s()"/"has%1$s()" or "__call()" exist and have public access in class "%2$s".', $item, $class), $lineno, $source); + } + + if ($isDefinedTest) { + return true; + } + + if ($sandboxed) { + $env->getExtension(SandboxExtension::class)->checkMethodAllowed($object, $method, $lineno, $source); + } + + // Some objects throw exceptions when they have __call, and the method we try + // to call is not supported. If ignoreStrictCheck is true, we should return null. + try { + $ret = $object->$method(...$arguments); + } catch (\BadMethodCallException $e) { + if ($call && ($ignoreStrictCheck || !$env->isStrictVariables())) { + return; + } + throw $e; + } + + return $ret; +} + +/** + * Returns the values from a single column in the input array. + * + *
+ *  {% set items = [{ 'fruit' : 'apple'}, {'fruit' : 'orange' }] %}
+ *
+ *  {% set fruits = items|column('fruit') %}
+ *
+ *  {# fruits now contains ['apple', 'orange'] #}
+ * 
+ * + * @param array|Traversable $array An array + * @param mixed $name The column name + * @param mixed $index The column to use as the index/keys for the returned array + * + * @return array The array of values + */ +function twig_array_column($array, $name, $index = null): array +{ + if ($array instanceof Traversable) { + $array = iterator_to_array($array); + } elseif (!\is_array($array)) { + throw new RuntimeError(sprintf('The column filter only works with arrays or "Traversable", got "%s" as first argument.', \gettype($array))); + } + + return array_column($array, $name, $index); +} + +function twig_array_filter(Environment $env, $array, $arrow) +{ + if (!twig_test_iterable($array)) { + throw new RuntimeError(sprintf('The "filter" filter expects an array or "Traversable", got "%s".', \is_object($array) ? \get_class($array) : \gettype($array))); + } + + twig_check_arrow_in_sandbox($env, $arrow, 'filter', 'filter'); + + if (\is_array($array)) { + return array_filter($array, $arrow, \ARRAY_FILTER_USE_BOTH); + } + + // the IteratorIterator wrapping is needed as some internal PHP classes are \Traversable but do not implement \Iterator + return new \CallbackFilterIterator(new \IteratorIterator($array), $arrow); +} + +function twig_array_map(Environment $env, $array, $arrow) +{ + twig_check_arrow_in_sandbox($env, $arrow, 'map', 'filter'); + + $r = []; + foreach ($array as $k => $v) { + $r[$k] = $arrow($v, $k); + } + + return $r; +} + +function twig_array_reduce(Environment $env, $array, $arrow, $initial = null) +{ + twig_check_arrow_in_sandbox($env, $arrow, 'reduce', 'filter'); + + if (!\is_array($array) && !$array instanceof \Traversable) { + throw new RuntimeError(sprintf('The "reduce" filter only works with arrays or "Traversable", got "%s" as first argument.', \gettype($array))); + } + + $accumulator = $initial; + foreach ($array as $key => $value) { + $accumulator = $arrow($accumulator, $value, $key); + } + + return $accumulator; +} + +function twig_array_some(Environment $env, $array, $arrow) +{ + twig_check_arrow_in_sandbox($env, $arrow, 'has some', 'operator'); + + foreach ($array as $k => $v) { + if ($arrow($v, $k)) { + return true; + } + } + + return false; +} + +function twig_array_every(Environment $env, $array, $arrow) +{ + twig_check_arrow_in_sandbox($env, $arrow, 'has every', 'operator'); + + foreach ($array as $k => $v) { + if (!$arrow($v, $k)) { + return false; + } + } + + return true; +} + +function twig_check_arrow_in_sandbox(Environment $env, $arrow, $thing, $type) +{ + if (!$arrow instanceof Closure && $env->hasExtension('\Twig\Extension\SandboxExtension') && $env->getExtension('\Twig\Extension\SandboxExtension')->isSandboxed()) { + throw new RuntimeError(sprintf('The callable passed to the "%s" %s must be a Closure in sandbox mode.', $thing, $type)); + } +} +} diff --git a/Sources/vendor/twig/twig/src/Extension/DebugExtension.php b/Sources/vendor/twig/twig/src/Extension/DebugExtension.php new file mode 100644 index 00000000..bfb23d7b --- /dev/null +++ b/Sources/vendor/twig/twig/src/Extension/DebugExtension.php @@ -0,0 +1,64 @@ + $isDumpOutputHtmlSafe ? ['html'] : [], 'needs_context' => true, 'needs_environment' => true, 'is_variadic' => true]), + ]; + } +} +} + +namespace { +use Twig\Environment; +use Twig\Template; +use Twig\TemplateWrapper; + +function twig_var_dump(Environment $env, $context, ...$vars) +{ + if (!$env->isDebug()) { + return; + } + + ob_start(); + + if (!$vars) { + $vars = []; + foreach ($context as $key => $value) { + if (!$value instanceof Template && !$value instanceof TemplateWrapper) { + $vars[$key] = $value; + } + } + + var_dump($vars); + } else { + var_dump(...$vars); + } + + return ob_get_clean(); +} +} diff --git a/Sources/vendor/twig/twig/src/Extension/EscaperExtension.php b/Sources/vendor/twig/twig/src/Extension/EscaperExtension.php new file mode 100644 index 00000000..9d2251dc --- /dev/null +++ b/Sources/vendor/twig/twig/src/Extension/EscaperExtension.php @@ -0,0 +1,416 @@ +setDefaultStrategy($defaultStrategy); + } + + public function getTokenParsers(): array + { + return [new AutoEscapeTokenParser()]; + } + + public function getNodeVisitors(): array + { + return [new EscaperNodeVisitor()]; + } + + public function getFilters(): array + { + return [ + new TwigFilter('escape', 'twig_escape_filter', ['needs_environment' => true, 'is_safe_callback' => 'twig_escape_filter_is_safe']), + new TwigFilter('e', 'twig_escape_filter', ['needs_environment' => true, 'is_safe_callback' => 'twig_escape_filter_is_safe']), + new TwigFilter('raw', 'twig_raw_filter', ['is_safe' => ['all']]), + ]; + } + + /** + * Sets the default strategy to use when not defined by the user. + * + * The strategy can be a valid PHP callback that takes the template + * name as an argument and returns the strategy to use. + * + * @param string|false|callable $defaultStrategy An escaping strategy + */ + public function setDefaultStrategy($defaultStrategy): void + { + if ('name' === $defaultStrategy) { + $defaultStrategy = [FileExtensionEscapingStrategy::class, 'guess']; + } + + $this->defaultStrategy = $defaultStrategy; + } + + /** + * Gets the default strategy to use when not defined by the user. + * + * @param string $name The template name + * + * @return string|false The default strategy to use for the template + */ + public function getDefaultStrategy(string $name) + { + // disable string callables to avoid calling a function named html or js, + // or any other upcoming escaping strategy + if (!\is_string($this->defaultStrategy) && false !== $this->defaultStrategy) { + return \call_user_func($this->defaultStrategy, $name); + } + + return $this->defaultStrategy; + } + + /** + * Defines a new escaper to be used via the escape filter. + * + * @param string $strategy The strategy name that should be used as a strategy in the escape call + * @param callable $callable A valid PHP callable + */ + public function setEscaper($strategy, callable $callable) + { + $this->escapers[$strategy] = $callable; + } + + /** + * Gets all defined escapers. + * + * @return callable[] An array of escapers + */ + public function getEscapers() + { + return $this->escapers; + } + + public function setSafeClasses(array $safeClasses = []) + { + $this->safeClasses = []; + $this->safeLookup = []; + foreach ($safeClasses as $class => $strategies) { + $this->addSafeClass($class, $strategies); + } + } + + public function addSafeClass(string $class, array $strategies) + { + $class = ltrim($class, '\\'); + if (!isset($this->safeClasses[$class])) { + $this->safeClasses[$class] = []; + } + $this->safeClasses[$class] = array_merge($this->safeClasses[$class], $strategies); + + foreach ($strategies as $strategy) { + $this->safeLookup[$strategy][$class] = true; + } + } +} +} + +namespace { +use Twig\Environment; +use Twig\Error\RuntimeError; +use Twig\Extension\EscaperExtension; +use Twig\Markup; +use Twig\Node\Expression\ConstantExpression; +use Twig\Node\Node; + +/** + * Marks a variable as being safe. + * + * @param string $string A PHP variable + */ +function twig_raw_filter($string) +{ + return $string; +} + +/** + * Escapes a string. + * + * @param mixed $string The value to be escaped + * @param string $strategy The escaping strategy + * @param string $charset The charset + * @param bool $autoescape Whether the function is called by the auto-escaping feature (true) or by the developer (false) + * + * @return string + */ +function twig_escape_filter(Environment $env, $string, $strategy = 'html', $charset = null, $autoescape = false) +{ + if ($autoescape && $string instanceof Markup) { + return $string; + } + + if (!\is_string($string)) { + if (\is_object($string) && method_exists($string, '__toString')) { + if ($autoescape) { + $c = \get_class($string); + $ext = $env->getExtension(EscaperExtension::class); + if (!isset($ext->safeClasses[$c])) { + $ext->safeClasses[$c] = []; + foreach (class_parents($string) + class_implements($string) as $class) { + if (isset($ext->safeClasses[$class])) { + $ext->safeClasses[$c] = array_unique(array_merge($ext->safeClasses[$c], $ext->safeClasses[$class])); + foreach ($ext->safeClasses[$class] as $s) { + $ext->safeLookup[$s][$c] = true; + } + } + } + } + if (isset($ext->safeLookup[$strategy][$c]) || isset($ext->safeLookup['all'][$c])) { + return (string) $string; + } + } + + $string = (string) $string; + } elseif (\in_array($strategy, ['html', 'js', 'css', 'html_attr', 'url'])) { + return $string; + } + } + + if ('' === $string) { + return ''; + } + + if (null === $charset) { + $charset = $env->getCharset(); + } + + switch ($strategy) { + case 'html': + // see https://www.php.net/htmlspecialchars + + // Using a static variable to avoid initializing the array + // each time the function is called. Moving the declaration on the + // top of the function slow downs other escaping strategies. + static $htmlspecialcharsCharsets = [ + 'ISO-8859-1' => true, 'ISO8859-1' => true, + 'ISO-8859-15' => true, 'ISO8859-15' => true, + 'utf-8' => true, 'UTF-8' => true, + 'CP866' => true, 'IBM866' => true, '866' => true, + 'CP1251' => true, 'WINDOWS-1251' => true, 'WIN-1251' => true, + '1251' => true, + 'CP1252' => true, 'WINDOWS-1252' => true, '1252' => true, + 'KOI8-R' => true, 'KOI8-RU' => true, 'KOI8R' => true, + 'BIG5' => true, '950' => true, + 'GB2312' => true, '936' => true, + 'BIG5-HKSCS' => true, + 'SHIFT_JIS' => true, 'SJIS' => true, '932' => true, + 'EUC-JP' => true, 'EUCJP' => true, + 'ISO8859-5' => true, 'ISO-8859-5' => true, 'MACROMAN' => true, + ]; + + if (isset($htmlspecialcharsCharsets[$charset])) { + return htmlspecialchars($string, \ENT_QUOTES | \ENT_SUBSTITUTE, $charset); + } + + if (isset($htmlspecialcharsCharsets[strtoupper($charset)])) { + // cache the lowercase variant for future iterations + $htmlspecialcharsCharsets[$charset] = true; + + return htmlspecialchars($string, \ENT_QUOTES | \ENT_SUBSTITUTE, $charset); + } + + $string = twig_convert_encoding($string, 'UTF-8', $charset); + $string = htmlspecialchars($string, \ENT_QUOTES | \ENT_SUBSTITUTE, 'UTF-8'); + + return iconv('UTF-8', $charset, $string); + + case 'js': + // escape all non-alphanumeric characters + // into their \x or \uHHHH representations + if ('UTF-8' !== $charset) { + $string = twig_convert_encoding($string, 'UTF-8', $charset); + } + + if (!preg_match('//u', $string)) { + throw new RuntimeError('The string to escape is not a valid UTF-8 string.'); + } + + $string = preg_replace_callback('#[^a-zA-Z0-9,\._]#Su', function ($matches) { + $char = $matches[0]; + + /* + * A few characters have short escape sequences in JSON and JavaScript. + * Escape sequences supported only by JavaScript, not JSON, are omitted. + * \" is also supported but omitted, because the resulting string is not HTML safe. + */ + static $shortMap = [ + '\\' => '\\\\', + '/' => '\\/', + "\x08" => '\b', + "\x0C" => '\f', + "\x0A" => '\n', + "\x0D" => '\r', + "\x09" => '\t', + ]; + + if (isset($shortMap[$char])) { + return $shortMap[$char]; + } + + $codepoint = mb_ord($char, 'UTF-8'); + if (0x10000 > $codepoint) { + return sprintf('\u%04X', $codepoint); + } + + // Split characters outside the BMP into surrogate pairs + // https://tools.ietf.org/html/rfc2781.html#section-2.1 + $u = $codepoint - 0x10000; + $high = 0xD800 | ($u >> 10); + $low = 0xDC00 | ($u & 0x3FF); + + return sprintf('\u%04X\u%04X', $high, $low); + }, $string); + + if ('UTF-8' !== $charset) { + $string = iconv('UTF-8', $charset, $string); + } + + return $string; + + case 'css': + if ('UTF-8' !== $charset) { + $string = twig_convert_encoding($string, 'UTF-8', $charset); + } + + if (!preg_match('//u', $string)) { + throw new RuntimeError('The string to escape is not a valid UTF-8 string.'); + } + + $string = preg_replace_callback('#[^a-zA-Z0-9]#Su', function ($matches) { + $char = $matches[0]; + + return sprintf('\\%X ', 1 === \strlen($char) ? \ord($char) : mb_ord($char, 'UTF-8')); + }, $string); + + if ('UTF-8' !== $charset) { + $string = iconv('UTF-8', $charset, $string); + } + + return $string; + + case 'html_attr': + if ('UTF-8' !== $charset) { + $string = twig_convert_encoding($string, 'UTF-8', $charset); + } + + if (!preg_match('//u', $string)) { + throw new RuntimeError('The string to escape is not a valid UTF-8 string.'); + } + + $string = preg_replace_callback('#[^a-zA-Z0-9,\.\-_]#Su', function ($matches) { + /** + * This function is adapted from code coming from Zend Framework. + * + * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (https://www.zend.com) + * @license https://framework.zend.com/license/new-bsd New BSD License + */ + $chr = $matches[0]; + $ord = \ord($chr); + + /* + * The following replaces characters undefined in HTML with the + * hex entity for the Unicode replacement character. + */ + if (($ord <= 0x1f && "\t" != $chr && "\n" != $chr && "\r" != $chr) || ($ord >= 0x7f && $ord <= 0x9f)) { + return '�'; + } + + /* + * Check if the current character to escape has a name entity we should + * replace it with while grabbing the hex value of the character. + */ + if (1 === \strlen($chr)) { + /* + * While HTML supports far more named entities, the lowest common denominator + * has become HTML5's XML Serialisation which is restricted to the those named + * entities that XML supports. Using HTML entities would result in this error: + * XML Parsing Error: undefined entity + */ + static $entityMap = [ + 34 => '"', /* quotation mark */ + 38 => '&', /* ampersand */ + 60 => '<', /* less-than sign */ + 62 => '>', /* greater-than sign */ + ]; + + if (isset($entityMap[$ord])) { + return $entityMap[$ord]; + } + + return sprintf('&#x%02X;', $ord); + } + + /* + * Per OWASP recommendations, we'll use hex entities for any other + * characters where a named entity does not exist. + */ + return sprintf('&#x%04X;', mb_ord($chr, 'UTF-8')); + }, $string); + + if ('UTF-8' !== $charset) { + $string = iconv('UTF-8', $charset, $string); + } + + return $string; + + case 'url': + return rawurlencode($string); + + default: + $escapers = $env->getExtension(EscaperExtension::class)->getEscapers(); + if (array_key_exists($strategy, $escapers)) { + return $escapers[$strategy]($env, $string, $charset); + } + + $validStrategies = implode(', ', array_merge(['html', 'js', 'url', 'css', 'html_attr'], array_keys($escapers))); + + throw new RuntimeError(sprintf('Invalid escaping strategy "%s" (valid ones: %s).', $strategy, $validStrategies)); + } +} + +/** + * @internal + */ +function twig_escape_filter_is_safe(Node $filterArgs) +{ + foreach ($filterArgs as $arg) { + if ($arg instanceof ConstantExpression) { + return [$arg->getAttribute('value')]; + } + + return []; + } + + return ['html']; +} +} diff --git a/Sources/vendor/twig/twig/src/Extension/ExtensionInterface.php b/Sources/vendor/twig/twig/src/Extension/ExtensionInterface.php new file mode 100644 index 00000000..ab9c2c37 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Extension/ExtensionInterface.php @@ -0,0 +1,76 @@ + + */ +interface ExtensionInterface +{ + /** + * Returns the token parser instances to add to the existing list. + * + * @return TokenParserInterface[] + */ + public function getTokenParsers(); + + /** + * Returns the node visitor instances to add to the existing list. + * + * @return NodeVisitorInterface[] + */ + public function getNodeVisitors(); + + /** + * Returns a list of filters to add to the existing list. + * + * @return TwigFilter[] + */ + public function getFilters(); + + /** + * Returns a list of tests to add to the existing list. + * + * @return TwigTest[] + */ + public function getTests(); + + /** + * Returns a list of functions to add to the existing list. + * + * @return TwigFunction[] + */ + public function getFunctions(); + + /** + * Returns a list of operators to add to the existing list. + * + * @return array First array of unary operators, second array of binary operators + * + * @psalm-return array{ + * array}>, + * array, associativity: ExpressionParser::OPERATOR_*}> + * } + */ + public function getOperators(); +} diff --git a/Sources/vendor/twig/twig/src/Extension/GlobalsInterface.php b/Sources/vendor/twig/twig/src/Extension/GlobalsInterface.php new file mode 100644 index 00000000..6f1dfe8a --- /dev/null +++ b/Sources/vendor/twig/twig/src/Extension/GlobalsInterface.php @@ -0,0 +1,28 @@ + + */ +interface GlobalsInterface +{ + /** + * @return array + */ + public function getGlobals(): array; +} diff --git a/Sources/vendor/twig/twig/src/Extension/OptimizerExtension.php b/Sources/vendor/twig/twig/src/Extension/OptimizerExtension.php new file mode 100644 index 00000000..965bfdb0 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Extension/OptimizerExtension.php @@ -0,0 +1,29 @@ +optimizers = $optimizers; + } + + public function getNodeVisitors(): array + { + return [new OptimizerNodeVisitor($this->optimizers)]; + } +} diff --git a/Sources/vendor/twig/twig/src/Extension/ProfilerExtension.php b/Sources/vendor/twig/twig/src/Extension/ProfilerExtension.php new file mode 100644 index 00000000..43e4a449 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Extension/ProfilerExtension.php @@ -0,0 +1,52 @@ +actives[] = $profile; + } + + /** + * @return void + */ + public function enter(Profile $profile) + { + $this->actives[0]->addProfile($profile); + array_unshift($this->actives, $profile); + } + + /** + * @return void + */ + public function leave(Profile $profile) + { + $profile->leave(); + array_shift($this->actives); + + if (1 === \count($this->actives)) { + $this->actives[0]->leave(); + } + } + + public function getNodeVisitors(): array + { + return [new ProfilerNodeVisitor(static::class)]; + } +} diff --git a/Sources/vendor/twig/twig/src/Extension/RuntimeExtensionInterface.php b/Sources/vendor/twig/twig/src/Extension/RuntimeExtensionInterface.php new file mode 100644 index 00000000..63bc3b1a --- /dev/null +++ b/Sources/vendor/twig/twig/src/Extension/RuntimeExtensionInterface.php @@ -0,0 +1,19 @@ + + */ +interface RuntimeExtensionInterface +{ +} diff --git a/Sources/vendor/twig/twig/src/Extension/SandboxExtension.php b/Sources/vendor/twig/twig/src/Extension/SandboxExtension.php new file mode 100644 index 00000000..c861159b --- /dev/null +++ b/Sources/vendor/twig/twig/src/Extension/SandboxExtension.php @@ -0,0 +1,123 @@ +policy = $policy; + $this->sandboxedGlobally = $sandboxed; + } + + public function getTokenParsers(): array + { + return [new SandboxTokenParser()]; + } + + public function getNodeVisitors(): array + { + return [new SandboxNodeVisitor()]; + } + + public function enableSandbox(): void + { + $this->sandboxed = true; + } + + public function disableSandbox(): void + { + $this->sandboxed = false; + } + + public function isSandboxed(): bool + { + return $this->sandboxedGlobally || $this->sandboxed; + } + + public function isSandboxedGlobally(): bool + { + return $this->sandboxedGlobally; + } + + public function setSecurityPolicy(SecurityPolicyInterface $policy) + { + $this->policy = $policy; + } + + public function getSecurityPolicy(): SecurityPolicyInterface + { + return $this->policy; + } + + public function checkSecurity($tags, $filters, $functions): void + { + if ($this->isSandboxed()) { + $this->policy->checkSecurity($tags, $filters, $functions); + } + } + + public function checkMethodAllowed($obj, $method, int $lineno = -1, Source $source = null): void + { + if ($this->isSandboxed()) { + try { + $this->policy->checkMethodAllowed($obj, $method); + } catch (SecurityNotAllowedMethodError $e) { + $e->setSourceContext($source); + $e->setTemplateLine($lineno); + + throw $e; + } + } + } + + public function checkPropertyAllowed($obj, $property, int $lineno = -1, Source $source = null): void + { + if ($this->isSandboxed()) { + try { + $this->policy->checkPropertyAllowed($obj, $property); + } catch (SecurityNotAllowedPropertyError $e) { + $e->setSourceContext($source); + $e->setTemplateLine($lineno); + + throw $e; + } + } + } + + public function ensureToStringAllowed($obj, int $lineno = -1, Source $source = null) + { + if ($this->isSandboxed() && \is_object($obj) && method_exists($obj, '__toString')) { + try { + $this->policy->checkMethodAllowed($obj, '__toString'); + } catch (SecurityNotAllowedMethodError $e) { + $e->setSourceContext($source); + $e->setTemplateLine($lineno); + + throw $e; + } + } + + return $obj; + } +} diff --git a/Sources/vendor/twig/twig/src/Extension/StagingExtension.php b/Sources/vendor/twig/twig/src/Extension/StagingExtension.php new file mode 100644 index 00000000..0ea47f90 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Extension/StagingExtension.php @@ -0,0 +1,100 @@ + + * + * @internal + */ +final class StagingExtension extends AbstractExtension +{ + private $functions = []; + private $filters = []; + private $visitors = []; + private $tokenParsers = []; + private $tests = []; + + public function addFunction(TwigFunction $function): void + { + if (isset($this->functions[$function->getName()])) { + throw new \LogicException(sprintf('Function "%s" is already registered.', $function->getName())); + } + + $this->functions[$function->getName()] = $function; + } + + public function getFunctions(): array + { + return $this->functions; + } + + public function addFilter(TwigFilter $filter): void + { + if (isset($this->filters[$filter->getName()])) { + throw new \LogicException(sprintf('Filter "%s" is already registered.', $filter->getName())); + } + + $this->filters[$filter->getName()] = $filter; + } + + public function getFilters(): array + { + return $this->filters; + } + + public function addNodeVisitor(NodeVisitorInterface $visitor): void + { + $this->visitors[] = $visitor; + } + + public function getNodeVisitors(): array + { + return $this->visitors; + } + + public function addTokenParser(TokenParserInterface $parser): void + { + if (isset($this->tokenParsers[$parser->getTag()])) { + throw new \LogicException(sprintf('Tag "%s" is already registered.', $parser->getTag())); + } + + $this->tokenParsers[$parser->getTag()] = $parser; + } + + public function getTokenParsers(): array + { + return $this->tokenParsers; + } + + public function addTest(TwigTest $test): void + { + if (isset($this->tests[$test->getName()])) { + throw new \LogicException(sprintf('Test "%s" is already registered.', $test->getName())); + } + + $this->tests[$test->getName()] = $test; + } + + public function getTests(): array + { + return $this->tests; + } +} diff --git a/Sources/vendor/twig/twig/src/Extension/StringLoaderExtension.php b/Sources/vendor/twig/twig/src/Extension/StringLoaderExtension.php new file mode 100644 index 00000000..7b451471 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Extension/StringLoaderExtension.php @@ -0,0 +1,42 @@ + true]), + ]; + } +} +} + +namespace { +use Twig\Environment; +use Twig\TemplateWrapper; + +/** + * Loads a template from a string. + * + * {{ include(template_from_string("Hello {{ name }}")) }} + * + * @param string $template A template as a string or object implementing __toString() + * @param string $name An optional name of the template to be used in error messages + */ +function twig_template_from_string(Environment $env, $template, string $name = null): TemplateWrapper +{ + return $env->createTemplate((string) $template, $name); +} +} diff --git a/Sources/vendor/twig/twig/src/ExtensionSet.php b/Sources/vendor/twig/twig/src/ExtensionSet.php new file mode 100644 index 00000000..d32200ce --- /dev/null +++ b/Sources/vendor/twig/twig/src/ExtensionSet.php @@ -0,0 +1,480 @@ + + * + * @internal + */ +final class ExtensionSet +{ + private $extensions; + private $initialized = false; + private $runtimeInitialized = false; + private $staging; + private $parsers; + private $visitors; + /** @var array */ + private $filters; + /** @var array */ + private $tests; + /** @var array */ + private $functions; + /** @var array}> */ + private $unaryOperators; + /** @var array, associativity: ExpressionParser::OPERATOR_*}> */ + private $binaryOperators; + /** @var array */ + private $globals; + private $functionCallbacks = []; + private $filterCallbacks = []; + private $parserCallbacks = []; + private $lastModified = 0; + + public function __construct() + { + $this->staging = new StagingExtension(); + } + + public function initRuntime() + { + $this->runtimeInitialized = true; + } + + public function hasExtension(string $class): bool + { + return isset($this->extensions[ltrim($class, '\\')]); + } + + public function getExtension(string $class): ExtensionInterface + { + $class = ltrim($class, '\\'); + + if (!isset($this->extensions[$class])) { + throw new RuntimeError(sprintf('The "%s" extension is not enabled.', $class)); + } + + return $this->extensions[$class]; + } + + /** + * @param ExtensionInterface[] $extensions + */ + public function setExtensions(array $extensions): void + { + foreach ($extensions as $extension) { + $this->addExtension($extension); + } + } + + /** + * @return ExtensionInterface[] + */ + public function getExtensions(): array + { + return $this->extensions; + } + + public function getSignature(): string + { + return json_encode(array_keys($this->extensions)); + } + + public function isInitialized(): bool + { + return $this->initialized || $this->runtimeInitialized; + } + + public function getLastModified(): int + { + if (0 !== $this->lastModified) { + return $this->lastModified; + } + + foreach ($this->extensions as $extension) { + $r = new \ReflectionObject($extension); + if (is_file($r->getFileName()) && ($extensionTime = filemtime($r->getFileName())) > $this->lastModified) { + $this->lastModified = $extensionTime; + } + } + + return $this->lastModified; + } + + public function addExtension(ExtensionInterface $extension): void + { + $class = \get_class($extension); + + if ($this->initialized) { + throw new \LogicException(sprintf('Unable to register extension "%s" as extensions have already been initialized.', $class)); + } + + if (isset($this->extensions[$class])) { + throw new \LogicException(sprintf('Unable to register extension "%s" as it is already registered.', $class)); + } + + $this->extensions[$class] = $extension; + } + + public function addFunction(TwigFunction $function): void + { + if ($this->initialized) { + throw new \LogicException(sprintf('Unable to add function "%s" as extensions have already been initialized.', $function->getName())); + } + + $this->staging->addFunction($function); + } + + /** + * @return TwigFunction[] + */ + public function getFunctions(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->functions; + } + + public function getFunction(string $name): ?TwigFunction + { + if (!$this->initialized) { + $this->initExtensions(); + } + + if (isset($this->functions[$name])) { + return $this->functions[$name]; + } + + foreach ($this->functions as $pattern => $function) { + $pattern = str_replace('\\*', '(.*?)', preg_quote($pattern, '#'), $count); + + if ($count && preg_match('#^'.$pattern.'$#', $name, $matches)) { + array_shift($matches); + $function->setArguments($matches); + + return $function; + } + } + + foreach ($this->functionCallbacks as $callback) { + if (false !== $function = $callback($name)) { + return $function; + } + } + + return null; + } + + public function registerUndefinedFunctionCallback(callable $callable): void + { + $this->functionCallbacks[] = $callable; + } + + public function addFilter(TwigFilter $filter): void + { + if ($this->initialized) { + throw new \LogicException(sprintf('Unable to add filter "%s" as extensions have already been initialized.', $filter->getName())); + } + + $this->staging->addFilter($filter); + } + + /** + * @return TwigFilter[] + */ + public function getFilters(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->filters; + } + + public function getFilter(string $name): ?TwigFilter + { + if (!$this->initialized) { + $this->initExtensions(); + } + + if (isset($this->filters[$name])) { + return $this->filters[$name]; + } + + foreach ($this->filters as $pattern => $filter) { + $pattern = str_replace('\\*', '(.*?)', preg_quote($pattern, '#'), $count); + + if ($count && preg_match('#^'.$pattern.'$#', $name, $matches)) { + array_shift($matches); + $filter->setArguments($matches); + + return $filter; + } + } + + foreach ($this->filterCallbacks as $callback) { + if (false !== $filter = $callback($name)) { + return $filter; + } + } + + return null; + } + + public function registerUndefinedFilterCallback(callable $callable): void + { + $this->filterCallbacks[] = $callable; + } + + public function addNodeVisitor(NodeVisitorInterface $visitor): void + { + if ($this->initialized) { + throw new \LogicException('Unable to add a node visitor as extensions have already been initialized.'); + } + + $this->staging->addNodeVisitor($visitor); + } + + /** + * @return NodeVisitorInterface[] + */ + public function getNodeVisitors(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->visitors; + } + + public function addTokenParser(TokenParserInterface $parser): void + { + if ($this->initialized) { + throw new \LogicException('Unable to add a token parser as extensions have already been initialized.'); + } + + $this->staging->addTokenParser($parser); + } + + /** + * @return TokenParserInterface[] + */ + public function getTokenParsers(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->parsers; + } + + public function getTokenParser(string $name): ?TokenParserInterface + { + if (!$this->initialized) { + $this->initExtensions(); + } + + if (isset($this->parsers[$name])) { + return $this->parsers[$name]; + } + + foreach ($this->parserCallbacks as $callback) { + if (false !== $parser = $callback($name)) { + return $parser; + } + } + + return null; + } + + public function registerUndefinedTokenParserCallback(callable $callable): void + { + $this->parserCallbacks[] = $callable; + } + + /** + * @return array + */ + public function getGlobals(): array + { + if (null !== $this->globals) { + return $this->globals; + } + + $globals = []; + foreach ($this->extensions as $extension) { + if (!$extension instanceof GlobalsInterface) { + continue; + } + + $extGlobals = $extension->getGlobals(); + if (!\is_array($extGlobals)) { + throw new \UnexpectedValueException(sprintf('"%s::getGlobals()" must return an array of globals.', \get_class($extension))); + } + + $globals = array_merge($globals, $extGlobals); + } + + if ($this->initialized) { + $this->globals = $globals; + } + + return $globals; + } + + public function addTest(TwigTest $test): void + { + if ($this->initialized) { + throw new \LogicException(sprintf('Unable to add test "%s" as extensions have already been initialized.', $test->getName())); + } + + $this->staging->addTest($test); + } + + /** + * @return TwigTest[] + */ + public function getTests(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->tests; + } + + public function getTest(string $name): ?TwigTest + { + if (!$this->initialized) { + $this->initExtensions(); + } + + if (isset($this->tests[$name])) { + return $this->tests[$name]; + } + + foreach ($this->tests as $pattern => $test) { + $pattern = str_replace('\\*', '(.*?)', preg_quote($pattern, '#'), $count); + + if ($count) { + if (preg_match('#^'.$pattern.'$#', $name, $matches)) { + array_shift($matches); + $test->setArguments($matches); + + return $test; + } + } + } + + return null; + } + + /** + * @return array}> + */ + public function getUnaryOperators(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->unaryOperators; + } + + /** + * @return array, associativity: ExpressionParser::OPERATOR_*}> + */ + public function getBinaryOperators(): array + { + if (!$this->initialized) { + $this->initExtensions(); + } + + return $this->binaryOperators; + } + + private function initExtensions(): void + { + $this->parsers = []; + $this->filters = []; + $this->functions = []; + $this->tests = []; + $this->visitors = []; + $this->unaryOperators = []; + $this->binaryOperators = []; + + foreach ($this->extensions as $extension) { + $this->initExtension($extension); + } + $this->initExtension($this->staging); + // Done at the end only, so that an exception during initialization does not mark the environment as initialized when catching the exception + $this->initialized = true; + } + + private function initExtension(ExtensionInterface $extension): void + { + // filters + foreach ($extension->getFilters() as $filter) { + $this->filters[$filter->getName()] = $filter; + } + + // functions + foreach ($extension->getFunctions() as $function) { + $this->functions[$function->getName()] = $function; + } + + // tests + foreach ($extension->getTests() as $test) { + $this->tests[$test->getName()] = $test; + } + + // token parsers + foreach ($extension->getTokenParsers() as $parser) { + if (!$parser instanceof TokenParserInterface) { + throw new \LogicException('getTokenParsers() must return an array of \Twig\TokenParser\TokenParserInterface.'); + } + + $this->parsers[$parser->getTag()] = $parser; + } + + // node visitors + foreach ($extension->getNodeVisitors() as $visitor) { + $this->visitors[] = $visitor; + } + + // operators + if ($operators = $extension->getOperators()) { + if (!\is_array($operators)) { + throw new \InvalidArgumentException(sprintf('"%s::getOperators()" must return an array with operators, got "%s".', \get_class($extension), \is_object($operators) ? \get_class($operators) : \gettype($operators).(\is_resource($operators) ? '' : '#'.$operators))); + } + + if (2 !== \count($operators)) { + throw new \InvalidArgumentException(sprintf('"%s::getOperators()" must return an array of 2 elements, got %d.', \get_class($extension), \count($operators))); + } + + $this->unaryOperators = array_merge($this->unaryOperators, $operators[0]); + $this->binaryOperators = array_merge($this->binaryOperators, $operators[1]); + } + } +} diff --git a/Sources/vendor/twig/twig/src/FileExtensionEscapingStrategy.php b/Sources/vendor/twig/twig/src/FileExtensionEscapingStrategy.php new file mode 100644 index 00000000..65198bbb --- /dev/null +++ b/Sources/vendor/twig/twig/src/FileExtensionEscapingStrategy.php @@ -0,0 +1,60 @@ + + */ +class FileExtensionEscapingStrategy +{ + /** + * Guesses the best autoescaping strategy based on the file name. + * + * @param string $name The template name + * + * @return string|false The escaping strategy name to use or false to disable + */ + public static function guess(string $name) + { + if (\in_array(substr($name, -1), ['/', '\\'])) { + return 'html'; // return html for directories + } + + if ('.twig' === substr($name, -5)) { + $name = substr($name, 0, -5); + } + + $extension = pathinfo($name, \PATHINFO_EXTENSION); + + switch ($extension) { + case 'js': + return 'js'; + + case 'css': + return 'css'; + + case 'txt': + return false; + + default: + return 'html'; + } + } +} diff --git a/Sources/vendor/twig/twig/src/Lexer.php b/Sources/vendor/twig/twig/src/Lexer.php new file mode 100644 index 00000000..6c45efbc --- /dev/null +++ b/Sources/vendor/twig/twig/src/Lexer.php @@ -0,0 +1,519 @@ + + */ +class Lexer +{ + private $isInitialized = false; + + private $tokens; + private $code; + private $cursor; + private $lineno; + private $end; + private $state; + private $states; + private $brackets; + private $env; + private $source; + private $options; + private $regexes; + private $position; + private $positions; + private $currentVarBlockLine; + + public const STATE_DATA = 0; + public const STATE_BLOCK = 1; + public const STATE_VAR = 2; + public const STATE_STRING = 3; + public const STATE_INTERPOLATION = 4; + + public const REGEX_NAME = '/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/A'; + public const REGEX_NUMBER = '/[0-9]+(?:\.[0-9]+)?([Ee][\+\-][0-9]+)?/A'; + public const REGEX_STRING = '/"([^#"\\\\]*(?:\\\\.[^#"\\\\]*)*)"|\'([^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\'/As'; + public const REGEX_DQ_STRING_DELIM = '/"/A'; + public const REGEX_DQ_STRING_PART = '/[^#"\\\\]*(?:(?:\\\\.|#(?!\{))[^#"\\\\]*)*/As'; + public const PUNCTUATION = '()[]{}?:.,|'; + + public function __construct(Environment $env, array $options = []) + { + $this->env = $env; + + $this->options = array_merge([ + 'tag_comment' => ['{#', '#}'], + 'tag_block' => ['{%', '%}'], + 'tag_variable' => ['{{', '}}'], + 'whitespace_trim' => '-', + 'whitespace_line_trim' => '~', + 'whitespace_line_chars' => ' \t\0\x0B', + 'interpolation' => ['#{', '}'], + ], $options); + } + + private function initialize() + { + if ($this->isInitialized) { + return; + } + + $this->isInitialized = true; + + // when PHP 7.3 is the min version, we will be able to remove the '#' part in preg_quote as it's part of the default + $this->regexes = [ + // }} + 'lex_var' => '{ + \s* + (?:'. + preg_quote($this->options['whitespace_trim'].$this->options['tag_variable'][1], '#').'\s*'. // -}}\s* + '|'. + preg_quote($this->options['whitespace_line_trim'].$this->options['tag_variable'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~}}[ \t\0\x0B]* + '|'. + preg_quote($this->options['tag_variable'][1], '#'). // }} + ') + }Ax', + + // %} + 'lex_block' => '{ + \s* + (?:'. + preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '#').'\s*\n?'. // -%}\s*\n? + '|'. + preg_quote($this->options['whitespace_line_trim'].$this->options['tag_block'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~%}[ \t\0\x0B]* + '|'. + preg_quote($this->options['tag_block'][1], '#').'\n?'. // %}\n? + ') + }Ax', + + // {% endverbatim %} + 'lex_raw_data' => '{'. + preg_quote($this->options['tag_block'][0], '#'). // {% + '('. + $this->options['whitespace_trim']. // - + '|'. + $this->options['whitespace_line_trim']. // ~ + ')?\s*endverbatim\s*'. + '(?:'. + preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '#').'\s*'. // -%} + '|'. + preg_quote($this->options['whitespace_line_trim'].$this->options['tag_block'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~%}[ \t\0\x0B]* + '|'. + preg_quote($this->options['tag_block'][1], '#'). // %} + ') + }sx', + + 'operator' => $this->getOperatorRegex(), + + // #} + 'lex_comment' => '{ + (?:'. + preg_quote($this->options['whitespace_trim'].$this->options['tag_comment'][1], '#').'\s*\n?'. // -#}\s*\n? + '|'. + preg_quote($this->options['whitespace_line_trim'].$this->options['tag_comment'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~#}[ \t\0\x0B]* + '|'. + preg_quote($this->options['tag_comment'][1], '#').'\n?'. // #}\n? + ') + }sx', + + // verbatim %} + 'lex_block_raw' => '{ + \s*verbatim\s* + (?:'. + preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '#').'\s*'. // -%}\s* + '|'. + preg_quote($this->options['whitespace_line_trim'].$this->options['tag_block'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~%}[ \t\0\x0B]* + '|'. + preg_quote($this->options['tag_block'][1], '#'). // %} + ') + }Asx', + + 'lex_block_line' => '{\s*line\s+(\d+)\s*'.preg_quote($this->options['tag_block'][1], '#').'}As', + + // {{ or {% or {# + 'lex_tokens_start' => '{ + ('. + preg_quote($this->options['tag_variable'][0], '#'). // {{ + '|'. + preg_quote($this->options['tag_block'][0], '#'). // {% + '|'. + preg_quote($this->options['tag_comment'][0], '#'). // {# + ')('. + preg_quote($this->options['whitespace_trim'], '#'). // - + '|'. + preg_quote($this->options['whitespace_line_trim'], '#'). // ~ + ')? + }sx', + 'interpolation_start' => '{'.preg_quote($this->options['interpolation'][0], '#').'\s*}A', + 'interpolation_end' => '{\s*'.preg_quote($this->options['interpolation'][1], '#').'}A', + ]; + } + + public function tokenize(Source $source): TokenStream + { + $this->initialize(); + + $this->source = $source; + $this->code = str_replace(["\r\n", "\r"], "\n", $source->getCode()); + $this->cursor = 0; + $this->lineno = 1; + $this->end = \strlen($this->code); + $this->tokens = []; + $this->state = self::STATE_DATA; + $this->states = []; + $this->brackets = []; + $this->position = -1; + + // find all token starts in one go + preg_match_all($this->regexes['lex_tokens_start'], $this->code, $matches, \PREG_OFFSET_CAPTURE); + $this->positions = $matches; + + while ($this->cursor < $this->end) { + // dispatch to the lexing functions depending + // on the current state + switch ($this->state) { + case self::STATE_DATA: + $this->lexData(); + break; + + case self::STATE_BLOCK: + $this->lexBlock(); + break; + + case self::STATE_VAR: + $this->lexVar(); + break; + + case self::STATE_STRING: + $this->lexString(); + break; + + case self::STATE_INTERPOLATION: + $this->lexInterpolation(); + break; + } + } + + $this->pushToken(/* Token::EOF_TYPE */ -1); + + if (!empty($this->brackets)) { + list($expect, $lineno) = array_pop($this->brackets); + throw new SyntaxError(sprintf('Unclosed "%s".', $expect), $lineno, $this->source); + } + + return new TokenStream($this->tokens, $this->source); + } + + private function lexData(): void + { + // if no matches are left we return the rest of the template as simple text token + if ($this->position == \count($this->positions[0]) - 1) { + $this->pushToken(/* Token::TEXT_TYPE */ 0, substr($this->code, $this->cursor)); + $this->cursor = $this->end; + + return; + } + + // Find the first token after the current cursor + $position = $this->positions[0][++$this->position]; + while ($position[1] < $this->cursor) { + if ($this->position == \count($this->positions[0]) - 1) { + return; + } + $position = $this->positions[0][++$this->position]; + } + + // push the template text first + $text = $textContent = substr($this->code, $this->cursor, $position[1] - $this->cursor); + + // trim? + if (isset($this->positions[2][$this->position][0])) { + if ($this->options['whitespace_trim'] === $this->positions[2][$this->position][0]) { + // whitespace_trim detected ({%-, {{- or {#-) + $text = rtrim($text); + } elseif ($this->options['whitespace_line_trim'] === $this->positions[2][$this->position][0]) { + // whitespace_line_trim detected ({%~, {{~ or {#~) + // don't trim \r and \n + $text = rtrim($text, " \t\0\x0B"); + } + } + $this->pushToken(/* Token::TEXT_TYPE */ 0, $text); + $this->moveCursor($textContent.$position[0]); + + switch ($this->positions[1][$this->position][0]) { + case $this->options['tag_comment'][0]: + $this->lexComment(); + break; + + case $this->options['tag_block'][0]: + // raw data? + if (preg_match($this->regexes['lex_block_raw'], $this->code, $match, 0, $this->cursor)) { + $this->moveCursor($match[0]); + $this->lexRawData(); + // {% line \d+ %} + } elseif (preg_match($this->regexes['lex_block_line'], $this->code, $match, 0, $this->cursor)) { + $this->moveCursor($match[0]); + $this->lineno = (int) $match[1]; + } else { + $this->pushToken(/* Token::BLOCK_START_TYPE */ 1); + $this->pushState(self::STATE_BLOCK); + $this->currentVarBlockLine = $this->lineno; + } + break; + + case $this->options['tag_variable'][0]: + $this->pushToken(/* Token::VAR_START_TYPE */ 2); + $this->pushState(self::STATE_VAR); + $this->currentVarBlockLine = $this->lineno; + break; + } + } + + private function lexBlock(): void + { + if (empty($this->brackets) && preg_match($this->regexes['lex_block'], $this->code, $match, 0, $this->cursor)) { + $this->pushToken(/* Token::BLOCK_END_TYPE */ 3); + $this->moveCursor($match[0]); + $this->popState(); + } else { + $this->lexExpression(); + } + } + + private function lexVar(): void + { + if (empty($this->brackets) && preg_match($this->regexes['lex_var'], $this->code, $match, 0, $this->cursor)) { + $this->pushToken(/* Token::VAR_END_TYPE */ 4); + $this->moveCursor($match[0]); + $this->popState(); + } else { + $this->lexExpression(); + } + } + + private function lexExpression(): void + { + // whitespace + if (preg_match('/\s+/A', $this->code, $match, 0, $this->cursor)) { + $this->moveCursor($match[0]); + + if ($this->cursor >= $this->end) { + throw new SyntaxError(sprintf('Unclosed "%s".', self::STATE_BLOCK === $this->state ? 'block' : 'variable'), $this->currentVarBlockLine, $this->source); + } + } + + // spread operator + if ('.' === $this->code[$this->cursor] && ($this->cursor + 2 < $this->end) && '.' === $this->code[$this->cursor + 1] && '.' === $this->code[$this->cursor + 2]) { + $this->pushToken(Token::SPREAD_TYPE, '...'); + $this->moveCursor('...'); + } + // arrow function + elseif ('=' === $this->code[$this->cursor] && '>' === $this->code[$this->cursor + 1]) { + $this->pushToken(Token::ARROW_TYPE, '=>'); + $this->moveCursor('=>'); + } + // operators + elseif (preg_match($this->regexes['operator'], $this->code, $match, 0, $this->cursor)) { + $this->pushToken(/* Token::OPERATOR_TYPE */ 8, preg_replace('/\s+/', ' ', $match[0])); + $this->moveCursor($match[0]); + } + // names + elseif (preg_match(self::REGEX_NAME, $this->code, $match, 0, $this->cursor)) { + $this->pushToken(/* Token::NAME_TYPE */ 5, $match[0]); + $this->moveCursor($match[0]); + } + // numbers + elseif (preg_match(self::REGEX_NUMBER, $this->code, $match, 0, $this->cursor)) { + $number = (float) $match[0]; // floats + if (ctype_digit($match[0]) && $number <= \PHP_INT_MAX) { + $number = (int) $match[0]; // integers lower than the maximum + } + $this->pushToken(/* Token::NUMBER_TYPE */ 6, $number); + $this->moveCursor($match[0]); + } + // punctuation + elseif (false !== strpos(self::PUNCTUATION, $this->code[$this->cursor])) { + // opening bracket + if (false !== strpos('([{', $this->code[$this->cursor])) { + $this->brackets[] = [$this->code[$this->cursor], $this->lineno]; + } + // closing bracket + elseif (false !== strpos(')]}', $this->code[$this->cursor])) { + if (empty($this->brackets)) { + throw new SyntaxError(sprintf('Unexpected "%s".', $this->code[$this->cursor]), $this->lineno, $this->source); + } + + list($expect, $lineno) = array_pop($this->brackets); + if ($this->code[$this->cursor] != strtr($expect, '([{', ')]}')) { + throw new SyntaxError(sprintf('Unclosed "%s".', $expect), $lineno, $this->source); + } + } + + $this->pushToken(/* Token::PUNCTUATION_TYPE */ 9, $this->code[$this->cursor]); + ++$this->cursor; + } + // strings + elseif (preg_match(self::REGEX_STRING, $this->code, $match, 0, $this->cursor)) { + $this->pushToken(/* Token::STRING_TYPE */ 7, stripcslashes(substr($match[0], 1, -1))); + $this->moveCursor($match[0]); + } + // opening double quoted string + elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match, 0, $this->cursor)) { + $this->brackets[] = ['"', $this->lineno]; + $this->pushState(self::STATE_STRING); + $this->moveCursor($match[0]); + } + // unlexable + else { + throw new SyntaxError(sprintf('Unexpected character "%s".', $this->code[$this->cursor]), $this->lineno, $this->source); + } + } + + private function lexRawData(): void + { + if (!preg_match($this->regexes['lex_raw_data'], $this->code, $match, \PREG_OFFSET_CAPTURE, $this->cursor)) { + throw new SyntaxError('Unexpected end of file: Unclosed "verbatim" block.', $this->lineno, $this->source); + } + + $text = substr($this->code, $this->cursor, $match[0][1] - $this->cursor); + $this->moveCursor($text.$match[0][0]); + + // trim? + if (isset($match[1][0])) { + if ($this->options['whitespace_trim'] === $match[1][0]) { + // whitespace_trim detected ({%-, {{- or {#-) + $text = rtrim($text); + } else { + // whitespace_line_trim detected ({%~, {{~ or {#~) + // don't trim \r and \n + $text = rtrim($text, " \t\0\x0B"); + } + } + + $this->pushToken(/* Token::TEXT_TYPE */ 0, $text); + } + + private function lexComment(): void + { + if (!preg_match($this->regexes['lex_comment'], $this->code, $match, \PREG_OFFSET_CAPTURE, $this->cursor)) { + throw new SyntaxError('Unclosed comment.', $this->lineno, $this->source); + } + + $this->moveCursor(substr($this->code, $this->cursor, $match[0][1] - $this->cursor).$match[0][0]); + } + + private function lexString(): void + { + if (preg_match($this->regexes['interpolation_start'], $this->code, $match, 0, $this->cursor)) { + $this->brackets[] = [$this->options['interpolation'][0], $this->lineno]; + $this->pushToken(/* Token::INTERPOLATION_START_TYPE */ 10); + $this->moveCursor($match[0]); + $this->pushState(self::STATE_INTERPOLATION); + } elseif (preg_match(self::REGEX_DQ_STRING_PART, $this->code, $match, 0, $this->cursor) && \strlen($match[0]) > 0) { + $this->pushToken(/* Token::STRING_TYPE */ 7, stripcslashes($match[0])); + $this->moveCursor($match[0]); + } elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match, 0, $this->cursor)) { + list($expect, $lineno) = array_pop($this->brackets); + if ('"' != $this->code[$this->cursor]) { + throw new SyntaxError(sprintf('Unclosed "%s".', $expect), $lineno, $this->source); + } + + $this->popState(); + ++$this->cursor; + } else { + // unlexable + throw new SyntaxError(sprintf('Unexpected character "%s".', $this->code[$this->cursor]), $this->lineno, $this->source); + } + } + + private function lexInterpolation(): void + { + $bracket = end($this->brackets); + if ($this->options['interpolation'][0] === $bracket[0] && preg_match($this->regexes['interpolation_end'], $this->code, $match, 0, $this->cursor)) { + array_pop($this->brackets); + $this->pushToken(/* Token::INTERPOLATION_END_TYPE */ 11); + $this->moveCursor($match[0]); + $this->popState(); + } else { + $this->lexExpression(); + } + } + + private function pushToken($type, $value = ''): void + { + // do not push empty text tokens + if (/* Token::TEXT_TYPE */ 0 === $type && '' === $value) { + return; + } + + $this->tokens[] = new Token($type, $value, $this->lineno); + } + + private function moveCursor($text): void + { + $this->cursor += \strlen($text); + $this->lineno += substr_count($text, "\n"); + } + + private function getOperatorRegex(): string + { + $operators = array_merge( + ['='], + array_keys($this->env->getUnaryOperators()), + array_keys($this->env->getBinaryOperators()) + ); + + $operators = array_combine($operators, array_map('strlen', $operators)); + arsort($operators); + + $regex = []; + foreach ($operators as $operator => $length) { + // an operator that ends with a character must be followed by + // a whitespace, a parenthesis, an opening map [ or sequence { + $r = preg_quote($operator, '/'); + if (ctype_alpha($operator[$length - 1])) { + $r .= '(?=[\s()\[{])'; + } + + // an operator that begins with a character must not have a dot or pipe before + if (ctype_alpha($operator[0])) { + $r = '(?states[] = $this->state; + $this->state = $state; + } + + private function popState(): void + { + if (0 === \count($this->states)) { + throw new \LogicException('Cannot pop state without a previous state.'); + } + + $this->state = array_pop($this->states); + } +} diff --git a/Sources/vendor/twig/twig/src/Loader/ArrayLoader.php b/Sources/vendor/twig/twig/src/Loader/ArrayLoader.php new file mode 100644 index 00000000..5d726c35 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Loader/ArrayLoader.php @@ -0,0 +1,77 @@ + + */ +final class ArrayLoader implements LoaderInterface +{ + private $templates = []; + + /** + * @param array $templates An array of templates (keys are the names, and values are the source code) + */ + public function __construct(array $templates = []) + { + $this->templates = $templates; + } + + public function setTemplate(string $name, string $template): void + { + $this->templates[$name] = $template; + } + + public function getSourceContext(string $name): Source + { + if (!isset($this->templates[$name])) { + throw new LoaderError(sprintf('Template "%s" is not defined.', $name)); + } + + return new Source($this->templates[$name], $name); + } + + public function exists(string $name): bool + { + return isset($this->templates[$name]); + } + + public function getCacheKey(string $name): string + { + if (!isset($this->templates[$name])) { + throw new LoaderError(sprintf('Template "%s" is not defined.', $name)); + } + + return $name.':'.$this->templates[$name]; + } + + public function isFresh(string $name, int $time): bool + { + if (!isset($this->templates[$name])) { + throw new LoaderError(sprintf('Template "%s" is not defined.', $name)); + } + + return true; + } +} diff --git a/Sources/vendor/twig/twig/src/Loader/ChainLoader.php b/Sources/vendor/twig/twig/src/Loader/ChainLoader.php new file mode 100644 index 00000000..fbf4f3a0 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Loader/ChainLoader.php @@ -0,0 +1,119 @@ + + */ +final class ChainLoader implements LoaderInterface +{ + private $hasSourceCache = []; + private $loaders = []; + + /** + * @param LoaderInterface[] $loaders + */ + public function __construct(array $loaders = []) + { + foreach ($loaders as $loader) { + $this->addLoader($loader); + } + } + + public function addLoader(LoaderInterface $loader): void + { + $this->loaders[] = $loader; + $this->hasSourceCache = []; + } + + /** + * @return LoaderInterface[] + */ + public function getLoaders(): array + { + return $this->loaders; + } + + public function getSourceContext(string $name): Source + { + $exceptions = []; + foreach ($this->loaders as $loader) { + if (!$loader->exists($name)) { + continue; + } + + try { + return $loader->getSourceContext($name); + } catch (LoaderError $e) { + $exceptions[] = $e->getMessage(); + } + } + + throw new LoaderError(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : '')); + } + + public function exists(string $name): bool + { + if (isset($this->hasSourceCache[$name])) { + return $this->hasSourceCache[$name]; + } + + foreach ($this->loaders as $loader) { + if ($loader->exists($name)) { + return $this->hasSourceCache[$name] = true; + } + } + + return $this->hasSourceCache[$name] = false; + } + + public function getCacheKey(string $name): string + { + $exceptions = []; + foreach ($this->loaders as $loader) { + if (!$loader->exists($name)) { + continue; + } + + try { + return $loader->getCacheKey($name); + } catch (LoaderError $e) { + $exceptions[] = \get_class($loader).': '.$e->getMessage(); + } + } + + throw new LoaderError(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : '')); + } + + public function isFresh(string $name, int $time): bool + { + $exceptions = []; + foreach ($this->loaders as $loader) { + if (!$loader->exists($name)) { + continue; + } + + try { + return $loader->isFresh($name, $time); + } catch (LoaderError $e) { + $exceptions[] = \get_class($loader).': '.$e->getMessage(); + } + } + + throw new LoaderError(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : '')); + } +} diff --git a/Sources/vendor/twig/twig/src/Loader/FilesystemLoader.php b/Sources/vendor/twig/twig/src/Loader/FilesystemLoader.php new file mode 100644 index 00000000..62267a11 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Loader/FilesystemLoader.php @@ -0,0 +1,283 @@ + + */ +class FilesystemLoader implements LoaderInterface +{ + /** Identifier of the main namespace. */ + public const MAIN_NAMESPACE = '__main__'; + + protected $paths = []; + protected $cache = []; + protected $errorCache = []; + + private $rootPath; + + /** + * @param string|array $paths A path or an array of paths where to look for templates + * @param string|null $rootPath The root path common to all relative paths (null for getcwd()) + */ + public function __construct($paths = [], string $rootPath = null) + { + $this->rootPath = (null === $rootPath ? getcwd() : $rootPath).\DIRECTORY_SEPARATOR; + if (null !== $rootPath && false !== ($realPath = realpath($rootPath))) { + $this->rootPath = $realPath.\DIRECTORY_SEPARATOR; + } + + if ($paths) { + $this->setPaths($paths); + } + } + + /** + * Returns the paths to the templates. + */ + public function getPaths(string $namespace = self::MAIN_NAMESPACE): array + { + return $this->paths[$namespace] ?? []; + } + + /** + * Returns the path namespaces. + * + * The main namespace is always defined. + */ + public function getNamespaces(): array + { + return array_keys($this->paths); + } + + /** + * @param string|array $paths A path or an array of paths where to look for templates + */ + public function setPaths($paths, string $namespace = self::MAIN_NAMESPACE): void + { + if (!\is_array($paths)) { + $paths = [$paths]; + } + + $this->paths[$namespace] = []; + foreach ($paths as $path) { + $this->addPath($path, $namespace); + } + } + + /** + * @throws LoaderError + */ + public function addPath(string $path, string $namespace = self::MAIN_NAMESPACE): void + { + // invalidate the cache + $this->cache = $this->errorCache = []; + + $checkPath = $this->isAbsolutePath($path) ? $path : $this->rootPath.$path; + if (!is_dir($checkPath)) { + throw new LoaderError(sprintf('The "%s" directory does not exist ("%s").', $path, $checkPath)); + } + + $this->paths[$namespace][] = rtrim($path, '/\\'); + } + + /** + * @throws LoaderError + */ + public function prependPath(string $path, string $namespace = self::MAIN_NAMESPACE): void + { + // invalidate the cache + $this->cache = $this->errorCache = []; + + $checkPath = $this->isAbsolutePath($path) ? $path : $this->rootPath.$path; + if (!is_dir($checkPath)) { + throw new LoaderError(sprintf('The "%s" directory does not exist ("%s").', $path, $checkPath)); + } + + $path = rtrim($path, '/\\'); + + if (!isset($this->paths[$namespace])) { + $this->paths[$namespace][] = $path; + } else { + array_unshift($this->paths[$namespace], $path); + } + } + + public function getSourceContext(string $name): Source + { + if (null === $path = $this->findTemplate($name)) { + return new Source('', $name, ''); + } + + return new Source(file_get_contents($path), $name, $path); + } + + public function getCacheKey(string $name): string + { + if (null === $path = $this->findTemplate($name)) { + return ''; + } + $len = \strlen($this->rootPath); + if (0 === strncmp($this->rootPath, $path, $len)) { + return substr($path, $len); + } + + return $path; + } + + /** + * @return bool + */ + public function exists(string $name) + { + $name = $this->normalizeName($name); + + if (isset($this->cache[$name])) { + return true; + } + + return null !== $this->findTemplate($name, false); + } + + public function isFresh(string $name, int $time): bool + { + // false support to be removed in 3.0 + if (null === $path = $this->findTemplate($name)) { + return false; + } + + return filemtime($path) < $time; + } + + /** + * @return string|null + */ + protected function findTemplate(string $name, bool $throw = true) + { + $name = $this->normalizeName($name); + + if (isset($this->cache[$name])) { + return $this->cache[$name]; + } + + if (isset($this->errorCache[$name])) { + if (!$throw) { + return null; + } + + throw new LoaderError($this->errorCache[$name]); + } + + try { + list($namespace, $shortname) = $this->parseName($name); + + $this->validateName($shortname); + } catch (LoaderError $e) { + if (!$throw) { + return null; + } + + throw $e; + } + + if (!isset($this->paths[$namespace])) { + $this->errorCache[$name] = sprintf('There are no registered paths for namespace "%s".', $namespace); + + if (!$throw) { + return null; + } + + throw new LoaderError($this->errorCache[$name]); + } + + foreach ($this->paths[$namespace] as $path) { + if (!$this->isAbsolutePath($path)) { + $path = $this->rootPath.$path; + } + + if (is_file($path.'/'.$shortname)) { + if (false !== $realpath = realpath($path.'/'.$shortname)) { + return $this->cache[$name] = $realpath; + } + + return $this->cache[$name] = $path.'/'.$shortname; + } + } + + $this->errorCache[$name] = sprintf('Unable to find template "%s" (looked into: %s).', $name, implode(', ', $this->paths[$namespace])); + + if (!$throw) { + return null; + } + + throw new LoaderError($this->errorCache[$name]); + } + + private function normalizeName(string $name): string + { + return preg_replace('#/{2,}#', '/', str_replace('\\', '/', $name)); + } + + private function parseName(string $name, string $default = self::MAIN_NAMESPACE): array + { + if (isset($name[0]) && '@' == $name[0]) { + if (false === $pos = strpos($name, '/')) { + throw new LoaderError(sprintf('Malformed namespaced template name "%s" (expecting "@namespace/template_name").', $name)); + } + + $namespace = substr($name, 1, $pos - 1); + $shortname = substr($name, $pos + 1); + + return [$namespace, $shortname]; + } + + return [$default, $name]; + } + + private function validateName(string $name): void + { + if (false !== strpos($name, "\0")) { + throw new LoaderError('A template name cannot contain NUL bytes.'); + } + + $name = ltrim($name, '/'); + $parts = explode('/', $name); + $level = 0; + foreach ($parts as $part) { + if ('..' === $part) { + --$level; + } elseif ('.' !== $part) { + ++$level; + } + + if ($level < 0) { + throw new LoaderError(sprintf('Looks like you try to load a template outside configured directories (%s).', $name)); + } + } + } + + private function isAbsolutePath(string $file): bool + { + return strspn($file, '/\\', 0, 1) + || (\strlen($file) > 3 && ctype_alpha($file[0]) + && ':' === $file[1] + && strspn($file, '/\\', 2, 1) + ) + || null !== parse_url($file, \PHP_URL_SCHEME) + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Loader/LoaderInterface.php b/Sources/vendor/twig/twig/src/Loader/LoaderInterface.php new file mode 100644 index 00000000..fec7e85f --- /dev/null +++ b/Sources/vendor/twig/twig/src/Loader/LoaderInterface.php @@ -0,0 +1,49 @@ + + */ +interface LoaderInterface +{ + /** + * Returns the source context for a given template logical name. + * + * @throws LoaderError When $name is not found + */ + public function getSourceContext(string $name): Source; + + /** + * Gets the cache key to use for the cache for a given template name. + * + * @throws LoaderError When $name is not found + */ + public function getCacheKey(string $name): string; + + /** + * @param int $time Timestamp of the last modification time of the cached template + * + * @throws LoaderError When $name is not found + */ + public function isFresh(string $name, int $time): bool; + + /** + * @return bool + */ + public function exists(string $name); +} diff --git a/Sources/vendor/twig/twig/src/Markup.php b/Sources/vendor/twig/twig/src/Markup.php new file mode 100644 index 00000000..1788acc4 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Markup.php @@ -0,0 +1,52 @@ + + */ +class Markup implements \Countable, \JsonSerializable +{ + private $content; + private $charset; + + public function __construct($content, $charset) + { + $this->content = (string) $content; + $this->charset = $charset; + } + + public function __toString() + { + return $this->content; + } + + /** + * @return int + */ + #[\ReturnTypeWillChange] + public function count() + { + return mb_strlen($this->content, $this->charset); + } + + /** + * @return mixed + */ + #[\ReturnTypeWillChange] + public function jsonSerialize() + { + return $this->content; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/AutoEscapeNode.php b/Sources/vendor/twig/twig/src/Node/AutoEscapeNode.php new file mode 100644 index 00000000..cd970411 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/AutoEscapeNode.php @@ -0,0 +1,38 @@ + + */ +class AutoEscapeNode extends Node +{ + public function __construct($value, Node $body, int $lineno, string $tag = 'autoescape') + { + parent::__construct(['body' => $body], ['value' => $value], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler->subcompile($this->getNode('body')); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/BlockNode.php b/Sources/vendor/twig/twig/src/Node/BlockNode.php new file mode 100644 index 00000000..0632ba74 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/BlockNode.php @@ -0,0 +1,44 @@ + + */ +class BlockNode extends Node +{ + public function __construct(string $name, Node $body, int $lineno, string $tag = null) + { + parent::__construct(['body' => $body], ['name' => $name], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write(sprintf("public function block_%s(\$context, array \$blocks = [])\n", $this->getAttribute('name')), "{\n") + ->indent() + ->write("\$macros = \$this->macros;\n") + ; + + $compiler + ->subcompile($this->getNode('body')) + ->outdent() + ->write("}\n\n") + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/BlockReferenceNode.php b/Sources/vendor/twig/twig/src/Node/BlockReferenceNode.php new file mode 100644 index 00000000..cc8af5b5 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/BlockReferenceNode.php @@ -0,0 +1,36 @@ + + */ +class BlockReferenceNode extends Node implements NodeOutputInterface +{ + public function __construct(string $name, int $lineno, string $tag = null) + { + parent::__construct([], ['name' => $name], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write(sprintf("\$this->displayBlock('%s', \$context, \$blocks);\n", $this->getAttribute('name'))) + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/BodyNode.php b/Sources/vendor/twig/twig/src/Node/BodyNode.php new file mode 100644 index 00000000..041cbf68 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/BodyNode.php @@ -0,0 +1,21 @@ + + */ +class BodyNode extends Node +{ +} diff --git a/Sources/vendor/twig/twig/src/Node/CheckSecurityCallNode.php b/Sources/vendor/twig/twig/src/Node/CheckSecurityCallNode.php new file mode 100644 index 00000000..a78a38d8 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/CheckSecurityCallNode.php @@ -0,0 +1,28 @@ + + */ +class CheckSecurityCallNode extends Node +{ + public function compile(Compiler $compiler) + { + $compiler + ->write("\$this->sandbox = \$this->env->getExtension('\Twig\Extension\SandboxExtension');\n") + ->write("\$this->checkSecurity();\n") + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/CheckSecurityNode.php b/Sources/vendor/twig/twig/src/Node/CheckSecurityNode.php new file mode 100644 index 00000000..47273279 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/CheckSecurityNode.php @@ -0,0 +1,88 @@ + + */ +class CheckSecurityNode extends Node +{ + private $usedFilters; + private $usedTags; + private $usedFunctions; + + public function __construct(array $usedFilters, array $usedTags, array $usedFunctions) + { + $this->usedFilters = $usedFilters; + $this->usedTags = $usedTags; + $this->usedFunctions = $usedFunctions; + + parent::__construct(); + } + + public function compile(Compiler $compiler): void + { + $tags = $filters = $functions = []; + foreach (['tags', 'filters', 'functions'] as $type) { + foreach ($this->{'used'.ucfirst($type)} as $name => $node) { + if ($node instanceof Node) { + ${$type}[$name] = $node->getTemplateLine(); + } else { + ${$type}[$node] = null; + } + } + } + + $compiler + ->write("\n") + ->write("public function checkSecurity()\n") + ->write("{\n") + ->indent() + ->write('static $tags = ')->repr(array_filter($tags))->raw(";\n") + ->write('static $filters = ')->repr(array_filter($filters))->raw(";\n") + ->write('static $functions = ')->repr(array_filter($functions))->raw(";\n\n") + ->write("try {\n") + ->indent() + ->write("\$this->sandbox->checkSecurity(\n") + ->indent() + ->write(!$tags ? "[],\n" : "['".implode("', '", array_keys($tags))."'],\n") + ->write(!$filters ? "[],\n" : "['".implode("', '", array_keys($filters))."'],\n") + ->write(!$functions ? "[]\n" : "['".implode("', '", array_keys($functions))."']\n") + ->outdent() + ->write(");\n") + ->outdent() + ->write("} catch (SecurityError \$e) {\n") + ->indent() + ->write("\$e->setSourceContext(\$this->source);\n\n") + ->write("if (\$e instanceof SecurityNotAllowedTagError && isset(\$tags[\$e->getTagName()])) {\n") + ->indent() + ->write("\$e->setTemplateLine(\$tags[\$e->getTagName()]);\n") + ->outdent() + ->write("} elseif (\$e instanceof SecurityNotAllowedFilterError && isset(\$filters[\$e->getFilterName()])) {\n") + ->indent() + ->write("\$e->setTemplateLine(\$filters[\$e->getFilterName()]);\n") + ->outdent() + ->write("} elseif (\$e instanceof SecurityNotAllowedFunctionError && isset(\$functions[\$e->getFunctionName()])) {\n") + ->indent() + ->write("\$e->setTemplateLine(\$functions[\$e->getFunctionName()]);\n") + ->outdent() + ->write("}\n\n") + ->write("throw \$e;\n") + ->outdent() + ->write("}\n\n") + ->outdent() + ->write("}\n") + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/CheckToStringNode.php b/Sources/vendor/twig/twig/src/Node/CheckToStringNode.php new file mode 100644 index 00000000..c7a9d698 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/CheckToStringNode.php @@ -0,0 +1,45 @@ + + */ +class CheckToStringNode extends AbstractExpression +{ + public function __construct(AbstractExpression $expr) + { + parent::__construct(['expr' => $expr], [], $expr->getTemplateLine(), $expr->getNodeTag()); + } + + public function compile(Compiler $compiler): void + { + $expr = $this->getNode('expr'); + $compiler + ->raw('$this->sandbox->ensureToStringAllowed(') + ->subcompile($expr) + ->raw(', ') + ->repr($expr->getTemplateLine()) + ->raw(', $this->source)') + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/DeprecatedNode.php b/Sources/vendor/twig/twig/src/Node/DeprecatedNode.php new file mode 100644 index 00000000..5ff44307 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/DeprecatedNode.php @@ -0,0 +1,53 @@ + + */ +class DeprecatedNode extends Node +{ + public function __construct(AbstractExpression $expr, int $lineno, string $tag = null) + { + parent::__construct(['expr' => $expr], [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler->addDebugInfo($this); + + $expr = $this->getNode('expr'); + + if ($expr instanceof ConstantExpression) { + $compiler->write('@trigger_error(') + ->subcompile($expr); + } else { + $varName = $compiler->getVarName(); + $compiler->write(sprintf('$%s = ', $varName)) + ->subcompile($expr) + ->raw(";\n") + ->write(sprintf('@trigger_error($%s', $varName)); + } + + $compiler + ->raw('.') + ->string(sprintf(' ("%s" at line %d).', $this->getTemplateName(), $this->getTemplateLine())) + ->raw(", E_USER_DEPRECATED);\n") + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/DoNode.php b/Sources/vendor/twig/twig/src/Node/DoNode.php new file mode 100644 index 00000000..f7783d19 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/DoNode.php @@ -0,0 +1,38 @@ + + */ +class DoNode extends Node +{ + public function __construct(AbstractExpression $expr, int $lineno, string $tag = null) + { + parent::__construct(['expr' => $expr], [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write('') + ->subcompile($this->getNode('expr')) + ->raw(";\n") + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/EmbedNode.php b/Sources/vendor/twig/twig/src/Node/EmbedNode.php new file mode 100644 index 00000000..903c3f6c --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/EmbedNode.php @@ -0,0 +1,48 @@ + + */ +class EmbedNode extends IncludeNode +{ + // we don't inject the module to avoid node visitors to traverse it twice (as it will be already visited in the main module) + public function __construct(string $name, int $index, ?AbstractExpression $variables, bool $only, bool $ignoreMissing, int $lineno, string $tag = null) + { + parent::__construct(new ConstantExpression('not_used', $lineno), $variables, $only, $ignoreMissing, $lineno, $tag); + + $this->setAttribute('name', $name); + $this->setAttribute('index', $index); + } + + protected function addGetTemplate(Compiler $compiler): void + { + $compiler + ->write('$this->loadTemplate(') + ->string($this->getAttribute('name')) + ->raw(', ') + ->repr($this->getTemplateName()) + ->raw(', ') + ->repr($this->getTemplateLine()) + ->raw(', ') + ->string($this->getAttribute('index')) + ->raw(')') + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/AbstractExpression.php b/Sources/vendor/twig/twig/src/Node/Expression/AbstractExpression.php new file mode 100644 index 00000000..42da0559 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/AbstractExpression.php @@ -0,0 +1,24 @@ + + */ +abstract class AbstractExpression extends Node +{ +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/ArrayExpression.php b/Sources/vendor/twig/twig/src/Node/Expression/ArrayExpression.php new file mode 100644 index 00000000..44428380 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/ArrayExpression.php @@ -0,0 +1,135 @@ +index = -1; + foreach ($this->getKeyValuePairs() as $pair) { + if ($pair['key'] instanceof ConstantExpression && ctype_digit((string) $pair['key']->getAttribute('value')) && $pair['key']->getAttribute('value') > $this->index) { + $this->index = $pair['key']->getAttribute('value'); + } + } + } + + public function getKeyValuePairs(): array + { + $pairs = []; + foreach (array_chunk($this->nodes, 2) as $pair) { + $pairs[] = [ + 'key' => $pair[0], + 'value' => $pair[1], + ]; + } + + return $pairs; + } + + public function hasElement(AbstractExpression $key): bool + { + foreach ($this->getKeyValuePairs() as $pair) { + // we compare the string representation of the keys + // to avoid comparing the line numbers which are not relevant here. + if ((string) $key === (string) $pair['key']) { + return true; + } + } + + return false; + } + + public function addElement(AbstractExpression $value, AbstractExpression $key = null): void + { + if (null === $key) { + $key = new ConstantExpression(++$this->index, $value->getTemplateLine()); + } + + array_push($this->nodes, $key, $value); + } + + public function compile(Compiler $compiler): void + { + $keyValuePairs = $this->getKeyValuePairs(); + $needsArrayMergeSpread = \PHP_VERSION_ID < 80100 && $this->hasSpreadItem($keyValuePairs); + + if ($needsArrayMergeSpread) { + $compiler->raw('twig_array_merge('); + } + $compiler->raw('['); + $first = true; + $reopenAfterMergeSpread = false; + $nextIndex = 0; + foreach ($keyValuePairs as $pair) { + if ($reopenAfterMergeSpread) { + $compiler->raw(', ['); + $reopenAfterMergeSpread = false; + } + + if ($needsArrayMergeSpread && $pair['value']->hasAttribute('spread')) { + $compiler->raw('], ')->subcompile($pair['value']); + $first = true; + $reopenAfterMergeSpread = true; + continue; + } + if (!$first) { + $compiler->raw(', '); + } + $first = false; + + if ($pair['value']->hasAttribute('spread') && !$needsArrayMergeSpread) { + $compiler->raw('...')->subcompile($pair['value']); + ++$nextIndex; + } else { + $key = $pair['key'] instanceof ConstantExpression ? $pair['key']->getAttribute('value') : null; + + if ($nextIndex !== $key) { + if (\is_int($key)) { + $nextIndex = $key + 1; + } + $compiler + ->subcompile($pair['key']) + ->raw(' => ') + ; + } else { + ++$nextIndex; + } + + $compiler->subcompile($pair['value']); + } + } + if (!$reopenAfterMergeSpread) { + $compiler->raw(']'); + } + if ($needsArrayMergeSpread) { + $compiler->raw(')'); + } + } + + private function hasSpreadItem(array $pairs): bool + { + foreach ($pairs as $pair) { + if ($pair['value']->hasAttribute('spread')) { + return true; + } + } + + return false; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/ArrowFunctionExpression.php b/Sources/vendor/twig/twig/src/Node/Expression/ArrowFunctionExpression.php new file mode 100644 index 00000000..eaad03c9 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/ArrowFunctionExpression.php @@ -0,0 +1,64 @@ + + */ +class ArrowFunctionExpression extends AbstractExpression +{ + public function __construct(AbstractExpression $expr, Node $names, $lineno, $tag = null) + { + parent::__construct(['expr' => $expr, 'names' => $names], [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->raw('function (') + ; + foreach ($this->getNode('names') as $i => $name) { + if ($i) { + $compiler->raw(', '); + } + + $compiler + ->raw('$__') + ->raw($name->getAttribute('name')) + ->raw('__') + ; + } + $compiler + ->raw(') use ($context, $macros) { ') + ; + foreach ($this->getNode('names') as $name) { + $compiler + ->raw('$context["') + ->raw($name->getAttribute('name')) + ->raw('"] = $__') + ->raw($name->getAttribute('name')) + ->raw('__; ') + ; + } + $compiler + ->raw('return ') + ->subcompile($this->getNode('expr')) + ->raw('; }') + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/AssignNameExpression.php b/Sources/vendor/twig/twig/src/Node/Expression/AssignNameExpression.php new file mode 100644 index 00000000..7dd1bc4a --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/AssignNameExpression.php @@ -0,0 +1,27 @@ +raw('$context[') + ->string($this->getAttribute('name')) + ->raw(']') + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/AbstractBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/AbstractBinary.php new file mode 100644 index 00000000..c424e5cc --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/AbstractBinary.php @@ -0,0 +1,42 @@ + $left, 'right' => $right], [], $lineno); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(') + ->subcompile($this->getNode('left')) + ->raw(' ') + ; + $this->operator($compiler); + $compiler + ->raw(' ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + abstract public function operator(Compiler $compiler): Compiler; +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/AddBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/AddBinary.php new file mode 100644 index 00000000..ee4307e3 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/AddBinary.php @@ -0,0 +1,23 @@ +raw('+'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/AndBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/AndBinary.php new file mode 100644 index 00000000..5f2380da --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/AndBinary.php @@ -0,0 +1,23 @@ +raw('&&'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php new file mode 100644 index 00000000..db7d6d61 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php @@ -0,0 +1,23 @@ +raw('&'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php new file mode 100644 index 00000000..ce803dd9 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php @@ -0,0 +1,23 @@ +raw('|'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php new file mode 100644 index 00000000..5c297850 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php @@ -0,0 +1,23 @@ +raw('^'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/ConcatBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/ConcatBinary.php new file mode 100644 index 00000000..f825ab87 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/ConcatBinary.php @@ -0,0 +1,23 @@ +raw('.'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/DivBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/DivBinary.php new file mode 100644 index 00000000..e3817d1c --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/DivBinary.php @@ -0,0 +1,23 @@ +raw('/'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php new file mode 100644 index 00000000..c3516b85 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php @@ -0,0 +1,35 @@ +getVarName(); + $right = $compiler->getVarName(); + $compiler + ->raw(sprintf('(is_string($%s = ', $left)) + ->subcompile($this->getNode('left')) + ->raw(sprintf(') && is_string($%s = ', $right)) + ->subcompile($this->getNode('right')) + ->raw(sprintf(') && (\'\' === $%2$s || $%2$s === substr($%1$s, -strlen($%2$s))))', $left, $right)) + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw(''); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/EqualBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/EqualBinary.php new file mode 100644 index 00000000..6b48549e --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/EqualBinary.php @@ -0,0 +1,39 @@ += 80000) { + parent::compile($compiler); + + return; + } + + $compiler + ->raw('(0 === twig_compare(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw('))') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('=='); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php new file mode 100644 index 00000000..d7e7980e --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php @@ -0,0 +1,29 @@ +raw('(int) floor('); + parent::compile($compiler); + $compiler->raw(')'); + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('/'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/GreaterBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/GreaterBinary.php new file mode 100644 index 00000000..e1dd0678 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/GreaterBinary.php @@ -0,0 +1,39 @@ += 80000) { + parent::compile($compiler); + + return; + } + + $compiler + ->raw('(1 === twig_compare(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw('))') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('>'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php new file mode 100644 index 00000000..df9bfcfb --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php @@ -0,0 +1,39 @@ += 80000) { + parent::compile($compiler); + + return; + } + + $compiler + ->raw('(0 <= twig_compare(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw('))') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('>='); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/HasEveryBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/HasEveryBinary.php new file mode 100644 index 00000000..adfabd44 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/HasEveryBinary.php @@ -0,0 +1,33 @@ +raw('twig_array_every($this->env, ') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw(''); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/HasSomeBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/HasSomeBinary.php new file mode 100644 index 00000000..270da369 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/HasSomeBinary.php @@ -0,0 +1,33 @@ +raw('twig_array_some($this->env, ') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw(''); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/InBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/InBinary.php new file mode 100644 index 00000000..6dbfa97f --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/InBinary.php @@ -0,0 +1,33 @@ +raw('twig_in_filter(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('in'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/LessBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/LessBinary.php new file mode 100644 index 00000000..598e6291 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/LessBinary.php @@ -0,0 +1,39 @@ += 80000) { + parent::compile($compiler); + + return; + } + + $compiler + ->raw('(-1 === twig_compare(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw('))') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('<'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php new file mode 100644 index 00000000..e3c4af58 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php @@ -0,0 +1,39 @@ += 80000) { + parent::compile($compiler); + + return; + } + + $compiler + ->raw('(0 >= twig_compare(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw('))') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('<='); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/MatchesBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/MatchesBinary.php new file mode 100644 index 00000000..a8bce6f4 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/MatchesBinary.php @@ -0,0 +1,33 @@ +raw('twig_matches(') + ->subcompile($this->getNode('right')) + ->raw(', ') + ->subcompile($this->getNode('left')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw(''); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/ModBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/ModBinary.php new file mode 100644 index 00000000..271b45ca --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/ModBinary.php @@ -0,0 +1,23 @@ +raw('%'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/MulBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/MulBinary.php new file mode 100644 index 00000000..6d4c1e0b --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/MulBinary.php @@ -0,0 +1,23 @@ +raw('*'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php new file mode 100644 index 00000000..db47a289 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php @@ -0,0 +1,39 @@ += 80000) { + parent::compile($compiler); + + return; + } + + $compiler + ->raw('(0 !== twig_compare(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw('))') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('!='); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/NotInBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/NotInBinary.php new file mode 100644 index 00000000..fcba6cca --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/NotInBinary.php @@ -0,0 +1,33 @@ +raw('!twig_in_filter(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('not in'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/OrBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/OrBinary.php new file mode 100644 index 00000000..21f87c91 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/OrBinary.php @@ -0,0 +1,23 @@ +raw('||'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/PowerBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/PowerBinary.php new file mode 100644 index 00000000..c9f4c669 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/PowerBinary.php @@ -0,0 +1,22 @@ +raw('**'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/RangeBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/RangeBinary.php new file mode 100644 index 00000000..55982c81 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/RangeBinary.php @@ -0,0 +1,33 @@ +raw('range(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw('..'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/SpaceshipBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/SpaceshipBinary.php new file mode 100644 index 00000000..ae5a4a49 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/SpaceshipBinary.php @@ -0,0 +1,22 @@ +raw('<=>'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php new file mode 100644 index 00000000..d0df1c4b --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php @@ -0,0 +1,35 @@ +getVarName(); + $right = $compiler->getVarName(); + $compiler + ->raw(sprintf('(is_string($%s = ', $left)) + ->subcompile($this->getNode('left')) + ->raw(sprintf(') && is_string($%s = ', $right)) + ->subcompile($this->getNode('right')) + ->raw(sprintf(') && (\'\' === $%2$s || 0 === strpos($%1$s, $%2$s)))', $left, $right)) + ; + } + + public function operator(Compiler $compiler): Compiler + { + return $compiler->raw(''); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Binary/SubBinary.php b/Sources/vendor/twig/twig/src/Node/Expression/Binary/SubBinary.php new file mode 100644 index 00000000..eeb87fac --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Binary/SubBinary.php @@ -0,0 +1,23 @@ +raw('-'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/BlockReferenceExpression.php b/Sources/vendor/twig/twig/src/Node/Expression/BlockReferenceExpression.php new file mode 100644 index 00000000..b1e2a8f7 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/BlockReferenceExpression.php @@ -0,0 +1,86 @@ + + */ +class BlockReferenceExpression extends AbstractExpression +{ + public function __construct(Node $name, ?Node $template, int $lineno, string $tag = null) + { + $nodes = ['name' => $name]; + if (null !== $template) { + $nodes['template'] = $template; + } + + parent::__construct($nodes, ['is_defined_test' => false, 'output' => false], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + if ($this->getAttribute('is_defined_test')) { + $this->compileTemplateCall($compiler, 'hasBlock'); + } else { + if ($this->getAttribute('output')) { + $compiler->addDebugInfo($this); + + $this + ->compileTemplateCall($compiler, 'displayBlock') + ->raw(";\n"); + } else { + $this->compileTemplateCall($compiler, 'renderBlock'); + } + } + } + + private function compileTemplateCall(Compiler $compiler, string $method): Compiler + { + if (!$this->hasNode('template')) { + $compiler->write('$this'); + } else { + $compiler + ->write('$this->loadTemplate(') + ->subcompile($this->getNode('template')) + ->raw(', ') + ->repr($this->getTemplateName()) + ->raw(', ') + ->repr($this->getTemplateLine()) + ->raw(')') + ; + } + + $compiler->raw(sprintf('->%s', $method)); + + return $this->compileBlockArguments($compiler); + } + + private function compileBlockArguments(Compiler $compiler): Compiler + { + $compiler + ->raw('(') + ->subcompile($this->getNode('name')) + ->raw(', $context'); + + if (!$this->hasNode('template')) { + $compiler->raw(', $blocks'); + } + + return $compiler->raw(')'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/CallExpression.php b/Sources/vendor/twig/twig/src/Node/Expression/CallExpression.php new file mode 100644 index 00000000..11a6b1ab --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/CallExpression.php @@ -0,0 +1,321 @@ +getAttribute('callable'); + + if (\is_string($callable) && false === strpos($callable, '::')) { + $compiler->raw($callable); + } else { + [$r, $callable] = $this->reflectCallable($callable); + + if (\is_string($callable)) { + $compiler->raw($callable); + } elseif (\is_array($callable) && \is_string($callable[0])) { + if (!$r instanceof \ReflectionMethod || $r->isStatic()) { + $compiler->raw(sprintf('%s::%s', $callable[0], $callable[1])); + } else { + $compiler->raw(sprintf('$this->env->getRuntime(\'%s\')->%s', $callable[0], $callable[1])); + } + } elseif (\is_array($callable) && $callable[0] instanceof ExtensionInterface) { + $class = \get_class($callable[0]); + if (!$compiler->getEnvironment()->hasExtension($class)) { + // Compile a non-optimized call to trigger a \Twig\Error\RuntimeError, which cannot be a compile-time error + $compiler->raw(sprintf('$this->env->getExtension(\'%s\')', $class)); + } else { + $compiler->raw(sprintf('$this->extensions[\'%s\']', ltrim($class, '\\'))); + } + + $compiler->raw(sprintf('->%s', $callable[1])); + } else { + $compiler->raw(sprintf('$this->env->get%s(\'%s\')->getCallable()', ucfirst($this->getAttribute('type')), $this->getAttribute('name'))); + } + } + + $this->compileArguments($compiler); + } + + protected function compileArguments(Compiler $compiler, $isArray = false): void + { + $compiler->raw($isArray ? '[' : '('); + + $first = true; + + if ($this->hasAttribute('needs_environment') && $this->getAttribute('needs_environment')) { + $compiler->raw('$this->env'); + $first = false; + } + + if ($this->hasAttribute('needs_context') && $this->getAttribute('needs_context')) { + if (!$first) { + $compiler->raw(', '); + } + $compiler->raw('$context'); + $first = false; + } + + if ($this->hasAttribute('arguments')) { + foreach ($this->getAttribute('arguments') as $argument) { + if (!$first) { + $compiler->raw(', '); + } + $compiler->string($argument); + $first = false; + } + } + + if ($this->hasNode('node')) { + if (!$first) { + $compiler->raw(', '); + } + $compiler->subcompile($this->getNode('node')); + $first = false; + } + + if ($this->hasNode('arguments')) { + $callable = $this->getAttribute('callable'); + $arguments = $this->getArguments($callable, $this->getNode('arguments')); + foreach ($arguments as $node) { + if (!$first) { + $compiler->raw(', '); + } + $compiler->subcompile($node); + $first = false; + } + } + + $compiler->raw($isArray ? ']' : ')'); + } + + protected function getArguments($callable, $arguments) + { + $callType = $this->getAttribute('type'); + $callName = $this->getAttribute('name'); + + $parameters = []; + $named = false; + foreach ($arguments as $name => $node) { + if (!\is_int($name)) { + $named = true; + $name = $this->normalizeName($name); + } elseif ($named) { + throw new SyntaxError(sprintf('Positional arguments cannot be used after named arguments for %s "%s".', $callType, $callName), $this->getTemplateLine(), $this->getSourceContext()); + } + + $parameters[$name] = $node; + } + + $isVariadic = $this->hasAttribute('is_variadic') && $this->getAttribute('is_variadic'); + if (!$named && !$isVariadic) { + return $parameters; + } + + if (!$callable) { + if ($named) { + $message = sprintf('Named arguments are not supported for %s "%s".', $callType, $callName); + } else { + $message = sprintf('Arbitrary positional arguments are not supported for %s "%s".', $callType, $callName); + } + + throw new \LogicException($message); + } + + list($callableParameters, $isPhpVariadic) = $this->getCallableParameters($callable, $isVariadic); + $arguments = []; + $names = []; + $missingArguments = []; + $optionalArguments = []; + $pos = 0; + foreach ($callableParameters as $callableParameter) { + $name = $this->normalizeName($callableParameter->name); + if (\PHP_VERSION_ID >= 80000 && 'range' === $callable) { + if ('start' === $name) { + $name = 'low'; + } elseif ('end' === $name) { + $name = 'high'; + } + } + + $names[] = $name; + + if (\array_key_exists($name, $parameters)) { + if (\array_key_exists($pos, $parameters)) { + throw new SyntaxError(sprintf('Argument "%s" is defined twice for %s "%s".', $name, $callType, $callName), $this->getTemplateLine(), $this->getSourceContext()); + } + + if (\count($missingArguments)) { + throw new SyntaxError(sprintf( + 'Argument "%s" could not be assigned for %s "%s(%s)" because it is mapped to an internal PHP function which cannot determine default value for optional argument%s "%s".', + $name, $callType, $callName, implode(', ', $names), \count($missingArguments) > 1 ? 's' : '', implode('", "', $missingArguments) + ), $this->getTemplateLine(), $this->getSourceContext()); + } + + $arguments = array_merge($arguments, $optionalArguments); + $arguments[] = $parameters[$name]; + unset($parameters[$name]); + $optionalArguments = []; + } elseif (\array_key_exists($pos, $parameters)) { + $arguments = array_merge($arguments, $optionalArguments); + $arguments[] = $parameters[$pos]; + unset($parameters[$pos]); + $optionalArguments = []; + ++$pos; + } elseif ($callableParameter->isDefaultValueAvailable()) { + $optionalArguments[] = new ConstantExpression($callableParameter->getDefaultValue(), -1); + } elseif ($callableParameter->isOptional()) { + if (empty($parameters)) { + break; + } else { + $missingArguments[] = $name; + } + } else { + throw new SyntaxError(sprintf('Value for argument "%s" is required for %s "%s".', $name, $callType, $callName), $this->getTemplateLine(), $this->getSourceContext()); + } + } + + if ($isVariadic) { + $arbitraryArguments = $isPhpVariadic ? new VariadicExpression([], -1) : new ArrayExpression([], -1); + foreach ($parameters as $key => $value) { + if (\is_int($key)) { + $arbitraryArguments->addElement($value); + } else { + $arbitraryArguments->addElement($value, new ConstantExpression($key, -1)); + } + unset($parameters[$key]); + } + + if ($arbitraryArguments->count()) { + $arguments = array_merge($arguments, $optionalArguments); + $arguments[] = $arbitraryArguments; + } + } + + if (!empty($parameters)) { + $unknownParameter = null; + foreach ($parameters as $parameter) { + if ($parameter instanceof Node) { + $unknownParameter = $parameter; + break; + } + } + + throw new SyntaxError( + sprintf( + 'Unknown argument%s "%s" for %s "%s(%s)".', + \count($parameters) > 1 ? 's' : '', implode('", "', array_keys($parameters)), $callType, $callName, implode(', ', $names) + ), + $unknownParameter ? $unknownParameter->getTemplateLine() : $this->getTemplateLine(), + $unknownParameter ? $unknownParameter->getSourceContext() : $this->getSourceContext() + ); + } + + return $arguments; + } + + protected function normalizeName(string $name): string + { + return strtolower(preg_replace(['/([A-Z]+)([A-Z][a-z])/', '/([a-z\d])([A-Z])/'], ['\\1_\\2', '\\1_\\2'], $name)); + } + + private function getCallableParameters($callable, bool $isVariadic): array + { + [$r, , $callableName] = $this->reflectCallable($callable); + + $parameters = $r->getParameters(); + if ($this->hasNode('node')) { + array_shift($parameters); + } + if ($this->hasAttribute('needs_environment') && $this->getAttribute('needs_environment')) { + array_shift($parameters); + } + if ($this->hasAttribute('needs_context') && $this->getAttribute('needs_context')) { + array_shift($parameters); + } + if ($this->hasAttribute('arguments') && null !== $this->getAttribute('arguments')) { + foreach ($this->getAttribute('arguments') as $argument) { + array_shift($parameters); + } + } + $isPhpVariadic = false; + if ($isVariadic) { + $argument = end($parameters); + $isArray = $argument && $argument->hasType() && 'array' === $argument->getType()->getName(); + if ($isArray && $argument->isDefaultValueAvailable() && [] === $argument->getDefaultValue()) { + array_pop($parameters); + } elseif ($argument && $argument->isVariadic()) { + array_pop($parameters); + $isPhpVariadic = true; + } else { + throw new \LogicException(sprintf('The last parameter of "%s" for %s "%s" must be an array with default value, eg. "array $arg = []".', $callableName, $this->getAttribute('type'), $this->getAttribute('name'))); + } + } + + return [$parameters, $isPhpVariadic]; + } + + private function reflectCallable($callable) + { + if (null !== $this->reflector) { + return $this->reflector; + } + + if (\is_string($callable) && false !== $pos = strpos($callable, '::')) { + $callable = [substr($callable, 0, $pos), substr($callable, 2 + $pos)]; + } + + if (\is_array($callable) && method_exists($callable[0], $callable[1])) { + $r = new \ReflectionMethod($callable[0], $callable[1]); + + return $this->reflector = [$r, $callable, $r->class.'::'.$r->name]; + } + + $checkVisibility = $callable instanceof \Closure; + try { + $closure = \Closure::fromCallable($callable); + } catch (\TypeError $e) { + throw new \LogicException(sprintf('Callback for %s "%s" is not callable in the current scope.', $this->getAttribute('type'), $this->getAttribute('name')), 0, $e); + } + $r = new \ReflectionFunction($closure); + + if (false !== strpos($r->name, '{closure}')) { + return $this->reflector = [$r, $callable, 'Closure']; + } + + if ($object = $r->getClosureThis()) { + $callable = [$object, $r->name]; + $callableName = (\function_exists('get_debug_type') ? get_debug_type($object) : \get_class($object)).'::'.$r->name; + } elseif (\PHP_VERSION_ID >= 80111 && $class = $r->getClosureCalledClass()) { + $callableName = $class->name.'::'.$r->name; + } elseif (\PHP_VERSION_ID < 80111 && $class = $r->getClosureScopeClass()) { + $callableName = (\is_array($callable) ? $callable[0] : $class->name).'::'.$r->name; + } else { + $callable = $callableName = $r->name; + } + + if ($checkVisibility && \is_array($callable) && method_exists(...$callable) && !(new \ReflectionMethod(...$callable))->isPublic()) { + $callable = $r->getClosure(); + } + + return $this->reflector = [$r, $callable, $callableName]; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/ConditionalExpression.php b/Sources/vendor/twig/twig/src/Node/Expression/ConditionalExpression.php new file mode 100644 index 00000000..2c7bd0a2 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/ConditionalExpression.php @@ -0,0 +1,36 @@ + $expr1, 'expr2' => $expr2, 'expr3' => $expr3], [], $lineno); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->raw('((') + ->subcompile($this->getNode('expr1')) + ->raw(') ? (') + ->subcompile($this->getNode('expr2')) + ->raw(') : (') + ->subcompile($this->getNode('expr3')) + ->raw('))') + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/ConstantExpression.php b/Sources/vendor/twig/twig/src/Node/Expression/ConstantExpression.php new file mode 100644 index 00000000..7ddbcc6f --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/ConstantExpression.php @@ -0,0 +1,28 @@ + $value], $lineno); + } + + public function compile(Compiler $compiler): void + { + $compiler->repr($this->getAttribute('value')); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Filter/DefaultFilter.php b/Sources/vendor/twig/twig/src/Node/Expression/Filter/DefaultFilter.php new file mode 100644 index 00000000..6a572d48 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Filter/DefaultFilter.php @@ -0,0 +1,52 @@ + + */ +class DefaultFilter extends FilterExpression +{ + public function __construct(Node $node, ConstantExpression $filterName, Node $arguments, int $lineno, string $tag = null) + { + $default = new FilterExpression($node, new ConstantExpression('default', $node->getTemplateLine()), $arguments, $node->getTemplateLine()); + + if ('default' === $filterName->getAttribute('value') && ($node instanceof NameExpression || $node instanceof GetAttrExpression)) { + $test = new DefinedTest(clone $node, 'defined', new Node(), $node->getTemplateLine()); + $false = \count($arguments) ? $arguments->getNode(0) : new ConstantExpression('', $node->getTemplateLine()); + + $node = new ConditionalExpression($test, $default, $false, $node->getTemplateLine()); + } else { + $node = $default; + } + + parent::__construct($node, $filterName, $arguments, $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler->subcompile($this->getNode('node')); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/FilterExpression.php b/Sources/vendor/twig/twig/src/Node/Expression/FilterExpression.php new file mode 100644 index 00000000..0fc15886 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/FilterExpression.php @@ -0,0 +1,40 @@ + $node, 'filter' => $filterName, 'arguments' => $arguments], [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $name = $this->getNode('filter')->getAttribute('value'); + $filter = $compiler->getEnvironment()->getFilter($name); + + $this->setAttribute('name', $name); + $this->setAttribute('type', 'filter'); + $this->setAttribute('needs_environment', $filter->needsEnvironment()); + $this->setAttribute('needs_context', $filter->needsContext()); + $this->setAttribute('arguments', $filter->getArguments()); + $this->setAttribute('callable', $filter->getCallable()); + $this->setAttribute('is_variadic', $filter->isVariadic()); + + $this->compileCallable($compiler); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/FunctionExpression.php b/Sources/vendor/twig/twig/src/Node/Expression/FunctionExpression.php new file mode 100644 index 00000000..71269775 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/FunctionExpression.php @@ -0,0 +1,43 @@ + $arguments], ['name' => $name, 'is_defined_test' => false], $lineno); + } + + public function compile(Compiler $compiler) + { + $name = $this->getAttribute('name'); + $function = $compiler->getEnvironment()->getFunction($name); + + $this->setAttribute('name', $name); + $this->setAttribute('type', 'function'); + $this->setAttribute('needs_environment', $function->needsEnvironment()); + $this->setAttribute('needs_context', $function->needsContext()); + $this->setAttribute('arguments', $function->getArguments()); + $callable = $function->getCallable(); + if ('constant' === $name && $this->getAttribute('is_defined_test')) { + $callable = 'twig_constant_is_defined'; + } + $this->setAttribute('callable', $callable); + $this->setAttribute('is_variadic', $function->isVariadic()); + + $this->compileCallable($compiler); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/GetAttrExpression.php b/Sources/vendor/twig/twig/src/Node/Expression/GetAttrExpression.php new file mode 100644 index 00000000..e6a75ce9 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/GetAttrExpression.php @@ -0,0 +1,87 @@ + $node, 'attribute' => $attribute]; + if (null !== $arguments) { + $nodes['arguments'] = $arguments; + } + + parent::__construct($nodes, ['type' => $type, 'is_defined_test' => false, 'ignore_strict_check' => false, 'optimizable' => true], $lineno); + } + + public function compile(Compiler $compiler): void + { + $env = $compiler->getEnvironment(); + + // optimize array calls + if ( + $this->getAttribute('optimizable') + && (!$env->isStrictVariables() || $this->getAttribute('ignore_strict_check')) + && !$this->getAttribute('is_defined_test') + && Template::ARRAY_CALL === $this->getAttribute('type') + ) { + $var = '$'.$compiler->getVarName(); + $compiler + ->raw('(('.$var.' = ') + ->subcompile($this->getNode('node')) + ->raw(') && is_array(') + ->raw($var) + ->raw(') || ') + ->raw($var) + ->raw(' instanceof ArrayAccess ? (') + ->raw($var) + ->raw('[') + ->subcompile($this->getNode('attribute')) + ->raw('] ?? null) : null)') + ; + + return; + } + + $compiler->raw('twig_get_attribute($this->env, $this->source, '); + + if ($this->getAttribute('ignore_strict_check')) { + $this->getNode('node')->setAttribute('ignore_strict_check', true); + } + + $compiler + ->subcompile($this->getNode('node')) + ->raw(', ') + ->subcompile($this->getNode('attribute')) + ; + + if ($this->hasNode('arguments')) { + $compiler->raw(', ')->subcompile($this->getNode('arguments')); + } else { + $compiler->raw(', []'); + } + + $compiler->raw(', ') + ->repr($this->getAttribute('type')) + ->raw(', ')->repr($this->getAttribute('is_defined_test')) + ->raw(', ')->repr($this->getAttribute('ignore_strict_check')) + ->raw(', ')->repr($env->hasExtension(SandboxExtension::class)) + ->raw(', ')->repr($this->getNode('node')->getTemplateLine()) + ->raw(')') + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/InlinePrint.php b/Sources/vendor/twig/twig/src/Node/Expression/InlinePrint.php new file mode 100644 index 00000000..1ad4751e --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/InlinePrint.php @@ -0,0 +1,35 @@ + $node], [], $lineno); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->raw('print (') + ->subcompile($this->getNode('node')) + ->raw(')') + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/MethodCallExpression.php b/Sources/vendor/twig/twig/src/Node/Expression/MethodCallExpression.php new file mode 100644 index 00000000..d5ec0b6e --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/MethodCallExpression.php @@ -0,0 +1,62 @@ + $node, 'arguments' => $arguments], ['method' => $method, 'safe' => false, 'is_defined_test' => false], $lineno); + + if ($node instanceof NameExpression) { + $node->setAttribute('always_defined', true); + } + } + + public function compile(Compiler $compiler): void + { + if ($this->getAttribute('is_defined_test')) { + $compiler + ->raw('method_exists($macros[') + ->repr($this->getNode('node')->getAttribute('name')) + ->raw('], ') + ->repr($this->getAttribute('method')) + ->raw(')') + ; + + return; + } + + $compiler + ->raw('twig_call_macro($macros[') + ->repr($this->getNode('node')->getAttribute('name')) + ->raw('], ') + ->repr($this->getAttribute('method')) + ->raw(', [') + ; + $first = true; + foreach ($this->getNode('arguments')->getKeyValuePairs() as $pair) { + if (!$first) { + $compiler->raw(', '); + } + $first = false; + + $compiler->subcompile($pair['value']); + } + $compiler + ->raw('], ') + ->repr($this->getTemplateLine()) + ->raw(', $context, $this->getSourceContext())'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/NameExpression.php b/Sources/vendor/twig/twig/src/Node/Expression/NameExpression.php new file mode 100644 index 00000000..c3563f01 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/NameExpression.php @@ -0,0 +1,97 @@ + '$this->getTemplateName()', + '_context' => '$context', + '_charset' => '$this->env->getCharset()', + ]; + + public function __construct(string $name, int $lineno) + { + parent::__construct([], ['name' => $name, 'is_defined_test' => false, 'ignore_strict_check' => false, 'always_defined' => false], $lineno); + } + + public function compile(Compiler $compiler): void + { + $name = $this->getAttribute('name'); + + $compiler->addDebugInfo($this); + + if ($this->getAttribute('is_defined_test')) { + if ($this->isSpecial()) { + $compiler->repr(true); + } elseif (\PHP_VERSION_ID >= 70400) { + $compiler + ->raw('array_key_exists(') + ->string($name) + ->raw(', $context)') + ; + } else { + $compiler + ->raw('(isset($context[') + ->string($name) + ->raw(']) || array_key_exists(') + ->string($name) + ->raw(', $context))') + ; + } + } elseif ($this->isSpecial()) { + $compiler->raw($this->specialVars[$name]); + } elseif ($this->getAttribute('always_defined')) { + $compiler + ->raw('$context[') + ->string($name) + ->raw(']') + ; + } else { + if ($this->getAttribute('ignore_strict_check') || !$compiler->getEnvironment()->isStrictVariables()) { + $compiler + ->raw('($context[') + ->string($name) + ->raw('] ?? null)') + ; + } else { + $compiler + ->raw('(isset($context[') + ->string($name) + ->raw(']) || array_key_exists(') + ->string($name) + ->raw(', $context) ? $context[') + ->string($name) + ->raw('] : (function () { throw new RuntimeError(\'Variable ') + ->string($name) + ->raw(' does not exist.\', ') + ->repr($this->lineno) + ->raw(', $this->source); })()') + ->raw(')') + ; + } + } + } + + public function isSpecial() + { + return isset($this->specialVars[$this->getAttribute('name')]); + } + + public function isSimple() + { + return !$this->isSpecial() && !$this->getAttribute('is_defined_test'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/NullCoalesceExpression.php b/Sources/vendor/twig/twig/src/Node/Expression/NullCoalesceExpression.php new file mode 100644 index 00000000..a72bc4fc --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/NullCoalesceExpression.php @@ -0,0 +1,60 @@ +getTemplateLine()); + // for "block()", we don't need the null test as the return value is always a string + if (!$left instanceof BlockReferenceExpression) { + $test = new AndBinary( + $test, + new NotUnary(new NullTest($left, 'null', new Node(), $left->getTemplateLine()), $left->getTemplateLine()), + $left->getTemplateLine() + ); + } + + parent::__construct($test, $left, $right, $lineno); + } + + public function compile(Compiler $compiler): void + { + /* + * This optimizes only one case. PHP 7 also supports more complex expressions + * that can return null. So, for instance, if log is defined, log("foo") ?? "..." works, + * but log($a["foo"]) ?? "..." does not if $a["foo"] is not defined. More advanced + * cases might be implemented as an optimizer node visitor, but has not been done + * as benefits are probably not worth the added complexity. + */ + if ($this->getNode('expr2') instanceof NameExpression) { + $this->getNode('expr2')->setAttribute('always_defined', true); + $compiler + ->raw('((') + ->subcompile($this->getNode('expr2')) + ->raw(') ?? (') + ->subcompile($this->getNode('expr3')) + ->raw('))') + ; + } else { + parent::compile($compiler); + } + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/ParentExpression.php b/Sources/vendor/twig/twig/src/Node/Expression/ParentExpression.php new file mode 100644 index 00000000..25491971 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/ParentExpression.php @@ -0,0 +1,46 @@ + + */ +class ParentExpression extends AbstractExpression +{ + public function __construct(string $name, int $lineno, string $tag = null) + { + parent::__construct([], ['output' => false, 'name' => $name], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + if ($this->getAttribute('output')) { + $compiler + ->addDebugInfo($this) + ->write('$this->displayParentBlock(') + ->string($this->getAttribute('name')) + ->raw(", \$context, \$blocks);\n") + ; + } else { + $compiler + ->raw('$this->renderParentBlock(') + ->string($this->getAttribute('name')) + ->raw(', $context, $blocks)') + ; + } + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/TempNameExpression.php b/Sources/vendor/twig/twig/src/Node/Expression/TempNameExpression.php new file mode 100644 index 00000000..004c704a --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/TempNameExpression.php @@ -0,0 +1,31 @@ + $name], $lineno); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->raw('$_') + ->raw($this->getAttribute('name')) + ->raw('_') + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Test/ConstantTest.php b/Sources/vendor/twig/twig/src/Node/Expression/Test/ConstantTest.php new file mode 100644 index 00000000..57e9319d --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Test/ConstantTest.php @@ -0,0 +1,49 @@ + + */ +class ConstantTest extends TestExpression +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' === constant(') + ; + + if ($this->getNode('arguments')->hasNode(1)) { + $compiler + ->raw('get_class(') + ->subcompile($this->getNode('arguments')->getNode(1)) + ->raw(')."::".') + ; + } + + $compiler + ->subcompile($this->getNode('arguments')->getNode(0)) + ->raw('))') + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Test/DefinedTest.php b/Sources/vendor/twig/twig/src/Node/Expression/Test/DefinedTest.php new file mode 100644 index 00000000..3953bbbe --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Test/DefinedTest.php @@ -0,0 +1,74 @@ + + */ +class DefinedTest extends TestExpression +{ + public function __construct(Node $node, string $name, ?Node $arguments, int $lineno) + { + if ($node instanceof NameExpression) { + $node->setAttribute('is_defined_test', true); + } elseif ($node instanceof GetAttrExpression) { + $node->setAttribute('is_defined_test', true); + $this->changeIgnoreStrictCheck($node); + } elseif ($node instanceof BlockReferenceExpression) { + $node->setAttribute('is_defined_test', true); + } elseif ($node instanceof FunctionExpression && 'constant' === $node->getAttribute('name')) { + $node->setAttribute('is_defined_test', true); + } elseif ($node instanceof ConstantExpression || $node instanceof ArrayExpression) { + $node = new ConstantExpression(true, $node->getTemplateLine()); + } elseif ($node instanceof MethodCallExpression) { + $node->setAttribute('is_defined_test', true); + } else { + throw new SyntaxError('The "defined" test only works with simple variables.', $lineno); + } + + parent::__construct($node, $name, $arguments, $lineno); + } + + private function changeIgnoreStrictCheck(GetAttrExpression $node) + { + $node->setAttribute('optimizable', false); + $node->setAttribute('ignore_strict_check', true); + + if ($node->getNode('node') instanceof GetAttrExpression) { + $this->changeIgnoreStrictCheck($node->getNode('node')); + } + } + + public function compile(Compiler $compiler): void + { + $compiler->subcompile($this->getNode('node')); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php b/Sources/vendor/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php new file mode 100644 index 00000000..4cb3ee09 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php @@ -0,0 +1,36 @@ + + */ +class DivisiblebyTest extends TestExpression +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(0 == ') + ->subcompile($this->getNode('node')) + ->raw(' % ') + ->subcompile($this->getNode('arguments')->getNode(0)) + ->raw(')') + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Test/EvenTest.php b/Sources/vendor/twig/twig/src/Node/Expression/Test/EvenTest.php new file mode 100644 index 00000000..a0e3ed62 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Test/EvenTest.php @@ -0,0 +1,35 @@ + + */ +class EvenTest extends TestExpression +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' % 2 == 0') + ->raw(')') + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Test/NullTest.php b/Sources/vendor/twig/twig/src/Node/Expression/Test/NullTest.php new file mode 100644 index 00000000..45b54ae3 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Test/NullTest.php @@ -0,0 +1,34 @@ + + */ +class NullTest extends TestExpression +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(null === ') + ->subcompile($this->getNode('node')) + ->raw(')') + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Test/OddTest.php b/Sources/vendor/twig/twig/src/Node/Expression/Test/OddTest.php new file mode 100644 index 00000000..d56c7111 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Test/OddTest.php @@ -0,0 +1,35 @@ + + */ +class OddTest extends TestExpression +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' % 2 != 0') + ->raw(')') + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Test/SameasTest.php b/Sources/vendor/twig/twig/src/Node/Expression/Test/SameasTest.php new file mode 100644 index 00000000..c96d2bc0 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Test/SameasTest.php @@ -0,0 +1,34 @@ + + */ +class SameasTest extends TestExpression +{ + public function compile(Compiler $compiler): void + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' === ') + ->subcompile($this->getNode('arguments')->getNode(0)) + ->raw(')') + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/TestExpression.php b/Sources/vendor/twig/twig/src/Node/Expression/TestExpression.php new file mode 100644 index 00000000..e518bd8f --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/TestExpression.php @@ -0,0 +1,42 @@ + $node]; + if (null !== $arguments) { + $nodes['arguments'] = $arguments; + } + + parent::__construct($nodes, ['name' => $name], $lineno); + } + + public function compile(Compiler $compiler): void + { + $name = $this->getAttribute('name'); + $test = $compiler->getEnvironment()->getTest($name); + + $this->setAttribute('name', $name); + $this->setAttribute('type', 'test'); + $this->setAttribute('arguments', $test->getArguments()); + $this->setAttribute('callable', $test->getCallable()); + $this->setAttribute('is_variadic', $test->isVariadic()); + + $this->compileCallable($compiler); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Unary/AbstractUnary.php b/Sources/vendor/twig/twig/src/Node/Expression/Unary/AbstractUnary.php new file mode 100644 index 00000000..e31e3f84 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Unary/AbstractUnary.php @@ -0,0 +1,34 @@ + $node], [], $lineno); + } + + public function compile(Compiler $compiler): void + { + $compiler->raw(' '); + $this->operator($compiler); + $compiler->subcompile($this->getNode('node')); + } + + abstract public function operator(Compiler $compiler): Compiler; +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Unary/NegUnary.php b/Sources/vendor/twig/twig/src/Node/Expression/Unary/NegUnary.php new file mode 100644 index 00000000..dc2f2350 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Unary/NegUnary.php @@ -0,0 +1,23 @@ +raw('-'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Unary/NotUnary.php b/Sources/vendor/twig/twig/src/Node/Expression/Unary/NotUnary.php new file mode 100644 index 00000000..55c11bac --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Unary/NotUnary.php @@ -0,0 +1,23 @@ +raw('!'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/Unary/PosUnary.php b/Sources/vendor/twig/twig/src/Node/Expression/Unary/PosUnary.php new file mode 100644 index 00000000..4b0a0620 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/Unary/PosUnary.php @@ -0,0 +1,23 @@ +raw('+'); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Expression/VariadicExpression.php b/Sources/vendor/twig/twig/src/Node/Expression/VariadicExpression.php new file mode 100644 index 00000000..a1bdb48c --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Expression/VariadicExpression.php @@ -0,0 +1,24 @@ +raw('...'); + + parent::compile($compiler); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/FlushNode.php b/Sources/vendor/twig/twig/src/Node/FlushNode.php new file mode 100644 index 00000000..fa50a88e --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/FlushNode.php @@ -0,0 +1,35 @@ + + */ +class FlushNode extends Node +{ + public function __construct(int $lineno, string $tag) + { + parent::__construct([], [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write("flush();\n") + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/ForLoopNode.php b/Sources/vendor/twig/twig/src/Node/ForLoopNode.php new file mode 100644 index 00000000..d5ce845a --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/ForLoopNode.php @@ -0,0 +1,49 @@ + + */ +class ForLoopNode extends Node +{ + public function __construct(int $lineno, string $tag = null) + { + parent::__construct([], ['with_loop' => false, 'ifexpr' => false, 'else' => false], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + if ($this->getAttribute('else')) { + $compiler->write("\$context['_iterated'] = true;\n"); + } + + if ($this->getAttribute('with_loop')) { + $compiler + ->write("++\$context['loop']['index0'];\n") + ->write("++\$context['loop']['index'];\n") + ->write("\$context['loop']['first'] = false;\n") + ->write("if (isset(\$context['loop']['length'])) {\n") + ->indent() + ->write("--\$context['loop']['revindex0'];\n") + ->write("--\$context['loop']['revindex'];\n") + ->write("\$context['loop']['last'] = 0 === \$context['loop']['revindex0'];\n") + ->outdent() + ->write("}\n") + ; + } + } +} diff --git a/Sources/vendor/twig/twig/src/Node/ForNode.php b/Sources/vendor/twig/twig/src/Node/ForNode.php new file mode 100644 index 00000000..04addfbf --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/ForNode.php @@ -0,0 +1,107 @@ + + */ +class ForNode extends Node +{ + private $loop; + + public function __construct(AssignNameExpression $keyTarget, AssignNameExpression $valueTarget, AbstractExpression $seq, ?Node $ifexpr, Node $body, ?Node $else, int $lineno, string $tag = null) + { + $body = new Node([$body, $this->loop = new ForLoopNode($lineno, $tag)]); + + $nodes = ['key_target' => $keyTarget, 'value_target' => $valueTarget, 'seq' => $seq, 'body' => $body]; + if (null !== $else) { + $nodes['else'] = $else; + } + + parent::__construct($nodes, ['with_loop' => true], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write("\$context['_parent'] = \$context;\n") + ->write("\$context['_seq'] = twig_ensure_traversable(") + ->subcompile($this->getNode('seq')) + ->raw(");\n") + ; + + if ($this->hasNode('else')) { + $compiler->write("\$context['_iterated'] = false;\n"); + } + + if ($this->getAttribute('with_loop')) { + $compiler + ->write("\$context['loop'] = [\n") + ->write(" 'parent' => \$context['_parent'],\n") + ->write(" 'index0' => 0,\n") + ->write(" 'index' => 1,\n") + ->write(" 'first' => true,\n") + ->write("];\n") + ->write("if (is_array(\$context['_seq']) || (is_object(\$context['_seq']) && \$context['_seq'] instanceof \Countable)) {\n") + ->indent() + ->write("\$length = count(\$context['_seq']);\n") + ->write("\$context['loop']['revindex0'] = \$length - 1;\n") + ->write("\$context['loop']['revindex'] = \$length;\n") + ->write("\$context['loop']['length'] = \$length;\n") + ->write("\$context['loop']['last'] = 1 === \$length;\n") + ->outdent() + ->write("}\n") + ; + } + + $this->loop->setAttribute('else', $this->hasNode('else')); + $this->loop->setAttribute('with_loop', $this->getAttribute('with_loop')); + + $compiler + ->write("foreach (\$context['_seq'] as ") + ->subcompile($this->getNode('key_target')) + ->raw(' => ') + ->subcompile($this->getNode('value_target')) + ->raw(") {\n") + ->indent() + ->subcompile($this->getNode('body')) + ->outdent() + ->write("}\n") + ; + + if ($this->hasNode('else')) { + $compiler + ->write("if (!\$context['_iterated']) {\n") + ->indent() + ->subcompile($this->getNode('else')) + ->outdent() + ->write("}\n") + ; + } + + $compiler->write("\$_parent = \$context['_parent'];\n"); + + // remove some "private" loop variables (needed for nested loops) + $compiler->write('unset($context[\'_seq\'], $context[\'_iterated\'], $context[\''.$this->getNode('key_target')->getAttribute('name').'\'], $context[\''.$this->getNode('value_target')->getAttribute('name').'\'], $context[\'_parent\'], $context[\'loop\']);'."\n"); + + // keep the values set in the inner context for variables defined in the outer context + $compiler->write("\$context = array_intersect_key(\$context, \$_parent) + \$_parent;\n"); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/IfNode.php b/Sources/vendor/twig/twig/src/Node/IfNode.php new file mode 100644 index 00000000..569ab795 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/IfNode.php @@ -0,0 +1,73 @@ + + */ +class IfNode extends Node +{ + public function __construct(Node $tests, ?Node $else, int $lineno, string $tag = null) + { + $nodes = ['tests' => $tests]; + if (null !== $else) { + $nodes['else'] = $else; + } + + parent::__construct($nodes, [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler->addDebugInfo($this); + for ($i = 0, $count = \count($this->getNode('tests')); $i < $count; $i += 2) { + if ($i > 0) { + $compiler + ->outdent() + ->write('} elseif (') + ; + } else { + $compiler + ->write('if (') + ; + } + + $compiler + ->subcompile($this->getNode('tests')->getNode($i)) + ->raw(") {\n") + ->indent() + ; + // The node might not exists if the content is empty + if ($this->getNode('tests')->hasNode($i + 1)) { + $compiler->subcompile($this->getNode('tests')->getNode($i + 1)); + } + } + + if ($this->hasNode('else')) { + $compiler + ->outdent() + ->write("} else {\n") + ->indent() + ->subcompile($this->getNode('else')) + ; + } + + $compiler + ->outdent() + ->write("}\n"); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/ImportNode.php b/Sources/vendor/twig/twig/src/Node/ImportNode.php new file mode 100644 index 00000000..5378d799 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/ImportNode.php @@ -0,0 +1,63 @@ + + */ +class ImportNode extends Node +{ + public function __construct(AbstractExpression $expr, AbstractExpression $var, int $lineno, string $tag = null, bool $global = true) + { + parent::__construct(['expr' => $expr, 'var' => $var], ['global' => $global], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write('$macros[') + ->repr($this->getNode('var')->getAttribute('name')) + ->raw('] = ') + ; + + if ($this->getAttribute('global')) { + $compiler + ->raw('$this->macros[') + ->repr($this->getNode('var')->getAttribute('name')) + ->raw('] = ') + ; + } + + if ($this->getNode('expr') instanceof NameExpression && '_self' === $this->getNode('expr')->getAttribute('name')) { + $compiler->raw('$this'); + } else { + $compiler + ->raw('$this->loadTemplate(') + ->subcompile($this->getNode('expr')) + ->raw(', ') + ->repr($this->getTemplateName()) + ->raw(', ') + ->repr($this->getTemplateLine()) + ->raw(')->unwrap()') + ; + } + + $compiler->raw(";\n"); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/IncludeNode.php b/Sources/vendor/twig/twig/src/Node/IncludeNode.php new file mode 100644 index 00000000..d540d6b2 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/IncludeNode.php @@ -0,0 +1,106 @@ + + */ +class IncludeNode extends Node implements NodeOutputInterface +{ + public function __construct(AbstractExpression $expr, ?AbstractExpression $variables, bool $only, bool $ignoreMissing, int $lineno, string $tag = null) + { + $nodes = ['expr' => $expr]; + if (null !== $variables) { + $nodes['variables'] = $variables; + } + + parent::__construct($nodes, ['only' => $only, 'ignore_missing' => $ignoreMissing], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler->addDebugInfo($this); + + if ($this->getAttribute('ignore_missing')) { + $template = $compiler->getVarName(); + + $compiler + ->write(sprintf("$%s = null;\n", $template)) + ->write("try {\n") + ->indent() + ->write(sprintf('$%s = ', $template)) + ; + + $this->addGetTemplate($compiler); + + $compiler + ->raw(";\n") + ->outdent() + ->write("} catch (LoaderError \$e) {\n") + ->indent() + ->write("// ignore missing template\n") + ->outdent() + ->write("}\n") + ->write(sprintf("if ($%s) {\n", $template)) + ->indent() + ->write(sprintf('$%s->display(', $template)) + ; + $this->addTemplateArguments($compiler); + $compiler + ->raw(");\n") + ->outdent() + ->write("}\n") + ; + } else { + $this->addGetTemplate($compiler); + $compiler->raw('->display('); + $this->addTemplateArguments($compiler); + $compiler->raw(");\n"); + } + } + + protected function addGetTemplate(Compiler $compiler) + { + $compiler + ->write('$this->loadTemplate(') + ->subcompile($this->getNode('expr')) + ->raw(', ') + ->repr($this->getTemplateName()) + ->raw(', ') + ->repr($this->getTemplateLine()) + ->raw(')') + ; + } + + protected function addTemplateArguments(Compiler $compiler) + { + if (!$this->hasNode('variables')) { + $compiler->raw(false === $this->getAttribute('only') ? '$context' : '[]'); + } elseif (false === $this->getAttribute('only')) { + $compiler + ->raw('twig_array_merge($context, ') + ->subcompile($this->getNode('variables')) + ->raw(')') + ; + } else { + $compiler->raw('twig_to_array('); + $compiler->subcompile($this->getNode('variables')); + $compiler->raw(')'); + } + } +} diff --git a/Sources/vendor/twig/twig/src/Node/MacroNode.php b/Sources/vendor/twig/twig/src/Node/MacroNode.php new file mode 100644 index 00000000..7f1b24d5 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/MacroNode.php @@ -0,0 +1,113 @@ + + */ +class MacroNode extends Node +{ + public const VARARGS_NAME = 'varargs'; + + public function __construct(string $name, Node $body, Node $arguments, int $lineno, string $tag = null) + { + foreach ($arguments as $argumentName => $argument) { + if (self::VARARGS_NAME === $argumentName) { + throw new SyntaxError(sprintf('The argument "%s" in macro "%s" cannot be defined because the variable "%s" is reserved for arbitrary arguments.', self::VARARGS_NAME, $name, self::VARARGS_NAME), $argument->getTemplateLine(), $argument->getSourceContext()); + } + } + + parent::__construct(['body' => $body, 'arguments' => $arguments], ['name' => $name], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write(sprintf('public function macro_%s(', $this->getAttribute('name'))) + ; + + $count = \count($this->getNode('arguments')); + $pos = 0; + foreach ($this->getNode('arguments') as $name => $default) { + $compiler + ->raw('$__'.$name.'__ = ') + ->subcompile($default) + ; + + if (++$pos < $count) { + $compiler->raw(', '); + } + } + + if ($count) { + $compiler->raw(', '); + } + + $compiler + ->raw('...$__varargs__') + ->raw(")\n") + ->write("{\n") + ->indent() + ->write("\$macros = \$this->macros;\n") + ->write("\$context = \$this->env->mergeGlobals([\n") + ->indent() + ; + + foreach ($this->getNode('arguments') as $name => $default) { + $compiler + ->write('') + ->string($name) + ->raw(' => $__'.$name.'__') + ->raw(",\n") + ; + } + + $compiler + ->write('') + ->string(self::VARARGS_NAME) + ->raw(' => ') + ; + + $compiler + ->raw("\$__varargs__,\n") + ->outdent() + ->write("]);\n\n") + ->write("\$blocks = [];\n\n") + ; + if ($compiler->getEnvironment()->isDebug()) { + $compiler->write("ob_start();\n"); + } else { + $compiler->write("ob_start(function () { return ''; });\n"); + } + $compiler + ->write("try {\n") + ->indent() + ->subcompile($this->getNode('body')) + ->raw("\n") + ->write("return ('' === \$tmp = ob_get_contents()) ? '' : new Markup(\$tmp, \$this->env->getCharset());\n") + ->outdent() + ->write("} finally {\n") + ->indent() + ->write("ob_end_clean();\n") + ->outdent() + ->write("}\n") + ->outdent() + ->write("}\n\n") + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/ModuleNode.php b/Sources/vendor/twig/twig/src/Node/ModuleNode.php new file mode 100644 index 00000000..e972b6ba --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/ModuleNode.php @@ -0,0 +1,464 @@ + + */ +final class ModuleNode extends Node +{ + public function __construct(Node $body, ?AbstractExpression $parent, Node $blocks, Node $macros, Node $traits, $embeddedTemplates, Source $source) + { + $nodes = [ + 'body' => $body, + 'blocks' => $blocks, + 'macros' => $macros, + 'traits' => $traits, + 'display_start' => new Node(), + 'display_end' => new Node(), + 'constructor_start' => new Node(), + 'constructor_end' => new Node(), + 'class_end' => new Node(), + ]; + if (null !== $parent) { + $nodes['parent'] = $parent; + } + + // embedded templates are set as attributes so that they are only visited once by the visitors + parent::__construct($nodes, [ + 'index' => null, + 'embedded_templates' => $embeddedTemplates, + ], 1); + + // populate the template name of all node children + $this->setSourceContext($source); + } + + public function setIndex($index) + { + $this->setAttribute('index', $index); + } + + public function compile(Compiler $compiler): void + { + $this->compileTemplate($compiler); + + foreach ($this->getAttribute('embedded_templates') as $template) { + $compiler->subcompile($template); + } + } + + protected function compileTemplate(Compiler $compiler) + { + if (!$this->getAttribute('index')) { + $compiler->write('compileClassHeader($compiler); + + $this->compileConstructor($compiler); + + $this->compileGetParent($compiler); + + $this->compileDisplay($compiler); + + $compiler->subcompile($this->getNode('blocks')); + + $this->compileMacros($compiler); + + $this->compileGetTemplateName($compiler); + + $this->compileIsTraitable($compiler); + + $this->compileDebugInfo($compiler); + + $this->compileGetSourceContext($compiler); + + $this->compileClassFooter($compiler); + } + + protected function compileGetParent(Compiler $compiler) + { + if (!$this->hasNode('parent')) { + return; + } + $parent = $this->getNode('parent'); + + $compiler + ->write("protected function doGetParent(array \$context)\n", "{\n") + ->indent() + ->addDebugInfo($parent) + ->write('return ') + ; + + if ($parent instanceof ConstantExpression) { + $compiler->subcompile($parent); + } else { + $compiler + ->raw('$this->loadTemplate(') + ->subcompile($parent) + ->raw(', ') + ->repr($this->getSourceContext()->getName()) + ->raw(', ') + ->repr($parent->getTemplateLine()) + ->raw(')') + ; + } + + $compiler + ->raw(";\n") + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileClassHeader(Compiler $compiler) + { + $compiler + ->write("\n\n") + ; + if (!$this->getAttribute('index')) { + $compiler + ->write("use Twig\Environment;\n") + ->write("use Twig\Error\LoaderError;\n") + ->write("use Twig\Error\RuntimeError;\n") + ->write("use Twig\Extension\SandboxExtension;\n") + ->write("use Twig\Markup;\n") + ->write("use Twig\Sandbox\SecurityError;\n") + ->write("use Twig\Sandbox\SecurityNotAllowedTagError;\n") + ->write("use Twig\Sandbox\SecurityNotAllowedFilterError;\n") + ->write("use Twig\Sandbox\SecurityNotAllowedFunctionError;\n") + ->write("use Twig\Source;\n") + ->write("use Twig\Template;\n\n") + ; + } + $compiler + // if the template name contains */, add a blank to avoid a PHP parse error + ->write('/* '.str_replace('*/', '* /', $this->getSourceContext()->getName())." */\n") + ->write('class '.$compiler->getEnvironment()->getTemplateClass($this->getSourceContext()->getName(), $this->getAttribute('index'))) + ->raw(" extends Template\n") + ->write("{\n") + ->indent() + ->write("private \$source;\n") + ->write("private \$macros = [];\n\n") + ; + } + + protected function compileConstructor(Compiler $compiler) + { + $compiler + ->write("public function __construct(Environment \$env)\n", "{\n") + ->indent() + ->subcompile($this->getNode('constructor_start')) + ->write("parent::__construct(\$env);\n\n") + ->write("\$this->source = \$this->getSourceContext();\n\n") + ; + + // parent + if (!$this->hasNode('parent')) { + $compiler->write("\$this->parent = false;\n\n"); + } + + $countTraits = \count($this->getNode('traits')); + if ($countTraits) { + // traits + foreach ($this->getNode('traits') as $i => $trait) { + $node = $trait->getNode('template'); + + $compiler + ->addDebugInfo($node) + ->write(sprintf('$_trait_%s = $this->loadTemplate(', $i)) + ->subcompile($node) + ->raw(', ') + ->repr($node->getTemplateName()) + ->raw(', ') + ->repr($node->getTemplateLine()) + ->raw(");\n") + ->write(sprintf("if (!\$_trait_%s->isTraitable()) {\n", $i)) + ->indent() + ->write("throw new RuntimeError('Template \"'.") + ->subcompile($trait->getNode('template')) + ->raw(".'\" cannot be used as a trait.', ") + ->repr($node->getTemplateLine()) + ->raw(", \$this->source);\n") + ->outdent() + ->write("}\n") + ->write(sprintf("\$_trait_%s_blocks = \$_trait_%s->getBlocks();\n\n", $i, $i)) + ; + + foreach ($trait->getNode('targets') as $key => $value) { + $compiler + ->write(sprintf('if (!isset($_trait_%s_blocks[', $i)) + ->string($key) + ->raw("])) {\n") + ->indent() + ->write("throw new RuntimeError('Block ") + ->string($key) + ->raw(' is not defined in trait ') + ->subcompile($trait->getNode('template')) + ->raw(".', ") + ->repr($node->getTemplateLine()) + ->raw(", \$this->source);\n") + ->outdent() + ->write("}\n\n") + + ->write(sprintf('$_trait_%s_blocks[', $i)) + ->subcompile($value) + ->raw(sprintf('] = $_trait_%s_blocks[', $i)) + ->string($key) + ->raw(sprintf(']; unset($_trait_%s_blocks[', $i)) + ->string($key) + ->raw("]);\n\n") + ; + } + } + + if ($countTraits > 1) { + $compiler + ->write("\$this->traits = array_merge(\n") + ->indent() + ; + + for ($i = 0; $i < $countTraits; ++$i) { + $compiler + ->write(sprintf('$_trait_%s_blocks'.($i == $countTraits - 1 ? '' : ',')."\n", $i)) + ; + } + + $compiler + ->outdent() + ->write(");\n\n") + ; + } else { + $compiler + ->write("\$this->traits = \$_trait_0_blocks;\n\n") + ; + } + + $compiler + ->write("\$this->blocks = array_merge(\n") + ->indent() + ->write("\$this->traits,\n") + ->write("[\n") + ; + } else { + $compiler + ->write("\$this->blocks = [\n") + ; + } + + // blocks + $compiler + ->indent() + ; + + foreach ($this->getNode('blocks') as $name => $node) { + $compiler + ->write(sprintf("'%s' => [\$this, 'block_%s'],\n", $name, $name)) + ; + } + + if ($countTraits) { + $compiler + ->outdent() + ->write("]\n") + ->outdent() + ->write(");\n") + ; + } else { + $compiler + ->outdent() + ->write("];\n") + ; + } + + $compiler + ->subcompile($this->getNode('constructor_end')) + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileDisplay(Compiler $compiler) + { + $compiler + ->write("protected function doDisplay(array \$context, array \$blocks = [])\n", "{\n") + ->indent() + ->write("\$macros = \$this->macros;\n") + ->subcompile($this->getNode('display_start')) + ->subcompile($this->getNode('body')) + ; + + if ($this->hasNode('parent')) { + $parent = $this->getNode('parent'); + + $compiler->addDebugInfo($parent); + if ($parent instanceof ConstantExpression) { + $compiler + ->write('$this->parent = $this->loadTemplate(') + ->subcompile($parent) + ->raw(', ') + ->repr($this->getSourceContext()->getName()) + ->raw(', ') + ->repr($parent->getTemplateLine()) + ->raw(");\n") + ; + $compiler->write('$this->parent'); + } else { + $compiler->write('$this->getParent($context)'); + } + $compiler->raw("->display(\$context, array_merge(\$this->blocks, \$blocks));\n"); + } + + $compiler + ->subcompile($this->getNode('display_end')) + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileClassFooter(Compiler $compiler) + { + $compiler + ->subcompile($this->getNode('class_end')) + ->outdent() + ->write("}\n") + ; + } + + protected function compileMacros(Compiler $compiler) + { + $compiler->subcompile($this->getNode('macros')); + } + + protected function compileGetTemplateName(Compiler $compiler) + { + $compiler + ->write("public function getTemplateName()\n", "{\n") + ->indent() + ->write('return ') + ->repr($this->getSourceContext()->getName()) + ->raw(";\n") + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileIsTraitable(Compiler $compiler) + { + // A template can be used as a trait if: + // * it has no parent + // * it has no macros + // * it has no body + // + // Put another way, a template can be used as a trait if it + // only contains blocks and use statements. + $traitable = !$this->hasNode('parent') && 0 === \count($this->getNode('macros')); + if ($traitable) { + if ($this->getNode('body') instanceof BodyNode) { + $nodes = $this->getNode('body')->getNode(0); + } else { + $nodes = $this->getNode('body'); + } + + if (!\count($nodes)) { + $nodes = new Node([$nodes]); + } + + foreach ($nodes as $node) { + if (!\count($node)) { + continue; + } + + if ($node instanceof TextNode && ctype_space($node->getAttribute('data'))) { + continue; + } + + if ($node instanceof BlockReferenceNode) { + continue; + } + + $traitable = false; + break; + } + } + + if ($traitable) { + return; + } + + $compiler + ->write("public function isTraitable()\n", "{\n") + ->indent() + ->write(sprintf("return %s;\n", $traitable ? 'true' : 'false')) + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileDebugInfo(Compiler $compiler) + { + $compiler + ->write("public function getDebugInfo()\n", "{\n") + ->indent() + ->write(sprintf("return %s;\n", str_replace("\n", '', var_export(array_reverse($compiler->getDebugInfo(), true), true)))) + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileGetSourceContext(Compiler $compiler) + { + $compiler + ->write("public function getSourceContext()\n", "{\n") + ->indent() + ->write('return new Source(') + ->string($compiler->getEnvironment()->isDebug() ? $this->getSourceContext()->getCode() : '') + ->raw(', ') + ->string($this->getSourceContext()->getName()) + ->raw(', ') + ->string($this->getSourceContext()->getPath()) + ->raw(");\n") + ->outdent() + ->write("}\n") + ; + } + + protected function compileLoadTemplate(Compiler $compiler, $node, $var) + { + if ($node instanceof ConstantExpression) { + $compiler + ->write(sprintf('%s = $this->loadTemplate(', $var)) + ->subcompile($node) + ->raw(', ') + ->repr($node->getTemplateName()) + ->raw(', ') + ->repr($node->getTemplateLine()) + ->raw(");\n") + ; + } else { + throw new \LogicException('Trait templates can only be constant nodes.'); + } + } +} diff --git a/Sources/vendor/twig/twig/src/Node/Node.php b/Sources/vendor/twig/twig/src/Node/Node.php new file mode 100644 index 00000000..c0558b9a --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/Node.php @@ -0,0 +1,179 @@ + + */ +class Node implements \Countable, \IteratorAggregate +{ + protected $nodes; + protected $attributes; + protected $lineno; + protected $tag; + + private $name; + private $sourceContext; + + /** + * @param array $nodes An array of named nodes + * @param array $attributes An array of attributes (should not be nodes) + * @param int $lineno The line number + * @param string $tag The tag name associated with the Node + */ + public function __construct(array $nodes = [], array $attributes = [], int $lineno = 0, string $tag = null) + { + foreach ($nodes as $name => $node) { + if (!$node instanceof self) { + throw new \InvalidArgumentException(sprintf('Using "%s" for the value of node "%s" of "%s" is not supported. You must pass a \Twig\Node\Node instance.', \is_object($node) ? \get_class($node) : (null === $node ? 'null' : \gettype($node)), $name, static::class)); + } + } + $this->nodes = $nodes; + $this->attributes = $attributes; + $this->lineno = $lineno; + $this->tag = $tag; + } + + public function __toString() + { + $attributes = []; + foreach ($this->attributes as $name => $value) { + $attributes[] = sprintf('%s: %s', $name, str_replace("\n", '', var_export($value, true))); + } + + $repr = [static::class.'('.implode(', ', $attributes)]; + + if (\count($this->nodes)) { + foreach ($this->nodes as $name => $node) { + $len = \strlen($name) + 4; + $noderepr = []; + foreach (explode("\n", (string) $node) as $line) { + $noderepr[] = str_repeat(' ', $len).$line; + } + + $repr[] = sprintf(' %s: %s', $name, ltrim(implode("\n", $noderepr))); + } + + $repr[] = ')'; + } else { + $repr[0] .= ')'; + } + + return implode("\n", $repr); + } + + /** + * @return void + */ + public function compile(Compiler $compiler) + { + foreach ($this->nodes as $node) { + $node->compile($compiler); + } + } + + public function getTemplateLine(): int + { + return $this->lineno; + } + + public function getNodeTag(): ?string + { + return $this->tag; + } + + public function hasAttribute(string $name): bool + { + return \array_key_exists($name, $this->attributes); + } + + public function getAttribute(string $name) + { + if (!\array_key_exists($name, $this->attributes)) { + throw new \LogicException(sprintf('Attribute "%s" does not exist for Node "%s".', $name, static::class)); + } + + return $this->attributes[$name]; + } + + public function setAttribute(string $name, $value): void + { + $this->attributes[$name] = $value; + } + + public function removeAttribute(string $name): void + { + unset($this->attributes[$name]); + } + + public function hasNode(string $name): bool + { + return isset($this->nodes[$name]); + } + + public function getNode(string $name): self + { + if (!isset($this->nodes[$name])) { + throw new \LogicException(sprintf('Node "%s" does not exist for Node "%s".', $name, static::class)); + } + + return $this->nodes[$name]; + } + + public function setNode(string $name, self $node): void + { + $this->nodes[$name] = $node; + } + + public function removeNode(string $name): void + { + unset($this->nodes[$name]); + } + + /** + * @return int + */ + #[\ReturnTypeWillChange] + public function count() + { + return \count($this->nodes); + } + + public function getIterator(): \Traversable + { + return new \ArrayIterator($this->nodes); + } + + public function getTemplateName(): ?string + { + return $this->sourceContext ? $this->sourceContext->getName() : null; + } + + public function setSourceContext(Source $source): void + { + $this->sourceContext = $source; + foreach ($this->nodes as $node) { + $node->setSourceContext($source); + } + } + + public function getSourceContext(): ?Source + { + return $this->sourceContext; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/NodeCaptureInterface.php b/Sources/vendor/twig/twig/src/Node/NodeCaptureInterface.php new file mode 100644 index 00000000..9fb6a0ca --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/NodeCaptureInterface.php @@ -0,0 +1,21 @@ + + */ +interface NodeCaptureInterface +{ +} diff --git a/Sources/vendor/twig/twig/src/Node/NodeOutputInterface.php b/Sources/vendor/twig/twig/src/Node/NodeOutputInterface.php new file mode 100644 index 00000000..5e35b406 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/NodeOutputInterface.php @@ -0,0 +1,21 @@ + + */ +interface NodeOutputInterface +{ +} diff --git a/Sources/vendor/twig/twig/src/Node/PrintNode.php b/Sources/vendor/twig/twig/src/Node/PrintNode.php new file mode 100644 index 00000000..60386d29 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/PrintNode.php @@ -0,0 +1,39 @@ + + */ +class PrintNode extends Node implements NodeOutputInterface +{ + public function __construct(AbstractExpression $expr, int $lineno, string $tag = null) + { + parent::__construct(['expr' => $expr], [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write('echo ') + ->subcompile($this->getNode('expr')) + ->raw(";\n") + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/SandboxNode.php b/Sources/vendor/twig/twig/src/Node/SandboxNode.php new file mode 100644 index 00000000..4d5666bf --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/SandboxNode.php @@ -0,0 +1,52 @@ + + */ +class SandboxNode extends Node +{ + public function __construct(Node $body, int $lineno, string $tag = null) + { + parent::__construct(['body' => $body], [], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write("if (!\$alreadySandboxed = \$this->sandbox->isSandboxed()) {\n") + ->indent() + ->write("\$this->sandbox->enableSandbox();\n") + ->outdent() + ->write("}\n") + ->write("try {\n") + ->indent() + ->subcompile($this->getNode('body')) + ->outdent() + ->write("} finally {\n") + ->indent() + ->write("if (!\$alreadySandboxed) {\n") + ->indent() + ->write("\$this->sandbox->disableSandbox();\n") + ->outdent() + ->write("}\n") + ->outdent() + ->write("}\n") + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/SetNode.php b/Sources/vendor/twig/twig/src/Node/SetNode.php new file mode 100644 index 00000000..96b6bd8b --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/SetNode.php @@ -0,0 +1,105 @@ + + */ +class SetNode extends Node implements NodeCaptureInterface +{ + public function __construct(bool $capture, Node $names, Node $values, int $lineno, string $tag = null) + { + parent::__construct(['names' => $names, 'values' => $values], ['capture' => $capture, 'safe' => false], $lineno, $tag); + + /* + * Optimizes the node when capture is used for a large block of text. + * + * {% set foo %}foo{% endset %} is compiled to $context['foo'] = new Twig\Markup("foo"); + */ + if ($this->getAttribute('capture')) { + $this->setAttribute('safe', true); + + $values = $this->getNode('values'); + if ($values instanceof TextNode) { + $this->setNode('values', new ConstantExpression($values->getAttribute('data'), $values->getTemplateLine())); + $this->setAttribute('capture', false); + } + } + } + + public function compile(Compiler $compiler): void + { + $compiler->addDebugInfo($this); + + if (\count($this->getNode('names')) > 1) { + $compiler->write('list('); + foreach ($this->getNode('names') as $idx => $node) { + if ($idx) { + $compiler->raw(', '); + } + + $compiler->subcompile($node); + } + $compiler->raw(')'); + } else { + if ($this->getAttribute('capture')) { + if ($compiler->getEnvironment()->isDebug()) { + $compiler->write("ob_start();\n"); + } else { + $compiler->write("ob_start(function () { return ''; });\n"); + } + $compiler + ->subcompile($this->getNode('values')) + ; + } + + $compiler->subcompile($this->getNode('names'), false); + + if ($this->getAttribute('capture')) { + $compiler->raw(" = ('' === \$tmp = ob_get_clean()) ? '' : new Markup(\$tmp, \$this->env->getCharset())"); + } + } + + if (!$this->getAttribute('capture')) { + $compiler->raw(' = '); + + if (\count($this->getNode('names')) > 1) { + $compiler->write('['); + foreach ($this->getNode('values') as $idx => $value) { + if ($idx) { + $compiler->raw(', '); + } + + $compiler->subcompile($value); + } + $compiler->raw(']'); + } else { + if ($this->getAttribute('safe')) { + $compiler + ->raw("('' === \$tmp = ") + ->subcompile($this->getNode('values')) + ->raw(") ? '' : new Markup(\$tmp, \$this->env->getCharset())") + ; + } else { + $compiler->subcompile($this->getNode('values')); + } + } + } + + $compiler->raw(";\n"); + } +} diff --git a/Sources/vendor/twig/twig/src/Node/TextNode.php b/Sources/vendor/twig/twig/src/Node/TextNode.php new file mode 100644 index 00000000..d74ebe63 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/TextNode.php @@ -0,0 +1,38 @@ + + */ +class TextNode extends Node implements NodeOutputInterface +{ + public function __construct(string $data, int $lineno) + { + parent::__construct([], ['data' => $data], $lineno); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->addDebugInfo($this) + ->write('echo ') + ->string($this->getAttribute('data')) + ->raw(";\n") + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Node/WithNode.php b/Sources/vendor/twig/twig/src/Node/WithNode.php new file mode 100644 index 00000000..56a33449 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Node/WithNode.php @@ -0,0 +1,70 @@ + + */ +class WithNode extends Node +{ + public function __construct(Node $body, ?Node $variables, bool $only, int $lineno, string $tag = null) + { + $nodes = ['body' => $body]; + if (null !== $variables) { + $nodes['variables'] = $variables; + } + + parent::__construct($nodes, ['only' => $only], $lineno, $tag); + } + + public function compile(Compiler $compiler): void + { + $compiler->addDebugInfo($this); + + $parentContextName = $compiler->getVarName(); + + $compiler->write(sprintf("\$%s = \$context;\n", $parentContextName)); + + if ($this->hasNode('variables')) { + $node = $this->getNode('variables'); + $varsName = $compiler->getVarName(); + $compiler + ->write(sprintf('$%s = ', $varsName)) + ->subcompile($node) + ->raw(";\n") + ->write(sprintf("if (!twig_test_iterable(\$%s)) {\n", $varsName)) + ->indent() + ->write("throw new RuntimeError('Variables passed to the \"with\" tag must be a hash.', ") + ->repr($node->getTemplateLine()) + ->raw(", \$this->getSourceContext());\n") + ->outdent() + ->write("}\n") + ->write(sprintf("\$%s = twig_to_array(\$%s);\n", $varsName, $varsName)) + ; + + if ($this->getAttribute('only')) { + $compiler->write("\$context = [];\n"); + } + + $compiler->write(sprintf("\$context = \$this->env->mergeGlobals(array_merge(\$context, \$%s));\n", $varsName)); + } + + $compiler + ->subcompile($this->getNode('body')) + ->write(sprintf("\$context = \$%s;\n", $parentContextName)) + ; + } +} diff --git a/Sources/vendor/twig/twig/src/NodeTraverser.php b/Sources/vendor/twig/twig/src/NodeTraverser.php new file mode 100644 index 00000000..47a2d5ca --- /dev/null +++ b/Sources/vendor/twig/twig/src/NodeTraverser.php @@ -0,0 +1,76 @@ + + */ +final class NodeTraverser +{ + private $env; + private $visitors = []; + + /** + * @param NodeVisitorInterface[] $visitors + */ + public function __construct(Environment $env, array $visitors = []) + { + $this->env = $env; + foreach ($visitors as $visitor) { + $this->addVisitor($visitor); + } + } + + public function addVisitor(NodeVisitorInterface $visitor): void + { + $this->visitors[$visitor->getPriority()][] = $visitor; + } + + /** + * Traverses a node and calls the registered visitors. + */ + public function traverse(Node $node): Node + { + ksort($this->visitors); + foreach ($this->visitors as $visitors) { + foreach ($visitors as $visitor) { + $node = $this->traverseForVisitor($visitor, $node); + } + } + + return $node; + } + + private function traverseForVisitor(NodeVisitorInterface $visitor, Node $node): ?Node + { + $node = $visitor->enterNode($node, $this->env); + + foreach ($node as $k => $n) { + if (null !== $m = $this->traverseForVisitor($visitor, $n)) { + if ($m !== $n) { + $node->setNode($k, $m); + } + } else { + $node->removeNode($k); + } + } + + return $visitor->leaveNode($node, $this->env); + } +} diff --git a/Sources/vendor/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php b/Sources/vendor/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php new file mode 100644 index 00000000..d7036ae5 --- /dev/null +++ b/Sources/vendor/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php @@ -0,0 +1,49 @@ + + */ +abstract class AbstractNodeVisitor implements NodeVisitorInterface +{ + final public function enterNode(Node $node, Environment $env): Node + { + return $this->doEnterNode($node, $env); + } + + final public function leaveNode(Node $node, Environment $env): ?Node + { + return $this->doLeaveNode($node, $env); + } + + /** + * Called before child nodes are visited. + * + * @return Node The modified node + */ + abstract protected function doEnterNode(Node $node, Environment $env); + + /** + * Called after child nodes are visited. + * + * @return Node|null The modified node or null if the node must be removed + */ + abstract protected function doLeaveNode(Node $node, Environment $env); +} diff --git a/Sources/vendor/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php b/Sources/vendor/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php new file mode 100644 index 00000000..fe56ea30 --- /dev/null +++ b/Sources/vendor/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php @@ -0,0 +1,208 @@ + + * + * @internal + */ +final class EscaperNodeVisitor implements NodeVisitorInterface +{ + private $statusStack = []; + private $blocks = []; + private $safeAnalysis; + private $traverser; + private $defaultStrategy = false; + private $safeVars = []; + + public function __construct() + { + $this->safeAnalysis = new SafeAnalysisNodeVisitor(); + } + + public function enterNode(Node $node, Environment $env): Node + { + if ($node instanceof ModuleNode) { + if ($env->hasExtension(EscaperExtension::class) && $defaultStrategy = $env->getExtension(EscaperExtension::class)->getDefaultStrategy($node->getTemplateName())) { + $this->defaultStrategy = $defaultStrategy; + } + $this->safeVars = []; + $this->blocks = []; + } elseif ($node instanceof AutoEscapeNode) { + $this->statusStack[] = $node->getAttribute('value'); + } elseif ($node instanceof BlockNode) { + $this->statusStack[] = isset($this->blocks[$node->getAttribute('name')]) ? $this->blocks[$node->getAttribute('name')] : $this->needEscaping($env); + } elseif ($node instanceof ImportNode) { + $this->safeVars[] = $node->getNode('var')->getAttribute('name'); + } + + return $node; + } + + public function leaveNode(Node $node, Environment $env): ?Node + { + if ($node instanceof ModuleNode) { + $this->defaultStrategy = false; + $this->safeVars = []; + $this->blocks = []; + } elseif ($node instanceof FilterExpression) { + return $this->preEscapeFilterNode($node, $env); + } elseif ($node instanceof PrintNode && false !== $type = $this->needEscaping($env)) { + $expression = $node->getNode('expr'); + if ($expression instanceof ConditionalExpression && $this->shouldUnwrapConditional($expression, $env, $type)) { + return new DoNode($this->unwrapConditional($expression, $env, $type), $expression->getTemplateLine()); + } + + return $this->escapePrintNode($node, $env, $type); + } + + if ($node instanceof AutoEscapeNode || $node instanceof BlockNode) { + array_pop($this->statusStack); + } elseif ($node instanceof BlockReferenceNode) { + $this->blocks[$node->getAttribute('name')] = $this->needEscaping($env); + } + + return $node; + } + + private function shouldUnwrapConditional(ConditionalExpression $expression, Environment $env, string $type): bool + { + $expr2Safe = $this->isSafeFor($type, $expression->getNode('expr2'), $env); + $expr3Safe = $this->isSafeFor($type, $expression->getNode('expr3'), $env); + + return $expr2Safe !== $expr3Safe; + } + + private function unwrapConditional(ConditionalExpression $expression, Environment $env, string $type): ConditionalExpression + { + // convert "echo a ? b : c" to "a ? echo b : echo c" recursively + $expr2 = $expression->getNode('expr2'); + if ($expr2 instanceof ConditionalExpression && $this->shouldUnwrapConditional($expr2, $env, $type)) { + $expr2 = $this->unwrapConditional($expr2, $env, $type); + } else { + $expr2 = $this->escapeInlinePrintNode(new InlinePrint($expr2, $expr2->getTemplateLine()), $env, $type); + } + $expr3 = $expression->getNode('expr3'); + if ($expr3 instanceof ConditionalExpression && $this->shouldUnwrapConditional($expr3, $env, $type)) { + $expr3 = $this->unwrapConditional($expr3, $env, $type); + } else { + $expr3 = $this->escapeInlinePrintNode(new InlinePrint($expr3, $expr3->getTemplateLine()), $env, $type); + } + + return new ConditionalExpression($expression->getNode('expr1'), $expr2, $expr3, $expression->getTemplateLine()); + } + + private function escapeInlinePrintNode(InlinePrint $node, Environment $env, string $type): Node + { + $expression = $node->getNode('node'); + + if ($this->isSafeFor($type, $expression, $env)) { + return $node; + } + + return new InlinePrint($this->getEscaperFilter($type, $expression), $node->getTemplateLine()); + } + + private function escapePrintNode(PrintNode $node, Environment $env, string $type): Node + { + if (false === $type) { + return $node; + } + + $expression = $node->getNode('expr'); + + if ($this->isSafeFor($type, $expression, $env)) { + return $node; + } + + $class = \get_class($node); + + return new $class($this->getEscaperFilter($type, $expression), $node->getTemplateLine()); + } + + private function preEscapeFilterNode(FilterExpression $filter, Environment $env): FilterExpression + { + $name = $filter->getNode('filter')->getAttribute('value'); + + $type = $env->getFilter($name)->getPreEscape(); + if (null === $type) { + return $filter; + } + + $node = $filter->getNode('node'); + if ($this->isSafeFor($type, $node, $env)) { + return $filter; + } + + $filter->setNode('node', $this->getEscaperFilter($type, $node)); + + return $filter; + } + + private function isSafeFor(string $type, Node $expression, Environment $env): bool + { + $safe = $this->safeAnalysis->getSafe($expression); + + if (null === $safe) { + if (null === $this->traverser) { + $this->traverser = new NodeTraverser($env, [$this->safeAnalysis]); + } + + $this->safeAnalysis->setSafeVars($this->safeVars); + + $this->traverser->traverse($expression); + $safe = $this->safeAnalysis->getSafe($expression); + } + + return \in_array($type, $safe) || \in_array('all', $safe); + } + + private function needEscaping(Environment $env) + { + if (\count($this->statusStack)) { + return $this->statusStack[\count($this->statusStack) - 1]; + } + + return $this->defaultStrategy ? $this->defaultStrategy : false; + } + + private function getEscaperFilter(string $type, Node $node): FilterExpression + { + $line = $node->getTemplateLine(); + $name = new ConstantExpression('escape', $line); + $args = new Node([new ConstantExpression($type, $line), new ConstantExpression(null, $line), new ConstantExpression(true, $line)]); + + return new FilterExpression($node, $name, $args, $line); + } + + public function getPriority(): int + { + return 0; + } +} diff --git a/Sources/vendor/twig/twig/src/NodeVisitor/MacroAutoImportNodeVisitor.php b/Sources/vendor/twig/twig/src/NodeVisitor/MacroAutoImportNodeVisitor.php new file mode 100644 index 00000000..af477e65 --- /dev/null +++ b/Sources/vendor/twig/twig/src/NodeVisitor/MacroAutoImportNodeVisitor.php @@ -0,0 +1,74 @@ + + * + * @internal + */ +final class MacroAutoImportNodeVisitor implements NodeVisitorInterface +{ + private $inAModule = false; + private $hasMacroCalls = false; + + public function enterNode(Node $node, Environment $env): Node + { + if ($node instanceof ModuleNode) { + $this->inAModule = true; + $this->hasMacroCalls = false; + } + + return $node; + } + + public function leaveNode(Node $node, Environment $env): Node + { + if ($node instanceof ModuleNode) { + $this->inAModule = false; + if ($this->hasMacroCalls) { + $node->getNode('constructor_end')->setNode('_auto_macro_import', new ImportNode(new NameExpression('_self', 0), new AssignNameExpression('_self', 0), 0, 'import', true)); + } + } elseif ($this->inAModule) { + if ( + $node instanceof GetAttrExpression && + $node->getNode('node') instanceof NameExpression && + '_self' === $node->getNode('node')->getAttribute('name') && + $node->getNode('attribute') instanceof ConstantExpression + ) { + $this->hasMacroCalls = true; + + $name = $node->getNode('attribute')->getAttribute('value'); + $node = new MethodCallExpression($node->getNode('node'), 'macro_'.$name, $node->getNode('arguments'), $node->getTemplateLine()); + $node->setAttribute('safe', true); + } + } + + return $node; + } + + public function getPriority(): int + { + // we must be ran before auto-escaping + return -10; + } +} diff --git a/Sources/vendor/twig/twig/src/NodeVisitor/NodeVisitorInterface.php b/Sources/vendor/twig/twig/src/NodeVisitor/NodeVisitorInterface.php new file mode 100644 index 00000000..59e836db --- /dev/null +++ b/Sources/vendor/twig/twig/src/NodeVisitor/NodeVisitorInterface.php @@ -0,0 +1,46 @@ + + */ +interface NodeVisitorInterface +{ + /** + * Called before child nodes are visited. + * + * @return Node The modified node + */ + public function enterNode(Node $node, Environment $env): Node; + + /** + * Called after child nodes are visited. + * + * @return Node|null The modified node or null if the node must be removed + */ + public function leaveNode(Node $node, Environment $env): ?Node; + + /** + * Returns the priority for this visitor. + * + * Priority should be between -10 and 10 (0 is the default). + * + * @return int The priority level + */ + public function getPriority(); +} diff --git a/Sources/vendor/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php b/Sources/vendor/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php new file mode 100644 index 00000000..7ac75e41 --- /dev/null +++ b/Sources/vendor/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php @@ -0,0 +1,217 @@ + + * + * @internal + */ +final class OptimizerNodeVisitor implements NodeVisitorInterface +{ + public const OPTIMIZE_ALL = -1; + public const OPTIMIZE_NONE = 0; + public const OPTIMIZE_FOR = 2; + public const OPTIMIZE_RAW_FILTER = 4; + + private $loops = []; + private $loopsTargets = []; + private $optimizers; + + /** + * @param int $optimizers The optimizer mode + */ + public function __construct(int $optimizers = -1) + { + if ($optimizers > (self::OPTIMIZE_FOR | self::OPTIMIZE_RAW_FILTER)) { + throw new \InvalidArgumentException(sprintf('Optimizer mode "%s" is not valid.', $optimizers)); + } + + $this->optimizers = $optimizers; + } + + public function enterNode(Node $node, Environment $env): Node + { + if (self::OPTIMIZE_FOR === (self::OPTIMIZE_FOR & $this->optimizers)) { + $this->enterOptimizeFor($node, $env); + } + + return $node; + } + + public function leaveNode(Node $node, Environment $env): ?Node + { + if (self::OPTIMIZE_FOR === (self::OPTIMIZE_FOR & $this->optimizers)) { + $this->leaveOptimizeFor($node, $env); + } + + if (self::OPTIMIZE_RAW_FILTER === (self::OPTIMIZE_RAW_FILTER & $this->optimizers)) { + $node = $this->optimizeRawFilter($node, $env); + } + + $node = $this->optimizePrintNode($node, $env); + + return $node; + } + + /** + * Optimizes print nodes. + * + * It replaces: + * + * * "echo $this->render(Parent)Block()" with "$this->display(Parent)Block()" + */ + private function optimizePrintNode(Node $node, Environment $env): Node + { + if (!$node instanceof PrintNode) { + return $node; + } + + $exprNode = $node->getNode('expr'); + if ( + $exprNode instanceof BlockReferenceExpression || + $exprNode instanceof ParentExpression + ) { + $exprNode->setAttribute('output', true); + + return $exprNode; + } + + return $node; + } + + /** + * Removes "raw" filters. + */ + private function optimizeRawFilter(Node $node, Environment $env): Node + { + if ($node instanceof FilterExpression && 'raw' == $node->getNode('filter')->getAttribute('value')) { + return $node->getNode('node'); + } + + return $node; + } + + /** + * Optimizes "for" tag by removing the "loop" variable creation whenever possible. + */ + private function enterOptimizeFor(Node $node, Environment $env): void + { + if ($node instanceof ForNode) { + // disable the loop variable by default + $node->setAttribute('with_loop', false); + array_unshift($this->loops, $node); + array_unshift($this->loopsTargets, $node->getNode('value_target')->getAttribute('name')); + array_unshift($this->loopsTargets, $node->getNode('key_target')->getAttribute('name')); + } elseif (!$this->loops) { + // we are outside a loop + return; + } + + // when do we need to add the loop variable back? + + // the loop variable is referenced for the current loop + elseif ($node instanceof NameExpression && 'loop' === $node->getAttribute('name')) { + $node->setAttribute('always_defined', true); + $this->addLoopToCurrent(); + } + + // optimize access to loop targets + elseif ($node instanceof NameExpression && \in_array($node->getAttribute('name'), $this->loopsTargets)) { + $node->setAttribute('always_defined', true); + } + + // block reference + elseif ($node instanceof BlockReferenceNode || $node instanceof BlockReferenceExpression) { + $this->addLoopToCurrent(); + } + + // include without the only attribute + elseif ($node instanceof IncludeNode && !$node->getAttribute('only')) { + $this->addLoopToAll(); + } + + // include function without the with_context=false parameter + elseif ($node instanceof FunctionExpression + && 'include' === $node->getAttribute('name') + && (!$node->getNode('arguments')->hasNode('with_context') + || false !== $node->getNode('arguments')->getNode('with_context')->getAttribute('value') + ) + ) { + $this->addLoopToAll(); + } + + // the loop variable is referenced via an attribute + elseif ($node instanceof GetAttrExpression + && (!$node->getNode('attribute') instanceof ConstantExpression + || 'parent' === $node->getNode('attribute')->getAttribute('value') + ) + && (true === $this->loops[0]->getAttribute('with_loop') + || ($node->getNode('node') instanceof NameExpression + && 'loop' === $node->getNode('node')->getAttribute('name') + ) + ) + ) { + $this->addLoopToAll(); + } + } + + /** + * Optimizes "for" tag by removing the "loop" variable creation whenever possible. + */ + private function leaveOptimizeFor(Node $node, Environment $env): void + { + if ($node instanceof ForNode) { + array_shift($this->loops); + array_shift($this->loopsTargets); + array_shift($this->loopsTargets); + } + } + + private function addLoopToCurrent(): void + { + $this->loops[0]->setAttribute('with_loop', true); + } + + private function addLoopToAll(): void + { + foreach ($this->loops as $loop) { + $loop->setAttribute('with_loop', true); + } + } + + public function getPriority(): int + { + return 255; + } +} diff --git a/Sources/vendor/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php b/Sources/vendor/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php new file mode 100644 index 00000000..90d6f2e0 --- /dev/null +++ b/Sources/vendor/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php @@ -0,0 +1,160 @@ +safeVars = $safeVars; + } + + public function getSafe(Node $node) + { + $hash = spl_object_hash($node); + if (!isset($this->data[$hash])) { + return; + } + + foreach ($this->data[$hash] as $bucket) { + if ($bucket['key'] !== $node) { + continue; + } + + if (\in_array('html_attr', $bucket['value'])) { + $bucket['value'][] = 'html'; + } + + return $bucket['value']; + } + } + + private function setSafe(Node $node, array $safe): void + { + $hash = spl_object_hash($node); + if (isset($this->data[$hash])) { + foreach ($this->data[$hash] as &$bucket) { + if ($bucket['key'] === $node) { + $bucket['value'] = $safe; + + return; + } + } + } + $this->data[$hash][] = [ + 'key' => $node, + 'value' => $safe, + ]; + } + + public function enterNode(Node $node, Environment $env): Node + { + return $node; + } + + public function leaveNode(Node $node, Environment $env): ?Node + { + if ($node instanceof ConstantExpression) { + // constants are marked safe for all + $this->setSafe($node, ['all']); + } elseif ($node instanceof BlockReferenceExpression) { + // blocks are safe by definition + $this->setSafe($node, ['all']); + } elseif ($node instanceof ParentExpression) { + // parent block is safe by definition + $this->setSafe($node, ['all']); + } elseif ($node instanceof ConditionalExpression) { + // intersect safeness of both operands + $safe = $this->intersectSafe($this->getSafe($node->getNode('expr2')), $this->getSafe($node->getNode('expr3'))); + $this->setSafe($node, $safe); + } elseif ($node instanceof FilterExpression) { + // filter expression is safe when the filter is safe + $name = $node->getNode('filter')->getAttribute('value'); + $args = $node->getNode('arguments'); + if ($filter = $env->getFilter($name)) { + $safe = $filter->getSafe($args); + if (null === $safe) { + $safe = $this->intersectSafe($this->getSafe($node->getNode('node')), $filter->getPreservesSafety()); + } + $this->setSafe($node, $safe); + } else { + $this->setSafe($node, []); + } + } elseif ($node instanceof FunctionExpression) { + // function expression is safe when the function is safe + $name = $node->getAttribute('name'); + $args = $node->getNode('arguments'); + if ($function = $env->getFunction($name)) { + $this->setSafe($node, $function->getSafe($args)); + } else { + $this->setSafe($node, []); + } + } elseif ($node instanceof MethodCallExpression) { + if ($node->getAttribute('safe')) { + $this->setSafe($node, ['all']); + } else { + $this->setSafe($node, []); + } + } elseif ($node instanceof GetAttrExpression && $node->getNode('node') instanceof NameExpression) { + $name = $node->getNode('node')->getAttribute('name'); + if (\in_array($name, $this->safeVars)) { + $this->setSafe($node, ['all']); + } else { + $this->setSafe($node, []); + } + } else { + $this->setSafe($node, []); + } + + return $node; + } + + private function intersectSafe(array $a = null, array $b = null): array + { + if (null === $a || null === $b) { + return []; + } + + if (\in_array('all', $a)) { + return $b; + } + + if (\in_array('all', $b)) { + return $a; + } + + return array_intersect($a, $b); + } + + public function getPriority(): int + { + return 0; + } +} diff --git a/Sources/vendor/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php b/Sources/vendor/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php new file mode 100644 index 00000000..1446cee6 --- /dev/null +++ b/Sources/vendor/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php @@ -0,0 +1,136 @@ + + * + * @internal + */ +final class SandboxNodeVisitor implements NodeVisitorInterface +{ + private $inAModule = false; + private $tags; + private $filters; + private $functions; + private $needsToStringWrap = false; + + public function enterNode(Node $node, Environment $env): Node + { + if ($node instanceof ModuleNode) { + $this->inAModule = true; + $this->tags = []; + $this->filters = []; + $this->functions = []; + + return $node; + } elseif ($this->inAModule) { + // look for tags + if ($node->getNodeTag() && !isset($this->tags[$node->getNodeTag()])) { + $this->tags[$node->getNodeTag()] = $node; + } + + // look for filters + if ($node instanceof FilterExpression && !isset($this->filters[$node->getNode('filter')->getAttribute('value')])) { + $this->filters[$node->getNode('filter')->getAttribute('value')] = $node; + } + + // look for functions + if ($node instanceof FunctionExpression && !isset($this->functions[$node->getAttribute('name')])) { + $this->functions[$node->getAttribute('name')] = $node; + } + + // the .. operator is equivalent to the range() function + if ($node instanceof RangeBinary && !isset($this->functions['range'])) { + $this->functions['range'] = $node; + } + + if ($node instanceof PrintNode) { + $this->needsToStringWrap = true; + $this->wrapNode($node, 'expr'); + } + + if ($node instanceof SetNode && !$node->getAttribute('capture')) { + $this->needsToStringWrap = true; + } + + // wrap outer nodes that can implicitly call __toString() + if ($this->needsToStringWrap) { + if ($node instanceof ConcatBinary) { + $this->wrapNode($node, 'left'); + $this->wrapNode($node, 'right'); + } + if ($node instanceof FilterExpression) { + $this->wrapNode($node, 'node'); + $this->wrapArrayNode($node, 'arguments'); + } + if ($node instanceof FunctionExpression) { + $this->wrapArrayNode($node, 'arguments'); + } + } + } + + return $node; + } + + public function leaveNode(Node $node, Environment $env): ?Node + { + if ($node instanceof ModuleNode) { + $this->inAModule = false; + + $node->setNode('constructor_end', new Node([new CheckSecurityCallNode(), $node->getNode('constructor_end')])); + $node->setNode('class_end', new Node([new CheckSecurityNode($this->filters, $this->tags, $this->functions), $node->getNode('class_end')])); + } elseif ($this->inAModule) { + if ($node instanceof PrintNode || $node instanceof SetNode) { + $this->needsToStringWrap = false; + } + } + + return $node; + } + + private function wrapNode(Node $node, string $name): void + { + $expr = $node->getNode($name); + if ($expr instanceof NameExpression || $expr instanceof GetAttrExpression) { + $node->setNode($name, new CheckToStringNode($expr)); + } + } + + private function wrapArrayNode(Node $node, string $name): void + { + $args = $node->getNode($name); + foreach ($args as $name => $_) { + $this->wrapNode($args, $name); + } + } + + public function getPriority(): int + { + return 0; + } +} diff --git a/Sources/vendor/twig/twig/src/Parser.php b/Sources/vendor/twig/twig/src/Parser.php new file mode 100644 index 00000000..4428208f --- /dev/null +++ b/Sources/vendor/twig/twig/src/Parser.php @@ -0,0 +1,348 @@ + + */ +class Parser +{ + private $stack = []; + private $stream; + private $parent; + private $visitors; + private $expressionParser; + private $blocks; + private $blockStack; + private $macros; + private $env; + private $importedSymbols; + private $traits; + private $embeddedTemplates = []; + private $varNameSalt = 0; + + public function __construct(Environment $env) + { + $this->env = $env; + } + + public function getVarName(): string + { + return sprintf('__internal_parse_%d', $this->varNameSalt++); + } + + public function parse(TokenStream $stream, $test = null, bool $dropNeedle = false): ModuleNode + { + $vars = get_object_vars($this); + unset($vars['stack'], $vars['env'], $vars['handlers'], $vars['visitors'], $vars['expressionParser'], $vars['reservedMacroNames'], $vars['varNameSalt']); + $this->stack[] = $vars; + + // node visitors + if (null === $this->visitors) { + $this->visitors = $this->env->getNodeVisitors(); + } + + if (null === $this->expressionParser) { + $this->expressionParser = new ExpressionParser($this, $this->env); + } + + $this->stream = $stream; + $this->parent = null; + $this->blocks = []; + $this->macros = []; + $this->traits = []; + $this->blockStack = []; + $this->importedSymbols = [[]]; + $this->embeddedTemplates = []; + + try { + $body = $this->subparse($test, $dropNeedle); + + if (null !== $this->parent && null === $body = $this->filterBodyNodes($body)) { + $body = new Node(); + } + } catch (SyntaxError $e) { + if (!$e->getSourceContext()) { + $e->setSourceContext($this->stream->getSourceContext()); + } + + if (!$e->getTemplateLine()) { + $e->setTemplateLine($this->stream->getCurrent()->getLine()); + } + + throw $e; + } + + $node = new ModuleNode(new BodyNode([$body]), $this->parent, new Node($this->blocks), new Node($this->macros), new Node($this->traits), $this->embeddedTemplates, $stream->getSourceContext()); + + $traverser = new NodeTraverser($this->env, $this->visitors); + + $node = $traverser->traverse($node); + + // restore previous stack so previous parse() call can resume working + foreach (array_pop($this->stack) as $key => $val) { + $this->$key = $val; + } + + return $node; + } + + public function subparse($test, bool $dropNeedle = false): Node + { + $lineno = $this->getCurrentToken()->getLine(); + $rv = []; + while (!$this->stream->isEOF()) { + switch ($this->getCurrentToken()->getType()) { + case /* Token::TEXT_TYPE */ 0: + $token = $this->stream->next(); + $rv[] = new TextNode($token->getValue(), $token->getLine()); + break; + + case /* Token::VAR_START_TYPE */ 2: + $token = $this->stream->next(); + $expr = $this->expressionParser->parseExpression(); + $this->stream->expect(/* Token::VAR_END_TYPE */ 4); + $rv[] = new PrintNode($expr, $token->getLine()); + break; + + case /* Token::BLOCK_START_TYPE */ 1: + $this->stream->next(); + $token = $this->getCurrentToken(); + + if (/* Token::NAME_TYPE */ 5 !== $token->getType()) { + throw new SyntaxError('A block must start with a tag name.', $token->getLine(), $this->stream->getSourceContext()); + } + + if (null !== $test && $test($token)) { + if ($dropNeedle) { + $this->stream->next(); + } + + if (1 === \count($rv)) { + return $rv[0]; + } + + return new Node($rv, [], $lineno); + } + + if (!$subparser = $this->env->getTokenParser($token->getValue())) { + if (null !== $test) { + $e = new SyntaxError(sprintf('Unexpected "%s" tag', $token->getValue()), $token->getLine(), $this->stream->getSourceContext()); + + if (\is_array($test) && isset($test[0]) && $test[0] instanceof TokenParserInterface) { + $e->appendMessage(sprintf(' (expecting closing tag for the "%s" tag defined near line %s).', $test[0]->getTag(), $lineno)); + } + } else { + $e = new SyntaxError(sprintf('Unknown "%s" tag.', $token->getValue()), $token->getLine(), $this->stream->getSourceContext()); + $e->addSuggestions($token->getValue(), array_keys($this->env->getTokenParsers())); + } + + throw $e; + } + + $this->stream->next(); + + $subparser->setParser($this); + $node = $subparser->parse($token); + if (null !== $node) { + $rv[] = $node; + } + break; + + default: + throw new SyntaxError('Lexer or parser ended up in unsupported state.', $this->getCurrentToken()->getLine(), $this->stream->getSourceContext()); + } + } + + if (1 === \count($rv)) { + return $rv[0]; + } + + return new Node($rv, [], $lineno); + } + + public function getBlockStack(): array + { + return $this->blockStack; + } + + public function peekBlockStack() + { + return $this->blockStack[\count($this->blockStack) - 1] ?? null; + } + + public function popBlockStack(): void + { + array_pop($this->blockStack); + } + + public function pushBlockStack($name): void + { + $this->blockStack[] = $name; + } + + public function hasBlock(string $name): bool + { + return isset($this->blocks[$name]); + } + + public function getBlock(string $name): Node + { + return $this->blocks[$name]; + } + + public function setBlock(string $name, BlockNode $value): void + { + $this->blocks[$name] = new BodyNode([$value], [], $value->getTemplateLine()); + } + + public function hasMacro(string $name): bool + { + return isset($this->macros[$name]); + } + + public function setMacro(string $name, MacroNode $node): void + { + $this->macros[$name] = $node; + } + + public function addTrait($trait): void + { + $this->traits[] = $trait; + } + + public function hasTraits(): bool + { + return \count($this->traits) > 0; + } + + public function embedTemplate(ModuleNode $template) + { + $template->setIndex(mt_rand()); + + $this->embeddedTemplates[] = $template; + } + + public function addImportedSymbol(string $type, string $alias, string $name = null, AbstractExpression $node = null): void + { + $this->importedSymbols[0][$type][$alias] = ['name' => $name, 'node' => $node]; + } + + public function getImportedSymbol(string $type, string $alias) + { + // if the symbol does not exist in the current scope (0), try in the main/global scope (last index) + return $this->importedSymbols[0][$type][$alias] ?? ($this->importedSymbols[\count($this->importedSymbols) - 1][$type][$alias] ?? null); + } + + public function isMainScope(): bool + { + return 1 === \count($this->importedSymbols); + } + + public function pushLocalScope(): void + { + array_unshift($this->importedSymbols, []); + } + + public function popLocalScope(): void + { + array_shift($this->importedSymbols); + } + + public function getExpressionParser(): ExpressionParser + { + return $this->expressionParser; + } + + public function getParent(): ?Node + { + return $this->parent; + } + + public function setParent(?Node $parent): void + { + $this->parent = $parent; + } + + public function getStream(): TokenStream + { + return $this->stream; + } + + public function getCurrentToken(): Token + { + return $this->stream->getCurrent(); + } + + private function filterBodyNodes(Node $node, bool $nested = false): ?Node + { + // check that the body does not contain non-empty output nodes + if ( + ($node instanceof TextNode && !ctype_space($node->getAttribute('data'))) + || + (!$node instanceof TextNode && !$node instanceof BlockReferenceNode && $node instanceof NodeOutputInterface) + ) { + if (false !== strpos((string) $node, \chr(0xEF).\chr(0xBB).\chr(0xBF))) { + $t = substr($node->getAttribute('data'), 3); + if ('' === $t || ctype_space($t)) { + // bypass empty nodes starting with a BOM + return null; + } + } + + throw new SyntaxError('A template that extends another one cannot include content outside Twig blocks. Did you forget to put the content inside a {% block %} tag?', $node->getTemplateLine(), $this->stream->getSourceContext()); + } + + // bypass nodes that "capture" the output + if ($node instanceof NodeCaptureInterface) { + // a "block" tag in such a node will serve as a block definition AND be displayed in place as well + return $node; + } + + // "block" tags that are not captured (see above) are only used for defining + // the content of the block. In such a case, nesting it does not work as + // expected as the definition is not part of the default template code flow. + if ($nested && $node instanceof BlockReferenceNode) { + throw new SyntaxError('A block definition cannot be nested under non-capturing nodes.', $node->getTemplateLine(), $this->stream->getSourceContext()); + } + + if ($node instanceof NodeOutputInterface) { + return null; + } + + // here, $nested means "being at the root level of a child template" + // we need to discard the wrapping "Node" for the "body" node + $nested = $nested || Node::class !== \get_class($node); + foreach ($node as $k => $n) { + if (null !== $n && null === $this->filterBodyNodes($n, $nested)) { + $node->removeNode($k); + } + } + + return $node; + } +} diff --git a/Sources/vendor/twig/twig/src/Profiler/Dumper/BaseDumper.php b/Sources/vendor/twig/twig/src/Profiler/Dumper/BaseDumper.php new file mode 100644 index 00000000..4da43e47 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Profiler/Dumper/BaseDumper.php @@ -0,0 +1,63 @@ + + */ +abstract class BaseDumper +{ + private $root; + + public function dump(Profile $profile): string + { + return $this->dumpProfile($profile); + } + + abstract protected function formatTemplate(Profile $profile, $prefix): string; + + abstract protected function formatNonTemplate(Profile $profile, $prefix): string; + + abstract protected function formatTime(Profile $profile, $percent): string; + + private function dumpProfile(Profile $profile, $prefix = '', $sibling = false): string + { + if ($profile->isRoot()) { + $this->root = $profile->getDuration(); + $start = $profile->getName(); + } else { + if ($profile->isTemplate()) { + $start = $this->formatTemplate($profile, $prefix); + } else { + $start = $this->formatNonTemplate($profile, $prefix); + } + $prefix .= $sibling ? '│ ' : ' '; + } + + $percent = $this->root ? $profile->getDuration() / $this->root * 100 : 0; + + if ($profile->getDuration() * 1000 < 1) { + $str = $start."\n"; + } else { + $str = sprintf("%s %s\n", $start, $this->formatTime($profile, $percent)); + } + + $nCount = \count($profile->getProfiles()); + foreach ($profile as $i => $p) { + $str .= $this->dumpProfile($p, $prefix, $i + 1 !== $nCount); + } + + return $str; + } +} diff --git a/Sources/vendor/twig/twig/src/Profiler/Dumper/BlackfireDumper.php b/Sources/vendor/twig/twig/src/Profiler/Dumper/BlackfireDumper.php new file mode 100644 index 00000000..03abe0fa --- /dev/null +++ b/Sources/vendor/twig/twig/src/Profiler/Dumper/BlackfireDumper.php @@ -0,0 +1,72 @@ + + */ +final class BlackfireDumper +{ + public function dump(Profile $profile): string + { + $data = []; + $this->dumpProfile('main()', $profile, $data); + $this->dumpChildren('main()', $profile, $data); + + $start = sprintf('%f', microtime(true)); + $str = << $values) { + $str .= "$name//{$values['ct']} {$values['wt']} {$values['mu']} {$values['pmu']}\n"; + } + + return $str; + } + + private function dumpChildren(string $parent, Profile $profile, &$data) + { + foreach ($profile as $p) { + if ($p->isTemplate()) { + $name = $p->getTemplate(); + } else { + $name = sprintf('%s::%s(%s)', $p->getTemplate(), $p->getType(), $p->getName()); + } + $this->dumpProfile(sprintf('%s==>%s', $parent, $name), $p, $data); + $this->dumpChildren($name, $p, $data); + } + } + + private function dumpProfile(string $edge, Profile $profile, &$data) + { + if (isset($data[$edge])) { + ++$data[$edge]['ct']; + $data[$edge]['wt'] += floor($profile->getDuration() * 1000000); + $data[$edge]['mu'] += $profile->getMemoryUsage(); + $data[$edge]['pmu'] += $profile->getPeakMemoryUsage(); + } else { + $data[$edge] = [ + 'ct' => 1, + 'wt' => floor($profile->getDuration() * 1000000), + 'mu' => $profile->getMemoryUsage(), + 'pmu' => $profile->getPeakMemoryUsage(), + ]; + } + } +} diff --git a/Sources/vendor/twig/twig/src/Profiler/Dumper/HtmlDumper.php b/Sources/vendor/twig/twig/src/Profiler/Dumper/HtmlDumper.php new file mode 100644 index 00000000..1f2433b4 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Profiler/Dumper/HtmlDumper.php @@ -0,0 +1,47 @@ + + */ +final class HtmlDumper extends BaseDumper +{ + private static $colors = [ + 'block' => '#dfd', + 'macro' => '#ddf', + 'template' => '#ffd', + 'big' => '#d44', + ]; + + public function dump(Profile $profile): string + { + return '
'.parent::dump($profile).'
'; + } + + protected function formatTemplate(Profile $profile, $prefix): string + { + return sprintf('%s└ %s', $prefix, self::$colors['template'], $profile->getTemplate()); + } + + protected function formatNonTemplate(Profile $profile, $prefix): string + { + return sprintf('%s└ %s::%s(%s)', $prefix, $profile->getTemplate(), $profile->getType(), isset(self::$colors[$profile->getType()]) ? self::$colors[$profile->getType()] : 'auto', $profile->getName()); + } + + protected function formatTime(Profile $profile, $percent): string + { + return sprintf('%.2fms/%.0f%%', $percent > 20 ? self::$colors['big'] : 'auto', $profile->getDuration() * 1000, $percent); + } +} diff --git a/Sources/vendor/twig/twig/src/Profiler/Dumper/TextDumper.php b/Sources/vendor/twig/twig/src/Profiler/Dumper/TextDumper.php new file mode 100644 index 00000000..31561c46 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Profiler/Dumper/TextDumper.php @@ -0,0 +1,35 @@ + + */ +final class TextDumper extends BaseDumper +{ + protected function formatTemplate(Profile $profile, $prefix): string + { + return sprintf('%s└ %s', $prefix, $profile->getTemplate()); + } + + protected function formatNonTemplate(Profile $profile, $prefix): string + { + return sprintf('%s└ %s::%s(%s)', $prefix, $profile->getTemplate(), $profile->getType(), $profile->getName()); + } + + protected function formatTime(Profile $profile, $percent): string + { + return sprintf('%.2fms/%.0f%%', $profile->getDuration() * 1000, $percent); + } +} diff --git a/Sources/vendor/twig/twig/src/Profiler/Node/EnterProfileNode.php b/Sources/vendor/twig/twig/src/Profiler/Node/EnterProfileNode.php new file mode 100644 index 00000000..1494baf4 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Profiler/Node/EnterProfileNode.php @@ -0,0 +1,42 @@ + + */ +class EnterProfileNode extends Node +{ + public function __construct(string $extensionName, string $type, string $name, string $varName) + { + parent::__construct([], ['extension_name' => $extensionName, 'name' => $name, 'type' => $type, 'var_name' => $varName]); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->write(sprintf('$%s = $this->extensions[', $this->getAttribute('var_name'))) + ->repr($this->getAttribute('extension_name')) + ->raw("];\n") + ->write(sprintf('$%s->enter($%s = new \Twig\Profiler\Profile($this->getTemplateName(), ', $this->getAttribute('var_name'), $this->getAttribute('var_name').'_prof')) + ->repr($this->getAttribute('type')) + ->raw(', ') + ->repr($this->getAttribute('name')) + ->raw("));\n\n") + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Profiler/Node/LeaveProfileNode.php b/Sources/vendor/twig/twig/src/Profiler/Node/LeaveProfileNode.php new file mode 100644 index 00000000..94cebbaa --- /dev/null +++ b/Sources/vendor/twig/twig/src/Profiler/Node/LeaveProfileNode.php @@ -0,0 +1,36 @@ + + */ +class LeaveProfileNode extends Node +{ + public function __construct(string $varName) + { + parent::__construct([], ['var_name' => $varName]); + } + + public function compile(Compiler $compiler): void + { + $compiler + ->write("\n") + ->write(sprintf("\$%s->leave(\$%s);\n\n", $this->getAttribute('var_name'), $this->getAttribute('var_name').'_prof')) + ; + } +} diff --git a/Sources/vendor/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php b/Sources/vendor/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php new file mode 100644 index 00000000..91abee80 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php @@ -0,0 +1,70 @@ + + */ +final class ProfilerNodeVisitor implements NodeVisitorInterface +{ + private $extensionName; + private $varName; + + public function __construct(string $extensionName) + { + $this->extensionName = $extensionName; + $this->varName = sprintf('__internal_%s', hash(\PHP_VERSION_ID < 80100 ? 'sha256' : 'xxh128', $extensionName)); + } + + public function enterNode(Node $node, Environment $env): Node + { + return $node; + } + + public function leaveNode(Node $node, Environment $env): ?Node + { + if ($node instanceof ModuleNode) { + $node->setNode('display_start', new Node([new EnterProfileNode($this->extensionName, Profile::TEMPLATE, $node->getTemplateName(), $this->varName), $node->getNode('display_start')])); + $node->setNode('display_end', new Node([new LeaveProfileNode($this->varName), $node->getNode('display_end')])); + } elseif ($node instanceof BlockNode) { + $node->setNode('body', new BodyNode([ + new EnterProfileNode($this->extensionName, Profile::BLOCK, $node->getAttribute('name'), $this->varName), + $node->getNode('body'), + new LeaveProfileNode($this->varName), + ])); + } elseif ($node instanceof MacroNode) { + $node->setNode('body', new BodyNode([ + new EnterProfileNode($this->extensionName, Profile::MACRO, $node->getAttribute('name'), $this->varName), + $node->getNode('body'), + new LeaveProfileNode($this->varName), + ])); + } + + return $node; + } + + public function getPriority(): int + { + return 0; + } +} diff --git a/Sources/vendor/twig/twig/src/Profiler/Profile.php b/Sources/vendor/twig/twig/src/Profiler/Profile.php new file mode 100644 index 00000000..252ca9b0 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Profiler/Profile.php @@ -0,0 +1,181 @@ + + */ +final class Profile implements \IteratorAggregate, \Serializable +{ + public const ROOT = 'ROOT'; + public const BLOCK = 'block'; + public const TEMPLATE = 'template'; + public const MACRO = 'macro'; + + private $template; + private $name; + private $type; + private $starts = []; + private $ends = []; + private $profiles = []; + + public function __construct(string $template = 'main', string $type = self::ROOT, string $name = 'main') + { + $this->template = $template; + $this->type = $type; + $this->name = 0 === strpos($name, '__internal_') ? 'INTERNAL' : $name; + $this->enter(); + } + + public function getTemplate(): string + { + return $this->template; + } + + public function getType(): string + { + return $this->type; + } + + public function getName(): string + { + return $this->name; + } + + public function isRoot(): bool + { + return self::ROOT === $this->type; + } + + public function isTemplate(): bool + { + return self::TEMPLATE === $this->type; + } + + public function isBlock(): bool + { + return self::BLOCK === $this->type; + } + + public function isMacro(): bool + { + return self::MACRO === $this->type; + } + + /** + * @return Profile[] + */ + public function getProfiles(): array + { + return $this->profiles; + } + + public function addProfile(self $profile): void + { + $this->profiles[] = $profile; + } + + /** + * Returns the duration in microseconds. + */ + public function getDuration(): float + { + if ($this->isRoot() && $this->profiles) { + // for the root node with children, duration is the sum of all child durations + $duration = 0; + foreach ($this->profiles as $profile) { + $duration += $profile->getDuration(); + } + + return $duration; + } + + return isset($this->ends['wt']) && isset($this->starts['wt']) ? $this->ends['wt'] - $this->starts['wt'] : 0; + } + + /** + * Returns the memory usage in bytes. + */ + public function getMemoryUsage(): int + { + return isset($this->ends['mu']) && isset($this->starts['mu']) ? $this->ends['mu'] - $this->starts['mu'] : 0; + } + + /** + * Returns the peak memory usage in bytes. + */ + public function getPeakMemoryUsage(): int + { + return isset($this->ends['pmu']) && isset($this->starts['pmu']) ? $this->ends['pmu'] - $this->starts['pmu'] : 0; + } + + /** + * Starts the profiling. + */ + public function enter(): void + { + $this->starts = [ + 'wt' => microtime(true), + 'mu' => memory_get_usage(), + 'pmu' => memory_get_peak_usage(), + ]; + } + + /** + * Stops the profiling. + */ + public function leave(): void + { + $this->ends = [ + 'wt' => microtime(true), + 'mu' => memory_get_usage(), + 'pmu' => memory_get_peak_usage(), + ]; + } + + public function reset(): void + { + $this->starts = $this->ends = $this->profiles = []; + $this->enter(); + } + + public function getIterator(): \Traversable + { + return new \ArrayIterator($this->profiles); + } + + public function serialize(): string + { + return serialize($this->__serialize()); + } + + public function unserialize($data): void + { + $this->__unserialize(unserialize($data)); + } + + /** + * @internal + */ + public function __serialize(): array + { + return [$this->template, $this->name, $this->type, $this->starts, $this->ends, $this->profiles]; + } + + /** + * @internal + */ + public function __unserialize(array $data): void + { + list($this->template, $this->name, $this->type, $this->starts, $this->ends, $this->profiles) = $data; + } +} diff --git a/Sources/vendor/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php b/Sources/vendor/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php new file mode 100644 index 00000000..b360d7be --- /dev/null +++ b/Sources/vendor/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php @@ -0,0 +1,37 @@ + + * @author Robin Chalas + */ +class ContainerRuntimeLoader implements RuntimeLoaderInterface +{ + private $container; + + public function __construct(ContainerInterface $container) + { + $this->container = $container; + } + + public function load(string $class) + { + return $this->container->has($class) ? $this->container->get($class) : null; + } +} diff --git a/Sources/vendor/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php b/Sources/vendor/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php new file mode 100644 index 00000000..13064839 --- /dev/null +++ b/Sources/vendor/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php @@ -0,0 +1,41 @@ + + */ +class FactoryRuntimeLoader implements RuntimeLoaderInterface +{ + private $map; + + /** + * @param array $map An array where keys are class names and values factory callables + */ + public function __construct(array $map = []) + { + $this->map = $map; + } + + public function load(string $class) + { + if (!isset($this->map[$class])) { + return null; + } + + $runtimeFactory = $this->map[$class]; + + return $runtimeFactory(); + } +} diff --git a/Sources/vendor/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php b/Sources/vendor/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php new file mode 100644 index 00000000..9e5b2048 --- /dev/null +++ b/Sources/vendor/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php @@ -0,0 +1,27 @@ + + */ +interface RuntimeLoaderInterface +{ + /** + * Creates the runtime implementation of a Twig element (filter/function/test). + * + * @return object|null The runtime instance or null if the loader does not know how to create the runtime for this class + */ + public function load(string $class); +} diff --git a/Sources/vendor/twig/twig/src/Sandbox/SecurityError.php b/Sources/vendor/twig/twig/src/Sandbox/SecurityError.php new file mode 100644 index 00000000..30a404f2 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Sandbox/SecurityError.php @@ -0,0 +1,23 @@ + + */ +class SecurityError extends Error +{ +} diff --git a/Sources/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.php b/Sources/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.php new file mode 100644 index 00000000..02d30636 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.php @@ -0,0 +1,33 @@ + + */ +final class SecurityNotAllowedFilterError extends SecurityError +{ + private $filterName; + + public function __construct(string $message, string $functionName) + { + parent::__construct($message); + $this->filterName = $functionName; + } + + public function getFilterName(): string + { + return $this->filterName; + } +} diff --git a/Sources/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php b/Sources/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php new file mode 100644 index 00000000..4f76dc6e --- /dev/null +++ b/Sources/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php @@ -0,0 +1,33 @@ + + */ +final class SecurityNotAllowedFunctionError extends SecurityError +{ + private $functionName; + + public function __construct(string $message, string $functionName) + { + parent::__construct($message); + $this->functionName = $functionName; + } + + public function getFunctionName(): string + { + return $this->functionName; + } +} diff --git a/Sources/vendor/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php b/Sources/vendor/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php new file mode 100644 index 00000000..8df9d0ba --- /dev/null +++ b/Sources/vendor/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php @@ -0,0 +1,40 @@ + + */ +final class SecurityNotAllowedMethodError extends SecurityError +{ + private $className; + private $methodName; + + public function __construct(string $message, string $className, string $methodName) + { + parent::__construct($message); + $this->className = $className; + $this->methodName = $methodName; + } + + public function getClassName(): string + { + return $this->className; + } + + public function getMethodName() + { + return $this->methodName; + } +} diff --git a/Sources/vendor/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php b/Sources/vendor/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php new file mode 100644 index 00000000..42ec4f38 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php @@ -0,0 +1,40 @@ + + */ +final class SecurityNotAllowedPropertyError extends SecurityError +{ + private $className; + private $propertyName; + + public function __construct(string $message, string $className, string $propertyName) + { + parent::__construct($message); + $this->className = $className; + $this->propertyName = $propertyName; + } + + public function getClassName(): string + { + return $this->className; + } + + public function getPropertyName() + { + return $this->propertyName; + } +} diff --git a/Sources/vendor/twig/twig/src/Sandbox/SecurityNotAllowedTagError.php b/Sources/vendor/twig/twig/src/Sandbox/SecurityNotAllowedTagError.php new file mode 100644 index 00000000..4522150e --- /dev/null +++ b/Sources/vendor/twig/twig/src/Sandbox/SecurityNotAllowedTagError.php @@ -0,0 +1,33 @@ + + */ +final class SecurityNotAllowedTagError extends SecurityError +{ + private $tagName; + + public function __construct(string $message, string $tagName) + { + parent::__construct($message); + $this->tagName = $tagName; + } + + public function getTagName(): string + { + return $this->tagName; + } +} diff --git a/Sources/vendor/twig/twig/src/Sandbox/SecurityPolicy.php b/Sources/vendor/twig/twig/src/Sandbox/SecurityPolicy.php new file mode 100644 index 00000000..2fc0d013 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Sandbox/SecurityPolicy.php @@ -0,0 +1,126 @@ + + */ +final class SecurityPolicy implements SecurityPolicyInterface +{ + private $allowedTags; + private $allowedFilters; + private $allowedMethods; + private $allowedProperties; + private $allowedFunctions; + + public function __construct(array $allowedTags = [], array $allowedFilters = [], array $allowedMethods = [], array $allowedProperties = [], array $allowedFunctions = []) + { + $this->allowedTags = $allowedTags; + $this->allowedFilters = $allowedFilters; + $this->setAllowedMethods($allowedMethods); + $this->allowedProperties = $allowedProperties; + $this->allowedFunctions = $allowedFunctions; + } + + public function setAllowedTags(array $tags): void + { + $this->allowedTags = $tags; + } + + public function setAllowedFilters(array $filters): void + { + $this->allowedFilters = $filters; + } + + public function setAllowedMethods(array $methods): void + { + $this->allowedMethods = []; + foreach ($methods as $class => $m) { + $this->allowedMethods[$class] = array_map(function ($value) { return strtr($value, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'); }, \is_array($m) ? $m : [$m]); + } + } + + public function setAllowedProperties(array $properties): void + { + $this->allowedProperties = $properties; + } + + public function setAllowedFunctions(array $functions): void + { + $this->allowedFunctions = $functions; + } + + public function checkSecurity($tags, $filters, $functions): void + { + foreach ($tags as $tag) { + if (!\in_array($tag, $this->allowedTags)) { + throw new SecurityNotAllowedTagError(sprintf('Tag "%s" is not allowed.', $tag), $tag); + } + } + + foreach ($filters as $filter) { + if (!\in_array($filter, $this->allowedFilters)) { + throw new SecurityNotAllowedFilterError(sprintf('Filter "%s" is not allowed.', $filter), $filter); + } + } + + foreach ($functions as $function) { + if (!\in_array($function, $this->allowedFunctions)) { + throw new SecurityNotAllowedFunctionError(sprintf('Function "%s" is not allowed.', $function), $function); + } + } + } + + public function checkMethodAllowed($obj, $method): void + { + if ($obj instanceof Template || $obj instanceof Markup) { + return; + } + + $allowed = false; + $method = strtr($method, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'); + foreach ($this->allowedMethods as $class => $methods) { + if ($obj instanceof $class) { + $allowed = \in_array($method, $methods); + + break; + } + } + + if (!$allowed) { + $class = \get_class($obj); + throw new SecurityNotAllowedMethodError(sprintf('Calling "%s" method on a "%s" object is not allowed.', $method, $class), $class, $method); + } + } + + public function checkPropertyAllowed($obj, $property): void + { + $allowed = false; + foreach ($this->allowedProperties as $class => $properties) { + if ($obj instanceof $class) { + $allowed = \in_array($property, \is_array($properties) ? $properties : [$properties]); + + break; + } + } + + if (!$allowed) { + $class = \get_class($obj); + throw new SecurityNotAllowedPropertyError(sprintf('Calling "%s" property on a "%s" object is not allowed.', $property, $class), $class, $property); + } + } +} diff --git a/Sources/vendor/twig/twig/src/Sandbox/SecurityPolicyInterface.php b/Sources/vendor/twig/twig/src/Sandbox/SecurityPolicyInterface.php new file mode 100644 index 00000000..36471c54 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Sandbox/SecurityPolicyInterface.php @@ -0,0 +1,45 @@ + + */ +interface SecurityPolicyInterface +{ + /** + * @param string[] $tags + * @param string[] $filters + * @param string[] $functions + * + * @throws SecurityError + */ + public function checkSecurity($tags, $filters, $functions): void; + + /** + * @param object $obj + * @param string $method + * + * @throws SecurityNotAllowedMethodError + */ + public function checkMethodAllowed($obj, $method): void; + + /** + * @param object $obj + * @param string $property + * + * @throws SecurityNotAllowedPropertyError + */ + public function checkPropertyAllowed($obj, $property): void; +} diff --git a/Sources/vendor/twig/twig/src/Source.php b/Sources/vendor/twig/twig/src/Source.php new file mode 100644 index 00000000..3cb02403 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Source.php @@ -0,0 +1,51 @@ + + */ +final class Source +{ + private $code; + private $name; + private $path; + + /** + * @param string $code The template source code + * @param string $name The template logical name + * @param string $path The filesystem path of the template if any + */ + public function __construct(string $code, string $name, string $path = '') + { + $this->code = $code; + $this->name = $name; + $this->path = $path; + } + + public function getCode(): string + { + return $this->code; + } + + public function getName(): string + { + return $this->name; + } + + public function getPath(): string + { + return $this->path; + } +} diff --git a/Sources/vendor/twig/twig/src/Template.php b/Sources/vendor/twig/twig/src/Template.php new file mode 100644 index 00000000..e04bd04a --- /dev/null +++ b/Sources/vendor/twig/twig/src/Template.php @@ -0,0 +1,422 @@ +load() + * instead, which returns an instance of \Twig\TemplateWrapper. + * + * @author Fabien Potencier + * + * @internal + */ +abstract class Template +{ + public const ANY_CALL = 'any'; + public const ARRAY_CALL = 'array'; + public const METHOD_CALL = 'method'; + + protected $parent; + protected $parents = []; + protected $env; + protected $blocks = []; + protected $traits = []; + protected $extensions = []; + protected $sandbox; + + public function __construct(Environment $env) + { + $this->env = $env; + $this->extensions = $env->getExtensions(); + } + + /** + * Returns the template name. + * + * @return string The template name + */ + abstract public function getTemplateName(); + + /** + * Returns debug information about the template. + * + * @return array Debug information + */ + abstract public function getDebugInfo(); + + /** + * Returns information about the original template source code. + * + * @return Source + */ + abstract public function getSourceContext(); + + /** + * Returns the parent template. + * + * This method is for internal use only and should never be called + * directly. + * + * @return Template|TemplateWrapper|false The parent template or false if there is no parent + */ + public function getParent(array $context) + { + if (null !== $this->parent) { + return $this->parent; + } + + try { + $parent = $this->doGetParent($context); + + if (false === $parent) { + return false; + } + + if ($parent instanceof self || $parent instanceof TemplateWrapper) { + return $this->parents[$parent->getSourceContext()->getName()] = $parent; + } + + if (!isset($this->parents[$parent])) { + $this->parents[$parent] = $this->loadTemplate($parent); + } + } catch (LoaderError $e) { + $e->setSourceContext(null); + $e->guess(); + + throw $e; + } + + return $this->parents[$parent]; + } + + protected function doGetParent(array $context) + { + return false; + } + + public function isTraitable() + { + return true; + } + + /** + * Displays a parent block. + * + * This method is for internal use only and should never be called + * directly. + * + * @param string $name The block name to display from the parent + * @param array $context The context + * @param array $blocks The current set of blocks + */ + public function displayParentBlock($name, array $context, array $blocks = []) + { + if (isset($this->traits[$name])) { + $this->traits[$name][0]->displayBlock($name, $context, $blocks, false); + } elseif (false !== $parent = $this->getParent($context)) { + $parent->displayBlock($name, $context, $blocks, false); + } else { + throw new RuntimeError(sprintf('The template has no parent and no traits defining the "%s" block.', $name), -1, $this->getSourceContext()); + } + } + + /** + * Displays a block. + * + * This method is for internal use only and should never be called + * directly. + * + * @param string $name The block name to display + * @param array $context The context + * @param array $blocks The current set of blocks + * @param bool $useBlocks Whether to use the current set of blocks + */ + public function displayBlock($name, array $context, array $blocks = [], $useBlocks = true, self $templateContext = null) + { + if ($useBlocks && isset($blocks[$name])) { + $template = $blocks[$name][0]; + $block = $blocks[$name][1]; + } elseif (isset($this->blocks[$name])) { + $template = $this->blocks[$name][0]; + $block = $this->blocks[$name][1]; + } else { + $template = null; + $block = null; + } + + // avoid RCEs when sandbox is enabled + if (null !== $template && !$template instanceof self) { + throw new \LogicException('A block must be a method on a \Twig\Template instance.'); + } + + if (null !== $template) { + try { + $template->$block($context, $blocks); + } catch (Error $e) { + if (!$e->getSourceContext()) { + $e->setSourceContext($template->getSourceContext()); + } + + // this is mostly useful for \Twig\Error\LoaderError exceptions + // see \Twig\Error\LoaderError + if (-1 === $e->getTemplateLine()) { + $e->guess(); + } + + throw $e; + } catch (\Exception $e) { + $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $template->getSourceContext(), $e); + $e->guess(); + + throw $e; + } + } elseif (false !== $parent = $this->getParent($context)) { + $parent->displayBlock($name, $context, array_merge($this->blocks, $blocks), false, $templateContext ?? $this); + } elseif (isset($blocks[$name])) { + throw new RuntimeError(sprintf('Block "%s" should not call parent() in "%s" as the block does not exist in the parent template "%s".', $name, $blocks[$name][0]->getTemplateName(), $this->getTemplateName()), -1, $blocks[$name][0]->getSourceContext()); + } else { + throw new RuntimeError(sprintf('Block "%s" on template "%s" does not exist.', $name, $this->getTemplateName()), -1, ($templateContext ?? $this)->getSourceContext()); + } + } + + /** + * Renders a parent block. + * + * This method is for internal use only and should never be called + * directly. + * + * @param string $name The block name to render from the parent + * @param array $context The context + * @param array $blocks The current set of blocks + * + * @return string The rendered block + */ + public function renderParentBlock($name, array $context, array $blocks = []) + { + if ($this->env->isDebug()) { + ob_start(); + } else { + ob_start(function () { return ''; }); + } + $this->displayParentBlock($name, $context, $blocks); + + return ob_get_clean(); + } + + /** + * Renders a block. + * + * This method is for internal use only and should never be called + * directly. + * + * @param string $name The block name to render + * @param array $context The context + * @param array $blocks The current set of blocks + * @param bool $useBlocks Whether to use the current set of blocks + * + * @return string The rendered block + */ + public function renderBlock($name, array $context, array $blocks = [], $useBlocks = true) + { + if ($this->env->isDebug()) { + ob_start(); + } else { + ob_start(function () { return ''; }); + } + $this->displayBlock($name, $context, $blocks, $useBlocks); + + return ob_get_clean(); + } + + /** + * Returns whether a block exists or not in the current context of the template. + * + * This method checks blocks defined in the current template + * or defined in "used" traits or defined in parent templates. + * + * @param string $name The block name + * @param array $context The context + * @param array $blocks The current set of blocks + * + * @return bool true if the block exists, false otherwise + */ + public function hasBlock($name, array $context, array $blocks = []) + { + if (isset($blocks[$name])) { + return $blocks[$name][0] instanceof self; + } + + if (isset($this->blocks[$name])) { + return true; + } + + if (false !== $parent = $this->getParent($context)) { + return $parent->hasBlock($name, $context); + } + + return false; + } + + /** + * Returns all block names in the current context of the template. + * + * This method checks blocks defined in the current template + * or defined in "used" traits or defined in parent templates. + * + * @param array $context The context + * @param array $blocks The current set of blocks + * + * @return array An array of block names + */ + public function getBlockNames(array $context, array $blocks = []) + { + $names = array_merge(array_keys($blocks), array_keys($this->blocks)); + + if (false !== $parent = $this->getParent($context)) { + $names = array_merge($names, $parent->getBlockNames($context)); + } + + return array_unique($names); + } + + /** + * @return Template|TemplateWrapper + */ + protected function loadTemplate($template, $templateName = null, $line = null, $index = null) + { + try { + if (\is_array($template)) { + return $this->env->resolveTemplate($template); + } + + if ($template instanceof self || $template instanceof TemplateWrapper) { + return $template; + } + + if ($template === $this->getTemplateName()) { + $class = static::class; + if (false !== $pos = strrpos($class, '___', -1)) { + $class = substr($class, 0, $pos); + } + } else { + $class = $this->env->getTemplateClass($template); + } + + return $this->env->loadTemplate($class, $template, $index); + } catch (Error $e) { + if (!$e->getSourceContext()) { + $e->setSourceContext($templateName ? new Source('', $templateName) : $this->getSourceContext()); + } + + if ($e->getTemplateLine() > 0) { + throw $e; + } + + if (!$line) { + $e->guess(); + } else { + $e->setTemplateLine($line); + } + + throw $e; + } + } + + /** + * @internal + * + * @return Template + */ + public function unwrap() + { + return $this; + } + + /** + * Returns all blocks. + * + * This method is for internal use only and should never be called + * directly. + * + * @return array An array of blocks + */ + public function getBlocks() + { + return $this->blocks; + } + + public function display(array $context, array $blocks = []) + { + $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks)); + } + + public function render(array $context) + { + $level = ob_get_level(); + if ($this->env->isDebug()) { + ob_start(); + } else { + ob_start(function () { return ''; }); + } + try { + $this->display($context); + } catch (\Throwable $e) { + while (ob_get_level() > $level) { + ob_end_clean(); + } + + throw $e; + } + + return ob_get_clean(); + } + + protected function displayWithErrorHandling(array $context, array $blocks = []) + { + try { + $this->doDisplay($context, $blocks); + } catch (Error $e) { + if (!$e->getSourceContext()) { + $e->setSourceContext($this->getSourceContext()); + } + + // this is mostly useful for \Twig\Error\LoaderError exceptions + // see \Twig\Error\LoaderError + if (-1 === $e->getTemplateLine()) { + $e->guess(); + } + + throw $e; + } catch (\Exception $e) { + $e = new RuntimeError(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getSourceContext(), $e); + $e->guess(); + + throw $e; + } + } + + /** + * Auto-generated method to display the template with the given context. + * + * @param array $context An array of parameters to pass to the template + * @param array $blocks An array of blocks to pass to the template + */ + abstract protected function doDisplay(array $context, array $blocks = []); +} diff --git a/Sources/vendor/twig/twig/src/TemplateWrapper.php b/Sources/vendor/twig/twig/src/TemplateWrapper.php new file mode 100644 index 00000000..c9c6b07c --- /dev/null +++ b/Sources/vendor/twig/twig/src/TemplateWrapper.php @@ -0,0 +1,109 @@ + + */ +final class TemplateWrapper +{ + private $env; + private $template; + + /** + * This method is for internal use only and should never be called + * directly (use Twig\Environment::load() instead). + * + * @internal + */ + public function __construct(Environment $env, Template $template) + { + $this->env = $env; + $this->template = $template; + } + + public function render(array $context = []): string + { + // using func_get_args() allows to not expose the blocks argument + // as it should only be used by internal code + return $this->template->render($context, \func_get_args()[1] ?? []); + } + + public function display(array $context = []) + { + // using func_get_args() allows to not expose the blocks argument + // as it should only be used by internal code + $this->template->display($context, \func_get_args()[1] ?? []); + } + + public function hasBlock(string $name, array $context = []): bool + { + return $this->template->hasBlock($name, $context); + } + + /** + * @return string[] An array of defined template block names + */ + public function getBlockNames(array $context = []): array + { + return $this->template->getBlockNames($context); + } + + public function renderBlock(string $name, array $context = []): string + { + $context = $this->env->mergeGlobals($context); + $level = ob_get_level(); + if ($this->env->isDebug()) { + ob_start(); + } else { + ob_start(function () { return ''; }); + } + try { + $this->template->displayBlock($name, $context); + } catch (\Throwable $e) { + while (ob_get_level() > $level) { + ob_end_clean(); + } + + throw $e; + } + + return ob_get_clean(); + } + + public function displayBlock(string $name, array $context = []) + { + $this->template->displayBlock($name, $this->env->mergeGlobals($context)); + } + + public function getSourceContext(): Source + { + return $this->template->getSourceContext(); + } + + public function getTemplateName(): string + { + return $this->template->getTemplateName(); + } + + /** + * @internal + * + * @return Template + */ + public function unwrap() + { + return $this->template; + } +} diff --git a/Sources/vendor/twig/twig/src/Test/IntegrationTestCase.php b/Sources/vendor/twig/twig/src/Test/IntegrationTestCase.php new file mode 100644 index 00000000..307302bb --- /dev/null +++ b/Sources/vendor/twig/twig/src/Test/IntegrationTestCase.php @@ -0,0 +1,265 @@ + + * @author Karma Dordrak + */ +abstract class IntegrationTestCase extends TestCase +{ + /** + * @return string + */ + abstract protected function getFixturesDir(); + + /** + * @return RuntimeLoaderInterface[] + */ + protected function getRuntimeLoaders() + { + return []; + } + + /** + * @return ExtensionInterface[] + */ + protected function getExtensions() + { + return []; + } + + /** + * @return TwigFilter[] + */ + protected function getTwigFilters() + { + return []; + } + + /** + * @return TwigFunction[] + */ + protected function getTwigFunctions() + { + return []; + } + + /** + * @return TwigTest[] + */ + protected function getTwigTests() + { + return []; + } + + /** + * @dataProvider getTests + */ + public function testIntegration($file, $message, $condition, $templates, $exception, $outputs, $deprecation = '') + { + $this->doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs, $deprecation); + } + + /** + * @dataProvider getLegacyTests + * @group legacy + */ + public function testLegacyIntegration($file, $message, $condition, $templates, $exception, $outputs, $deprecation = '') + { + $this->doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs, $deprecation); + } + + public function getTests($name, $legacyTests = false) + { + $fixturesDir = realpath($this->getFixturesDir()); + $tests = []; + + foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($fixturesDir), \RecursiveIteratorIterator::LEAVES_ONLY) as $file) { + if (!preg_match('/\.test$/', $file)) { + continue; + } + + if ($legacyTests xor false !== strpos($file->getRealpath(), '.legacy.test')) { + continue; + } + + $test = file_get_contents($file->getRealpath()); + + if (preg_match('/--TEST--\s*(.*?)\s*(?:--CONDITION--\s*(.*))?\s*(?:--DEPRECATION--\s*(.*?))?\s*((?:--TEMPLATE(?:\(.*?\))?--(?:.*?))+)\s*(?:--DATA--\s*(.*))?\s*--EXCEPTION--\s*(.*)/sx', $test, $match)) { + $message = $match[1]; + $condition = $match[2]; + $deprecation = $match[3]; + $templates = self::parseTemplates($match[4]); + $exception = $match[6]; + $outputs = [[null, $match[5], null, '']]; + } elseif (preg_match('/--TEST--\s*(.*?)\s*(?:--CONDITION--\s*(.*))?\s*(?:--DEPRECATION--\s*(.*?))?\s*((?:--TEMPLATE(?:\(.*?\))?--(?:.*?))+)--DATA--.*?--EXPECT--.*/s', $test, $match)) { + $message = $match[1]; + $condition = $match[2]; + $deprecation = $match[3]; + $templates = self::parseTemplates($match[4]); + $exception = false; + preg_match_all('/--DATA--(.*?)(?:--CONFIG--(.*?))?--EXPECT--(.*?)(?=\-\-DATA\-\-|$)/s', $test, $outputs, \PREG_SET_ORDER); + } else { + throw new \InvalidArgumentException(sprintf('Test "%s" is not valid.', str_replace($fixturesDir.'/', '', $file))); + } + + $tests[] = [str_replace($fixturesDir.'/', '', $file), $message, $condition, $templates, $exception, $outputs, $deprecation]; + } + + if ($legacyTests && empty($tests)) { + // add a dummy test to avoid a PHPUnit message + return [['not', '-', '', [], '', []]]; + } + + return $tests; + } + + public function getLegacyTests() + { + return $this->getTests('testLegacyIntegration', true); + } + + protected function doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs, $deprecation = '') + { + if (!$outputs) { + $this->markTestSkipped('no tests to run'); + } + + if ($condition) { + eval('$ret = '.$condition.';'); + if (!$ret) { + $this->markTestSkipped($condition); + } + } + + $loader = new ArrayLoader($templates); + + foreach ($outputs as $i => $match) { + $config = array_merge([ + 'cache' => false, + 'strict_variables' => true, + ], $match[2] ? eval($match[2].';') : []); + $twig = new Environment($loader, $config); + $twig->addGlobal('global', 'global'); + foreach ($this->getRuntimeLoaders() as $runtimeLoader) { + $twig->addRuntimeLoader($runtimeLoader); + } + + foreach ($this->getExtensions() as $extension) { + $twig->addExtension($extension); + } + + foreach ($this->getTwigFilters() as $filter) { + $twig->addFilter($filter); + } + + foreach ($this->getTwigTests() as $test) { + $twig->addTest($test); + } + + foreach ($this->getTwigFunctions() as $function) { + $twig->addFunction($function); + } + + // avoid using the same PHP class name for different cases + $p = new \ReflectionProperty($twig, 'templateClassPrefix'); + $p->setAccessible(true); + $p->setValue($twig, '__TwigTemplate_'.hash(\PHP_VERSION_ID < 80100 ? 'sha256' : 'xxh128', uniqid(mt_rand(), true), false).'_'); + + $deprecations = []; + try { + $prevHandler = set_error_handler(function ($type, $msg, $file, $line, $context = []) use (&$deprecations, &$prevHandler) { + if (\E_USER_DEPRECATED === $type) { + $deprecations[] = $msg; + + return true; + } + + return $prevHandler ? $prevHandler($type, $msg, $file, $line, $context) : false; + }); + + $template = $twig->load('index.twig'); + } catch (\Exception $e) { + if (false !== $exception) { + $message = $e->getMessage(); + $this->assertSame(trim($exception), trim(sprintf('%s: %s', \get_class($e), $message))); + $last = substr($message, \strlen($message) - 1); + $this->assertTrue('.' === $last || '?' === $last, 'Exception message must end with a dot or a question mark.'); + + return; + } + + throw new Error(sprintf('%s: %s', \get_class($e), $e->getMessage()), -1, null, $e); + } finally { + restore_error_handler(); + } + + $this->assertSame($deprecation, implode("\n", $deprecations)); + + try { + $output = trim($template->render(eval($match[1].';')), "\n "); + } catch (\Exception $e) { + if (false !== $exception) { + $this->assertSame(trim($exception), trim(sprintf('%s: %s', \get_class($e), $e->getMessage()))); + + return; + } + + $e = new Error(sprintf('%s: %s', \get_class($e), $e->getMessage()), -1, null, $e); + + $output = trim(sprintf('%s: %s', \get_class($e), $e->getMessage())); + } + + if (false !== $exception) { + list($class) = explode(':', $exception); + $constraintClass = class_exists('PHPUnit\Framework\Constraint\Exception') ? 'PHPUnit\Framework\Constraint\Exception' : 'PHPUnit_Framework_Constraint_Exception'; + $this->assertThat(null, new $constraintClass($class)); + } + + $expected = trim($match[3], "\n "); + + if ($expected !== $output) { + printf("Compiled templates that failed on case %d:\n", $i + 1); + + foreach (array_keys($templates) as $name) { + echo "Template: $name\n"; + echo $twig->compile($twig->parse($twig->tokenize($twig->getLoader()->getSourceContext($name)))); + } + } + $this->assertEquals($expected, $output, $message.' (in '.$file.')'); + } + } + + protected static function parseTemplates($test) + { + $templates = []; + preg_match_all('/--TEMPLATE(?:\((.*?)\))?--(.*?)(?=\-\-TEMPLATE|$)/s', $test, $matches, \PREG_SET_ORDER); + foreach ($matches as $match) { + $templates[($match[1] ?: 'index.twig')] = $match[2]; + } + + return $templates; + } +} diff --git a/Sources/vendor/twig/twig/src/Test/NodeTestCase.php b/Sources/vendor/twig/twig/src/Test/NodeTestCase.php new file mode 100644 index 00000000..3b8b2c86 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Test/NodeTestCase.php @@ -0,0 +1,65 @@ +assertNodeCompilation($source, $node, $environment, $isPattern); + } + + public function assertNodeCompilation($source, Node $node, Environment $environment = null, $isPattern = false) + { + $compiler = $this->getCompiler($environment); + $compiler->compile($node); + + if ($isPattern) { + $this->assertStringMatchesFormat($source, trim($compiler->getSource())); + } else { + $this->assertEquals($source, trim($compiler->getSource())); + } + } + + protected function getCompiler(Environment $environment = null) + { + return new Compiler(null === $environment ? $this->getEnvironment() : $environment); + } + + protected function getEnvironment() + { + return new Environment(new ArrayLoader([])); + } + + protected function getVariableGetter($name, $line = false) + { + $line = $line > 0 ? "// line $line\n" : ''; + + return sprintf('%s($context["%s"] ?? null)', $line, $name); + } + + protected function getAttributeGetter() + { + return 'twig_get_attribute($this->env, $this->source, '; + } +} diff --git a/Sources/vendor/twig/twig/src/Token.php b/Sources/vendor/twig/twig/src/Token.php new file mode 100644 index 00000000..fd1a89d2 --- /dev/null +++ b/Sources/vendor/twig/twig/src/Token.php @@ -0,0 +1,184 @@ + + */ +final class Token +{ + private $value; + private $type; + private $lineno; + + public const EOF_TYPE = -1; + public const TEXT_TYPE = 0; + public const BLOCK_START_TYPE = 1; + public const VAR_START_TYPE = 2; + public const BLOCK_END_TYPE = 3; + public const VAR_END_TYPE = 4; + public const NAME_TYPE = 5; + public const NUMBER_TYPE = 6; + public const STRING_TYPE = 7; + public const OPERATOR_TYPE = 8; + public const PUNCTUATION_TYPE = 9; + public const INTERPOLATION_START_TYPE = 10; + public const INTERPOLATION_END_TYPE = 11; + public const ARROW_TYPE = 12; + public const SPREAD_TYPE = 13; + + public function __construct(int $type, $value, int $lineno) + { + $this->type = $type; + $this->value = $value; + $this->lineno = $lineno; + } + + public function __toString() + { + return sprintf('%s(%s)', self::typeToString($this->type, true), $this->value); + } + + /** + * Tests the current token for a type and/or a value. + * + * Parameters may be: + * * just type + * * type and value (or array of possible values) + * * just value (or array of possible values) (NAME_TYPE is used as type) + * + * @param array|string|int $type The type to test + * @param array|string|null $values The token value + */ + public function test($type, $values = null): bool + { + if (null === $values && !\is_int($type)) { + $values = $type; + $type = self::NAME_TYPE; + } + + return ($this->type === $type) && ( + null === $values || + (\is_array($values) && \in_array($this->value, $values)) || + $this->value == $values + ); + } + + public function getLine(): int + { + return $this->lineno; + } + + public function getType(): int + { + return $this->type; + } + + public function getValue() + { + return $this->value; + } + + public static function typeToString(int $type, bool $short = false): string + { + switch ($type) { + case self::EOF_TYPE: + $name = 'EOF_TYPE'; + break; + case self::TEXT_TYPE: + $name = 'TEXT_TYPE'; + break; + case self::BLOCK_START_TYPE: + $name = 'BLOCK_START_TYPE'; + break; + case self::VAR_START_TYPE: + $name = 'VAR_START_TYPE'; + break; + case self::BLOCK_END_TYPE: + $name = 'BLOCK_END_TYPE'; + break; + case self::VAR_END_TYPE: + $name = 'VAR_END_TYPE'; + break; + case self::NAME_TYPE: + $name = 'NAME_TYPE'; + break; + case self::NUMBER_TYPE: + $name = 'NUMBER_TYPE'; + break; + case self::STRING_TYPE: + $name = 'STRING_TYPE'; + break; + case self::OPERATOR_TYPE: + $name = 'OPERATOR_TYPE'; + break; + case self::PUNCTUATION_TYPE: + $name = 'PUNCTUATION_TYPE'; + break; + case self::INTERPOLATION_START_TYPE: + $name = 'INTERPOLATION_START_TYPE'; + break; + case self::INTERPOLATION_END_TYPE: + $name = 'INTERPOLATION_END_TYPE'; + break; + case self::ARROW_TYPE: + $name = 'ARROW_TYPE'; + break; + case self::SPREAD_TYPE: + $name = 'SPREAD_TYPE'; + break; + default: + throw new \LogicException(sprintf('Token of type "%s" does not exist.', $type)); + } + + return $short ? $name : 'Twig\Token::'.$name; + } + + public static function typeToEnglish(int $type): string + { + switch ($type) { + case self::EOF_TYPE: + return 'end of template'; + case self::TEXT_TYPE: + return 'text'; + case self::BLOCK_START_TYPE: + return 'begin of statement block'; + case self::VAR_START_TYPE: + return 'begin of print statement'; + case self::BLOCK_END_TYPE: + return 'end of statement block'; + case self::VAR_END_TYPE: + return 'end of print statement'; + case self::NAME_TYPE: + return 'name'; + case self::NUMBER_TYPE: + return 'number'; + case self::STRING_TYPE: + return 'string'; + case self::OPERATOR_TYPE: + return 'operator'; + case self::PUNCTUATION_TYPE: + return 'punctuation'; + case self::INTERPOLATION_START_TYPE: + return 'begin of string interpolation'; + case self::INTERPOLATION_END_TYPE: + return 'end of string interpolation'; + case self::ARROW_TYPE: + return 'arrow function'; + case self::SPREAD_TYPE: + return 'spread operator'; + default: + throw new \LogicException(sprintf('Token of type "%s" does not exist.', $type)); + } + } +} diff --git a/Sources/vendor/twig/twig/src/TokenParser/AbstractTokenParser.php b/Sources/vendor/twig/twig/src/TokenParser/AbstractTokenParser.php new file mode 100644 index 00000000..720ea676 --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenParser/AbstractTokenParser.php @@ -0,0 +1,32 @@ + + */ +abstract class AbstractTokenParser implements TokenParserInterface +{ + /** + * @var Parser + */ + protected $parser; + + public function setParser(Parser $parser): void + { + $this->parser = $parser; + } +} diff --git a/Sources/vendor/twig/twig/src/TokenParser/ApplyTokenParser.php b/Sources/vendor/twig/twig/src/TokenParser/ApplyTokenParser.php new file mode 100644 index 00000000..4dbf3040 --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenParser/ApplyTokenParser.php @@ -0,0 +1,60 @@ +getLine(); + $name = $this->parser->getVarName(); + + $ref = new TempNameExpression($name, $lineno); + $ref->setAttribute('always_defined', true); + + $filter = $this->parser->getExpressionParser()->parseFilterExpressionRaw($ref, $this->getTag()); + + $this->parser->getStream()->expect(Token::BLOCK_END_TYPE); + $body = $this->parser->subparse([$this, 'decideApplyEnd'], true); + $this->parser->getStream()->expect(Token::BLOCK_END_TYPE); + + return new Node([ + new SetNode(true, $ref, $body, $lineno, $this->getTag()), + new PrintNode($filter, $lineno, $this->getTag()), + ]); + } + + public function decideApplyEnd(Token $token): bool + { + return $token->test('endapply'); + } + + public function getTag(): string + { + return 'apply'; + } +} diff --git a/Sources/vendor/twig/twig/src/TokenParser/AutoEscapeTokenParser.php b/Sources/vendor/twig/twig/src/TokenParser/AutoEscapeTokenParser.php new file mode 100644 index 00000000..b674bea4 --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenParser/AutoEscapeTokenParser.php @@ -0,0 +1,58 @@ +getLine(); + $stream = $this->parser->getStream(); + + if ($stream->test(/* Token::BLOCK_END_TYPE */ 3)) { + $value = 'html'; + } else { + $expr = $this->parser->getExpressionParser()->parseExpression(); + if (!$expr instanceof ConstantExpression) { + throw new SyntaxError('An escaping strategy must be a string or false.', $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + $value = $expr->getAttribute('value'); + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $body = $this->parser->subparse([$this, 'decideBlockEnd'], true); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new AutoEscapeNode($value, $body, $lineno, $this->getTag()); + } + + public function decideBlockEnd(Token $token): bool + { + return $token->test('endautoescape'); + } + + public function getTag(): string + { + return 'autoescape'; + } +} diff --git a/Sources/vendor/twig/twig/src/TokenParser/BlockTokenParser.php b/Sources/vendor/twig/twig/src/TokenParser/BlockTokenParser.php new file mode 100644 index 00000000..5878131b --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenParser/BlockTokenParser.php @@ -0,0 +1,78 @@ + + * {% block title %}{% endblock %} - My Webpage + * {% endblock %} + * + * @internal + */ +final class BlockTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $lineno = $token->getLine(); + $stream = $this->parser->getStream(); + $name = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + if ($this->parser->hasBlock($name)) { + throw new SyntaxError(sprintf("The block '%s' has already been defined line %d.", $name, $this->parser->getBlock($name)->getTemplateLine()), $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + $this->parser->setBlock($name, $block = new BlockNode($name, new Node([]), $lineno)); + $this->parser->pushLocalScope(); + $this->parser->pushBlockStack($name); + + if ($stream->nextIf(/* Token::BLOCK_END_TYPE */ 3)) { + $body = $this->parser->subparse([$this, 'decideBlockEnd'], true); + if ($token = $stream->nextIf(/* Token::NAME_TYPE */ 5)) { + $value = $token->getValue(); + + if ($value != $name) { + throw new SyntaxError(sprintf('Expected endblock for block "%s" (but "%s" given).', $name, $value), $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + } + } else { + $body = new Node([ + new PrintNode($this->parser->getExpressionParser()->parseExpression(), $lineno), + ]); + } + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + $block->setNode('body', $body); + $this->parser->popBlockStack(); + $this->parser->popLocalScope(); + + return new BlockReferenceNode($name, $lineno, $this->getTag()); + } + + public function decideBlockEnd(Token $token): bool + { + return $token->test('endblock'); + } + + public function getTag(): string + { + return 'block'; + } +} diff --git a/Sources/vendor/twig/twig/src/TokenParser/DeprecatedTokenParser.php b/Sources/vendor/twig/twig/src/TokenParser/DeprecatedTokenParser.php new file mode 100644 index 00000000..31416c79 --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenParser/DeprecatedTokenParser.php @@ -0,0 +1,43 @@ + + * + * @internal + */ +final class DeprecatedTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $expr = $this->parser->getExpressionParser()->parseExpression(); + + $this->parser->getStream()->expect(Token::BLOCK_END_TYPE); + + return new DeprecatedNode($expr, $token->getLine(), $this->getTag()); + } + + public function getTag(): string + { + return 'deprecated'; + } +} diff --git a/Sources/vendor/twig/twig/src/TokenParser/DoTokenParser.php b/Sources/vendor/twig/twig/src/TokenParser/DoTokenParser.php new file mode 100644 index 00000000..32c8f12f --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenParser/DoTokenParser.php @@ -0,0 +1,38 @@ +parser->getExpressionParser()->parseExpression(); + + $this->parser->getStream()->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new DoNode($expr, $token->getLine(), $this->getTag()); + } + + public function getTag(): string + { + return 'do'; + } +} diff --git a/Sources/vendor/twig/twig/src/TokenParser/EmbedTokenParser.php b/Sources/vendor/twig/twig/src/TokenParser/EmbedTokenParser.php new file mode 100644 index 00000000..64b4f296 --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenParser/EmbedTokenParser.php @@ -0,0 +1,73 @@ +parser->getStream(); + + $parent = $this->parser->getExpressionParser()->parseExpression(); + + list($variables, $only, $ignoreMissing) = $this->parseArguments(); + + $parentToken = $fakeParentToken = new Token(/* Token::STRING_TYPE */ 7, '__parent__', $token->getLine()); + if ($parent instanceof ConstantExpression) { + $parentToken = new Token(/* Token::STRING_TYPE */ 7, $parent->getAttribute('value'), $token->getLine()); + } elseif ($parent instanceof NameExpression) { + $parentToken = new Token(/* Token::NAME_TYPE */ 5, $parent->getAttribute('name'), $token->getLine()); + } + + // inject a fake parent to make the parent() function work + $stream->injectTokens([ + new Token(/* Token::BLOCK_START_TYPE */ 1, '', $token->getLine()), + new Token(/* Token::NAME_TYPE */ 5, 'extends', $token->getLine()), + $parentToken, + new Token(/* Token::BLOCK_END_TYPE */ 3, '', $token->getLine()), + ]); + + $module = $this->parser->parse($stream, [$this, 'decideBlockEnd'], true); + + // override the parent with the correct one + if ($fakeParentToken === $parentToken) { + $module->setNode('parent', $parent); + } + + $this->parser->embedTemplate($module); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new EmbedNode($module->getTemplateName(), $module->getAttribute('index'), $variables, $only, $ignoreMissing, $token->getLine(), $this->getTag()); + } + + public function decideBlockEnd(Token $token): bool + { + return $token->test('endembed'); + } + + public function getTag(): string + { + return 'embed'; + } +} diff --git a/Sources/vendor/twig/twig/src/TokenParser/ExtendsTokenParser.php b/Sources/vendor/twig/twig/src/TokenParser/ExtendsTokenParser.php new file mode 100644 index 00000000..0ca46dd2 --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenParser/ExtendsTokenParser.php @@ -0,0 +1,52 @@ +parser->getStream(); + + if ($this->parser->peekBlockStack()) { + throw new SyntaxError('Cannot use "extend" in a block.', $token->getLine(), $stream->getSourceContext()); + } elseif (!$this->parser->isMainScope()) { + throw new SyntaxError('Cannot use "extend" in a macro.', $token->getLine(), $stream->getSourceContext()); + } + + if (null !== $this->parser->getParent()) { + throw new SyntaxError('Multiple extends tags are forbidden.', $token->getLine(), $stream->getSourceContext()); + } + $this->parser->setParent($this->parser->getExpressionParser()->parseExpression()); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new Node(); + } + + public function getTag(): string + { + return 'extends'; + } +} diff --git a/Sources/vendor/twig/twig/src/TokenParser/FlushTokenParser.php b/Sources/vendor/twig/twig/src/TokenParser/FlushTokenParser.php new file mode 100644 index 00000000..02c74aa1 --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenParser/FlushTokenParser.php @@ -0,0 +1,38 @@ +parser->getStream()->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new FlushNode($token->getLine(), $this->getTag()); + } + + public function getTag(): string + { + return 'flush'; + } +} diff --git a/Sources/vendor/twig/twig/src/TokenParser/ForTokenParser.php b/Sources/vendor/twig/twig/src/TokenParser/ForTokenParser.php new file mode 100644 index 00000000..bac8ba2d --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenParser/ForTokenParser.php @@ -0,0 +1,78 @@ + + * {% for user in users %} + *
  • {{ user.username|e }}
  • + * {% endfor %} + * + * + * @internal + */ +final class ForTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $lineno = $token->getLine(); + $stream = $this->parser->getStream(); + $targets = $this->parser->getExpressionParser()->parseAssignmentExpression(); + $stream->expect(/* Token::OPERATOR_TYPE */ 8, 'in'); + $seq = $this->parser->getExpressionParser()->parseExpression(); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $body = $this->parser->subparse([$this, 'decideForFork']); + if ('else' == $stream->next()->getValue()) { + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $else = $this->parser->subparse([$this, 'decideForEnd'], true); + } else { + $else = null; + } + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + if (\count($targets) > 1) { + $keyTarget = $targets->getNode(0); + $keyTarget = new AssignNameExpression($keyTarget->getAttribute('name'), $keyTarget->getTemplateLine()); + $valueTarget = $targets->getNode(1); + } else { + $keyTarget = new AssignNameExpression('_key', $lineno); + $valueTarget = $targets->getNode(0); + } + $valueTarget = new AssignNameExpression($valueTarget->getAttribute('name'), $valueTarget->getTemplateLine()); + + return new ForNode($keyTarget, $valueTarget, $seq, null, $body, $else, $lineno, $this->getTag()); + } + + public function decideForFork(Token $token): bool + { + return $token->test(['else', 'endfor']); + } + + public function decideForEnd(Token $token): bool + { + return $token->test('endfor'); + } + + public function getTag(): string + { + return 'for'; + } +} diff --git a/Sources/vendor/twig/twig/src/TokenParser/FromTokenParser.php b/Sources/vendor/twig/twig/src/TokenParser/FromTokenParser.php new file mode 100644 index 00000000..35098c26 --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenParser/FromTokenParser.php @@ -0,0 +1,66 @@ +parser->getExpressionParser()->parseExpression(); + $stream = $this->parser->getStream(); + $stream->expect(/* Token::NAME_TYPE */ 5, 'import'); + + $targets = []; + do { + $name = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + + $alias = $name; + if ($stream->nextIf('as')) { + $alias = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + } + + $targets[$name] = $alias; + + if (!$stream->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ',')) { + break; + } + } while (true); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + $var = new AssignNameExpression($this->parser->getVarName(), $token->getLine()); + $node = new ImportNode($macro, $var, $token->getLine(), $this->getTag(), $this->parser->isMainScope()); + + foreach ($targets as $name => $alias) { + $this->parser->addImportedSymbol('function', $alias, 'macro_'.$name, $var); + } + + return $node; + } + + public function getTag(): string + { + return 'from'; + } +} diff --git a/Sources/vendor/twig/twig/src/TokenParser/IfTokenParser.php b/Sources/vendor/twig/twig/src/TokenParser/IfTokenParser.php new file mode 100644 index 00000000..c0fe6df0 --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenParser/IfTokenParser.php @@ -0,0 +1,89 @@ + + * {% for user in users %} + *
  • {{ user.username|e }}
  • + * {% endfor %} + * + * {% endif %} + * + * @internal + */ +final class IfTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $lineno = $token->getLine(); + $expr = $this->parser->getExpressionParser()->parseExpression(); + $stream = $this->parser->getStream(); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $body = $this->parser->subparse([$this, 'decideIfFork']); + $tests = [$expr, $body]; + $else = null; + + $end = false; + while (!$end) { + switch ($stream->next()->getValue()) { + case 'else': + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $else = $this->parser->subparse([$this, 'decideIfEnd']); + break; + + case 'elseif': + $expr = $this->parser->getExpressionParser()->parseExpression(); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $body = $this->parser->subparse([$this, 'decideIfFork']); + $tests[] = $expr; + $tests[] = $body; + break; + + case 'endif': + $end = true; + break; + + default: + throw new SyntaxError(sprintf('Unexpected end of template. Twig was looking for the following tags "else", "elseif", or "endif" to close the "if" block started at line %d).', $lineno), $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new IfNode(new Node($tests), $else, $lineno, $this->getTag()); + } + + public function decideIfFork(Token $token): bool + { + return $token->test(['elseif', 'else', 'endif']); + } + + public function decideIfEnd(Token $token): bool + { + return $token->test(['endif']); + } + + public function getTag(): string + { + return 'if'; + } +} diff --git a/Sources/vendor/twig/twig/src/TokenParser/ImportTokenParser.php b/Sources/vendor/twig/twig/src/TokenParser/ImportTokenParser.php new file mode 100644 index 00000000..44cb4dad --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenParser/ImportTokenParser.php @@ -0,0 +1,44 @@ +parser->getExpressionParser()->parseExpression(); + $this->parser->getStream()->expect(/* Token::NAME_TYPE */ 5, 'as'); + $var = new AssignNameExpression($this->parser->getStream()->expect(/* Token::NAME_TYPE */ 5)->getValue(), $token->getLine()); + $this->parser->getStream()->expect(/* Token::BLOCK_END_TYPE */ 3); + + $this->parser->addImportedSymbol('template', $var->getAttribute('name')); + + return new ImportNode($macro, $var, $token->getLine(), $this->getTag(), $this->parser->isMainScope()); + } + + public function getTag(): string + { + return 'import'; + } +} diff --git a/Sources/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php b/Sources/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php new file mode 100644 index 00000000..28beb8ae --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php @@ -0,0 +1,69 @@ +parser->getExpressionParser()->parseExpression(); + + list($variables, $only, $ignoreMissing) = $this->parseArguments(); + + return new IncludeNode($expr, $variables, $only, $ignoreMissing, $token->getLine(), $this->getTag()); + } + + protected function parseArguments() + { + $stream = $this->parser->getStream(); + + $ignoreMissing = false; + if ($stream->nextIf(/* Token::NAME_TYPE */ 5, 'ignore')) { + $stream->expect(/* Token::NAME_TYPE */ 5, 'missing'); + + $ignoreMissing = true; + } + + $variables = null; + if ($stream->nextIf(/* Token::NAME_TYPE */ 5, 'with')) { + $variables = $this->parser->getExpressionParser()->parseExpression(); + } + + $only = false; + if ($stream->nextIf(/* Token::NAME_TYPE */ 5, 'only')) { + $only = true; + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + return [$variables, $only, $ignoreMissing]; + } + + public function getTag(): string + { + return 'include'; + } +} diff --git a/Sources/vendor/twig/twig/src/TokenParser/MacroTokenParser.php b/Sources/vendor/twig/twig/src/TokenParser/MacroTokenParser.php new file mode 100644 index 00000000..f584927e --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenParser/MacroTokenParser.php @@ -0,0 +1,66 @@ + + * {% endmacro %} + * + * @internal + */ +final class MacroTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $lineno = $token->getLine(); + $stream = $this->parser->getStream(); + $name = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + + $arguments = $this->parser->getExpressionParser()->parseArguments(true, true); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $this->parser->pushLocalScope(); + $body = $this->parser->subparse([$this, 'decideBlockEnd'], true); + if ($token = $stream->nextIf(/* Token::NAME_TYPE */ 5)) { + $value = $token->getValue(); + + if ($value != $name) { + throw new SyntaxError(sprintf('Expected endmacro for macro "%s" (but "%s" given).', $name, $value), $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + } + $this->parser->popLocalScope(); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + $this->parser->setMacro($name, new MacroNode($name, new BodyNode([$body]), $arguments, $lineno, $this->getTag())); + + return new Node(); + } + + public function decideBlockEnd(Token $token): bool + { + return $token->test('endmacro'); + } + + public function getTag(): string + { + return 'macro'; + } +} diff --git a/Sources/vendor/twig/twig/src/TokenParser/SandboxTokenParser.php b/Sources/vendor/twig/twig/src/TokenParser/SandboxTokenParser.php new file mode 100644 index 00000000..c919556e --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenParser/SandboxTokenParser.php @@ -0,0 +1,66 @@ +parser->getStream(); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $body = $this->parser->subparse([$this, 'decideBlockEnd'], true); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + // in a sandbox tag, only include tags are allowed + if (!$body instanceof IncludeNode) { + foreach ($body as $node) { + if ($node instanceof TextNode && ctype_space($node->getAttribute('data'))) { + continue; + } + + if (!$node instanceof IncludeNode) { + throw new SyntaxError('Only "include" tags are allowed within a "sandbox" section.', $node->getTemplateLine(), $stream->getSourceContext()); + } + } + } + + return new SandboxNode($body, $token->getLine(), $this->getTag()); + } + + public function decideBlockEnd(Token $token): bool + { + return $token->test('endsandbox'); + } + + public function getTag(): string + { + return 'sandbox'; + } +} diff --git a/Sources/vendor/twig/twig/src/TokenParser/SetTokenParser.php b/Sources/vendor/twig/twig/src/TokenParser/SetTokenParser.php new file mode 100644 index 00000000..2fbdfe09 --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenParser/SetTokenParser.php @@ -0,0 +1,73 @@ +getLine(); + $stream = $this->parser->getStream(); + $names = $this->parser->getExpressionParser()->parseAssignmentExpression(); + + $capture = false; + if ($stream->nextIf(/* Token::OPERATOR_TYPE */ 8, '=')) { + $values = $this->parser->getExpressionParser()->parseMultitargetExpression(); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + if (\count($names) !== \count($values)) { + throw new SyntaxError('When using set, you must have the same number of variables and assignments.', $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + } else { + $capture = true; + + if (\count($names) > 1) { + throw new SyntaxError('When using set with a block, you cannot have a multi-target.', $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + $values = $this->parser->subparse([$this, 'decideBlockEnd'], true); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + } + + return new SetNode($capture, $names, $values, $lineno, $this->getTag()); + } + + public function decideBlockEnd(Token $token): bool + { + return $token->test('endset'); + } + + public function getTag(): string + { + return 'set'; + } +} diff --git a/Sources/vendor/twig/twig/src/TokenParser/TokenParserInterface.php b/Sources/vendor/twig/twig/src/TokenParser/TokenParserInterface.php new file mode 100644 index 00000000..bb8db3e5 --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenParser/TokenParserInterface.php @@ -0,0 +1,46 @@ + + */ +interface TokenParserInterface +{ + /** + * Sets the parser associated with this token parser. + */ + public function setParser(Parser $parser): void; + + /** + * Parses a token and returns a node. + * + * @return Node + * + * @throws SyntaxError + */ + public function parse(Token $token); + + /** + * Gets the tag name associated with this token parser. + * + * @return string + */ + public function getTag(); +} diff --git a/Sources/vendor/twig/twig/src/TokenParser/UseTokenParser.php b/Sources/vendor/twig/twig/src/TokenParser/UseTokenParser.php new file mode 100644 index 00000000..d0a2de41 --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenParser/UseTokenParser.php @@ -0,0 +1,73 @@ +parser->getExpressionParser()->parseExpression(); + $stream = $this->parser->getStream(); + + if (!$template instanceof ConstantExpression) { + throw new SyntaxError('The template references in a "use" statement must be a string.', $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + + $targets = []; + if ($stream->nextIf('with')) { + do { + $name = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + + $alias = $name; + if ($stream->nextIf('as')) { + $alias = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + } + + $targets[$name] = new ConstantExpression($alias, -1); + + if (!$stream->nextIf(/* Token::PUNCTUATION_TYPE */ 9, ',')) { + break; + } + } while (true); + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + $this->parser->addTrait(new Node(['template' => $template, 'targets' => new Node($targets)])); + + return new Node(); + } + + public function getTag(): string + { + return 'use'; + } +} diff --git a/Sources/vendor/twig/twig/src/TokenParser/WithTokenParser.php b/Sources/vendor/twig/twig/src/TokenParser/WithTokenParser.php new file mode 100644 index 00000000..7d8cbe26 --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenParser/WithTokenParser.php @@ -0,0 +1,56 @@ + + * + * @internal + */ +final class WithTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $stream = $this->parser->getStream(); + + $variables = null; + $only = false; + if (!$stream->test(/* Token::BLOCK_END_TYPE */ 3)) { + $variables = $this->parser->getExpressionParser()->parseExpression(); + $only = (bool) $stream->nextIf(/* Token::NAME_TYPE */ 5, 'only'); + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + $body = $this->parser->subparse([$this, 'decideWithEnd'], true); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new WithNode($body, $variables, $only, $token->getLine(), $this->getTag()); + } + + public function decideWithEnd(Token $token): bool + { + return $token->test('endwith'); + } + + public function getTag(): string + { + return 'with'; + } +} diff --git a/Sources/vendor/twig/twig/src/TokenStream.php b/Sources/vendor/twig/twig/src/TokenStream.php new file mode 100644 index 00000000..1eac11a0 --- /dev/null +++ b/Sources/vendor/twig/twig/src/TokenStream.php @@ -0,0 +1,132 @@ + + */ +final class TokenStream +{ + private $tokens; + private $current = 0; + private $source; + + public function __construct(array $tokens, Source $source = null) + { + $this->tokens = $tokens; + $this->source = $source ?: new Source('', ''); + } + + public function __toString() + { + return implode("\n", $this->tokens); + } + + public function injectTokens(array $tokens) + { + $this->tokens = array_merge(\array_slice($this->tokens, 0, $this->current), $tokens, \array_slice($this->tokens, $this->current)); + } + + /** + * Sets the pointer to the next token and returns the old one. + */ + public function next(): Token + { + if (!isset($this->tokens[++$this->current])) { + throw new SyntaxError('Unexpected end of template.', $this->tokens[$this->current - 1]->getLine(), $this->source); + } + + return $this->tokens[$this->current - 1]; + } + + /** + * Tests a token, sets the pointer to the next one and returns it or throws a syntax error. + * + * @return Token|null The next token if the condition is true, null otherwise + */ + public function nextIf($primary, $secondary = null) + { + if ($this->tokens[$this->current]->test($primary, $secondary)) { + return $this->next(); + } + } + + /** + * Tests a token and returns it or throws a syntax error. + */ + public function expect($type, $value = null, string $message = null): Token + { + $token = $this->tokens[$this->current]; + if (!$token->test($type, $value)) { + $line = $token->getLine(); + throw new SyntaxError(sprintf('%sUnexpected token "%s"%s ("%s" expected%s).', + $message ? $message.'. ' : '', + Token::typeToEnglish($token->getType()), + $token->getValue() ? sprintf(' of value "%s"', $token->getValue()) : '', + Token::typeToEnglish($type), $value ? sprintf(' with value "%s"', $value) : ''), + $line, + $this->source + ); + } + $this->next(); + + return $token; + } + + /** + * Looks at the next token. + */ + public function look(int $number = 1): Token + { + if (!isset($this->tokens[$this->current + $number])) { + throw new SyntaxError('Unexpected end of template.', $this->tokens[$this->current + $number - 1]->getLine(), $this->source); + } + + return $this->tokens[$this->current + $number]; + } + + /** + * Tests the current token. + */ + public function test($primary, $secondary = null): bool + { + return $this->tokens[$this->current]->test($primary, $secondary); + } + + /** + * Checks if end of stream was reached. + */ + public function isEOF(): bool + { + return /* Token::EOF_TYPE */ -1 === $this->tokens[$this->current]->getType(); + } + + public function getCurrent(): Token + { + return $this->tokens[$this->current]; + } + + /** + * Gets the source associated with this stream. + * + * @internal + */ + public function getSourceContext(): Source + { + return $this->source; + } +} diff --git a/Sources/vendor/twig/twig/src/TwigFilter.php b/Sources/vendor/twig/twig/src/TwigFilter.php new file mode 100644 index 00000000..8993026c --- /dev/null +++ b/Sources/vendor/twig/twig/src/TwigFilter.php @@ -0,0 +1,134 @@ + + * + * @see https://twig.symfony.com/doc/templates.html#filters + */ +final class TwigFilter +{ + private $name; + private $callable; + private $options; + private $arguments = []; + + /** + * @param callable|array{class-string, string}|null $callable A callable implementing the filter. If null, you need to overwrite the "node_class" option to customize compilation. + */ + public function __construct(string $name, $callable = null, array $options = []) + { + $this->name = $name; + $this->callable = $callable; + $this->options = array_merge([ + 'needs_environment' => false, + 'needs_context' => false, + 'is_variadic' => false, + 'is_safe' => null, + 'is_safe_callback' => null, + 'pre_escape' => null, + 'preserves_safety' => null, + 'node_class' => FilterExpression::class, + 'deprecated' => false, + 'alternative' => null, + ], $options); + } + + public function getName(): string + { + return $this->name; + } + + /** + * Returns the callable to execute for this filter. + * + * @return callable|array{class-string, string}|null + */ + public function getCallable() + { + return $this->callable; + } + + public function getNodeClass(): string + { + return $this->options['node_class']; + } + + public function setArguments(array $arguments): void + { + $this->arguments = $arguments; + } + + public function getArguments(): array + { + return $this->arguments; + } + + public function needsEnvironment(): bool + { + return $this->options['needs_environment']; + } + + public function needsContext(): bool + { + return $this->options['needs_context']; + } + + public function getSafe(Node $filterArgs): ?array + { + if (null !== $this->options['is_safe']) { + return $this->options['is_safe']; + } + + if (null !== $this->options['is_safe_callback']) { + return $this->options['is_safe_callback']($filterArgs); + } + + return null; + } + + public function getPreservesSafety(): ?array + { + return $this->options['preserves_safety']; + } + + public function getPreEscape(): ?string + { + return $this->options['pre_escape']; + } + + public function isVariadic(): bool + { + return $this->options['is_variadic']; + } + + public function isDeprecated(): bool + { + return (bool) $this->options['deprecated']; + } + + public function getDeprecatedVersion(): string + { + return \is_bool($this->options['deprecated']) ? '' : $this->options['deprecated']; + } + + public function getAlternative(): ?string + { + return $this->options['alternative']; + } +} diff --git a/Sources/vendor/twig/twig/src/TwigFunction.php b/Sources/vendor/twig/twig/src/TwigFunction.php new file mode 100644 index 00000000..d910d1fd --- /dev/null +++ b/Sources/vendor/twig/twig/src/TwigFunction.php @@ -0,0 +1,122 @@ + + * + * @see https://twig.symfony.com/doc/templates.html#functions + */ +final class TwigFunction +{ + private $name; + private $callable; + private $options; + private $arguments = []; + + /** + * @param callable|array{class-string, string}|null $callable A callable implementing the function. If null, you need to overwrite the "node_class" option to customize compilation. + */ + public function __construct(string $name, $callable = null, array $options = []) + { + $this->name = $name; + $this->callable = $callable; + $this->options = array_merge([ + 'needs_environment' => false, + 'needs_context' => false, + 'is_variadic' => false, + 'is_safe' => null, + 'is_safe_callback' => null, + 'node_class' => FunctionExpression::class, + 'deprecated' => false, + 'alternative' => null, + ], $options); + } + + public function getName(): string + { + return $this->name; + } + + /** + * Returns the callable to execute for this function. + * + * @return callable|array{class-string, string}|null + */ + public function getCallable() + { + return $this->callable; + } + + public function getNodeClass(): string + { + return $this->options['node_class']; + } + + public function setArguments(array $arguments): void + { + $this->arguments = $arguments; + } + + public function getArguments(): array + { + return $this->arguments; + } + + public function needsEnvironment(): bool + { + return $this->options['needs_environment']; + } + + public function needsContext(): bool + { + return $this->options['needs_context']; + } + + public function getSafe(Node $functionArgs): ?array + { + if (null !== $this->options['is_safe']) { + return $this->options['is_safe']; + } + + if (null !== $this->options['is_safe_callback']) { + return $this->options['is_safe_callback']($functionArgs); + } + + return []; + } + + public function isVariadic(): bool + { + return (bool) $this->options['is_variadic']; + } + + public function isDeprecated(): bool + { + return (bool) $this->options['deprecated']; + } + + public function getDeprecatedVersion(): string + { + return \is_bool($this->options['deprecated']) ? '' : $this->options['deprecated']; + } + + public function getAlternative(): ?string + { + return $this->options['alternative']; + } +} diff --git a/Sources/vendor/twig/twig/src/TwigTest.php b/Sources/vendor/twig/twig/src/TwigTest.php new file mode 100644 index 00000000..3769ec16 --- /dev/null +++ b/Sources/vendor/twig/twig/src/TwigTest.php @@ -0,0 +1,100 @@ + + * + * @see https://twig.symfony.com/doc/templates.html#test-operator + */ +final class TwigTest +{ + private $name; + private $callable; + private $options; + private $arguments = []; + + /** + * @param callable|array{class-string, string}|null $callable A callable implementing the test. If null, you need to overwrite the "node_class" option to customize compilation. + */ + public function __construct(string $name, $callable = null, array $options = []) + { + $this->name = $name; + $this->callable = $callable; + $this->options = array_merge([ + 'is_variadic' => false, + 'node_class' => TestExpression::class, + 'deprecated' => false, + 'alternative' => null, + 'one_mandatory_argument' => false, + ], $options); + } + + public function getName(): string + { + return $this->name; + } + + /** + * Returns the callable to execute for this test. + * + * @return callable|array{class-string, string}|null + */ + public function getCallable() + { + return $this->callable; + } + + public function getNodeClass(): string + { + return $this->options['node_class']; + } + + public function setArguments(array $arguments): void + { + $this->arguments = $arguments; + } + + public function getArguments(): array + { + return $this->arguments; + } + + public function isVariadic(): bool + { + return (bool) $this->options['is_variadic']; + } + + public function isDeprecated(): bool + { + return (bool) $this->options['deprecated']; + } + + public function getDeprecatedVersion(): string + { + return \is_bool($this->options['deprecated']) ? '' : $this->options['deprecated']; + } + + public function getAlternative(): ?string + { + return $this->options['alternative']; + } + + public function hasOneMandatoryArgument(): bool + { + return (bool) $this->options['one_mandatory_argument']; + } +} diff --git a/Sources/vendor/twig/twig/src/Util/DeprecationCollector.php b/Sources/vendor/twig/twig/src/Util/DeprecationCollector.php new file mode 100644 index 00000000..378b666b --- /dev/null +++ b/Sources/vendor/twig/twig/src/Util/DeprecationCollector.php @@ -0,0 +1,77 @@ + + */ +final class DeprecationCollector +{ + private $twig; + + public function __construct(Environment $twig) + { + $this->twig = $twig; + } + + /** + * Returns deprecations for templates contained in a directory. + * + * @param string $dir A directory where templates are stored + * @param string $ext Limit the loaded templates by extension + * + * @return array An array of deprecations + */ + public function collectDir(string $dir, string $ext = '.twig'): array + { + $iterator = new \RegexIterator( + new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator($dir), \RecursiveIteratorIterator::LEAVES_ONLY + ), '{'.preg_quote($ext).'$}' + ); + + return $this->collect(new TemplateDirIterator($iterator)); + } + + /** + * Returns deprecations for passed templates. + * + * @param \Traversable $iterator An iterator of templates (where keys are template names and values the contents of the template) + * + * @return array An array of deprecations + */ + public function collect(\Traversable $iterator): array + { + $deprecations = []; + set_error_handler(function ($type, $msg) use (&$deprecations) { + if (\E_USER_DEPRECATED === $type) { + $deprecations[] = $msg; + } + }); + + foreach ($iterator as $name => $contents) { + try { + $this->twig->parse($this->twig->tokenize(new Source($contents, $name))); + } catch (SyntaxError $e) { + // ignore templates containing syntax errors + } + } + + restore_error_handler(); + + return $deprecations; + } +} diff --git a/Sources/vendor/twig/twig/src/Util/TemplateDirIterator.php b/Sources/vendor/twig/twig/src/Util/TemplateDirIterator.php new file mode 100644 index 00000000..3bef14be --- /dev/null +++ b/Sources/vendor/twig/twig/src/Util/TemplateDirIterator.php @@ -0,0 +1,36 @@ + + */ +class TemplateDirIterator extends \IteratorIterator +{ + /** + * @return mixed + */ + #[\ReturnTypeWillChange] + public function current() + { + return file_get_contents(parent::current()); + } + + /** + * @return mixed + */ + #[\ReturnTypeWillChange] + public function key() + { + return (string) parent::key(); + } +}