tories/Admin/Table.php' ), 'Automattic\\WooCommerce\\Internal\\ProductDownloads\\ApprovedDirectories\\Admin\\UI' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductDownloads/ApprovedDirectories/Admin/UI.php' ), 'Automattic\\WooCommerce\\Internal\\ProductDownloads\\ApprovedDirectories\\ApprovedDirectoriesException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductDownloads/ApprovedDirectories/ApprovedDirectoriesException.php' ), 'Automattic\\WooCommerce\\Internal\\ProductDownloads\\ApprovedDirectories\\Register' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductDownloads/ApprovedDirectories/Register.php' ), 'Automattic\\WooCommerce\\Internal\\ProductDownloads\\ApprovedDirectories\\StoredUrl' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductDownloads/ApprovedDirectories/StoredUrl.php' ), 'Automattic\\WooCommerce\\Internal\\ProductDownloads\\ApprovedDirectories\\Synchronize' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductDownloads/ApprovedDirectories/Synchronize.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFeed\\Feed\\FeedInterface' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFeed/Feed/FeedInterface.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFeed\\Feed\\FeedValidatorInterface' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFeed/Feed/FeedValidatorInterface.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFeed\\Feed\\ProductLoader' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFeed/Feed/ProductLoader.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFeed\\Feed\\ProductMapperInterface' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFeed/Feed/ProductMapperInterface.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFeed\\Feed\\ProductWalker' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFeed/Feed/ProductWalker.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFeed\\Feed\\WalkerProgress' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFeed/Feed/WalkerProgress.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFeed\\Integrations\\IntegrationInterface' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFeed/Integrations/IntegrationInterface.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFeed\\Integrations\\IntegrationRegistry' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFeed/Integrations/IntegrationRegistry.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFeed\\Integrations\\POSCatalog\\ApiController' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFeed/Integrations/POSCatalog/ApiController.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFeed\\Integrations\\POSCatalog\\AsyncGenerator' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFeed/Integrations/POSCatalog/AsyncGenerator.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFeed\\Integrations\\POSCatalog\\FeedValidator' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFeed/Integrations/POSCatalog/FeedValidator.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFeed\\Integrations\\POSCatalog\\POSIntegration' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFeed/Integrations/POSCatalog/POSIntegration.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFeed\\Integrations\\POSCatalog\\POSProductVisibilitySync' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFeed/Integrations/POSCatalog/POSProductVisibilitySync.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFeed\\Integrations\\POSCatalog\\ProductMapper' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFeed/Integrations/POSCatalog/ProductMapper.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFeed\\ProductFeed' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFeed/ProductFeed.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFeed\\Storage\\JsonFileFeed' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFeed/Storage/JsonFileFeed.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFeed\\Utils\\MemoryManager' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFeed/Utils/MemoryManager.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFeed\\Utils\\StringHelper' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFeed/Utils/StringHelper.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFilters\\CacheController' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFilters/CacheController.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFilters\\FilterData' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFilters/FilterData.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFilters\\FilterDataProvider' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFilters/FilterDataProvider.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFilters\\Interfaces\\FilterUrlParam' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFilters/Interfaces/FilterUrlParam.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFilters\\Interfaces\\MainQueryClausesGenerator' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFilters/Interfaces/MainQueryClausesGenerator.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFilters\\Interfaces\\QueryClausesGenerator' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFilters/Interfaces/QueryClausesGenerator.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFilters\\MainQueryController' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFilters/MainQueryController.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFilters\\Params' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFilters/Params.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFilters\\QueryClauses' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFilters/QueryClauses.php' ), 'Automattic\\WooCommerce\\Internal\\ProductFilters\\TaxonomyHierarchyData' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductFilters/TaxonomyHierarchyData.php' ), 'Automattic\\WooCommerce\\Internal\\ProductImage\\MatchImageBySKU' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ProductImage/MatchImageBySKU.php' ), 'Automattic\\WooCommerce\\Internal\\PushNotifications\\DataStores\\PushTokensDataStore' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/PushNotifications/DataStores/PushTokensDataStore.php' ), 'Automattic\\WooCommerce\\Internal\\PushNotifications\\Entities\\PushToken' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/PushNotifications/Entities/PushToken.php' ), 'Automattic\\WooCommerce\\Internal\\PushNotifications\\Exceptions\\PushTokenNotFoundException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/PushNotifications/Exceptions/PushTokenNotFoundException.php' ), 'Automattic\\WooCommerce\\Internal\\PushNotifications\\PushNotifications' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/PushNotifications/PushNotifications.php' ), 'Automattic\\WooCommerce\\Internal\\ReceiptRendering\\ReceiptRenderingEngine' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ReceiptRendering/ReceiptRenderingEngine.php' ), 'Automattic\\WooCommerce\\Internal\\ReceiptRendering\\ReceiptRenderingRestController' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/ReceiptRendering/ReceiptRenderingRestController.php' ), 'Automattic\\WooCommerce\\Internal\\RegisterHooksInterface' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RegisterHooksInterface.php' ), 'Automattic\\WooCommerce\\Internal\\RestApiControllerBase' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApiControllerBase.php' ), 'Automattic\\WooCommerce\\Internal\\RestApiParameterUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApiParameterUtil.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\AbstractCollectionQuery' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/AbstractCollectionQuery.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\AbstractController' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/AbstractController.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\AbstractSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/AbstractSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Customers\\CollectionQuery' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Customers/CollectionQuery.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Customers\\Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Customers/Controller.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Customers\\CustomerSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Customers/CustomerSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Customers\\UpdateUtils' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Customers/UpdateUtils.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Fulfillments\\Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Fulfillments/Controller.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Fulfillments\\Schema\\FulfillmentSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Fulfillments/Schema/FulfillmentSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\OrderNotes\\CollectionQuery' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/OrderNotes/CollectionQuery.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\OrderNotes\\Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/OrderNotes/Controller.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\OrderNotes\\Schema\\OrderNoteSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/OrderNotes/Schema/OrderNoteSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Orders\\ActionController' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Orders/ActionController.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Orders\\CollectionQuery' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Orders/CollectionQuery.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Orders\\Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Orders/Controller.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Orders\\Schema\\AbstractLineItemSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Orders/Schema/AbstractLineItemSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Orders\\Schema\\OrderCouponSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Orders/Schema/OrderCouponSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Orders\\Schema\\OrderFeeSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Orders/Schema/OrderFeeSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Orders\\Schema\\OrderItemSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Orders/Schema/OrderItemSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Orders\\Schema\\OrderSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Orders/Schema/OrderSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Orders\\Schema\\OrderShippingSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Orders/Schema/OrderShippingSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Orders\\Schema\\OrderTaxSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Orders/Schema/OrderTaxSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Orders\\UpdateUtils' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Orders/UpdateUtils.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Products\\Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Products/Controller.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Refunds\\CollectionQuery' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Refunds/CollectionQuery.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Refunds\\Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Refunds/Controller.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Refunds\\DataUtils' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Refunds/DataUtils.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Refunds\\Schema\\RefundSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Refunds/Schema/RefundSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Settings\\Account\\Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Settings/Account/Controller.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Settings\\Account\\Schema\\AccountSettingsSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Settings/Account/Schema/AccountSettingsSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Settings\\Email\\Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Settings/Email/Controller.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Settings\\Email\\Schema\\EmailSettingsSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Settings/Email/Schema/EmailSettingsSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Settings\\Emails\\Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Settings/Emails/Controller.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Settings\\Emails\\Schema\\EmailsSettingsSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Settings/Emails/Schema/EmailsSettingsSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Settings\\General\\Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Settings/General/Controller.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Settings\\General\\Schema\\GeneralSettingsSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Settings/General/Schema/GeneralSettingsSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Settings\\OfflinePaymentMethods\\Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Settings/OfflinePaymentMethods/Controller.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Settings\\OfflinePaymentMethods\\Schema\\OfflinePaymentMethodSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Settings/OfflinePaymentMethods/Schema/OfflinePaymentMethodSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Settings\\PaymentGateways\\Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Settings/PaymentGateways/Controller.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Settings\\PaymentGateways\\Schema\\AbstractPaymentGatewaySettingsSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Settings/PaymentGateways/Schema/AbstractPaymentGatewaySettingsSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Settings\\PaymentGateways\\Schema\\BacsGatewaySettingsSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Settings/PaymentGateways/Schema/BacsGatewaySettingsSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Settings\\PaymentGateways\\Schema\\CodGatewaySettingsSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Settings/PaymentGateways/Schema/CodGatewaySettingsSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Settings\\PaymentGateways\\Schema\\PaymentGatewaySettingsSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Settings/PaymentGateways/Schema/PaymentGatewaySettingsSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Settings\\Products\\Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Settings/Products/Controller.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Settings\\Products\\Schema\\ProductSettingsSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Settings/Products/Schema/ProductSettingsSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Settings\\Tax\\Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Settings/Tax/Controller.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\Settings\\Tax\\Schema\\TaxSettingsSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/Settings/Tax/Schema/TaxSettingsSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\ShippingZoneMethod\\Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/ShippingZoneMethod/Controller.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\ShippingZoneMethod\\ShippingMethodSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/ShippingZoneMethod/ShippingMethodSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\ShippingZoneMethod\\ShippingZoneMethodService' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/ShippingZoneMethod/ShippingZoneMethodService.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\ShippingZones\\Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/ShippingZones/Controller.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\ShippingZones\\ShippingZoneSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/ShippingZones/ShippingZoneSchema.php' ), 'Automattic\\WooCommerce\\Internal\\RestApi\\Routes\\V4\\ShippingZones\\ShippingZoneService' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestApi/Routes/V4/ShippingZones/ShippingZoneService.php' ), 'Automattic\\WooCommerce\\Internal\\RestockRefundedItemsAdjuster' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/RestockRefundedItemsAdjuster.php' ), 'Automattic\\WooCommerce\\Internal\\Settings\\OptionSanitizer' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/Settings/OptionSanitizer.php' ), 'Automattic\\WooCommerce\\Internal\\Settings\\PointOfSaleDefaultSettings' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/Settings/PointOfSaleDefaultSettings.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Admin\\AdminManager' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Admin/AdminManager.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Admin\\ListTable' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Admin/ListTable.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Admin\\MenusController' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Admin/MenusController.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Admin\\NotificationCreatePage' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Admin/NotificationCreatePage.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Admin\\NotificationEditPage' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Admin/NotificationEditPage.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Admin\\NotificationsPage' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Admin/NotificationsPage.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Admin\\SettingsController' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Admin/SettingsController.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\AsyncTasks\\CycleStateService' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/AsyncTasks/CycleStateService.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\AsyncTasks\\JobManager' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/AsyncTasks/JobManager.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\AsyncTasks\\NotificationsProcessor' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/AsyncTasks/NotificationsProcessor.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Config' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Config.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\DataRetentionController' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/DataRetentionController.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Emails\\CustomerStockNotificationEmail' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Emails/CustomerStockNotificationEmail.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Emails\\CustomerStockNotificationVerifiedEmail' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Emails/CustomerStockNotificationVerifiedEmail.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Emails\\CustomerStockNotificationVerifyEmail' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Emails/CustomerStockNotificationVerifyEmail.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Emails\\EmailActionController' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Emails/EmailActionController.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Emails\\EmailManager' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Emails/EmailManager.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Emails\\EmailTemplatesController' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Emails/EmailTemplatesController.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Enums\\NotificationCancellationSource' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Enums/NotificationCancellationSource.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Enums\\NotificationStatus' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Enums/NotificationStatus.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Factory' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Factory.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Frontend\\FormHandlerService' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Frontend/FormHandlerService.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Frontend\\NotificationManagementService' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Frontend/NotificationManagementService.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Frontend\\ProductPageIntegration' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Frontend/ProductPageIntegration.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Frontend\\SignupResult' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Frontend/SignupResult.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Frontend\\SignupService' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Frontend/SignupService.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Notification' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Notification.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\NotificationQuery' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/NotificationQuery.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Privacy\\PrivacyEraser' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Privacy/PrivacyEraser.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\StockNotifications' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/StockNotifications.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\StockSyncController' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/StockSyncController.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Utilities\\EligibilityService' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Utilities/EligibilityService.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Utilities\\HasherHelper' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Utilities/HasherHelper.php' ), 'Automattic\\WooCommerce\\Internal\\StockNotifications\\Utilities\\StockManagementHelper' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/StockNotifications/Utilities/StockManagementHelper.php' ), 'Automattic\\WooCommerce\\Internal\\Traits\\AccessiblePrivateMethods' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/Traits/AccessiblePrivateMethods.php' ), 'Automattic\\WooCommerce\\Internal\\Traits\\OrderAttributionMeta' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/Traits/OrderAttributionMeta.php' ), 'Automattic\\WooCommerce\\Internal\\Traits\\RestApiCache' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/Traits/RestApiCache.php' ), 'Automattic\\WooCommerce\\Internal\\Traits\\ScriptDebug' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/Traits/ScriptDebug.php' ), 'Automattic\\WooCommerce\\Internal\\TransientFiles\\TransientFilesEngine' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/TransientFiles/TransientFilesEngine.php' ), 'Automattic\\WooCommerce\\Internal\\Utilities\\ArrayUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/Utilities/ArrayUtil.php' ), 'Automattic\\WooCommerce\\Internal\\Utilities\\BlocksUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/Utilities/BlocksUtil.php' ), 'Automattic\\WooCommerce\\Internal\\Utilities\\COTMigrationUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/Utilities/COTMigrationUtil.php' ), 'Automattic\\WooCommerce\\Internal\\Utilities\\DatabaseUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/Utilities/DatabaseUtil.php' ), 'Automattic\\WooCommerce\\Internal\\Utilities\\FilesystemUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/Utilities/FilesystemUtil.php' ), 'Automattic\\WooCommerce\\Internal\\Utilities\\HtmlSanitizer' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/Utilities/HtmlSanitizer.php' ), 'Automattic\\WooCommerce\\Internal\\Utilities\\LegacyRestApiStub' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/Utilities/LegacyRestApiStub.php' ), 'Automattic\\WooCommerce\\Internal\\Utilities\\PluginInstaller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/Utilities/PluginInstaller.php' ), 'Automattic\\WooCommerce\\Internal\\Utilities\\ProductUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/Utilities/ProductUtil.php' ), 'Automattic\\WooCommerce\\Internal\\Utilities\\Types' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/Utilities/Types.php' ), 'Automattic\\WooCommerce\\Internal\\Utilities\\URL' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/Utilities/URL.php' ), 'Automattic\\WooCommerce\\Internal\\Utilities\\URLException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/Utilities/URLException.php' ), 'Automattic\\WooCommerce\\Internal\\Utilities\\Users' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/Utilities/Users.php' ), 'Automattic\\WooCommerce\\Internal\\Utilities\\WebhookUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/Utilities/WebhookUtil.php' ), 'Automattic\\WooCommerce\\Internal\\WCCom\\ConnectionHelper' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Internal/WCCom/ConnectionHelper.php' ), 'Automattic\\WooCommerce\\LayoutTemplates\\LayoutTemplateRegistry' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/LayoutTemplates/LayoutTemplateRegistry.php' ), 'Automattic\\WooCommerce\\Packages' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Packages.php' ), 'Automattic\\WooCommerce\\Proxies\\ActionsProxy' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Proxies/ActionsProxy.php' ), 'Automattic\\WooCommerce\\Proxies\\LegacyProxy' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Proxies/LegacyProxy.php' ), 'Automattic\\WooCommerce\\RestApi\\Package' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Package.php' ), 'Automattic\\WooCommerce\\RestApi\\Server' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Server.php' ), 'Automattic\\WooCommerce\\RestApi\\Utilities\\ImageAttachment' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Utilities/ImageAttachment.php' ), 'Automattic\\WooCommerce\\RestApi\\Utilities\\SingletonTrait' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Utilities/SingletonTrait.php' ), 'Automattic\\WooCommerce\\StoreApi\\Authentication' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Authentication.php' ), 'Automattic\\WooCommerce\\StoreApi\\Exceptions\\InvalidCartException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Exceptions/InvalidCartException.php' ), 'Automattic\\WooCommerce\\StoreApi\\Exceptions\\InvalidStockLevelsInCartException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Exceptions/InvalidStockLevelsInCartException.php' ), 'Automattic\\WooCommerce\\StoreApi\\Exceptions\\NotPurchasableException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Exceptions/NotPurchasableException.php' ), 'Automattic\\WooCommerce\\StoreApi\\Exceptions\\OutOfStockException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Exceptions/OutOfStockException.php' ), 'Automattic\\WooCommerce\\StoreApi\\Exceptions\\PartialOutOfStockException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Exceptions/PartialOutOfStockException.php' ), 'Automattic\\WooCommerce\\StoreApi\\Exceptions\\RouteException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Exceptions/RouteException.php' ), 'Automattic\\WooCommerce\\StoreApi\\Exceptions\\StockAvailabilityException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Exceptions/StockAvailabilityException.php' ), 'Automattic\\WooCommerce\\StoreApi\\Exceptions\\TooManyInCartException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Exceptions/TooManyInCartException.php' ), 'Automattic\\WooCommerce\\StoreApi\\Formatters' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Formatters.php' ), 'Automattic\\WooCommerce\\StoreApi\\Formatters\\CurrencyFormatter' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Formatters/CurrencyFormatter.php' ), 'Automattic\\WooCommerce\\StoreApi\\Formatters\\DefaultFormatter' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Formatters/DefaultFormatter.php' ), 'Automattic\\WooCommerce\\StoreApi\\Formatters\\FormatterInterface' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Formatters/FormatterInterface.php' ), 'Automattic\\WooCommerce\\StoreApi\\Formatters\\HtmlFormatter' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Formatters/HtmlFormatter.php' ), 'Automattic\\WooCommerce\\StoreApi\\Formatters\\MoneyFormatter' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Formatters/MoneyFormatter.php' ), 'Automattic\\WooCommerce\\StoreApi\\Legacy' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Legacy.php' ), 'Automattic\\WooCommerce\\StoreApi\\Payments\\PaymentContext' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Payments/PaymentContext.php' ), 'Automattic\\WooCommerce\\StoreApi\\Payments\\PaymentResult' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Payments/PaymentResult.php' ), 'Automattic\\WooCommerce\\StoreApi\\RoutesController' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/RoutesController.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\RouteInterface' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/RouteInterface.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\AI\\Middleware' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/AI/Middleware.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\AI\\Products' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/AI/Products.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\AbstractCartRoute' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/AbstractCartRoute.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\AbstractRoute' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/AbstractRoute.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\AbstractTermsRoute' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/AbstractTermsRoute.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\Agentic\\AgenticCheckoutSession' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/Agentic/AgenticCheckoutSession.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\Agentic\\CheckoutSessions' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/Agentic/CheckoutSessions.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\Agentic\\CheckoutSessionsComplete' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/Agentic/CheckoutSessionsComplete.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\Agentic\\CheckoutSessionsUpdate' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/Agentic/CheckoutSessionsUpdate.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\Agentic\\Enums\\OrderMetaKey' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/Agentic/Enums/OrderMetaKey.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\Agentic\\Enums\\SessionKey' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/Agentic/Enums/SessionKey.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\Agentic\\Error' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/Agentic/Error.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\Agentic\\Messages\\Message' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/Agentic/Messages/Message.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\Agentic\\Messages\\MessageError' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/Agentic/Messages/MessageError.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\Agentic\\Messages\\MessageInfo' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/Agentic/Messages/MessageInfo.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\Agentic\\Messages\\Messages' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/Agentic/Messages/Messages.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\Batch' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/Batch.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\Cart' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/Cart.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\CartAddItem' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/CartAddItem.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\CartApplyCoupon' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/CartApplyCoupon.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\CartCoupons' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/CartCoupons.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\CartCouponsByCode' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/CartCouponsByCode.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\CartExtensions' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/CartExtensions.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\CartItems' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/CartItems.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\CartItemsByKey' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/CartItemsByKey.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\CartRemoveCoupon' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/CartRemoveCoupon.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\CartRemoveItem' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/CartRemoveItem.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\CartSelectShippingRate' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/CartSelectShippingRate.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\CartUpdateCustomer' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/CartUpdateCustomer.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\CartUpdateItem' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/CartUpdateItem.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\Checkout' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/Checkout.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\CheckoutOrder' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/CheckoutOrder.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\Order' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/Order.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\Patterns' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/Patterns.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\ProductAttributeTerms' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/ProductAttributeTerms.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\ProductAttributes' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/ProductAttributes.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\ProductAttributesById' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/ProductAttributesById.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\ProductBrands' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/ProductBrands.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\ProductBrandsById' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/ProductBrandsById.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\ProductCategories' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/ProductCategories.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\ProductCategoriesById' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/ProductCategoriesById.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\ProductCollectionData' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/ProductCollectionData.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\ProductReviews' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/ProductReviews.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\ProductTags' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/ProductTags.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\Products' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/Products.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\ProductsById' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/ProductsById.php' ), 'Automattic\\WooCommerce\\StoreApi\\Routes\\V1\\ProductsBySlug' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Routes/V1/ProductsBySlug.php' ), 'Automattic\\WooCommerce\\StoreApi\\SchemaController' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/SchemaController.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\ExtendSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/ExtendSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\AI\\ProductsSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/AI/ProductsSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\AbstractAddressSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/AbstractAddressSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\AbstractSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/AbstractSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\Agentic\\CheckoutSessionSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/Agentic/CheckoutSessionSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\BatchSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/BatchSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\BillingAddressSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/BillingAddressSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\CartCouponSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/CartCouponSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\CartExtensionsSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/CartExtensionsSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\CartFeeSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/CartFeeSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\CartItemSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/CartItemSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\CartSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/CartSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\CartShippingRateSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/CartShippingRateSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\CheckoutOrderSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/CheckoutOrderSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\CheckoutSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/CheckoutSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\ErrorSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/ErrorSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\ImageAttachmentSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/ImageAttachmentSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\ItemSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/ItemSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\OrderCouponSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/OrderCouponSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\OrderFeeSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/OrderFeeSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\OrderItemSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/OrderItemSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\OrderSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/OrderSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\PatternsSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/PatternsSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\ProductAttributeSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/ProductAttributeSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\ProductBrandSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/ProductBrandSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\ProductCategorySchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/ProductCategorySchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\ProductCollectionDataSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/ProductCollectionDataSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\ProductReviewSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/ProductReviewSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\ProductSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/ProductSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\ShippingAddressSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/ShippingAddressSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\Schemas\\V1\\TermSchema' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Schemas/V1/TermSchema.php' ), 'Automattic\\WooCommerce\\StoreApi\\SessionHandler' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/SessionHandler.php' ), 'Automattic\\WooCommerce\\StoreApi\\StoreApi' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/StoreApi.php' ), 'Automattic\\WooCommerce\\StoreApi\\Utilities\\AgenticCheckoutUtils' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Utilities/AgenticCheckoutUtils.php' ), 'Automattic\\WooCommerce\\StoreApi\\Utilities\\ArrayUtils' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Utilities/ArrayUtils.php' ), 'Automattic\\WooCommerce\\StoreApi\\Utilities\\CartController' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Utilities/CartController.php' ), 'Automattic\\WooCommerce\\StoreApi\\Utilities\\CartTokenUtils' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Utilities/CartTokenUtils.php' ), 'Automattic\\WooCommerce\\StoreApi\\Utilities\\CheckoutTrait' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Utilities/CheckoutTrait.php' ), 'Automattic\\WooCommerce\\StoreApi\\Utilities\\DraftOrderTrait' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Utilities/DraftOrderTrait.php' ), 'Automattic\\WooCommerce\\StoreApi\\Utilities\\JsonWebToken' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Utilities/JsonWebToken.php' ), 'Automattic\\WooCommerce\\StoreApi\\Utilities\\LocalPickupUtils' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Utilities/LocalPickupUtils.php' ), 'Automattic\\WooCommerce\\StoreApi\\Utilities\\NoticeHandler' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Utilities/NoticeHandler.php' ), 'Automattic\\WooCommerce\\StoreApi\\Utilities\\OrderAuthorizationTrait' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Utilities/OrderAuthorizationTrait.php' ), 'Automattic\\WooCommerce\\StoreApi\\Utilities\\OrderController' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Utilities/OrderController.php' ), 'Automattic\\WooCommerce\\StoreApi\\Utilities\\Pagination' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Utilities/Pagination.php' ), 'Automattic\\WooCommerce\\StoreApi\\Utilities\\PaymentUtils' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Utilities/PaymentUtils.php' ), 'Automattic\\WooCommerce\\StoreApi\\Utilities\\ProductItemTrait' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Utilities/ProductItemTrait.php' ), 'Automattic\\WooCommerce\\StoreApi\\Utilities\\ProductQuery' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Utilities/ProductQuery.php' ), 'Automattic\\WooCommerce\\StoreApi\\Utilities\\ProductQueryFilters' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Utilities/ProductQueryFilters.php' ), 'Automattic\\WooCommerce\\StoreApi\\Utilities\\QuantityLimits' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Utilities/QuantityLimits.php' ), 'Automattic\\WooCommerce\\StoreApi\\Utilities\\RateLimits' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Utilities/RateLimits.php' ), 'Automattic\\WooCommerce\\StoreApi\\Utilities\\SanitizationUtils' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Utilities/SanitizationUtils.php' ), 'Automattic\\WooCommerce\\StoreApi\\Utilities\\ValidationUtils' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/StoreApi/Utilities/ValidationUtils.php' ), 'Automattic\\WooCommerce\\Utilities\\ArrayUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Utilities/ArrayUtil.php' ), 'Automattic\\WooCommerce\\Utilities\\CallbackUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Utilities/CallbackUtil.php' ), 'Automattic\\WooCommerce\\Utilities\\DiscountsUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Utilities/DiscountsUtil.php' ), 'Automattic\\WooCommerce\\Utilities\\FeaturesUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Utilities/FeaturesUtil.php' ), 'Automattic\\WooCommerce\\Utilities\\I18nUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Utilities/I18nUtil.php' ), 'Automattic\\WooCommerce\\Utilities\\LoggingUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Utilities/LoggingUtil.php' ), 'Automattic\\WooCommerce\\Utilities\\NumberUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Utilities/NumberUtil.php' ), 'Automattic\\WooCommerce\\Utilities\\OrderUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Utilities/OrderUtil.php' ), 'Automattic\\WooCommerce\\Utilities\\PluginUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Utilities/PluginUtil.php' ), 'Automattic\\WooCommerce\\Utilities\\RestApiUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Utilities/RestApiUtil.php' ), 'Automattic\\WooCommerce\\Utilities\\ShippingUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Utilities/ShippingUtil.php' ), 'Automattic\\WooCommerce\\Utilities\\StringUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Utilities/StringUtil.php' ), 'Automattic\\WooCommerce\\Utilities\\TimeUtil' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/src/Utilities/TimeUtil.php' ), 'Automattic\\WooCommerce\\Vendor\\Detection\\MobileDetect' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Detection/MobileDetect.php' ), 'Automattic\\WooCommerce\\Vendor\\League\\ISO3166\\Exception\\DomainException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/League/ISO3166/Exception/DomainException.php' ), 'Automattic\\WooCommerce\\Vendor\\League\\ISO3166\\Exception\\ISO3166Exception' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/League/ISO3166/Exception/ISO3166Exception.php' ), 'Automattic\\WooCommerce\\Vendor\\League\\ISO3166\\Exception\\OutOfBoundsException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/League/ISO3166/Exception/OutOfBoundsException.php' ), 'Automattic\\WooCommerce\\Vendor\\League\\ISO3166\\Guards' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/League/ISO3166/Guards.php' ), 'Automattic\\WooCommerce\\Vendor\\League\\ISO3166\\ISO3166' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/League/ISO3166/ISO3166.php' ), 'Automattic\\WooCommerce\\Vendor\\League\\ISO3166\\ISO3166DataProvider' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/League/ISO3166/ISO3166DataProvider.php' ), 'Automattic\\WooCommerce\\Vendor\\League\\ISO3166\\ISO3166DataValidator' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/League/ISO3166/ISO3166DataValidator.php' ), 'Automattic\\WooCommerce\\Vendor\\League\\ISO3166\\ISO3166WithAliases' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/League/ISO3166/ISO3166WithAliases.php' ), 'Automattic\\WooCommerce\\Vendor\\Pelago\\Emogrifier\\Caching\\SimpleStringCache' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Pelago/Emogrifier/Caching/SimpleStringCache.php' ), 'Automattic\\WooCommerce\\Vendor\\Pelago\\Emogrifier\\CssInliner' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Pelago/Emogrifier/CssInliner.php' ), 'Automattic\\WooCommerce\\Vendor\\Pelago\\Emogrifier\\Css\\CssDocument' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Pelago/Emogrifier/Css/CssDocument.php' ), 'Automattic\\WooCommerce\\Vendor\\Pelago\\Emogrifier\\Css\\StyleRule' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Pelago/Emogrifier/Css/StyleRule.php' ), 'Automattic\\WooCommerce\\Vendor\\Pelago\\Emogrifier\\HtmlProcessor\\AbstractHtmlProcessor' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Pelago/Emogrifier/HtmlProcessor/AbstractHtmlProcessor.php' ), 'Automattic\\WooCommerce\\Vendor\\Pelago\\Emogrifier\\HtmlProcessor\\CssToAttributeConverter' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Pelago/Emogrifier/HtmlProcessor/CssToAttributeConverter.php' ), 'Automattic\\WooCommerce\\Vendor\\Pelago\\Emogrifier\\HtmlProcessor\\CssVariableEvaluator' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Pelago/Emogrifier/HtmlProcessor/CssVariableEvaluator.php' ), 'Automattic\\WooCommerce\\Vendor\\Pelago\\Emogrifier\\HtmlProcessor\\HtmlNormalizer' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Pelago/Emogrifier/HtmlProcessor/HtmlNormalizer.php' ), 'Automattic\\WooCommerce\\Vendor\\Pelago\\Emogrifier\\HtmlProcessor\\HtmlPruner' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Pelago/Emogrifier/HtmlProcessor/HtmlPruner.php' ), 'Automattic\\WooCommerce\\Vendor\\Pelago\\Emogrifier\\Utilities\\ArrayIntersector' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Pelago/Emogrifier/Utilities/ArrayIntersector.php' ), 'Automattic\\WooCommerce\\Vendor\\Pelago\\Emogrifier\\Utilities\\CssConcatenator' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Pelago/Emogrifier/Utilities/CssConcatenator.php' ), 'Automattic\\WooCommerce\\Vendor\\Pelago\\Emogrifier\\Utilities\\DeclarationBlockParser' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Pelago/Emogrifier/Utilities/DeclarationBlockParser.php' ), 'Automattic\\WooCommerce\\Vendor\\Pelago\\Emogrifier\\Utilities\\Preg' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Pelago/Emogrifier/Utilities/Preg.php' ), 'Automattic\\WooCommerce\\Vendor\\Psr\\Container\\ContainerExceptionInterface' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Psr/Container/ContainerExceptionInterface.php' ), 'Automattic\\WooCommerce\\Vendor\\Psr\\Container\\ContainerInterface' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Psr/Container/ContainerInterface.php' ), 'Automattic\\WooCommerce\\Vendor\\Psr\\Container\\NotFoundExceptionInterface' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Psr/Container/NotFoundExceptionInterface.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\CSSElement' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/CSSElement.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\CSSList\\AtRuleBlockList' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/CSSList/AtRuleBlockList.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\CSSList\\CSSBlockList' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/CSSList/CSSBlockList.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\CSSList\\CSSList' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/CSSList/CSSList.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\CSSList\\Document' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/CSSList/Document.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\CSSList\\KeyFrame' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/CSSList/KeyFrame.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Comment\\Comment' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Comment/Comment.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Comment\\Commentable' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Comment/Commentable.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\OutputFormat' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/OutputFormat.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\OutputFormatter' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/OutputFormatter.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Parser' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Parser.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Parsing\\Anchor' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Parsing/Anchor.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Parsing\\OutputException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Parsing/OutputException.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Parsing\\ParserState' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Parsing/ParserState.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Parsing\\SourceException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Parsing/SourceException.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Parsing\\UnexpectedEOFException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Parsing/UnexpectedEOFException.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Parsing\\UnexpectedTokenException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Parsing/UnexpectedTokenException.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Position\\Position' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Position/Position.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Position\\Positionable' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Position/Positionable.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Property\\AtRule' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Property/AtRule.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Property\\CSSNamespace' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Property/CSSNamespace.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Property\\Charset' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Property/Charset.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Property\\Import' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Property/Import.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Property\\KeyframeSelector' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Property/KeyframeSelector.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Property\\Selector' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Property/Selector.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Renderable' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Renderable.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\RuleSet\\AtRuleSet' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/RuleSet/AtRuleSet.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\RuleSet\\DeclarationBlock' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/RuleSet/DeclarationBlock.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\RuleSet\\RuleSet' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/RuleSet/RuleSet.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Rule\\Rule' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Rule/Rule.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Settings' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Settings.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Value\\CSSFunction' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Value/CSSFunction.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Value\\CSSString' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Value/CSSString.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Value\\CalcFunction' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Value/CalcFunction.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Value\\CalcRuleValueList' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Value/CalcRuleValueList.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Value\\Color' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Value/Color.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Value\\LineName' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Value/LineName.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Value\\PrimitiveValue' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Value/PrimitiveValue.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Value\\RuleValueList' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Value/RuleValueList.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Value\\Size' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Value/Size.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Value\\URL' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Value/URL.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Value\\Value' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Value/Value.php' ), 'Automattic\\WooCommerce\\Vendor\\Sabberworm\\CSS\\Value\\ValueList' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Sabberworm/CSS/Value/ValueList.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\CssSelectorConverter' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/CssSelectorConverter.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Exception\\ExceptionInterface' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Exception/ExceptionInterface.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Exception\\ExpressionErrorException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Exception/ExpressionErrorException.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Exception\\InternalErrorException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Exception/InternalErrorException.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Exception\\ParseException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Exception/ParseException.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Exception\\SyntaxErrorException' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Exception/SyntaxErrorException.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Node\\AbstractNode' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Node/AbstractNode.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Node\\AttributeNode' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Node/AttributeNode.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Node\\ClassNode' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Node/ClassNode.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Node\\CombinedSelectorNode' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Node/CombinedSelectorNode.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Node\\ElementNode' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Node/ElementNode.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Node\\FunctionNode' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Node/FunctionNode.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Node\\HashNode' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Node/HashNode.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Node\\NegationNode' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Node/NegationNode.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Node\\NodeInterface' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Node/NodeInterface.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Node\\PseudoNode' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Node/PseudoNode.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Node\\SelectorNode' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Node/SelectorNode.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Node\\Specificity' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Node/Specificity.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Parser\\Handler\\CommentHandler' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Parser/Handler/CommentHandler.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Parser\\Handler\\HandlerInterface' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Parser/Handler/HandlerInterface.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Parser\\Handler\\HashHandler' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Parser/Handler/HashHandler.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Parser\\Handler\\IdentifierHandler' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Parser/Handler/IdentifierHandler.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Parser\\Handler\\NumberHandler' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Parser/Handler/NumberHandler.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Parser\\Handler\\StringHandler' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Parser/Handler/StringHandler.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Parser\\Handler\\WhitespaceHandler' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Parser/Handler/WhitespaceHandler.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Parser\\Parser' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Parser/Parser.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Parser\\ParserInterface' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Parser/ParserInterface.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Parser\\Reader' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Parser/Reader.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Parser\\Shortcut\\ClassParser' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Parser/Shortcut/ClassParser.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Parser\\Shortcut\\ElementParser' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Parser/Shortcut/ElementParser.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Parser\\Shortcut\\EmptyStringParser' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Parser/Shortcut/EmptyStringParser.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Parser\\Shortcut\\HashParser' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Parser/Shortcut/HashParser.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Parser\\Token' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Parser/Token.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Parser\\TokenStream' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Parser/TokenStream.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Parser\\Tokenizer\\Tokenizer' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Parser/Tokenizer/Tokenizer.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Parser\\Tokenizer\\TokenizerEscaping' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Parser/Tokenizer/TokenizerEscaping.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\Parser\\Tokenizer\\TokenizerPatterns' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/Parser/Tokenizer/TokenizerPatterns.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\XPath\\Extension\\AbstractExtension' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/XPath/Extension/AbstractExtension.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\XPath\\Extension\\AttributeMatchingExtension' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/XPath/Extension/AttributeMatchingExtension.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\XPath\\Extension\\CombinationExtension' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/XPath/Extension/CombinationExtension.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\XPath\\Extension\\ExtensionInterface' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/XPath/Extension/ExtensionInterface.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\XPath\\Extension\\FunctionExtension' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/XPath/Extension/FunctionExtension.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\XPath\\Extension\\HtmlExtension' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/XPath/Extension/HtmlExtension.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\XPath\\Extension\\NodeExtension' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/XPath/Extension/NodeExtension.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\XPath\\Extension\\PseudoClassExtension' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/XPath/Extension/PseudoClassExtension.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\XPath\\Translator' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/XPath/Translator.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\XPath\\TranslatorInterface' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/XPath/TranslatorInterface.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Component\\CssSelector\\XPath\\XPathExpr' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Component/CssSelector/XPath/XPathExpr.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Polyfill\\Php80\\Php80' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Polyfill/Php80/Php80.php' ), 'Automattic\\WooCommerce\\Vendor\\Symfony\\Polyfill\\Php80\\PhpToken' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/lib/packages/Symfony/Polyfill/Php80/PhpToken.php' ), 'Composer\\Installers\\AglInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/AglInstaller.php' ), 'Composer\\Installers\\AimeosInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/AimeosInstaller.php' ), 'Composer\\Installers\\AnnotateCmsInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php' ), 'Composer\\Installers\\AsgardInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/AsgardInstaller.php' ), 'Composer\\Installers\\AttogramInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/AttogramInstaller.php' ), 'Composer\\Installers\\BaseInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/BaseInstaller.php' ), 'Composer\\Installers\\BitrixInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/BitrixInstaller.php' ), 'Composer\\Installers\\BonefishInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/BonefishInstaller.php' ), 'Composer\\Installers\\CakePHPInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/CakePHPInstaller.php' ), 'Composer\\Installers\\ChefInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/ChefInstaller.php' ), 'Composer\\Installers\\CiviCrmInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/CiviCrmInstaller.php' ), 'Composer\\Installers\\ClanCatsFrameworkInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php' ), 'Composer\\Installers\\CockpitInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/CockpitInstaller.php' ), 'Composer\\Installers\\CodeIgniterInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php' ), 'Composer\\Installers\\Concrete5Installer' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/Concrete5Installer.php' ), 'Composer\\Installers\\CraftInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/CraftInstaller.php' ), 'Composer\\Installers\\CroogoInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/CroogoInstaller.php' ), 'Composer\\Installers\\DecibelInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/DecibelInstaller.php' ), 'Composer\\Installers\\DframeInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/DframeInstaller.php' ), 'Composer\\Installers\\DokuWikiInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/DokuWikiInstaller.php' ), 'Composer\\Installers\\DolibarrInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/DolibarrInstaller.php' ), 'Composer\\Installers\\DrupalInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/DrupalInstaller.php' ), 'Composer\\Installers\\ElggInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/ElggInstaller.php' ), 'Composer\\Installers\\EliasisInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/EliasisInstaller.php' ), 'Composer\\Installers\\ExpressionEngineInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php' ), 'Composer\\Installers\\EzPlatformInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/EzPlatformInstaller.php' ), 'Composer\\Installers\\FuelInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/FuelInstaller.php' ), 'Composer\\Installers\\FuelphpInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/FuelphpInstaller.php' ), 'Composer\\Installers\\GravInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/GravInstaller.php' ), 'Composer\\Installers\\HuradInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/HuradInstaller.php' ), 'Composer\\Installers\\ImageCMSInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/ImageCMSInstaller.php' ), 'Composer\\Installers\\Installer' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/Installer.php' ), 'Composer\\Installers\\ItopInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/ItopInstaller.php' ), 'Composer\\Installers\\JoomlaInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/JoomlaInstaller.php' ), 'Composer\\Installers\\KanboardInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/KanboardInstaller.php' ), 'Composer\\Installers\\KirbyInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/KirbyInstaller.php' ), 'Composer\\Installers\\KnownInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/KnownInstaller.php' ), 'Composer\\Installers\\KodiCMSInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/KodiCMSInstaller.php' ), 'Composer\\Installers\\KohanaInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/KohanaInstaller.php' ), 'Composer\\Installers\\LanManagementSystemInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php' ), 'Composer\\Installers\\LaravelInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/LaravelInstaller.php' ), 'Composer\\Installers\\LavaLiteInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/LavaLiteInstaller.php' ), 'Composer\\Installers\\LithiumInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/LithiumInstaller.php' ), 'Composer\\Installers\\MODULEWorkInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php' ), 'Composer\\Installers\\MODXEvoInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/MODXEvoInstaller.php' ), 'Composer\\Installers\\MagentoInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/MagentoInstaller.php' ), 'Composer\\Installers\\MajimaInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/MajimaInstaller.php' ), 'Composer\\Installers\\MakoInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/MakoInstaller.php' ), 'Composer\\Installers\\MantisBTInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/MantisBTInstaller.php' ), 'Composer\\Installers\\MauticInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/MauticInstaller.php' ), 'Composer\\Installers\\MayaInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/MayaInstaller.php' ), 'Composer\\Installers\\MediaWikiInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/MediaWikiInstaller.php' ), 'Composer\\Installers\\MiaoxingInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/MiaoxingInstaller.php' ), 'Composer\\Installers\\MicroweberInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/MicroweberInstaller.php' ), 'Composer\\Installers\\ModxInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/ModxInstaller.php' ), 'Composer\\Installers\\MoodleInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/MoodleInstaller.php' ), 'Composer\\Installers\\OctoberInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/OctoberInstaller.php' ), 'Composer\\Installers\\OntoWikiInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/OntoWikiInstaller.php' ), 'Composer\\Installers\\OsclassInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/OsclassInstaller.php' ), 'Composer\\Installers\\OxidInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/OxidInstaller.php' ), 'Composer\\Installers\\PPIInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/PPIInstaller.php' ), 'Composer\\Installers\\PantheonInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/PantheonInstaller.php' ), 'Composer\\Installers\\PhiftyInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/PhiftyInstaller.php' ), 'Composer\\Installers\\PhpBBInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/PhpBBInstaller.php' ), 'Composer\\Installers\\PimcoreInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/PimcoreInstaller.php' ), 'Composer\\Installers\\PiwikInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/PiwikInstaller.php' ), 'Composer\\Installers\\PlentymarketsInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php' ), 'Composer\\Installers\\Plugin' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/Plugin.php' ), 'Composer\\Installers\\PortoInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/PortoInstaller.php' ), 'Composer\\Installers\\PrestashopInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/PrestashopInstaller.php' ), 'Composer\\Installers\\ProcessWireInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/ProcessWireInstaller.php' ), 'Composer\\Installers\\PuppetInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/PuppetInstaller.php' ), 'Composer\\Installers\\PxcmsInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/PxcmsInstaller.php' ), 'Composer\\Installers\\RadPHPInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/RadPHPInstaller.php' ), 'Composer\\Installers\\ReIndexInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/ReIndexInstaller.php' ), 'Composer\\Installers\\Redaxo5Installer' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/Redaxo5Installer.php' ), 'Composer\\Installers\\RedaxoInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/RedaxoInstaller.php' ), 'Composer\\Installers\\RoundcubeInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/RoundcubeInstaller.php' ), 'Composer\\Installers\\SMFInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/SMFInstaller.php' ), 'Composer\\Installers\\ShopwareInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/ShopwareInstaller.php' ), 'Composer\\Installers\\SilverStripeInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/SilverStripeInstaller.php' ), 'Composer\\Installers\\SiteDirectInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/SiteDirectInstaller.php' ), 'Composer\\Installers\\StarbugInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/StarbugInstaller.php' ), 'Composer\\Installers\\SyDESInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/SyDESInstaller.php' ), 'Composer\\Installers\\SyliusInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/SyliusInstaller.php' ), 'Composer\\Installers\\Symfony1Installer' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/Symfony1Installer.php' ), 'Composer\\Installers\\TYPO3CmsInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php' ), 'Composer\\Installers\\TYPO3FlowInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php' ), 'Composer\\Installers\\TaoInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/TaoInstaller.php' ), 'Composer\\Installers\\TastyIgniterInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/TastyIgniterInstaller.php' ), 'Composer\\Installers\\TheliaInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/TheliaInstaller.php' ), 'Composer\\Installers\\TuskInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/TuskInstaller.php' ), 'Composer\\Installers\\UserFrostingInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/UserFrostingInstaller.php' ), 'Composer\\Installers\\VanillaInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/VanillaInstaller.php' ), 'Composer\\Installers\\VgmcpInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/VgmcpInstaller.php' ), 'Composer\\Installers\\WHMCSInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/WHMCSInstaller.php' ), 'Composer\\Installers\\WinterInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/WinterInstaller.php' ), 'Composer\\Installers\\WolfCMSInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/WolfCMSInstaller.php' ), 'Composer\\Installers\\WordPressInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/WordPressInstaller.php' ), 'Composer\\Installers\\YawikInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/YawikInstaller.php' ), 'Composer\\Installers\\ZendInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/ZendInstaller.php' ), 'Composer\\Installers\\ZikulaInstaller' => array( 'version' => '1.12.0.0', 'path' => $vendorDir . '/composer/installers/src/Composer/Installers/ZikulaInstaller.php' ), 'Container' => array( 'version' => '5.0.0', 'path' => $vendorDir . '/automattic/jetpack-autoloader/src/class-container.php' ), 'EmailEditorVendor_Attribute' => array( 'version' => '2.3.0.0', 'path' => $baseDir . '/packages/email-editor/vendor-prefixed/classes/symfony/polyfill-php80/Resources/stubs/Attribute.php' ), 'EmailEditorVendor_PhpToken' => array( 'version' => '2.3.0.0', 'path' => $baseDir . '/packages/email-editor/vendor-prefixed/classes/symfony/polyfill-php80/Resources/stubs/PhpToken.php' ), 'EmailEditorVendor_Stringable' => array( 'version' => '2.3.0.0', 'path' => $baseDir . '/packages/email-editor/vendor-prefixed/classes/symfony/polyfill-php80/Resources/stubs/Stringable.php' ), 'EmailEditorVendor_UnhandledMatchError' => array( 'version' => '2.3.0.0', 'path' => $baseDir . '/packages/email-editor/vendor-prefixed/classes/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php' ), 'EmailEditorVendor_ValueError' => array( 'version' => '2.3.0.0', 'path' => $baseDir . '/packages/email-editor/vendor-prefixed/classes/symfony/polyfill-php80/Resources/stubs/ValueError.php' ), 'Hook_Manager' => array( 'version' => '5.0.0', 'path' => $vendorDir . '/automattic/jetpack-autoloader/src/class-hook-manager.php' ), 'Jetpack_IXR_Client' => array( 'version' => '6.19.2.0', 'path' => $vendorDir . '/automattic/jetpack-connection/legacy/class-jetpack-ixr-client.php' ), 'Jetpack_IXR_ClientMulticall' => array( 'version' => '6.19.2.0', 'path' => $vendorDir . '/automattic/jetpack-connection/legacy/class-jetpack-ixr-clientmulticall.php' ), 'Jetpack_Options' => array( 'version' => '6.19.2.0', 'path' => $vendorDir . '/automattic/jetpack-connection/legacy/class-jetpack-options.php' ), 'Jetpack_Signature' => array( 'version' => '6.19.2.0', 'path' => $vendorDir . '/automattic/jetpack-connection/legacy/class-jetpack-signature.php' ), 'Jetpack_Tracks_Client' => array( 'version' => '6.19.2.0', 'path' => $vendorDir . '/automattic/jetpack-connection/legacy/class-jetpack-tracks-client.php' ), 'Jetpack_Tracks_Event' => array( 'version' => '6.19.2.0', 'path' => $vendorDir . '/automattic/jetpack-connection/legacy/class-jetpack-tracks-event.php' ), 'Jetpack_XMLRPC_Server' => array( 'version' => '6.19.2.0', 'path' => $vendorDir . '/automattic/jetpack-connection/legacy/class-jetpack-xmlrpc-server.php' ), 'Latest_Autoloader_Guard' => array( 'version' => '5.0.0', 'path' => $vendorDir . '/automattic/jetpack-autoloader/src/class-latest-autoloader-guard.php' ), 'Manifest_Reader' => array( 'version' => '5.0.0', 'path' => $vendorDir . '/automattic/jetpack-autoloader/src/class-manifest-reader.php' ), 'MaxMind\\Db\\Reader' => array( 'version' => '1.12.1.0', 'path' => $vendorDir . '/maxmind-db/reader/src/MaxMind/Db/Reader.php' ), 'MaxMind\\Db\\Reader\\Decoder' => array( 'version' => '1.12.1.0', 'path' => $vendorDir . '/maxmind-db/reader/src/MaxMind/Db/Reader/Decoder.php' ), 'MaxMind\\Db\\Reader\\InvalidDatabaseException' => array( 'version' => '1.12.1.0', 'path' => $vendorDir . '/maxmind-db/reader/src/MaxMind/Db/Reader/InvalidDatabaseException.php' ), 'MaxMind\\Db\\Reader\\Metadata' => array( 'version' => '1.12.1.0', 'path' => $vendorDir . '/maxmind-db/reader/src/MaxMind/Db/Reader/Metadata.php' ), 'MaxMind\\Db\\Reader\\Util' => array( 'version' => '1.12.1.0', 'path' => $vendorDir . '/maxmind-db/reader/src/MaxMind/Db/Reader/Util.php' ), 'Opis\\JsonSchema\\CompliantValidator' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/CompliantValidator.php' ), 'Opis\\JsonSchema\\ContentEncoding' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/ContentEncoding.php' ), 'Opis\\JsonSchema\\ContentMediaType' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/ContentMediaType.php' ), 'Opis\\JsonSchema\\Errors\\CustomError' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Errors/CustomError.php' ), 'Opis\\JsonSchema\\Errors\\ErrorContainer' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Errors/ErrorContainer.php' ), 'Opis\\JsonSchema\\Errors\\ErrorFormatter' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Errors/ErrorFormatter.php' ), 'Opis\\JsonSchema\\Errors\\ValidationError' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Errors/ValidationError.php' ), 'Opis\\JsonSchema\\Exceptions\\DuplicateSchemaIdException' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Exceptions/DuplicateSchemaIdException.php' ), 'Opis\\JsonSchema\\Exceptions\\InvalidKeywordException' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Exceptions/InvalidKeywordException.php' ), 'Opis\\JsonSchema\\Exceptions\\InvalidPragmaException' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Exceptions/InvalidPragmaException.php' ), 'Opis\\JsonSchema\\Exceptions\\ParseException' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Exceptions/ParseException.php' ), 'Opis\\JsonSchema\\Exceptions\\SchemaException' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Exceptions/SchemaException.php' ), 'Opis\\JsonSchema\\Exceptions\\UnresolvedContentEncodingException' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Exceptions/UnresolvedContentEncodingException.php' ), 'Opis\\JsonSchema\\Exceptions\\UnresolvedContentMediaTypeException' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Exceptions/UnresolvedContentMediaTypeException.php' ), 'Opis\\JsonSchema\\Exceptions\\UnresolvedException' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Exceptions/UnresolvedException.php' ), 'Opis\\JsonSchema\\Exceptions\\UnresolvedFilterException' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Exceptions/UnresolvedFilterException.php' ), 'Opis\\JsonSchema\\Exceptions\\UnresolvedReferenceException' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Exceptions/UnresolvedReferenceException.php' ), 'Opis\\JsonSchema\\Filter' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Filter.php' ), 'Opis\\JsonSchema\\Filters\\CommonFilters' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Filters/CommonFilters.php' ), 'Opis\\JsonSchema\\Filters\\DataExistsFilter' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Filters/DataExistsFilter.php' ), 'Opis\\JsonSchema\\Filters\\DateTimeFilters' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Filters/DateTimeFilters.php' ), 'Opis\\JsonSchema\\Filters\\FilterExistsFilter' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Filters/FilterExistsFilter.php' ), 'Opis\\JsonSchema\\Filters\\FormatExistsFilter' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Filters/FormatExistsFilter.php' ), 'Opis\\JsonSchema\\Filters\\GlobalVarExistsFilter' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Filters/GlobalVarExistsFilter.php' ), 'Opis\\JsonSchema\\Filters\\SchemaExistsFilter' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Filters/SchemaExistsFilter.php' ), 'Opis\\JsonSchema\\Filters\\SlotExistsFilter' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Filters/SlotExistsFilter.php' ), 'Opis\\JsonSchema\\Format' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Format.php' ), 'Opis\\JsonSchema\\Formats\\DateTimeFormats' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Formats/DateTimeFormats.php' ), 'Opis\\JsonSchema\\Formats\\IriFormats' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Formats/IriFormats.php' ), 'Opis\\JsonSchema\\Formats\\MiscFormats' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Formats/MiscFormats.php' ), 'Opis\\JsonSchema\\Formats\\UriFormats' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Formats/UriFormats.php' ), 'Opis\\JsonSchema\\Helper' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Helper.php' ), 'Opis\\JsonSchema\\Info\\DataInfo' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Info/DataInfo.php' ), 'Opis\\JsonSchema\\Info\\SchemaInfo' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Info/SchemaInfo.php' ), 'Opis\\JsonSchema\\JsonPointer' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/JsonPointer.php' ), 'Opis\\JsonSchema\\Keyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keyword.php' ), 'Opis\\JsonSchema\\KeywordValidator' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/KeywordValidator.php' ), 'Opis\\JsonSchema\\KeywordValidators\\AbstractKeywordValidator' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/KeywordValidators/AbstractKeywordValidator.php' ), 'Opis\\JsonSchema\\KeywordValidators\\CallbackKeywordValidator' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/KeywordValidators/CallbackKeywordValidator.php' ), 'Opis\\JsonSchema\\KeywordValidators\\PragmaKeywordValidator' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/KeywordValidators/PragmaKeywordValidator.php' ), 'Opis\\JsonSchema\\Keywords\\AbstractRefKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/AbstractRefKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\AdditionalItemsKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/AdditionalItemsKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\AdditionalPropertiesKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/AdditionalPropertiesKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\AllOfKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/AllOfKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\AnyOfKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/AnyOfKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\ConstDataKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/ConstDataKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\ConstKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/ConstKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\ContainsKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/ContainsKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\ContentEncodingKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/ContentEncodingKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\ContentMediaTypeKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/ContentMediaTypeKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\ContentSchemaKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/ContentSchemaKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\DefaultKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/DefaultKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\DependenciesKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/DependenciesKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\DependentRequiredKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/DependentRequiredKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\DependentSchemasKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/DependentSchemasKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\EnumDataKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/EnumDataKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\EnumKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/EnumKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\ErrorTrait' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/ErrorTrait.php' ), 'Opis\\JsonSchema\\Keywords\\ExclusiveMaximumDataKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/ExclusiveMaximumDataKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\ExclusiveMaximumKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/ExclusiveMaximumKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\ExclusiveMinimumDataKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/ExclusiveMinimumDataKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\ExclusiveMinimumKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/ExclusiveMinimumKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\FiltersKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/FiltersKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\FormatDataKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/FormatDataKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\FormatKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/FormatKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\IfThenElseKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/IfThenElseKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\ItemsKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/ItemsKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\IterableDataValidationTrait' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/IterableDataValidationTrait.php' ), 'Opis\\JsonSchema\\Keywords\\MaxItemsDataKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/MaxItemsDataKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\MaxItemsKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/MaxItemsKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\MaxLengthDataKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/MaxLengthDataKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\MaxLengthKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/MaxLengthKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\MaxPropertiesDataKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/MaxPropertiesDataKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\MaxPropertiesKeywords' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/MaxPropertiesKeywords.php' ), 'Opis\\JsonSchema\\Keywords\\MaximumDataKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/MaximumDataKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\MaximumKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/MaximumKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\MinItemsDataKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/MinItemsDataKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\MinItemsKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/MinItemsKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\MinLengthDataKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/MinLengthDataKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\MinLengthKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/MinLengthKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\MinPropertiesDataKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/MinPropertiesDataKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\MinPropertiesKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/MinPropertiesKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\MinimumDataKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/MinimumDataKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\MinimumKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/MinimumKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\MultipleOfDataKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/MultipleOfDataKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\MultipleOfKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/MultipleOfKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\NotKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/NotKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\OfTrait' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/OfTrait.php' ), 'Opis\\JsonSchema\\Keywords\\OneOfKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/OneOfKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\PatternDataKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/PatternDataKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\PatternKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/PatternKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\PatternPropertiesKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/PatternPropertiesKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\PointerRefKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/PointerRefKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\PropertiesKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/PropertiesKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\PropertyNamesKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/PropertyNamesKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\RecursiveRefKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/RecursiveRefKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\RequiredDataKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/RequiredDataKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\RequiredKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/RequiredKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\SlotsKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/SlotsKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\TemplateRefKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/TemplateRefKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\TypeKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/TypeKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\URIRefKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/URIRefKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\UnevaluatedItemsKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/UnevaluatedItemsKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\UnevaluatedPropertiesKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/UnevaluatedPropertiesKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\UniqueItemsDataKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/UniqueItemsDataKeyword.php' ), 'Opis\\JsonSchema\\Keywords\\UniqueItemsKeyword' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Keywords/UniqueItemsKeyword.php' ), 'Opis\\JsonSchema\\Parsers\\DataKeywordTrait' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/DataKeywordTrait.php' ), 'Opis\\JsonSchema\\Parsers\\DefaultVocabulary' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/DefaultVocabulary.php' ), 'Opis\\JsonSchema\\Parsers\\Draft' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Draft.php' ), 'Opis\\JsonSchema\\Parsers\\DraftOptionTrait' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/DraftOptionTrait.php' ), 'Opis\\JsonSchema\\Parsers\\Drafts\\Draft06' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Drafts/Draft06.php' ), 'Opis\\JsonSchema\\Parsers\\Drafts\\Draft07' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Drafts/Draft07.php' ), 'Opis\\JsonSchema\\Parsers\\Drafts\\Draft201909' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Drafts/Draft201909.php' ), 'Opis\\JsonSchema\\Parsers\\Drafts\\Draft202012' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Drafts/Draft202012.php' ), 'Opis\\JsonSchema\\Parsers\\KeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/KeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\KeywordParserTrait' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/KeywordParserTrait.php' ), 'Opis\\JsonSchema\\Parsers\\KeywordValidatorParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/KeywordValidatorParser.php' ), 'Opis\\JsonSchema\\Parsers\\KeywordValidators\\PragmaKeywordValidatorParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/KeywordValidators/PragmaKeywordValidatorParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\AdditionalItemsKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/AdditionalItemsKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\AdditionalPropertiesKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/AdditionalPropertiesKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\AllOfKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/AllOfKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\AnyOfKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/AnyOfKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\ConstKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/ConstKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\ContainsKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/ContainsKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\ContentEncodingKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/ContentEncodingKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\ContentMediaTypeKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/ContentMediaTypeKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\ContentSchemaKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/ContentSchemaKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\DefaultKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/DefaultKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\DependenciesKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/DependenciesKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\DependentRequiredKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/DependentRequiredKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\DependentSchemasKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/DependentSchemasKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\EnumKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/EnumKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\ExclusiveMaximumKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/ExclusiveMaximumKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\ExclusiveMinimumKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/ExclusiveMinimumKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\FiltersKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/FiltersKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\FormatKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/FormatKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\IfThenElseKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/IfThenElseKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\ItemsKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/ItemsKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\MaxItemsKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/MaxItemsKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\MaxLengthKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/MaxLengthKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\MaxPropertiesKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/MaxPropertiesKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\MaximumKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/MaximumKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\MinItemsKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/MinItemsKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\MinLengthKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/MinLengthKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\MinPropertiesKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/MinPropertiesKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\MinimumKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/MinimumKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\MultipleOfKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/MultipleOfKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\NotKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/NotKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\OneOfKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/OneOfKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\PatternKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/PatternKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\PatternPropertiesKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/PatternPropertiesKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\PropertiesKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/PropertiesKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\PropertyNamesKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/PropertyNamesKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\RefKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/RefKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\RequiredKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/RequiredKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\SlotsKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/SlotsKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\TypeKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/TypeKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\UnevaluatedItemsKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/UnevaluatedItemsKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\UnevaluatedPropertiesKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/UnevaluatedPropertiesKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\Keywords\\UniqueItemsKeywordParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Keywords/UniqueItemsKeywordParser.php' ), 'Opis\\JsonSchema\\Parsers\\PragmaParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/PragmaParser.php' ), 'Opis\\JsonSchema\\Parsers\\Pragmas\\CastPragmaParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Pragmas/CastPragmaParser.php' ), 'Opis\\JsonSchema\\Parsers\\Pragmas\\GlobalsPragmaParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Pragmas/GlobalsPragmaParser.php' ), 'Opis\\JsonSchema\\Parsers\\Pragmas\\MaxErrorsPragmaParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Pragmas/MaxErrorsPragmaParser.php' ), 'Opis\\JsonSchema\\Parsers\\Pragmas\\SlotsPragmaParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Pragmas/SlotsPragmaParser.php' ), 'Opis\\JsonSchema\\Parsers\\ResolverTrait' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/ResolverTrait.php' ), 'Opis\\JsonSchema\\Parsers\\SchemaParser' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/SchemaParser.php' ), 'Opis\\JsonSchema\\Parsers\\VariablesTrait' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/VariablesTrait.php' ), 'Opis\\JsonSchema\\Parsers\\Vocabulary' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Parsers/Vocabulary.php' ), 'Opis\\JsonSchema\\Pragma' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Pragma.php' ), 'Opis\\JsonSchema\\Pragmas\\CastPragma' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Pragmas/CastPragma.php' ), 'Opis\\JsonSchema\\Pragmas\\GlobalsPragma' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Pragmas/GlobalsPragma.php' ), 'Opis\\JsonSchema\\Pragmas\\MaxErrorsPragma' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Pragmas/MaxErrorsPragma.php' ), 'Opis\\JsonSchema\\Pragmas\\SlotsPragma' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Pragmas/SlotsPragma.php' ), 'Opis\\JsonSchema\\Resolvers\\ContentEncodingResolver' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Resolvers/ContentEncodingResolver.php' ), 'Opis\\JsonSchema\\Resolvers\\ContentMediaTypeResolver' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Resolvers/ContentMediaTypeResolver.php' ), 'Opis\\JsonSchema\\Resolvers\\FilterResolver' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Resolvers/FilterResolver.php' ), 'Opis\\JsonSchema\\Resolvers\\FormatResolver' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Resolvers/FormatResolver.php' ), 'Opis\\JsonSchema\\Resolvers\\SchemaResolver' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Resolvers/SchemaResolver.php' ), 'Opis\\JsonSchema\\Schema' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Schema.php' ), 'Opis\\JsonSchema\\SchemaLoader' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/SchemaLoader.php' ), 'Opis\\JsonSchema\\SchemaValidator' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/SchemaValidator.php' ), 'Opis\\JsonSchema\\Schemas\\AbstractSchema' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Schemas/AbstractSchema.php' ), 'Opis\\JsonSchema\\Schemas\\BooleanSchema' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Schemas/BooleanSchema.php' ), 'Opis\\JsonSchema\\Schemas\\EmptySchema' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Schemas/EmptySchema.php' ), 'Opis\\JsonSchema\\Schemas\\ExceptionSchema' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Schemas/ExceptionSchema.php' ), 'Opis\\JsonSchema\\Schemas\\LazySchema' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Schemas/LazySchema.php' ), 'Opis\\JsonSchema\\Schemas\\ObjectSchema' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Schemas/ObjectSchema.php' ), 'Opis\\JsonSchema\\Uri' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Uri.php' ), 'Opis\\JsonSchema\\ValidationContext' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/ValidationContext.php' ), 'Opis\\JsonSchema\\ValidationResult' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/ValidationResult.php' ), 'Opis\\JsonSchema\\Validator' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Validator.php' ), 'Opis\\JsonSchema\\Variables' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Variables.php' ), 'Opis\\JsonSchema\\Variables\\RefVariablesContainer' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Variables/RefVariablesContainer.php' ), 'Opis\\JsonSchema\\Variables\\VariablesContainer' => array( 'version' => '2.6.0.0', 'path' => $vendorDir . '/opis/json-schema/src/Variables/VariablesContainer.php' ), 'Opis\\String\\Exception\\InvalidCodePointException' => array( 'version' => '2.1.0.0', 'path' => $vendorDir . '/opis/string/src/Exception/InvalidCodePointException.php' ), 'Opis\\String\\Exception\\InvalidStringException' => array( 'version' => '2.1.0.0', 'path' => $vendorDir . '/opis/string/src/Exception/InvalidStringException.php' ), 'Opis\\String\\Exception\\UnicodeException' => array( 'version' => '2.1.0.0', 'path' => $vendorDir . '/opis/string/src/Exception/UnicodeException.php' ), 'Opis\\String\\UnicodeString' => array( 'version' => '2.1.0.0', 'path' => $vendorDir . '/opis/string/src/UnicodeString.php' ), 'Opis\\Uri\\Punycode' => array( 'version' => '1.1.0.0', 'path' => $vendorDir . '/opis/uri/src/Punycode.php' ), 'Opis\\Uri\\PunycodeException' => array( 'version' => '1.1.0.0', 'path' => $vendorDir . '/opis/uri/src/PunycodeException.php' ), 'Opis\\Uri\\Uri' => array( 'version' => '1.1.0.0', 'path' => $vendorDir . '/opis/uri/src/Uri.php' ), 'Opis\\Uri\\UriTemplate' => array( 'version' => '1.1.0.0', 'path' => $vendorDir . '/opis/uri/src/UriTemplate.php' ), 'PHP_Autoloader' => array( 'version' => '5.0.0', 'path' => $vendorDir . '/automattic/jetpack-autoloader/src/class-php-autoloader.php' ), 'Path_Processor' => array( 'version' => '5.0.0', 'path' => $vendorDir . '/automattic/jetpack-autoloader/src/class-path-processor.php' ), 'PhpToken' => array( 'version' => '2.3.0.0', 'path' => $baseDir . '/packages/email-editor/vendor-prefixed/packages/Symfony/Polyfill/Php80/Resources/stubs/PhpToken.php' ), 'Plugin_Locator' => array( 'version' => '5.0.0', 'path' => $vendorDir . '/automattic/jetpack-autoloader/src/class-plugin-locator.php' ), 'Plugins_Handler' => array( 'version' => '5.0.0', 'path' => $vendorDir . '/automattic/jetpack-autoloader/src/class-plugins-handler.php' ), 'Shutdown_Handler' => array( 'version' => '5.0.0', 'path' => $vendorDir . '/automattic/jetpack-autoloader/src/class-shutdown-handler.php' ), 'Stringable' => array( 'version' => '2.3.0.0', 'path' => $baseDir . '/packages/email-editor/vendor-prefixed/packages/Symfony/Polyfill/Php80/Resources/stubs/Stringable.php' ), 'UnhandledMatchError' => array( 'version' => '2.3.0.0', 'path' => $baseDir . '/packages/email-editor/vendor-prefixed/packages/Symfony/Polyfill/Php80/Resources/stubs/UnhandledMatchError.php' ), 'ValueError' => array( 'version' => '2.3.0.0', 'path' => $baseDir . '/packages/email-editor/vendor-prefixed/packages/Symfony/Polyfill/Php80/Resources/stubs/ValueError.php' ), 'Version_Loader' => array( 'version' => '5.0.0', 'path' => $vendorDir . '/automattic/jetpack-autoloader/src/class-version-loader.php' ), 'Version_Selector' => array( 'version' => '5.0.0', 'path' => $vendorDir . '/automattic/jetpack-autoloader/src/class-version-selector.php' ), 'WC_REST_CRUD_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-crud-controller.php' ), 'WC_REST_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-controller.php' ), 'WC_REST_Coupons_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-coupons-controller.php' ), 'WC_REST_Coupons_V1_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version1/class-wc-rest-coupons-v1-controller.php' ), 'WC_REST_Coupons_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-coupons-v2-controller.php' ), 'WC_REST_Customer_Downloads_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-customer-downloads-controller.php' ), 'WC_REST_Customer_Downloads_V1_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version1/class-wc-rest-customer-downloads-v1-controller.php' ), 'WC_REST_Customer_Downloads_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-customer-downloads-v2-controller.php' ), 'WC_REST_Customers_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-customers-controller.php' ), 'WC_REST_Customers_V1_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version1/class-wc-rest-customers-v1-controller.php' ), 'WC_REST_Customers_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-customers-v2-controller.php' ), 'WC_REST_Data_Continents_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-data-continents-controller.php' ), 'WC_REST_Data_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-data-controller.php' ), 'WC_REST_Data_Countries_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-data-countries-controller.php' ), 'WC_REST_Data_Currencies_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-data-currencies-controller.php' ), 'WC_REST_Layout_Templates_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-layout-templates-controller.php' ), 'WC_REST_Network_Orders_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-network-orders-controller.php' ), 'WC_REST_Network_Orders_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-network-orders-v2-controller.php' ), 'WC_REST_Order_Notes_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-order-notes-controller.php' ), 'WC_REST_Order_Notes_V1_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version1/class-wc-rest-order-notes-v1-controller.php' ), 'WC_REST_Order_Notes_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-order-notes-v2-controller.php' ), 'WC_REST_Order_Refunds_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-order-refunds-controller.php' ), 'WC_REST_Order_Refunds_V1_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version1/class-wc-rest-order-refunds-v1-controller.php' ), 'WC_REST_Order_Refunds_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-order-refunds-v2-controller.php' ), 'WC_REST_Orders_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-orders-controller.php' ), 'WC_REST_Orders_V1_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version1/class-wc-rest-orders-v1-controller.php' ), 'WC_REST_Orders_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-orders-v2-controller.php' ), 'WC_REST_Payment_Gateways_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-payment-gateways-controller.php' ), 'WC_REST_Payment_Gateways_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-payment-gateways-v2-controller.php' ), 'WC_REST_Paypal_Buttons_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-paypal-buttons-controller.php' ), 'WC_REST_Paypal_Standard_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-paypal-standard-controller.php' ), 'WC_REST_Paypal_Webhooks_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-paypal-webhooks-controller.php' ), 'WC_REST_Posts_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-posts-controller.php' ), 'WC_REST_Product_Attribute_Terms_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-product-attribute-terms-controller.php' ), 'WC_REST_Product_Attribute_Terms_V1_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version1/class-wc-rest-product-attribute-terms-v1-controller.php' ), 'WC_REST_Product_Attribute_Terms_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-product-attribute-terms-v2-controller.php' ), 'WC_REST_Product_Attributes_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-product-attributes-controller.php' ), 'WC_REST_Product_Attributes_V1_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version1/class-wc-rest-product-attributes-v1-controller.php' ), 'WC_REST_Product_Attributes_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-product-attributes-v2-controller.php' ), 'WC_REST_Product_Brands_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-product-brands-controller.php' ), 'WC_REST_Product_Brands_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-product-brands-v2-controller.php' ), 'WC_REST_Product_Categories_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-product-categories-controller.php' ), 'WC_REST_Product_Categories_V1_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version1/class-wc-rest-product-categories-v1-controller.php' ), 'WC_REST_Product_Categories_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-product-categories-v2-controller.php' ), 'WC_REST_Product_Custom_Fields_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-product-custom-fields-controller.php' ), 'WC_REST_Product_Reviews_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-product-reviews-controller.php' ), 'WC_REST_Product_Reviews_V1_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version1/class-wc-rest-product-reviews-v1-controller.php' ), 'WC_REST_Product_Reviews_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-product-reviews-v2-controller.php' ), 'WC_REST_Product_Shipping_Classes_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-product-shipping-classes-controller.php' ), 'WC_REST_Product_Shipping_Classes_V1_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version1/class-wc-rest-product-shipping-classes-v1-controller.php' ), 'WC_REST_Product_Shipping_Classes_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-product-shipping-classes-v2-controller.php' ), 'WC_REST_Product_Tags_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-product-tags-controller.php' ), 'WC_REST_Product_Tags_V1_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version1/class-wc-rest-product-tags-v1-controller.php' ), 'WC_REST_Product_Tags_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-product-tags-v2-controller.php' ), 'WC_REST_Product_Variations_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-product-variations-controller.php' ), 'WC_REST_Product_Variations_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-product-variations-v2-controller.php' ), 'WC_REST_Products_Catalog_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-products-catalog-controller.php' ), 'WC_REST_Products_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-products-controller.php' ), 'WC_REST_Products_V1_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version1/class-wc-rest-products-v1-controller.php' ), 'WC_REST_Products_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-products-v2-controller.php' ), 'WC_REST_Refunds_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-refunds-controller.php' ), 'WC_REST_Report_Coupons_Totals_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-report-coupons-totals-controller.php' ), 'WC_REST_Report_Customers_Totals_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-report-customers-totals-controller.php' ), 'WC_REST_Report_Orders_Totals_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-report-orders-totals-controller.php' ), 'WC_REST_Report_Products_Totals_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-report-products-totals-controller.php' ), 'WC_REST_Report_Reviews_Totals_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-report-reviews-totals-controller.php' ), 'WC_REST_Report_Sales_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-report-sales-controller.php' ), 'WC_REST_Report_Sales_V1_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version1/class-wc-rest-report-sales-v1-controller.php' ), 'WC_REST_Report_Sales_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-report-sales-v2-controller.php' ), 'WC_REST_Report_Top_Sellers_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-report-top-sellers-controller.php' ), 'WC_REST_Report_Top_Sellers_V1_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version1/class-wc-rest-report-top-sellers-v1-controller.php' ), 'WC_REST_Report_Top_Sellers_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-report-top-sellers-v2-controller.php' ), 'WC_REST_Reports_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-reports-controller.php' ), 'WC_REST_Reports_V1_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version1/class-wc-rest-reports-v1-controller.php' ), 'WC_REST_Reports_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-reports-v2-controller.php' ), 'WC_REST_Setting_Options_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-setting-options-controller.php' ), 'WC_REST_Setting_Options_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-setting-options-v2-controller.php' ), 'WC_REST_Settings_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-settings-controller.php' ), 'WC_REST_Settings_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-settings-v2-controller.php' ), 'WC_REST_Settings_V4_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version4/class-wc-rest-settings-v4-controller.php' ), 'WC_REST_Shipping_Methods_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-shipping-methods-controller.php' ), 'WC_REST_Shipping_Methods_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-shipping-methods-v2-controller.php' ), 'WC_REST_Shipping_Zone_Locations_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-shipping-zone-locations-controller.php' ), 'WC_REST_Shipping_Zone_Locations_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-shipping-zone-locations-v2-controller.php' ), 'WC_REST_Shipping_Zone_Methods_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-shipping-zone-methods-controller.php' ), 'WC_REST_Shipping_Zone_Methods_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-shipping-zone-methods-v2-controller.php' ), 'WC_REST_Shipping_Zones_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-shipping-zones-controller.php' ), 'WC_REST_Shipping_Zones_Controller_Base' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-shipping-zones-controller-base.php' ), 'WC_REST_Shipping_Zones_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-shipping-zones-v2-controller.php' ), 'WC_REST_System_Status_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-system-status-controller.php' ), 'WC_REST_System_Status_Tools_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-system-status-tools-controller.php' ), 'WC_REST_System_Status_Tools_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-system-status-tools-v2-controller.php' ), 'WC_REST_System_Status_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-system-status-v2-controller.php' ), 'WC_REST_Tax_Classes_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-tax-classes-controller.php' ), 'WC_REST_Tax_Classes_V1_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version1/class-wc-rest-tax-classes-v1-controller.php' ), 'WC_REST_Tax_Classes_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-tax-classes-v2-controller.php' ), 'WC_REST_Taxes_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-taxes-controller.php' ), 'WC_REST_Taxes_V1_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version1/class-wc-rest-taxes-v1-controller.php' ), 'WC_REST_Taxes_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-taxes-v2-controller.php' ), 'WC_REST_Telemetry_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Telemetry/class-wc-rest-telemetry-controller.php' ), 'WC_REST_Terms_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-terms-controller.php' ), 'WC_REST_V4_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version4/class-wc-rest-v4-controller.php' ), 'WC_REST_Variations_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-variations-controller.php' ), 'WC_REST_Webhook_Deliveries_V1_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version1/class-wc-rest-webhook-deliveries-v1-controller.php' ), 'WC_REST_Webhook_Deliveries_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-webhook-deliveries-v2-controller.php' ), 'WC_REST_Webhooks_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version3/class-wc-rest-webhooks-controller.php' ), 'WC_REST_Webhooks_V1_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version1/class-wc-rest-webhooks-v1-controller.php' ), 'WC_REST_Webhooks_V2_Controller' => array( 'version' => '10.5.0.0', 'path' => $baseDir . '/includes/rest-api/Controllers/Version2/class-wc-rest-webhooks-v2-controller.php' ), 'WP\\MCP\\Abilities\\DiscoverAbilitiesAbility' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Abilities/DiscoverAbilitiesAbility.php' ), 'WP\\MCP\\Abilities\\ExecuteAbilityAbility' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Abilities/ExecuteAbilityAbility.php' ), 'WP\\MCP\\Abilities\\GetAbilityInfoAbility' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Abilities/GetAbilityInfoAbility.php' ), 'WP\\MCP\\Abilities\\McpAbilityHelperTrait' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Abilities/McpAbilityHelperTrait.php' ), 'WP\\MCP\\Autoloader' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Autoloader.php' ), 'WP\\MCP\\Cli\\McpCommand' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Cli/McpCommand.php' ), 'WP\\MCP\\Cli\\StdioServerBridge' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Cli/StdioServerBridge.php' ), 'WP\\MCP\\Core\\McpAdapter' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Core/McpAdapter.php' ), 'WP\\MCP\\Core\\McpComponentRegistry' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Core/McpComponentRegistry.php' ), 'WP\\MCP\\Core\\McpServer' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Core/McpServer.php' ), 'WP\\MCP\\Core\\McpTransportFactory' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Core/McpTransportFactory.php' ), 'WP\\MCP\\Domain\\Prompts\\Contracts\\McpPromptBuilderInterface' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Prompts/Contracts/McpPromptBuilderInterface.php' ), 'WP\\MCP\\Domain\\Prompts\\McpPrompt' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Prompts/McpPrompt.php' ), 'WP\\MCP\\Domain\\Prompts\\McpPromptBuilder' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Prompts/McpPromptBuilder.php' ), 'WP\\MCP\\Domain\\Prompts\\McpPromptValidator' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Prompts/McpPromptValidator.php' ), 'WP\\MCP\\Domain\\Prompts\\RegisterAbilityAsMcpPrompt' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Prompts/RegisterAbilityAsMcpPrompt.php' ), 'WP\\MCP\\Domain\\Resources\\McpResource' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Resources/McpResource.php' ), 'WP\\MCP\\Domain\\Resources\\McpResourceValidator' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Resources/McpResourceValidator.php' ), 'WP\\MCP\\Domain\\Resources\\RegisterAbilityAsMcpResource' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Resources/RegisterAbilityAsMcpResource.php' ), 'WP\\MCP\\Domain\\Tools\\McpTool' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Tools/McpTool.php' ), 'WP\\MCP\\Domain\\Tools\\McpToolValidator' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Tools/McpToolValidator.php' ), 'WP\\MCP\\Domain\\Tools\\RegisterAbilityAsMcpTool' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Domain/Tools/RegisterAbilityAsMcpTool.php' ), 'WP\\MCP\\Handlers\\HandlerHelperTrait' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Handlers/HandlerHelperTrait.php' ), 'WP\\MCP\\Handlers\\Initialize\\InitializeHandler' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Handlers/Initialize/InitializeHandler.php' ), 'WP\\MCP\\Handlers\\Prompts\\PromptsHandler' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Handlers/Prompts/PromptsHandler.php' ), 'WP\\MCP\\Handlers\\Resources\\ResourcesHandler' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Handlers/Resources/ResourcesHandler.php' ), 'WP\\MCP\\Handlers\\System\\SystemHandler' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Handlers/System/SystemHandler.php' ), 'WP\\MCP\\Handlers\\Tools\\ToolsHandler' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Handlers/Tools/ToolsHandler.php' ), 'WP\\MCP\\Infrastructure\\ErrorHandling\\Contracts\\McpErrorHandlerInterface' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Infrastructure/ErrorHandling/Contracts/McpErrorHandlerInterface.php' ), 'WP\\MCP\\Infrastructure\\ErrorHandling\\ErrorLogMcpErrorHandler' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Infrastructure/ErrorHandling/ErrorLogMcpErrorHandler.php' ), 'WP\\MCP\\Infrastructure\\ErrorHandling\\McpErrorFactory' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Infrastructure/ErrorHandling/McpErrorFactory.php' ), 'WP\\MCP\\Infrastructure\\ErrorHandling\\NullMcpErrorHandler' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Infrastructure/ErrorHandling/NullMcpErrorHandler.php' ), 'WP\\MCP\\Infrastructure\\Observability\\ConsoleObservabilityHandler' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Infrastructure/Observability/ConsoleObservabilityHandler.php' ), 'WP\\MCP\\Infrastructure\\Observability\\Contracts\\McpObservabilityHandlerInterface' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Infrastructure/Observability/Contracts/McpObservabilityHandlerInterface.php' ), 'WP\\MCP\\Infrastructure\\Observability\\ErrorLogMcpObservabilityHandler' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Infrastructure/Observability/ErrorLogMcpObservabilityHandler.php' ), 'WP\\MCP\\Infrastructure\\Observability\\McpObservabilityHelperTrait' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Infrastructure/Observability/McpObservabilityHelperTrait.php' ), 'WP\\MCP\\Infrastructure\\Observability\\NullMcpObservabilityHandler' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Infrastructure/Observability/NullMcpObservabilityHandler.php' ), 'WP\\MCP\\Plugin' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Plugin.php' ), 'WP\\MCP\\Servers\\DefaultServerFactory' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Servers/DefaultServerFactory.php' ), 'WP\\MCP\\Transport\\Contracts\\McpRestTransportInterface' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/Contracts/McpRestTransportInterface.php' ), 'WP\\MCP\\Transport\\Contracts\\McpTransportInterface' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/Contracts/McpTransportInterface.php' ), 'WP\\MCP\\Transport\\HttpTransport' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/HttpTransport.php' ), 'WP\\MCP\\Transport\\Infrastructure\\HttpRequestContext' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/HttpRequestContext.php' ), 'WP\\MCP\\Transport\\Infrastructure\\HttpRequestHandler' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/HttpRequestHandler.php' ), 'WP\\MCP\\Transport\\Infrastructure\\HttpSessionValidator' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/HttpSessionValidator.php' ), 'WP\\MCP\\Transport\\Infrastructure\\JsonRpcResponseBuilder' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/JsonRpcResponseBuilder.php' ), 'WP\\MCP\\Transport\\Infrastructure\\McpTransportContext' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/McpTransportContext.php' ), 'WP\\MCP\\Transport\\Infrastructure\\McpTransportHelperTrait' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/McpTransportHelperTrait.php' ), 'WP\\MCP\\Transport\\Infrastructure\\RequestRouter' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/RequestRouter.php' ), 'WP\\MCP\\Transport\\Infrastructure\\SessionManager' => array( 'version' => '0.3.0.0', 'path' => $vendorDir . '/wordpress/mcp-adapter/includes/Transport/Infrastructure/SessionManager.php' ), ); The step can only be completed if the requirements are met. Otherwise, ignore the stored completed status. if ( $meets_requirements && $this->was_onboarding_step_marked_completed( $step_id, $location ) ) { return self::ONBOARDING_STEP_STATUS_COMPLETED; } break; } // Blocked and failed statuses are only reported if the step's requirements are met. if ( $meets_requirements ) { if ( $this->is_onboarding_step_blocked( $step_id, $location ) ) { return self::ONBOARDING_STEP_STATUS_BLOCKED; } if ( $this->is_onboarding_step_failed( $step_id, $location ) ) { return self::ONBOARDING_STEP_STATUS_FAILED; } } if ( $this->was_onboarding_step_marked_started( $step_id, $location ) ) { // Special treatment for the test account step: // If the step was marked as started more than 1 minutes ago (plenty of time for the slowest of webhooks to // come through) and it is obviously not completed, and there is no account connected, // we will unmark it as started (aka clean its progress). Something went wrong with the step! // This is an auto-healing measure to prevent the step from being stuck in a started state indefinitely. if ( self::ONBOARDING_STEP_TEST_ACCOUNT === $step_id && ! $this->has_account() ) { $statuses = (array) $this->get_nox_profile_onboarding_step_entry( $step_id, $location, 'statuses' ); $started_timestamp = ! empty( $statuses[ self::ONBOARDING_STEP_STATUS_STARTED ] ) ? (int) $statuses[ self::ONBOARDING_STEP_STATUS_STARTED ] : 0; if ( $started_timestamp && ( $this->proxy->call_function( 'time' ) - $started_timestamp ) > 60 // 1 minute. ) { $this->clean_onboarding_step_progress( $step_id, $location ); // Record an event for the step being cleaned due to timeout. $this->record_event( self::EVENT_PREFIX . 'onboarding_step_progress_reset_due_to_timeout', $location, array( 'step_id' => $step_id, ) ); return self::ONBOARDING_STEP_STATUS_NOT_STARTED; } } return self::ONBOARDING_STEP_STATUS_STARTED; } // Finally, we default to not started. return self::ONBOARDING_STEP_STATUS_NOT_STARTED; } /** * Check if an onboarding step has been marked as started. * * This means that, at some point, the step was marked/recorded as started in the DB. * This doesn't mean that the current reported status is started. The step status might be different now. * * @see get_onboarding_step_status() for that. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * * @return bool Whether the onboarding step has been marked as started. */ private function was_onboarding_step_marked_started( string $step_id, string $location ): bool { $statuses = (array) $this->get_nox_profile_onboarding_step_entry( $step_id, $location, 'statuses' ); return ! empty( $statuses[ self::ONBOARDING_STEP_STATUS_STARTED ] ); } /** * Mark an onboarding step as started. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * @param bool $overwrite Whether to overwrite the step status if it is already started and update the timestamp. * @param string|null $source Optional. The source for the current onboarding flow. * If not provided, it will identify the source as the WC Admin Payments settings. * * @return bool Whether the onboarding step was marked as started. * @throws ApiArgumentException If the given onboarding step ID is invalid. * @throws ApiException If the onboarding action can not be performed due to the current state of the site. */ public function mark_onboarding_step_started( string $step_id, string $location, bool $overwrite = false, ?string $source = self::SESSION_ENTRY_DEFAULT ): bool { $this->check_if_onboarding_step_action_is_acceptable( $step_id, $location ); // Clear possible failed status for the step. $this->clear_onboarding_step_failed( $step_id, $location ); $statuses = (array) $this->get_nox_profile_onboarding_step_entry( $step_id, $location, 'statuses' ); if ( ! $overwrite && ! empty( $statuses[ self::ONBOARDING_STEP_STATUS_STARTED ] ) ) { return true; } // Mark the step as started and record the timestamp. $statuses[ self::ONBOARDING_STEP_STATUS_STARTED ] = $this->proxy->call_function( 'time' ); // Store the updated step data. $result = $this->save_nox_profile_onboarding_step_entry( $step_id, $location, 'statuses', $statuses ); if ( $result ) { $source = $this->validate_onboarding_source( $source ); // Record an event for the step being started. $this->record_event( self::EVENT_PREFIX . 'onboarding_step_started', $location, array( 'step_id' => $step_id, 'source' => $source, ) ); } return $result; } /** * Check if the onboarding step has a completed status. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * * @return bool Whether the onboarding step is completed. * @throws ApiException On invalid step ID. */ private function is_onboarding_step_completed( string $step_id, string $location ): bool { return self::ONBOARDING_STEP_STATUS_COMPLETED === $this->get_onboarding_step_status( $step_id, $location ); } /** * Check if an onboarding step has been marked as completed. * * This means that, at some point, the step was marked/recorded as completed in the DB. * This doesn't mean that the current reported status is completed. The step status might be different now. * * @see get_onboarding_step_status() for that. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * * @return bool Whether the onboarding step has been marked as completed. */ private function was_onboarding_step_marked_completed( string $step_id, string $location ): bool { $statuses = (array) $this->get_nox_profile_onboarding_step_entry( $step_id, $location, 'statuses' ); return ! empty( $statuses[ self::ONBOARDING_STEP_STATUS_COMPLETED ] ); } /** * Mark an onboarding step as completed. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * @param bool $overwrite Whether to overwrite the step status if it is already completed and update the timestamp. * @param string|null $source Optional. The source for the current onboarding flow. * If not provided, it will identify the source as the WC Admin Payments settings. * * @return bool Whether the onboarding step was marked as completed. * @throws ApiArgumentException If the given onboarding step ID is invalid. * @throws ApiException If the onboarding action can not be performed due to the current state of the site. */ public function mark_onboarding_step_completed( string $step_id, string $location, bool $overwrite = false, ?string $source = self::SESSION_ENTRY_DEFAULT ): bool { $this->check_if_onboarding_step_action_is_acceptable( $step_id, $location ); // Clear possible failed status for the step. $this->clear_onboarding_step_failed( $step_id, $location ); $statuses = (array) $this->get_nox_profile_onboarding_step_entry( $step_id, $location, 'statuses' ); if ( ! $overwrite && ! empty( $statuses[ self::ONBOARDING_STEP_STATUS_COMPLETED ] ) ) { return true; } // Mark the step as completed and record the timestamp. $statuses[ self::ONBOARDING_STEP_STATUS_COMPLETED ] = $this->proxy->call_function( 'time' ); // Store the updated step data. $result = $this->save_nox_profile_onboarding_step_entry( $step_id, $location, 'statuses', $statuses ); if ( $result ) { $source = $this->validate_onboarding_source( $source ); // Record an event for the step being completed. $this->record_event( self::EVENT_PREFIX . 'onboarding_step_completed', $location, array( 'step_id' => $step_id, 'source' => $source, ) ); } return $result; } /** * Cleans an onboarding step progress. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * * @return bool Whether the onboarding step was cleaned. * @throws ApiArgumentException If the given onboarding step ID is invalid. */ public function clean_onboarding_step_progress( string $step_id, string $location ): bool { // We need to do reduced acceptance checks here because this is a cleanup action. // First, check general if the onboarding action is acceptable. $this->check_if_onboarding_action_is_acceptable(); // Second, check if the step ID is valid. if ( ! $this->is_valid_onboarding_step_id( $step_id ) ) { throw new ApiArgumentException( 'woocommerce_woopayments_onboarding_invalid_step_id', esc_html__( 'Invalid onboarding step ID.', 'woocommerce' ), (int) WP_Http::BAD_REQUEST ); } // Clear possible failed or blocked status for the step. $this->clear_onboarding_step_failed( $step_id, $location ); $this->clear_onboarding_step_blocked( $step_id, $location ); // Reset the stored step statuses. $result = $this->save_nox_profile_onboarding_step_entry( $step_id, $location, 'statuses', array() ); if ( $result ) { // Record an event for the step being cleaned. $this->record_event( self::EVENT_PREFIX . 'onboarding_step_progress_reset', $location, array( 'step_id' => $step_id, ) ); } return $result; } /** * Check if an onboarding step has a failed status. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * * @return bool Whether the onboarding step is failed. */ private function is_onboarding_step_failed( string $step_id, string $location ): bool { $statuses = (array) $this->get_nox_profile_onboarding_step_entry( $step_id, $location, 'statuses' ); return ! empty( $statuses[ self::ONBOARDING_STEP_STATUS_FAILED ] ); } /** * Mark an onboarding step as failed. * * This is for internal use only as a failed step status should not be the result of a user action. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * @param array $error Optional. An error to be stored for the step to provide context to API consumers. * The error should be an associative array with the following keys: * - 'code': A string representing the error code. * - 'message': A string representing the error message. * - 'context': Optional. An array of additional data related to the error. * * @return bool Whether the onboarding step was marked as failed. */ private function mark_onboarding_step_failed( string $step_id, string $location, array $error = array() ): bool { // There is no need to do onboarding checks because setting a step as failed should be possible at any time. // Record the error for the step, even if it is empty. // This will ensure we only store the most recent error. $this->save_nox_profile_onboarding_step_data_entry( $step_id, $location, 'error', $this->sanitize_onboarding_step_error( $error ) ); $statuses = (array) $this->get_nox_profile_onboarding_step_entry( $step_id, $location, 'statuses' ); // Mark the step as failed and record the timestamp. $statuses[ self::ONBOARDING_STEP_STATUS_FAILED ] = $this->proxy->call_function( 'time' ); // Make sure we clear the blocked status if it was set since blocked and failed should be mutually exclusive. unset( $statuses[ self::ONBOARDING_STEP_STATUS_BLOCKED ] ); // Store the updated step data. $result = $this->save_nox_profile_onboarding_step_entry( $step_id, $location, 'statuses', $statuses ); if ( $result ) { // Record an event for the step being failed. $this->record_event( self::EVENT_PREFIX . 'onboarding_step_failed', $location, array( 'step_id' => $step_id, 'error_code' => ! empty( $error['code'] ) ? $error['code'] : '', ) ); } return $result; } /** * Clear the failed status of an onboarding step. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * * @return bool Whether the onboarding step was cleared from failed status. * Returns false if the step was not failed. */ private function clear_onboarding_step_failed( string $step_id, string $location ): bool { if ( ! $this->is_onboarding_step_failed( $step_id, $location ) ) { return false; } // Clear any error for the step. $this->save_nox_profile_onboarding_step_data_entry( $step_id, $location, 'error', array() ); $statuses = (array) $this->get_nox_profile_onboarding_step_entry( $step_id, $location, 'statuses' ); // Clear the failed status. unset( $statuses[ self::ONBOARDING_STEP_STATUS_FAILED ] ); // Store the updated step data. return $this->save_nox_profile_onboarding_step_entry( $step_id, $location, 'statuses', $statuses ); } /** * Check if an onboarding step has a blocked status. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * * @return bool Whether the onboarding step is blocked. */ private function is_onboarding_step_blocked( string $step_id, string $location ): bool { $statuses = (array) $this->get_nox_profile_onboarding_step_entry( $step_id, $location, 'statuses' ); return ! empty( $statuses[ self::ONBOARDING_STEP_STATUS_BLOCKED ] ); } /** * Mark an onboarding step as blocked. * * This is for internal use only as a blocked step status should not be the result of a user action. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * @param array $errors Optional. A list of errors to be stored for the step to provide context to API consumers. * * @return bool Whether the onboarding step was marked as blocked. */ private function mark_onboarding_step_blocked( string $step_id, string $location, array $errors = array() ): bool { // There is no need to do onboarding checks because setting a step as blocked should be possible at any time. // Record the error for the step, even if it is empty. // This will ensure we only store the most recent error. $this->save_nox_profile_onboarding_step_data_entry( $step_id, $location, 'error', $this->sanitize_onboarding_step_error( $errors ) ); $statuses = (array) $this->get_nox_profile_onboarding_step_entry( $step_id, $location, 'statuses' ); // Mark the step as blocked and record the timestamp. $statuses[ self::ONBOARDING_STEP_STATUS_BLOCKED ] = $this->proxy->call_function( 'time' ); // Make sure we clear the failed status if it was set since blocked and failed should be mutually exclusive. unset( $statuses[ self::ONBOARDING_STEP_STATUS_FAILED ] ); // Store the updated step data. return $this->save_nox_profile_onboarding_step_entry( $step_id, $location, 'statuses', $statuses ); } /** * Clear the blocked status of an onboarding step. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * * @return bool Whether the onboarding step was cleared from blocked status. * Returns false if the step was not blocked. */ private function clear_onboarding_step_blocked( string $step_id, string $location ): bool { if ( ! $this->is_onboarding_step_blocked( $step_id, $location ) ) { return false; } // Clear any error for the step. $this->save_nox_profile_onboarding_step_data_entry( $step_id, $location, 'error', array() ); $statuses = (array) $this->get_nox_profile_onboarding_step_entry( $step_id, $location, 'statuses' ); // Clear the blocked status. unset( $statuses[ self::ONBOARDING_STEP_STATUS_BLOCKED ] ); // Store the updated step data. return $this->save_nox_profile_onboarding_step_entry( $step_id, $location, 'statuses', $statuses ); } /** * Get the current stored error for an onboarding step. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * * @return array The error for the onboarding step. */ private function get_onboarding_step_error( string $step_id, string $location ): array { return (array) $this->get_nox_profile_onboarding_step_data_entry( $step_id, $location, 'error', array() ); } /** * Sanitize an error for an onboarding step. * * @param array $error The error to sanitize. * * @return array The sanitized error. */ private function sanitize_onboarding_step_error( array $error ): array { $sanitized_error = array( 'code' => isset( $error['code'] ) ? sanitize_text_field( $error['code'] ) : '', 'message' => isset( $error['message'] ) ? sanitize_text_field( $error['message'] ) : '', 'context' => array(), ); // Move all extra keys (not code, message, context) into the context. $reserved_keys = array( 'code', 'message', 'context' ); foreach ( $error as $key => $value ) { if ( ! in_array( $key, $reserved_keys, true ) ) { $sanitized_error['context'][ $key ] = $value; } } // Merge any existing context data. if ( isset( $error['context'] ) && ( is_array( $error['context'] ) || is_object( $error['context'] ) ) ) { // Make sure we are dealing with an array. $existing_context = json_decode( wp_json_encode( $error['context'] ), true ); if ( is_array( $existing_context ) ) { $sanitized_error['context'] = array_merge( $sanitized_error['context'], $existing_context ); } } // Flatten any nested 'context' key (e.g., from WP_Error data that includes its own context). // The nested context values take precedence over the top-level values. if ( isset( $sanitized_error['context']['context'] ) && is_array( $sanitized_error['context']['context'] ) ) { $nested_context = $sanitized_error['context']['context']; unset( $sanitized_error['context']['context'] ); $sanitized_error['context'] = array_merge( $sanitized_error['context'], $nested_context ); } if ( ! empty( $sanitized_error['context'] ) ) { // Sanitize the context data. // It can only contain strings or arrays of strings. // Scalar values will be converted to strings. Other types will be ignored. foreach ( $sanitized_error['context'] as $key => $value ) { if ( is_string( $value ) ) { $sanitized_error['context'][ $key ] = sanitize_text_field( $value ); } elseif ( is_array( $value ) ) { // Arrays can only contain strings. $sanitized_error['context'][ $key ] = array_map( function ( $item ) { if ( is_string( $item ) ) { return sanitize_text_field( $item ); } elseif ( is_scalar( $item ) ) { return sanitize_text_field( (string) $item ); } else { return ''; } }, $value ); // Remove any empty values from the array. $sanitized_error['context'][ $key ] = array_filter( $sanitized_error['context'][ $key ], function ( $item ) { return '' !== $item; } ); } else { unset( $sanitized_error['context'][ $key ] ); } } } return $sanitized_error; } /** * Save the data for an onboarding step. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * @param array $request_data The entire data received in the request. * * @return bool Whether the onboarding step data was saved. * @throws ApiArgumentException If the given onboarding step ID or step data is invalid. * @throws ApiException If the onboarding action can not be performed due to the current state of the site. */ public function onboarding_step_save( string $step_id, string $location, array $request_data ): bool { $this->check_if_onboarding_step_action_is_acceptable( $step_id, $location ); // Validate the received step data. // If we didn't receive any known data for the step, we consider it an invalid save operation. if ( ! $this->is_valid_onboarding_step_data( $step_id, $request_data ) ) { throw new ApiArgumentException( 'woocommerce_woopayments_onboarding_invalid_step_data', esc_html__( 'Invalid onboarding step data.', 'woocommerce' ), (int) WP_Http::BAD_REQUEST ); } $step_details = $this->get_nox_profile_onboarding_step( $step_id, $location ); if ( empty( $step_details['data'] ) ) { $step_details['data'] = array(); } // Extract the data for the step. switch ( $step_id ) { case self::ONBOARDING_STEP_PAYMENT_METHODS: if ( isset( $request_data['payment_methods'] ) ) { $step_details['data']['payment_methods'] = $request_data['payment_methods']; } break; case self::ONBOARDING_STEP_BUSINESS_VERIFICATION: if ( isset( $request_data['self_assessment'] ) ) { $step_details['data']['self_assessment'] = $request_data['self_assessment']; } if ( isset( $request_data['sub_steps'] ) ) { $step_details['data']['sub_steps'] = $request_data['sub_steps']; } break; default: throw new ApiException( 'woocommerce_woopayments_onboarding_step_action_not_supported', esc_html__( 'Save action not supported for the onboarding step ID.', 'woocommerce' ), (int) WP_Http::NOT_ACCEPTABLE ); } // Store the updated step data. return $this->save_nox_profile_onboarding_step( $step_id, $location, $step_details ); } /** * Check if the given onboarding step data is valid. * * If we didn't receive any known data for the step, we consider it invalid. * * @param string $step_id The ID of the onboarding step. * @param array $request_data The entire data received in the request. * * @return bool Whether the given onboarding step data is valid. */ private function is_valid_onboarding_step_data( string $step_id, array $request_data ): bool { switch ( $step_id ) { case self::ONBOARDING_STEP_PAYMENT_METHODS: // Check that we have at least one piece of data. if ( ! isset( $request_data['payment_methods'] ) ) { return false; } // Check that the data is in the expected format. if ( ! is_array( $request_data['payment_methods'] ) ) { return false; } break; case self::ONBOARDING_STEP_BUSINESS_VERIFICATION: // Check that we have at least one piece of data. if ( ! isset( $request_data['self_assessment'] ) && ! isset( $request_data['sub_steps'] ) ) { return false; } // Check that the data is in the expected format. if ( isset( $request_data['self_assessment'] ) && ! is_array( $request_data['self_assessment'] ) ) { return false; } if ( isset( $request_data['sub_steps'] ) && ! is_array( $request_data['sub_steps'] ) ) { return false; } break; default: // If we don't know how to validate the data, we assume it is valid. return true; } return true; } /** * Check an onboarding step's status/progress. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * * @return array The check result. * @throws ApiArgumentException If the given onboarding step ID or step data is invalid. * @throws ApiException If the onboarding action can not be performed due to the current state of the site. */ public function onboarding_step_check( string $step_id, string $location ): array { $this->check_if_onboarding_step_action_is_acceptable( $step_id, $location ); return array( 'status' => $this->get_onboarding_step_status( $step_id, $location ), 'error' => $this->get_onboarding_step_error( $step_id, $location ), ); } /** * Get the recommended payment methods details for onboarding. * * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * * @return array The recommended payment methods details. */ public function get_onboarding_recommended_payment_methods( string $location ): array { return $this->provider->get_recommended_payment_methods( $this->get_payment_gateway(), $location ); } /** * Initialize the test account for onboarding. * * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * @param string|null $source Optional. The source for the current onboarding flow. * If not provided, it will identify the source as the WC Admin Payments settings. * * @return array The result of the test account initialization. * @throws ApiException If the given onboarding step ID or step data is invalid. * If the onboarding action can not be performed due to the current state * of the site or there was an error initializing the test account. */ public function onboarding_test_account_init( string $location, ?string $source = self::SESSION_ENTRY_DEFAULT ): array { $this->check_if_onboarding_step_action_is_acceptable( self::ONBOARDING_STEP_TEST_ACCOUNT, $location ); // Nothing to do if we already have a connected test account. if ( $this->has_test_account() ) { throw new ApiException( 'woocommerce_woopayments_test_account_already_exists', esc_html__( 'A test account is already set up.', 'woocommerce' ), (int) WP_Http::FORBIDDEN ); } // Nothing to do if there is a connected account, but it is not a test account. if ( $this->has_account() ) { // Mark the onboarding step as completed, if it is not already. $this->mark_onboarding_step_completed( self::ONBOARDING_STEP_TEST_ACCOUNT, $location ); throw new ApiException( 'woocommerce_woopayments_onboarding_action_error', esc_html__( 'An account is already set up. Reset the onboarding first.', 'woocommerce' ), (int) WP_Http::FORBIDDEN ); } // Clear any previous failed status for the step. $this->clear_onboarding_step_failed( self::ONBOARDING_STEP_TEST_ACCOUNT, $location ); $configured_payment_methods = $this->get_nox_profile_onboarding_step_data_entry( self::ONBOARDING_STEP_PAYMENT_METHODS, $location, 'payment_methods', array() ); // Ensure the payment gateways logic is initialized in case actions need to be taken on payment gateway changes. WC()->payment_gateways(); $source = $this->validate_onboarding_source( $source ); // Lock the onboarding to prevent concurrent actions. $this->set_onboarding_lock(); try { // Call the WooPayments API to initialize the test account. $response = $this->proxy->call_static( Utils::class, 'rest_endpoint_post_request', '/wc/v3/payments/onboarding/test_drive_account/init', array( 'country' => $location, 'capabilities' => $configured_payment_methods, 'source' => $source, 'from' => self::FROM_NOX_IN_CONTEXT, ) ); } catch ( Exception $e ) { // Catch any exceptions to allow for proper error handling and onboarding unlock. $response = new WP_Error( 'woocommerce_woopayments_onboarding_client_api_exception', esc_html__( 'An unexpected error happened while initializing the test account.', 'woocommerce' ), array( 'code' => $e->getCode(), 'message' => $e->getMessage(), 'trace' => $e->getTrace(), ) ); } // Unlock the onboarding after the API call finished or errored. $this->clear_onboarding_lock(); if ( is_wp_error( $response ) ) { // Mark the onboarding step as failed. $this->mark_onboarding_step_failed( self::ONBOARDING_STEP_TEST_ACCOUNT, $location, array( 'code' => $response->get_error_code(), 'message' => $response->get_error_message(), 'context' => $response->get_error_data(), ) ); throw new ApiException( 'woocommerce_woopayments_onboarding_client_api_error', esc_html( $response->get_error_message() ), (int) WP_Http::FAILED_DEPENDENCY, map_deep( (array) $response->get_error_data(), 'esc_html' ) ); } if ( ! is_array( $response ) || empty( $response['success'] ) ) { // Mark the onboarding step as failed. $this->mark_onboarding_step_failed( self::ONBOARDING_STEP_TEST_ACCOUNT, $location, array( 'code' => 'malformed_response', 'message' => esc_html__( 'Received an unexpected response from the platform.', 'woocommerce' ), 'context' => array( 'response' => $response, ), ) ); throw new ApiException( 'woocommerce_woopayments_onboarding_client_api_error', esc_html__( 'Failed to initialize the test account.', 'woocommerce' ), (int) WP_Http::FAILED_DEPENDENCY ); } // Record an event for the test account being initialized. $payment_methods_enabled = array(); $payment_methods_disabled = array(); if ( ! empty( $configured_payment_methods ) && is_array( $configured_payment_methods ) ) { foreach ( $configured_payment_methods as $pm_id => $enabled ) { if ( ! is_string( $pm_id ) || ! is_bool( $enabled ) ) { continue; // Skip invalid entries. } if ( $enabled ) { $payment_methods_enabled[] = sanitize_key( $pm_id ); } else { $payment_methods_disabled[] = sanitize_key( $pm_id ); } } } $payment_methods_enabled = array_unique( $payment_methods_enabled ); $payment_methods_disabled = array_unique( $payment_methods_disabled ); $event_props = array( 'payment_methods_enabled' => implode( ', ', $payment_methods_enabled ), 'payment_methods_disabled' => implode( ', ', $payment_methods_disabled ), 'source' => $source, ); $this->record_event( self::EVENT_PREFIX . 'onboarding_test_account_init', $location, $event_props ); return $response; } /** * Get the onboarding KYC account session. * * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * @param array $self_assessment Optional. The self-assessment data. * If not provided, the stored data will be used. * @param string|null $source Optional. The source for the current onboarding flow. * If not provided, it will identify the source as the WC Admin Payments settings. * * @return array The KYC account session data. * @throws ApiException If the extension is not active, step requirements are not met, or * the KYC session data could not be retrieved. */ public function get_onboarding_kyc_session( string $location, array $self_assessment = array(), ?string $source = self::SESSION_ENTRY_DEFAULT ): array { $this->check_if_onboarding_step_action_is_acceptable( self::ONBOARDING_STEP_BUSINESS_VERIFICATION, $location ); if ( empty( $self_assessment ) ) { // Get the stored self-assessment data. $self_assessment = (array) $this->get_nox_profile_onboarding_step_data_entry( self::ONBOARDING_STEP_BUSINESS_VERIFICATION, $location, 'self_assessment' ); } // Clear any previous failed status for the step. $this->clear_onboarding_step_failed( self::ONBOARDING_STEP_BUSINESS_VERIFICATION, $location ); // Get the selected payment methods from the NOX profile. $selected_payment_methods = $this->get_nox_profile_onboarding_step_data_entry( self::ONBOARDING_STEP_PAYMENT_METHODS, $location, 'payment_methods', array() ); // Ensure the payment gateways logic is initialized in case actions need to be taken on payment gateway changes. WC()->payment_gateways(); $source = $this->validate_onboarding_source( $source ); // Lock the onboarding to prevent concurrent actions. $this->set_onboarding_lock(); try { // Call the WooPayments API to get the KYC session. $response = $this->proxy->call_static( Utils::class, 'rest_endpoint_post_request', '/wc/v3/payments/onboarding/kyc/session', array( 'self_assessment' => $self_assessment, 'capabilities' => $selected_payment_methods, ) ); } catch ( Exception $e ) { // Catch any exceptions to allow for proper error handling and onboarding unlock. $response = new WP_Error( 'woocommerce_woopayments_onboarding_client_api_exception', esc_html__( 'An unexpected error happened while creating the KYC session.', 'woocommerce' ), array( 'code' => $e->getCode(), 'message' => $e->getMessage(), 'trace' => $e->getTrace(), ) ); } // Unlock the onboarding after the API call finished or errored. $this->clear_onboarding_lock(); if ( is_wp_error( $response ) ) { // Mark the onboarding step as failed. $this->mark_onboarding_step_failed( self::ONBOARDING_STEP_BUSINESS_VERIFICATION, $location, array( 'code' => $response->get_error_code(), 'message' => $response->get_error_message(), 'context' => $response->get_error_data(), ) ); throw new ApiException( 'woocommerce_woopayments_onboarding_client_api_error', esc_html( $response->get_error_message() ), (int) WP_Http::FAILED_DEPENDENCY, map_deep( (array) $response->get_error_data(), 'esc_html' ) ); } if ( ! is_array( $response ) ) { // Mark the onboarding step as failed. $this->mark_onboarding_step_failed( self::ONBOARDING_STEP_BUSINESS_VERIFICATION, $location, array( 'code' => 'malformed_response', 'message' => esc_html__( 'Received an unexpected response from the platform.', 'woocommerce' ), 'context' => array( 'response' => $response, ), ) ); throw new ApiException( 'woocommerce_woopayments_onboarding_client_api_error', esc_html__( 'Failed to get the KYC session data.', 'woocommerce' ), (int) WP_Http::FAILED_DEPENDENCY ); } // Add the user locale to the account session data to allow for localized KYC sessions. $response['locale'] = $this->proxy->call_function( 'get_user_locale' ); // For sanity, make sure the test account step is marked as completed, if not already, // since we are doing live account KYC. $this->mark_onboarding_step_completed( self::ONBOARDING_STEP_TEST_ACCOUNT, $location, false, $source ); // Record an event for the KYC session being created. $event_props = array( 'new_account_created' => $response['accountCreated'] ?? false, 'account_mode' => ( $response['isLive'] ?? false ) ? 'live' : 'test', 'source' => $source, ); $this->record_event( self::EVENT_PREFIX . 'onboarding_kyc_session_created', $location, $event_props ); return $response; } /** * Finish the onboarding KYC account session. * * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * @param string|null $source Optional. The source for the current onboarding flow. * If not provided, it will identify the source as the WC Admin Payments settings. * * @return array The response from the WooPayments API. * @throws ApiException If the extension is not active, step requirements are not met, or * the KYC session could not be finished. */ public function finish_onboarding_kyc_session( string $location, ?string $source = self::SESSION_ENTRY_DEFAULT ): array { $this->check_if_onboarding_step_action_is_acceptable( self::ONBOARDING_STEP_BUSINESS_VERIFICATION, $location ); // Ensure the payment gateways logic is initialized in case actions need to be taken on payment gateway changes. WC()->payment_gateways(); $source = $this->validate_onboarding_source( $source ); // Lock the onboarding to prevent concurrent actions. $this->set_onboarding_lock(); try { // Call the WooPayments API to finalize the KYC session. $response = $this->proxy->call_static( Utils::class, 'rest_endpoint_post_request', '/wc/v3/payments/onboarding/kyc/finalize', array( 'source' => $source, 'from' => self::FROM_NOX_IN_CONTEXT, ) ); } catch ( Exception $e ) { // Catch any exceptions to allow for proper error handling and onboarding unlock. $response = new WP_Error( 'woocommerce_woopayments_onboarding_client_api_exception', esc_html__( 'An unexpected error happened while finalizing the KYC session.', 'woocommerce' ), array( 'code' => $e->getCode(), 'message' => $e->getMessage(), 'trace' => $e->getTrace(), ) ); } // Unlock the onboarding after the API call finished or errored. $this->clear_onboarding_lock(); if ( is_wp_error( $response ) ) { // Mark the onboarding step as failed. $this->mark_onboarding_step_failed( self::ONBOARDING_STEP_BUSINESS_VERIFICATION, $location, array( 'code' => $response->get_error_code(), 'message' => $response->get_error_message(), 'context' => $response->get_error_data(), ) ); throw new ApiException( 'woocommerce_woopayments_onboarding_client_api_error', esc_html( $response->get_error_message() ), (int) WP_Http::FAILED_DEPENDENCY, map_deep( (array) $response->get_error_data(), 'esc_html' ) ); } if ( ! is_array( $response ) ) { // Mark the onboarding step as failed. $this->mark_onboarding_step_failed( self::ONBOARDING_STEP_BUSINESS_VERIFICATION, $location, array( 'code' => 'malformed_response', 'message' => esc_html__( 'Received an unexpected response from the platform.', 'woocommerce' ), 'context' => array( 'response' => $response, ), ) ); throw new ApiException( 'woocommerce_woopayments_onboarding_client_api_error', esc_html__( 'Failed to finish the KYC session.', 'woocommerce' ), (int) WP_Http::FAILED_DEPENDENCY ); } // For sanity, make sure the test account step is marked as completed, if not already, // since we are doing live account KYC. $this->mark_onboarding_step_completed( self::ONBOARDING_STEP_TEST_ACCOUNT, $location, false, $source ); // Record an event for the KYC session being finished. $event_props = array( 'successful_kyc' => filter_var( $response['success'] ?? false, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE ) ?? false, 'account_mode' => ( 'live' === ( $response['mode'] ?? false ) ) ? 'live' : 'test', 'details_submitted' => filter_var( $response['details_submitted'] ?? false, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE ) ?? false, 'promotion_id' => $response['promotion_id'] ?? 'none', 'source' => $source, ); $this->record_event( self::EVENT_PREFIX . 'onboarding_kyc_session_finished', $location, $event_props ); // Mark the business verification step as completed. $this->mark_onboarding_step_completed( self::ONBOARDING_STEP_BUSINESS_VERIFICATION, $location, false, $source ); return $response; } /** * Preload the onboarding process. * * This method is used to run the heavier logic required for onboarding ahead of time, * so that we can be quicker to respond to the user when they start the onboarding process. * * @return array An array containing the success status and any errors encountered during the preload. * 'success' => true if the preload was successful, false otherwise. * 'errors' => An array of error messages if any errors occurred, empty if no errors. * @throws ApiException If the onboarding preload failed or the onboarding is locked. */ public function onboarding_preload(): array { // If the onboarding is locked, we shouldn't do anything. if ( $this->is_onboarding_locked() ) { throw new ApiException( 'woocommerce_woopayments_onboarding_locked', esc_html__( 'Another onboarding action is already in progress. Please wait for it to finish.', 'woocommerce' ), (int) WP_Http::CONFLICT ); } $result = true; // Register the site to WPCOM if it is not already registered. // This sets up the site for connection. For new sites, this tends to take a while. // It is a prerequisite to generating the WPCOM/Jetpack authorization URL. if ( ! $this->wpcom_connection_manager->is_connected() ) { $result = $this->wpcom_connection_manager->try_registration(); if ( is_wp_error( $result ) ) { throw new ApiException( 'woocommerce_woopayments_onboarding_action_error', esc_html( $result->get_error_message() ), (int) WP_Http::INTERNAL_SERVER_ERROR, map_deep( (array) $result->get_error_data(), 'esc_html' ) ); } } return array( 'success' => $result, ); } /** * Reset onboarding. * * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * @param string $from Optional. Where in the UI the request is coming from. * If not provided, it will identify the origin as the WC Admin Payments settings. * @param string|null $source Optional. The source for the current onboarding flow. * If not provided, it will identify the source as the WC Admin Payments settings. * * @return array The response from the WooPayments API. * @throws ApiException If we could not reset onboarding or there was an error. */ public function reset_onboarding( string $location, string $from = '', ?string $source = self::SESSION_ENTRY_DEFAULT ): array { $this->check_if_onboarding_action_is_acceptable(); // Ensure the payment gateways logic is initialized in case actions need to be taken on payment gateway changes. WC()->payment_gateways(); $event_props = array(); $source = $this->validate_onboarding_source( $source ); // Lock the onboarding to prevent concurrent actions. $this->set_onboarding_lock(); try { // Before resetting the onboarding, record its details for tracking purposes. $event_props = array( 'has_account' => $this->has_account(), 'account_mode' => $this->has_account() ? ( $this->has_live_account() ? 'live' : 'test' ) : 'none', 'test_account' => $this->has_test_account(), 'source' => $source, ); if ( $this->has_account() ) { // Call the WooPayments API to reset onboarding. $response = $this->proxy->call_static( Utils::class, 'rest_endpoint_post_request', '/wc/v3/payments/onboarding/reset', array( 'from' => ! empty( $from ) ? esc_attr( $from ) : self::FROM_PAYMENT_SETTINGS, 'source' => $source, ) ); } else { // If there is no account to reset, we can just use a success response. $response = array( 'success' => true, ); } } catch ( Exception $e ) { // Catch any exceptions to allow for proper error handling and onboarding unlock. $response = new WP_Error( 'woocommerce_woopayments_onboarding_client_api_exception', esc_html__( 'An unexpected error happened while resetting onboarding.', 'woocommerce' ), array( 'code' => $e->getCode(), 'message' => $e->getMessage(), 'trace' => $e->getTrace(), ) ); } // Unlock the onboarding after the API call finished or errored. $this->clear_onboarding_lock(); // Clean up any NOX-specific onboarding data, regardless of the API response. $this->proxy->call_function( 'delete_option', self::NOX_PROFILE_OPTION_KEY ); // Make sure the onboarding mode is reset. if ( class_exists( 'WC_Payments_Onboarding_Service' ) && defined( 'WC_Payments_Onboarding_Service::TEST_MODE_OPTION' ) ) { $this->proxy->call_function( 'update_option', Constants::get_constant( 'WC_Payments_Onboarding_Service::TEST_MODE_OPTION' ), 'no' ); } if ( is_wp_error( $response ) ) { throw new ApiException( 'woocommerce_woopayments_onboarding_client_api_error', esc_html( $response->get_error_message() ), (int) WP_Http::FAILED_DEPENDENCY, map_deep( (array) $response->get_error_data(), 'esc_html' ) ); } if ( ! is_array( $response ) || empty( $response['success'] ) ) { throw new ApiException( 'woocommerce_woopayments_onboarding_client_api_error', esc_html__( 'Failed to reset onboarding.', 'woocommerce' ), (int) WP_Http::FAILED_DEPENDENCY ); } // Record an event for the onboarding reset. $this->record_event( self::EVENT_PREFIX . 'onboarding_reset', $location, $event_props ); return $response; } /** * Disable a test account during the switch-to-live onboarding flow. * * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * @param string $from Optional. Where in the UI the request is coming from. * If not provided, it will identify the origin as the WC Admin Payments settings. * @param string|null $source Optional. The source for the current onboarding flow. * If not provided, it will identify the source as the WC Admin Payments settings. * * @return array The response from the WooPayments API. * @throws ApiException If we could not disable the test account or there was an error. */ public function disable_test_account( string $location, string $from = '', ?string $source = self::SESSION_ENTRY_DEFAULT ): array { $this->check_if_onboarding_action_is_acceptable(); // Ensure the payment gateways logic is initialized in case actions need to be taken on payment gateway changes. WC()->payment_gateways(); $response = array( 'success' => true, ); $event_props = array(); $source = $this->validate_onboarding_source( $source ); // Lock the onboarding to prevent concurrent actions. $this->set_onboarding_lock(); try { $has_test_account = $this->has_test_account(); $has_sandbox_account = $this->has_sandbox_account(); $event_props = array( 'account_type' => $has_test_account ? 'test_drive' : ( $has_sandbox_account ? 'sandbox' : 'unknown' ), 'source' => $source, ); // First, check if we have a test account to disable. if ( $has_test_account ) { // Call the WooPayments API to disable the test account and prepare for the switch to live. $response = $this->proxy->call_static( Utils::class, 'rest_endpoint_post_request', '/wc/v3/payments/onboarding/test_drive_account/disable', array( 'from' => ! empty( $from ) ? esc_attr( $from ) : self::FROM_PAYMENT_SETTINGS, 'source' => $source, ) ); } elseif ( $has_sandbox_account ) { // Call the WooPayments API to reset onboarding. $response = $this->proxy->call_static( Utils::class, 'rest_endpoint_post_request', '/wc/v3/payments/onboarding/reset', array( 'from' => ! empty( $from ) ? esc_attr( $from ) : self::FROM_PAYMENT_SETTINGS, 'source' => $source, ) ); } } catch ( Exception $e ) { // Catch any exceptions to allow for proper error handling and onboarding unlock. $response = new WP_Error( 'woocommerce_woopayments_onboarding_client_api_exception', esc_html__( 'An unexpected error happened while disabling the test account.', 'woocommerce' ), array( 'code' => $e->getCode(), 'message' => $e->getMessage(), 'trace' => $e->getTrace(), ) ); } // Unlock the onboarding after the API call finished or errored. $this->clear_onboarding_lock(); // Make sure the onboarding mode is reset. if ( class_exists( 'WC_Payments_Onboarding_Service' ) && defined( 'WC_Payments_Onboarding_Service::TEST_MODE_OPTION' ) ) { $this->proxy->call_function( 'update_option', Constants::get_constant( 'WC_Payments_Onboarding_Service::TEST_MODE_OPTION' ), 'no' ); } // Track the failure to disable the test account. if ( is_wp_error( $response ) || ! is_array( $response ) || empty( $response['success'] ) ) { $this->record_event( self::EVENT_PREFIX . 'onboarding_test_account_disable_error', $location, array( 'source' => $source, ) ); } if ( is_wp_error( $response ) ) { throw new ApiException( 'woocommerce_woopayments_onboarding_client_api_error', esc_html( $response->get_error_message() ), (int) WP_Http::FAILED_DEPENDENCY, map_deep( (array) $response->get_error_data(), 'esc_html' ) ); } if ( ! is_array( $response ) || empty( $response['success'] ) ) { throw new ApiException( 'woocommerce_woopayments_onboarding_client_api_error', esc_html__( 'Failed to disable the test account.', 'woocommerce' ), (int) WP_Http::FAILED_DEPENDENCY ); } // For sanity, make sure the payment methods step is marked as completed. // This is to avoid the user being prompted to set up payment methods again. $this->mark_onboarding_step_completed( self::ONBOARDING_STEP_PAYMENT_METHODS, $location ); // For sanity, make sure the test account step is marked as completed and not blocked or failed. // After disabling a test account, the user should be prompted to set up a live account. $this->mark_onboarding_step_completed( self::ONBOARDING_STEP_TEST_ACCOUNT, $location ); $this->clear_onboarding_step_blocked( self::ONBOARDING_STEP_TEST_ACCOUNT, $location ); $this->clear_onboarding_step_failed( self::ONBOARDING_STEP_TEST_ACCOUNT, $location ); // Clear the NOX profile data for the business verification step sub-step data. // This way the user will be prompted to complete ALL the business verification sub-steps. $business_verification_sub_step_data = $this->get_nox_profile_onboarding_step_data_entry( self::ONBOARDING_STEP_BUSINESS_VERIFICATION, $location, 'sub_steps', array() ); if ( ! empty( $business_verification_sub_step_data ) ) { $this->save_nox_profile_onboarding_step_data_entry( self::ONBOARDING_STEP_BUSINESS_VERIFICATION, $location, 'sub_steps', array() ); } // Record an event for the test account being disabled. $this->record_event( self::EVENT_PREFIX . 'onboarding_test_account_disabled', $location, $event_props ); return $response; } /** * Send a Tracks event. * * By default, Woo adds `url`, `blog_lang`, `blog_id`, `store_id`, `products_count`, and `wc_version` * properties to every event. * * @param string $name The event name. * If it is not prefixed with self::EVENT_PREFIX, it will be prefixed with it. * @param string $business_country The business registration country code as set in the WooCommerce Payments settings. * This is an ISO 3166-1 alpha-2 country code. * @param array $properties Optional. The event custom properties. * These properties will be merged with the default properties. * Default properties values take precedence over the provided ones. * * @return void */ public function record_event( string $name, string $business_country, array $properties = array() ) { if ( ! function_exists( 'wc_admin_record_tracks_event' ) ) { return; } // If the event name is empty, we don't record it. if ( empty( $name ) ) { return; } // If the event name is not prefixed with `settings_payments_`, we prefix it. if ( ! str_starts_with( $name, self::EVENT_PREFIX ) ) { $name = self::EVENT_PREFIX . $name; } // Add default properties to every event and overwrite custom properties with the same keys. $properties = array_merge( $properties, array( 'business_country' => $business_country, ), ); wc_admin_record_tracks_event( $name, $properties ); } /** * Check if an onboarding action should be allowed to be processed. * * @return void * @throws ApiException If the extension is not active or onboarding is locked. */ private function check_if_onboarding_action_is_acceptable() { // If the WooPayments plugin is not active, we can't do anything. if ( ! $this->is_extension_active() ) { throw new ApiException( 'woocommerce_woopayments_onboarding_extension_not_active', /* translators: %s: WooPayments. */ sprintf( esc_html__( 'The %s extension is not active.', 'woocommerce' ), 'WooPayments' ), (int) WP_Http::FORBIDDEN ); } // If the WooPayments installed version is less than the minimum required version, we can't do anything. if ( Constants::is_defined( 'WCPAY_VERSION_NUMBER' ) && version_compare( Constants::get_constant( 'WCPAY_VERSION_NUMBER' ), self::EXTENSION_MINIMUM_VERSION, '<' ) ) { throw new ApiException( 'woocommerce_woopayments_onboarding_extension_version', /* translators: %s: WooPayments. */ sprintf( esc_html__( 'The %s extension is not up-to-date. Please update to the latest version and try again.', 'woocommerce' ), 'WooPayments' ), (int) WP_Http::FORBIDDEN ); } // If the onboarding is locked, we shouldn't do anything. if ( $this->is_onboarding_locked() ) { throw new ApiException( 'woocommerce_woopayments_onboarding_locked', esc_html__( 'Another onboarding action is already in progress. Please wait for it to finish.', 'woocommerce' ), (int) WP_Http::CONFLICT ); } } /** * Check if an onboarding step action should be allowed to be processed. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * * @return void * @throws ApiArgumentException If the onboarding step ID is invalid. * @throws ApiException If the extension is not active or step requirements are not met. */ private function check_if_onboarding_step_action_is_acceptable( string $step_id, string $location ): void { // First, check general onboarding actions. $this->check_if_onboarding_action_is_acceptable(); // Second, do onboarding step specific checks. if ( ! $this->is_valid_onboarding_step_id( $step_id ) ) { throw new ApiArgumentException( 'woocommerce_woopayments_onboarding_invalid_step_id', esc_html__( 'Invalid onboarding step ID.', 'woocommerce' ), (int) WP_Http::BAD_REQUEST ); } if ( ! $this->check_onboarding_step_requirements( $step_id, $location ) ) { throw new ApiException( 'woocommerce_woopayments_onboarding_step_requirements_not_met', esc_html__( 'Onboarding step requirements are not met.', 'woocommerce' ), (int) WP_Http::FORBIDDEN ); } if ( $this->is_onboarding_step_blocked( $step_id, $location ) ) { throw new ApiException( 'woocommerce_woopayments_onboarding_step_blocked', esc_html__( 'There are environment or store setup issues which are blocking progress. Please resolve them to proceed.', 'woocommerce' ), (int) WP_Http::FORBIDDEN, array( 'error' => map_deep( $this->get_onboarding_step_error( $step_id, $location ), 'esc_html' ), ), ); } } /** * Check if the onboarding is locked. * * @return bool Whether the onboarding is locked. */ private function is_onboarding_locked(): bool { $lock_timestamp = (int) $this->proxy->call_function( 'absint', $this->proxy->call_function( 'get_option', self::NOX_ONBOARDING_LOCKED_KEY, 0 ) ); if ( 0 === $lock_timestamp ) { return false; } $now = $this->proxy->call_function( 'time' ); // If the lock timestamp is older than the TTL, consider it unlocked and self-heal. if ( $lock_timestamp < ( $now - self::NOX_ONBOARDING_LOCKED_TTL_SECONDS ) ) { $this->clear_onboarding_lock(); return false; } return true; } /** * Lock the onboarding. * * This will save a flag in the database to indicate that onboarding is locked. * This is used to prevent certain onboarding actions to happen while others have not finished. * This is especially important for actions that modify the account (initializing it, deleting it, etc.) * These actions tend to be longer-running and we want to have backstops in place to prevent race conditions. * * @return void */ private function set_onboarding_lock(): void { $now = $this->proxy->call_function( 'time' ); $this->proxy->call_function( 'update_option', self::NOX_ONBOARDING_LOCKED_KEY, $now, false ); } /** * Unlock the onboarding. * * @return void */ private function clear_onboarding_lock(): void { // We update rather than delete the option for performance reasons. $this->proxy->call_function( 'update_option', self::NOX_ONBOARDING_LOCKED_KEY, 0, false ); } /** * Get the onboarding details for each step. * * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * @param string $rest_path The REST API path to use for constructing REST API URLs. * @param string|null $source Optional. The source for the onboarding flow. * * @return array[] The list of onboarding steps details. * @throws Exception If there was an error generating the onboarding steps details. */ private function get_onboarding_steps( string $location, string $rest_path, ?string $source = self::SESSION_ENTRY_DEFAULT ): array { $steps = array(); // Add the payment methods onboarding step details, but only if we have recommended payment methods. $recommended_pms = $this->get_onboarding_recommended_payment_methods( $location ); if ( ! empty( $recommended_pms ) ) { $steps[] = $this->standardize_onboarding_step_details( array( 'id' => self::ONBOARDING_STEP_PAYMENT_METHODS, 'context' => array( 'recommended_pms' => $recommended_pms, 'pms_state' => $this->get_onboarding_payment_methods_state( $location, $recommended_pms ), ), 'actions' => array( 'start' => array( 'type' => self::ACTION_TYPE_REST, 'href' => rest_url( trailingslashit( $rest_path ) . self::ONBOARDING_STEP_PAYMENT_METHODS . '/start' ), ), 'save' => array( 'type' => self::ACTION_TYPE_REST, 'href' => rest_url( trailingslashit( $rest_path ) . self::ONBOARDING_STEP_PAYMENT_METHODS . '/save' ), ), 'finish' => array( 'type' => self::ACTION_TYPE_REST, 'href' => rest_url( trailingslashit( $rest_path ) . self::ONBOARDING_STEP_PAYMENT_METHODS . '/finish' ), ), ), ), $location, $rest_path ); } // Add the WPCOM connection onboarding step details. $wpcom_step = $this->standardize_onboarding_step_details( array( 'id' => self::ONBOARDING_STEP_WPCOM_CONNECTION, 'context' => array( 'connection_state' => $this->get_wpcom_connection_state(), ), ), $location, $rest_path ); // If the WPCOM connection is already set up, we don't need to add anything more. if ( self::ONBOARDING_STEP_STATUS_COMPLETED !== $wpcom_step['status'] ) { // Craft the return URL. switch ( $source ) { case self::SESSION_ENTRY_LYS: // If the source is LYS, we return the user to the Launch Your Store flow. $return_url = $this->proxy->call_function( 'admin_url', 'admin.php?page=wc-admin&path=/launch-your-store' . self::ONBOARDING_PATH_BASE . '&sidebar=hub&content=payments' ); break; default: // By default, we return the user to the onboarding modal in the Settings > Payments page. $return_url = $this->proxy->call_static( Utils::class, 'wc_payments_settings_url', self::ONBOARDING_PATH_BASE ); break; } // Add standardized query arguments to the return URL. $return_url = add_query_arg( array( // URL query flag so we can properly identify when the user returns // either by accepting or rejecting the WPCOM connection. self::WPCOM_CONNECTION_RETURN_PARAM => '1', // Keep the source. 'source' => $source, // Attach the `from` parameter to more easily identify where the return request is coming from. 'from' => self::FROM_WPCOM, ), $return_url ); // Try to generate the authorization URL. $wpcom_connection = $this->get_wpcom_connection_authorization( $return_url ); if ( ! $wpcom_connection['success'] ) { // In case of errors, make sure we work with a list of error messages. $wpcom_step['errors'] = array_values( (array) ( $wpcom_connection['errors'] ?? array() ) ); } $wpcom_step['actions'] = array( 'start' => array( 'type' => self::ACTION_TYPE_REST, 'href' => rest_url( trailingslashit( $rest_path ) . self::ONBOARDING_STEP_WPCOM_CONNECTION . '/start' ), ), 'auth' => array( 'type' => self::ACTION_TYPE_REDIRECT, 'href' => $wpcom_connection['url'], ), ); } $steps[] = $wpcom_step; // Test account onboarding step is unavailable in UAE and Singapore. if ( ! in_array( $location, array( 'AE', 'SG' ), true ) ) { $test_account_step = $this->standardize_onboarding_step_details( array( 'id' => self::ONBOARDING_STEP_TEST_ACCOUNT, ), $location, $rest_path ); // If the step is not completed, we need to add the actions. if ( self::ONBOARDING_STEP_STATUS_COMPLETED !== $test_account_step['status'] ) { $test_account_step['actions'] = array( 'start' => array( 'type' => self::ACTION_TYPE_REST, 'href' => rest_url( trailingslashit( $rest_path ) . self::ONBOARDING_STEP_TEST_ACCOUNT . '/start' ), ), 'init' => array( 'type' => self::ACTION_TYPE_REST, 'href' => rest_url( trailingslashit( $rest_path ) . self::ONBOARDING_STEP_TEST_ACCOUNT . '/init' ), ), 'finish' => array( 'type' => self::ACTION_TYPE_REST, 'href' => rest_url( trailingslashit( $rest_path ) . self::ONBOARDING_STEP_TEST_ACCOUNT . '/finish' ), ), ); } $test_account_step['actions']['reset'] = array( 'type' => self::ACTION_TYPE_REST, 'href' => rest_url( trailingslashit( $rest_path ) . self::ONBOARDING_STEP_TEST_ACCOUNT . '/reset' ), ); $steps[] = $test_account_step; } // Add the live account business verification onboarding step details. $business_verification_step_sub_steps = $this->get_nox_profile_onboarding_step_data_entry( self::ONBOARDING_STEP_BUSINESS_VERIFICATION, $location, 'sub_steps', array() ); // Sanity check: If there is no account connected, the sub-steps details should be forced empty. // This way we allow for the Transact Platform account reset to take effect and // allow the user to restart the business verification process, including the self-assessment business step. if ( ! $this->has_account() ) { $business_verification_step_sub_steps = array(); } $business_verification_step = $this->standardize_onboarding_step_details( array( 'id' => self::ONBOARDING_STEP_BUSINESS_VERIFICATION, 'context' => array( 'fields' => array(), 'sub_steps' => $business_verification_step_sub_steps, 'self_assessment' => $this->get_nox_profile_onboarding_step_data_entry( self::ONBOARDING_STEP_BUSINESS_VERIFICATION, $location, 'self_assessment', array() ), 'has_test_account' => $this->has_test_account(), 'has_sandbox_account' => $this->has_sandbox_account(), ), ), $location, $rest_path ); // Try to get the pre-KYC fields, but only if the required step is completed. // This is because WooPayments needs a working WPCOM connection to be able to fetch the fields. if ( $this->check_onboarding_step_requirements( self::ONBOARDING_STEP_BUSINESS_VERIFICATION, $location ) ) { try { $business_verification_step['context']['fields'] = $this->get_onboarding_kyc_fields( $location ); } catch ( Exception $e ) { $business_verification_step['errors'][] = array( 'code' => 'fields_error', 'message' => $e->getMessage(), ); } } // If the step is not completed, we need to add the actions. if ( self::ONBOARDING_STEP_STATUS_COMPLETED !== $business_verification_step['status'] ) { $business_verification_step['actions'] = array( 'start' => array( 'type' => self::ACTION_TYPE_REST, 'href' => rest_url( trailingslashit( $rest_path ) . self::ONBOARDING_STEP_BUSINESS_VERIFICATION . '/start' ), ), 'save' => array( 'type' => self::ACTION_TYPE_REST, 'href' => rest_url( trailingslashit( $rest_path ) . self::ONBOARDING_STEP_BUSINESS_VERIFICATION . '/save' ), ), 'kyc_session' => array( 'type' => self::ACTION_TYPE_REST, 'href' => rest_url( trailingslashit( $rest_path ) . self::ONBOARDING_STEP_BUSINESS_VERIFICATION . '/kyc_session' ), ), 'kyc_session_finish' => array( 'type' => self::ACTION_TYPE_REST, 'href' => rest_url( trailingslashit( $rest_path ) . self::ONBOARDING_STEP_BUSINESS_VERIFICATION . '/kyc_session/finish' ), ), 'kyc_fallback' => array( 'type' => self::ACTION_TYPE_REDIRECT, 'href' => $this->get_onboarding_kyc_fallback_url(), ), 'finish' => array( 'type' => self::ACTION_TYPE_REST, 'href' => rest_url( trailingslashit( $rest_path ) . self::ONBOARDING_STEP_BUSINESS_VERIFICATION . '/finish' ), ), 'test_account_disable' => array( 'type' => self::ACTION_TYPE_REST, 'href' => rest_url( trailingslashit( $rest_path ) . self::ONBOARDING_STEP_BUSINESS_VERIFICATION . '/test_account/disable' ), ), ); } $steps[] = $business_verification_step; // Do a complete list standardization, for safety. return $this->standardize_onboarding_steps_details( $steps, $location, $rest_path ); } /** * Standardize (and sanity check) the onboarding step details. * * @param array $step_details The onboarding step details to standardize. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * @param string $rest_path The REST API path to use for constructing REST API URLs. * * @return array The standardized onboarding step details. * @throws Exception If the onboarding step details are missing required entries or if the step ID is invalid. */ private function standardize_onboarding_step_details( array $step_details, string $location, string $rest_path ): array { // If the required keys are not present, throw. if ( ! isset( $step_details['id'] ) ) { /* translators: %s: The required key that is missing. */ throw new Exception( sprintf( esc_html__( 'The onboarding step is missing required entries: %s', 'woocommerce' ), 'id' ) ); } // Validate the step ID. if ( ! $this->is_valid_onboarding_step_id( $step_details['id'] ) ) { /* translators: %s: The invalid step ID. */ throw new Exception( sprintf( esc_html__( 'The onboarding step ID is invalid: %s', 'woocommerce' ), esc_attr( $step_details['id'] ) ) ); } if ( empty( $step_details['status'] ) ) { $step_details['status'] = $this->get_onboarding_step_status( $step_details['id'], $location ); } if ( empty( $step_details['errors'] ) ) { $step_details['errors'] = array(); // For blocked or failed steps, we include any stored error. if ( in_array( $step_details['status'], array( self::ONBOARDING_STEP_STATUS_BLOCKED, self::ONBOARDING_STEP_STATUS_FAILED ), true ) ) { $stored_error = $this->get_onboarding_step_error( $step_details['id'], $location ); if ( ! empty( $stored_error ) ) { $step_details['errors'] = array( $stored_error ); } } } // Standardize errors to be a list of arrays with `code`, `message`, and optional extra keys. $standardized_errors = array(); // If the errors is not a list of errors or it has any of the reserved entries, // treat it as a single error. if ( ! is_array( $step_details['errors'] ) || array_key_exists( 'code', $step_details['errors'] ) || array_key_exists( 'message', $step_details['errors'] ) || array_key_exists( 'context', $step_details['errors'] ) ) { $raw_errors = array( $step_details['errors'] ); } else { $raw_errors = $step_details['errors']; } foreach ( $raw_errors as $error ) { if ( $error instanceof \WP_Error ) { $error = array( 'code' => $error->get_error_code(), 'message' => $error->get_error_message(), 'context' => $error->get_error_data(), ); } elseif ( is_array( $error ) ) { if ( empty( $error['code'] ) ) { $error['code'] = 'general_error'; } if ( ! array_key_exists( 'message', $error ) ) { $error['message'] = ''; } } else { $error = array( 'code' => 'general_error', 'message' => (string) $error, ); } $standardized_errors[] = $this->sanitize_onboarding_step_error( $error ); } $step_details['errors'] = $standardized_errors; // Ensure that any step has the general actions. if ( empty( $step_details['actions'] ) ) { $step_details['actions'] = array(); } // Any step can be checked for its status. if ( empty( $step_details['actions']['check'] ) ) { $step_details['actions']['check'] = array( 'type' => self::ACTION_TYPE_REST, 'href' => rest_url( trailingslashit( $rest_path ) . $step_details['id'] . '/check' ), ); } // Any step can be cleaned of its progress. if ( empty( $step_details['actions']['clean'] ) ) { $step_details['actions']['clean'] = array( 'type' => self::ACTION_TYPE_REST, 'href' => rest_url( trailingslashit( $rest_path ) . $step_details['id'] . '/clean' ), ); } return array( 'id' => $step_details['id'], 'path' => $step_details['path'] ?? trailingslashit( self::ONBOARDING_PATH_BASE ) . $step_details['id'], 'required_steps' => $step_details['required_steps'] ?? $this->get_onboarding_step_required_steps( $step_details['id'] ), 'status' => $step_details['status'], 'errors' => $step_details['errors'], 'actions' => $step_details['actions'], 'context' => $step_details['context'] ?? array(), ); } /** * Standardize (and sanity check) the onboarding steps list. * * @param array $steps The onboarding steps list to standardize. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * @param string $rest_path The REST API path to use for constructing REST API URLs. * * @return array The standardized onboarding steps list. * @throws Exception If some onboarding steps are missing required entries or if invalid step IDs are present. */ private function standardize_onboarding_steps_details( array $steps, string $location, string $rest_path ): array { $standardized_steps = array(); foreach ( $steps as $step ) { $standardized_steps[] = $this->standardize_onboarding_step_details( $step, $location, $rest_path ); } return $standardized_steps; } /** * Get the entire stored NOX profile data. * * @return array The stored NOX profile. */ private function get_nox_profile(): array { $nox_profile = $this->proxy->call_function( 'get_option', self::NOX_PROFILE_OPTION_KEY, array() ); if ( empty( $nox_profile ) ) { $nox_profile = array(); } else { $nox_profile = maybe_unserialize( $nox_profile ); } return $nox_profile; } /** * Save the NOX profile data. * * @param array $data The data to save in the profile. * * @return bool Whether the data was saved. */ private function save_nox_profile( array $data ): bool { return $this->proxy->call_function( 'update_option', self::NOX_PROFILE_OPTION_KEY, $data, false ); } /** * Get the onboarding data from the NOX profile. * * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * * @return array The onboarding stored data from the NOX profile. * If the step data is not found, an empty array is returned. */ private function get_nox_profile_onboarding( string $location ): array { $nox_profile = $this->get_nox_profile(); if ( empty( $nox_profile['onboarding'] ) ) { $nox_profile['onboarding'] = array(); } if ( empty( $nox_profile['onboarding'][ $location ] ) ) { $nox_profile['onboarding'][ $location ] = array(); } return $nox_profile['onboarding'][ $location ]; } /** * Save the onboarding data in the NOX profile. * * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * @param array $data The onboarding step data to save in the profile. * * @return bool Whether the onboarding data was saved. */ private function save_nox_profile_onboarding( string $location, array $data ): bool { $nox_profile = $this->get_nox_profile(); if ( empty( $nox_profile['onboarding'] ) ) { $nox_profile['onboarding'] = array(); } // Update the stored data. $nox_profile['onboarding'][ $location ] = $data; return $this->save_nox_profile( $nox_profile ); } /** * Get the onboarding step data from the NOX profile. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * * @return array The onboarding step stored data from the NOX profile. * If the step data is not found, an empty array is returned. */ private function get_nox_profile_onboarding_step( string $step_id, string $location ): array { $nox_profile_onboarding = $this->get_nox_profile_onboarding( $location ); if ( empty( $nox_profile_onboarding['steps'] ) ) { $nox_profile_onboarding['steps'] = array(); } if ( empty( $nox_profile_onboarding['steps'][ $step_id ] ) ) { $nox_profile_onboarding['steps'][ $step_id ] = array(); } return $nox_profile_onboarding['steps'][ $step_id ]; } /** * Save the onboarding step data in the NOX profile. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * @param array $data The onboarding step data to save in the profile. * * @return bool Whether the onboarding step data was saved. */ private function save_nox_profile_onboarding_step( string $step_id, string $location, array $data ): bool { $nox_profile_onboarding = $this->get_nox_profile_onboarding( $location ); if ( empty( $nox_profile_onboarding['steps'] ) ) { $nox_profile_onboarding['steps'] = array(); } // Update the stored step data. $nox_profile_onboarding['steps'][ $step_id ] = $data; return $this->save_nox_profile_onboarding( $location, $nox_profile_onboarding ); } /** * Get an entry from the NOX profile onboarding step details. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * @param string $entry The entry to get from the step data. * @param mixed $default_value The default value to return if the entry is not found. * * @return mixed The entry from the NOX profile step details. If the entry is not found, the default value is returned. */ private function get_nox_profile_onboarding_step_entry( string $step_id, string $location, string $entry, $default_value = array() ): array { $step_details = $this->get_nox_profile_onboarding_step( $step_id, $location ); if ( ! isset( $step_details[ $entry ] ) ) { return $default_value; } return $step_details[ $entry ]; } /** * Save an entry in the NOX profile onboarding step details. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * @param string $entry The entry key under which to save in the step data. * @param array $data The data to save in the step data. * * @return bool Whether the onboarding step data was saved. */ private function save_nox_profile_onboarding_step_entry( string $step_id, string $location, string $entry, array $data ): bool { $step_details = $this->get_nox_profile_onboarding_step( $step_id, $location ); // Update the stored step data. $step_details[ $entry ] = $data; return $this->save_nox_profile_onboarding_step( $step_id, $location, $step_details ); } /** * Get a data entry from the NOX profile onboarding step details. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * @param string $entry The entry to get from the step `data`. * @param mixed $default_value The default value to return if the entry is not found. * * @return mixed The entry value from the NOX profile stored step data. * If the entry is not found, the default value is returned. */ private function get_nox_profile_onboarding_step_data_entry( string $step_id, string $location, string $entry, $default_value = false ) { $step_details_data = $this->get_nox_profile_onboarding_step_entry( $step_id, $location, 'data' ); if ( ! isset( $step_details_data[ $entry ] ) ) { return $default_value; } return $step_details_data[ $entry ]; } /** * Save a data entry in the NOX profile onboarding step details. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * @param string $entry The entry key under which to save in the step `data`. * @param mixed $data The value to save. * * @return bool Whether the onboarding step data was saved. */ private function save_nox_profile_onboarding_step_data_entry( string $step_id, string $location, string $entry, $data ): bool { $step_details_data = $this->get_nox_profile_onboarding_step_entry( $step_id, $location, 'data' ); // Update the stored step data. $step_details_data[ $entry ] = $data; return $this->save_nox_profile_onboarding_step_entry( $step_id, $location, 'data', $step_details_data ); } /** * Get the IDs of the onboarding steps that are required for the given step. * * @param string $step_id The ID of the onboarding step. * * @return array|string[] The IDs of the onboarding steps that are required for the given step. */ private function get_onboarding_step_required_steps( string $step_id ): array { switch ( $step_id ) { // Both the test account and business verification (live account) steps require a working WPCOM connection. case self::ONBOARDING_STEP_TEST_ACCOUNT: case self::ONBOARDING_STEP_BUSINESS_VERIFICATION: return array( self::ONBOARDING_STEP_WPCOM_CONNECTION, ); default: return array(); } } /** * Check if the requirements for an onboarding step are met. * * @param string $step_id The ID of the onboarding step. * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * * @return bool Whether the onboarding step requirements are met. * @throws ApiArgumentException If the given onboarding step ID is invalid. */ private function check_onboarding_step_requirements( string $step_id, string $location ): bool { $requirements = $this->get_onboarding_step_required_steps( $step_id ); foreach ( $requirements as $required_step_id ) { if ( $this->get_onboarding_step_status( $required_step_id, $location ) !== self::ONBOARDING_STEP_STATUS_COMPLETED ) { return false; } } return true; } /** * Get the payment methods state for onboarding. * * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * @param array|null $recommended_pms Optional. The recommended payment methods to use. * * @return array The onboarding payment methods state. */ private function get_onboarding_payment_methods_state( string $location, ?array $recommended_pms ): array { // First, get the recommended payment methods details from the provider. // We will use their enablement state as the default. // Note: The list is validated and standardized by the provider, so we don't need to do it here. if ( null === $recommended_pms ) { $recommended_pms = $this->get_onboarding_recommended_payment_methods( $location ); } if ( empty( $recommended_pms ) ) { // If there are no recommended payment methods, return an empty array. return array(); } // Grab the stored payment methods state // (a key-value array of payment method IDs and if they should be automatically enabled or not). $step_pms_data = (array) $this->get_nox_profile_onboarding_step_data_entry( self::ONBOARDING_STEP_PAYMENT_METHODS, $location, 'payment_methods' ); $payment_methods_state = array(); $apple_pay_enabled = false; $google_pay_enabled = false; foreach ( $recommended_pms as $recommended_pm ) { $pm_id = $recommended_pm['id']; /** * We need to handle Apple Pay and Google Pay separately. * They are not stored in the same way as the other payment methods. */ if ( 'apple_pay' === $pm_id ) { $apple_pay_enabled = $recommended_pm['enabled']; continue; } if ( 'google_pay' === $pm_id ) { $google_pay_enabled = $recommended_pm['enabled']; continue; } // Start with the recommended enabled state. $payment_methods_state[ $pm_id ] = $recommended_pm['enabled']; // Force enable if required. if ( $recommended_pm['required'] ) { $payment_methods_state[ $pm_id ] = true; continue; } // Check the stored state, if any. if ( isset( $step_pms_data[ $pm_id ] ) ) { $payment_methods_state[ $pm_id ] = wc_string_to_bool( $step_pms_data[ $pm_id ] ); } } // Combine Apple Pay and Google Pay into a single `apple_google` entry. // First check if apple_google is explicitly stored, otherwise fallback to combining individual states. if ( isset( $step_pms_data['apple_google'] ) ) { $apple_google_enabled = wc_string_to_bool( $step_pms_data['apple_google'] ); } else { // Fallback to OR logic for backward compatibility. $apple_google_enabled = $apple_pay_enabled || $google_pay_enabled; } $payment_methods_state['apple_google'] = $apple_google_enabled; return $payment_methods_state; } /** * Get the WPCOM (Jetpack) connection authorization details. * * @param string $return_url The URL to redirect to after the connection is set up. * * @return array The WPCOM connection authorization details. */ private function get_wpcom_connection_authorization( string $return_url ): array { return $this->proxy->call_static( Utils::class, 'get_wpcom_connection_authorization', $return_url ); } /** * Get the store's WPCOM (Jetpack) connection state. * * @return array The WPCOM connection state. */ private function get_wpcom_connection_state(): array { $is_connected = $this->wpcom_connection_manager->is_connected(); $has_connected_owner = $this->wpcom_connection_manager->has_connected_owner(); return array( 'has_working_connection' => $this->has_working_wpcom_connection(), 'is_store_connected' => $is_connected, 'has_connected_owner' => $has_connected_owner, 'is_connection_owner' => $has_connected_owner && $this->wpcom_connection_manager->is_connection_owner(), ); } /** * Check if the store has a working WPCOM connection. * * The store is considered to have a working WPCOM connection if: * - The store is connected to WPCOM (blog ID and tokens are set). * - The store connection has a connected owner (connection owner is set). * * @return bool Whether the store has a working WPCOM connection. */ private function has_working_wpcom_connection(): bool { return $this->wpcom_connection_manager->is_connected() && $this->wpcom_connection_manager->has_connected_owner(); } /** * Check if the WooPayments plugin is active. * * @return boolean */ private function is_extension_active(): bool { return $this->proxy->call_function( 'class_exists', '\WC_Payments' ); } /** * Get the main payment gateway instance. * * @return \WC_Payment_Gateway The main payment gateway instance. */ private function get_payment_gateway(): \WC_Payment_Gateway { return $this->proxy->call_static( '\WC_Payments', 'get_gateway' ); } /** * Determine if WooPayments has an account set up. * * @return bool Whether WooPayments has an account set up. */ private function has_account(): bool { return $this->provider->is_account_connected( $this->get_payment_gateway() ); } /** * Determine if WooPayments has a valid, fully onboarded account set up. * * @return bool Whether WooPayments has a valid, fully onboarded account set up. */ private function has_valid_account(): bool { if ( ! $this->has_account() ) { return false; } $account_service = $this->proxy->call_static( '\WC_Payments', 'get_account_service' ); return $account_service->is_stripe_account_valid(); } /** * Determine if WooPayments has a working account set up. * * This is a more specific check than has_valid_account() and checks if payments are enabled for the account. * * @return bool Whether WooPayments has a working account set up. */ private function has_working_account(): bool { if ( ! $this->has_account() ) { return false; } $account_service = $this->proxy->call_static( '\WC_Payments', 'get_account_service' ); $account_status = $account_service->get_account_status_data(); return ! empty( $account_status['paymentsEnabled'] ); } /** * Determine if WooPayments has a test account set up. * * @return bool Whether WooPayments has a test account set up. */ private function has_test_account(): bool { if ( ! $this->has_account() ) { return false; } $account_service = $this->proxy->call_static( '\WC_Payments', 'get_account_service' ); $account_status = $account_service->get_account_status_data(); return ! empty( $account_status['testDrive'] ); } /** * Determine if WooPayments has a sandbox account set up. * * @return bool Whether WooPayments has a sandbox account set up. */ private function has_sandbox_account(): bool { if ( ! $this->has_account() ) { return false; } $account_service = $this->proxy->call_static( '\WC_Payments', 'get_account_service' ); $account_status = $account_service->get_account_status_data(); return empty( $account_status['isLive'] ) && empty( $account_status['testDrive'] ); } /** * Determine if WooPayments has a live account set up. * * @return bool Whether WooPayments has a test account set up. */ private function has_live_account(): bool { if ( ! $this->has_account() ) { return false; } $account_service = $this->proxy->call_static( '\WC_Payments', 'get_account_service' ); $account_status = $account_service->get_account_status_data(); return ! empty( $account_status['isLive'] ); } /** * Get the onboarding fields data for the KYC business verification. * * @param string $location The location for which we are onboarding. * This is an ISO 3166-1 alpha-2 country code. * * @return array The onboarding fields data. * @throws Exception If the onboarding fields data could not be retrieved or there was an error. */ private function get_onboarding_kyc_fields( string $location ): array { // Call the WooPayments API to get the onboarding fields. $response = $this->proxy->call_static( Utils::class, 'rest_endpoint_get_request', '/wc/v3/payments/onboarding/fields' ); if ( is_wp_error( $response ) ) { throw new Exception( esc_html( $response->get_error_message() ) ); } if ( ! is_array( $response ) || ! isset( $response['data'] ) ) { throw new Exception( esc_html__( 'Failed to get onboarding fields data.', 'woocommerce' ) ); } $fields = $response['data']; // If there is no available_countries entry, add it. if ( ! isset( $fields['available_countries'] ) && class_exists( '\WC_Payments_Utils' ) && $this->proxy->call_function( 'is_callable', '\WC_Payments_Utils::supported_countries' ) ) { $fields['available_countries'] = $this->proxy->call_static( '\WC_Payments_Utils', 'supported_countries' ); } $fields['location'] = $location; return $fields; } /** * Get the fallback URL for the embedded KYC flow. * * @return string The fallback URL for the embedded KYC flow. */ private function get_onboarding_kyc_fallback_url(): string { if ( $this->proxy->call_function( 'is_callable', '\WC_Payments_Account::get_connect_url' ) ) { return $this->proxy->call_static( '\WC_Payments_Account', 'get_connect_url', self::FROM_NOX_IN_CONTEXT ); } // Fall back to the provider onboarding URL. return $this->provider->get_onboarding_url( $this->get_payment_gateway(), Utils::wc_payments_settings_url( self::ONBOARDING_PATH_BASE, array( 'from' => self::FROM_KYC ) ) ); } /** * Get the WooPayments Overview page URL. * * @return string The WooPayments Overview page URL. */ private function get_overview_page_url(): string { if ( $this->proxy->call_function( 'is_callable', '\WC_Payments_Account::get_overview_page_url' ) ) { return add_query_arg( array( 'from' => self::FROM_NOX_IN_CONTEXT, ), $this->proxy->call_static( '\WC_Payments_Account', 'get_overview_page_url' ) ); } // Fall back to the known WooPayments Overview page URL. return add_query_arg( array( 'page' => 'wc-admin', 'path' => '/payments/overview', 'from' => self::FROM_NOX_IN_CONTEXT, ), admin_url( 'admin.php' ) ); } /** * Check the onboarding source and ensure it is a valid value. * * @param string|null $source The source of the onboarding request. * * @return string The validated onboarding source. */ private function validate_onboarding_source( ?string $source ): string { if ( empty( $source ) ) { return self::SESSION_ENTRY_DEFAULT; } $valid_sources = array( self::SESSION_ENTRY_DEFAULT, self::SESSION_ENTRY_LYS, ); return in_array( $source, $valid_sources, true ) ? $source : self::SESSION_ENTRY_DEFAULT; } }