Version Description
Download this release
Release Info
| Developer | |
| Plugin | |
| Version | 2.0.0 |
| Comparing to | |
| See all releases | |
Code changes from version 1.8.0 to 2.0.0
- changelog.txt +3 -0
- composer.json +5 -2
- composer.lock +394 -197
- core/EventIdGenerator.php +34 -0
- core/FacebookPluginConfig.php +6 -1
- core/FacebookPluginUtils.php +13 -0
- core/FacebookServerSideEvent.php +68 -0
- core/FacebookWordpressOptions.php +25 -0
- core/FacebookWordpressPixelInjection.php +3 -0
- core/FacebookWordpressSettingsPage.php +72 -0
- core/PixelRenderer.php +72 -0
- core/ServerEventAsyncTask.php +47 -0
- core/ServerEventFactory.php +156 -0
- facebook-for-wordpress.php +11 -4
- integration/EDDUtils.php +30 -0
- integration/FacebookWordpressCalderaForm.php +52 -3
- integration/FacebookWordpressContactForm7.php +82 -19
- integration/FacebookWordpressEasyDigitalDownloads.php +64 -25
- integration/FacebookWordpressFormidableForm.php +91 -10
- integration/FacebookWordpressGravityForms.php +69 -4
- integration/FacebookWordpressMailchimpForWp.php +28 -3
- integration/FacebookWordpressNinjaForms.php +57 -12
- integration/FacebookWordpressWPECommerce.php +74 -26
- integration/FacebookWordpressWPForms.php +78 -22
- integration/IntegrationUtils.php +26 -0
- languages/official-facebook-pixel-ar_AR.po +1 -1
- languages/official-facebook-pixel-cs_CZ.po +1 -1
- languages/official-facebook-pixel-da_DK.po +1 -1
- languages/official-facebook-pixel-de_DE.po +1 -1
- languages/official-facebook-pixel-en_GB.po +1 -1
- languages/official-facebook-pixel-es_ES.po +1 -1
- languages/official-facebook-pixel-es_LA.po +1 -1
- languages/official-facebook-pixel-fi_FI.po +1 -1
- languages/official-facebook-pixel-fr_CA.po +1 -1
- languages/official-facebook-pixel-fr_FR.po +1 -1
- languages/official-facebook-pixel-he_IL.po +1 -1
- languages/official-facebook-pixel-it_IT.po +1 -1
- languages/official-facebook-pixel-ja_JP.po +1 -1
- languages/official-facebook-pixel-ko_KR.po +1 -1
- languages/official-facebook-pixel-nb_NO.po +1 -1
- languages/official-facebook-pixel-nl_NL.po +1 -1
- languages/official-facebook-pixel-pl_PL.po +1 -1
- languages/official-facebook-pixel-pt_BR.po +1 -1
- languages/official-facebook-pixel-pt_PT.po +1 -1
- languages/official-facebook-pixel-ru_RU.po +1 -1
- languages/official-facebook-pixel-sv_SE.po +1 -1
- languages/official-facebook-pixel-th_TH.po +1 -1
- languages/official-facebook-pixel-tr_TR.po +1 -1
- languages/official-facebook-pixel-vi_VN.po +1 -1
- languages/official-facebook-pixel-zh_CN.po +1 -1
- languages/official-facebook-pixel-zh_TW.po +1 -1
- languages/official-facebook-pixel.pot +1 -1
- readme.txt +11 -6
- vendor/autoload.php +1 -1
- vendor/composer/autoload_classmap.php +1 -0
- vendor/composer/autoload_psr4.php +1 -0
- vendor/composer/autoload_real.php +4 -4
- vendor/composer/autoload_static.php +13 -3
- vendor/composer/installed.json +94 -1
- vendor/facebook/php-business-sdk/.github/ISSUE_TEMPLATE.md +3 -0
- vendor/facebook/php-business-sdk/.travis.yml +30 -0
- vendor/facebook/php-business-sdk/CHANGELOG.md +71 -0
- vendor/facebook/php-business-sdk/CODE_OF_CONDUCT.md +3 -0
- vendor/facebook/php-business-sdk/CONTRIBUTING.md +45 -0
- vendor/facebook/php-business-sdk/DEVELOPER_GUIDE.md +495 -0
- vendor/facebook/php-business-sdk/LICENSE +19 -0
- vendor/facebook/php-business-sdk/README.md +360 -0
- vendor/facebook/php-business-sdk/bin/clean_account.php +111 -0
- vendor/facebook/php-business-sdk/bin/create_phar.php +112 -0
- vendor/facebook/php-business-sdk/bin/docsmith.php +68 -0
- vendor/facebook/php-business-sdk/bin/get_version.php +34 -0
- vendor/facebook/php-business-sdk/composer.json +23 -0
- vendor/facebook/php-business-sdk/fb_ca_chain_bundle.crt +3920 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/AnonymousSession.php +35 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Api.php +247 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/ApiConfig.php +29 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/ApiRequest.php +219 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/CrashReporter.php +216 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Cursor.php +536 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Enum/AbstractEnum.php +181 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Enum/EmptyEnum.php +56 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Enum/EnumInstanceInterface.php +91 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Exception/Exception.php +29 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/Adapter/AbstractAdapter.php +56 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/Adapter/AdapterInterface.php +64 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/Adapter/Curl/AbstractCurl.php +130 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/Adapter/Curl/Curl.php +101 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/Adapter/Curl/Curl55.php +96 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/Adapter/Curl/CurlInterface.php +106 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/Adapter/CurlAdapter.php +201 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/Client.php +220 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/Exception/AuthorizationException.php +29 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/Exception/ClientException.php +29 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/Exception/EmptyResponseException.php +42 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/Exception/PermissionException.php +29 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/Exception/RequestException.php +248 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/Exception/ServerException.php +29 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/Exception/ThrottleException.php +29 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/FileParameter.php +89 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/Headers.php +29 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/Parameters.php +59 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/Request.php +296 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/RequestInterface.php +169 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/Response.php +125 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/ResponseInterface.php +73 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Http/Util.php +48 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Logger/CurlLogger.php +276 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Logger/CurlLogger/JsonAwareParameters.php +38 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Logger/CurlLogger/JsonNode.php +196 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Logger/LoggerInterface.php +54 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Logger/NullLogger.php +60 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AbstractArchivableCrudObject.php +92 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AbstractCrudObject.php +531 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AbstractObject.php +185 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/Ad.php +516 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccount.php +3220 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountActivity.php +80 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountAdRulesHistory.php +61 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountAdVolume.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountContentFilterLevelsInheritance.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountCreationRequest.php +103 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountDefaultDestination.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountDefaultObjective.php +61 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountDeliveryEstimate.php +59 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountMatchedSearchApplicationsEdgeData.php +59 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountMaxBid.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountPromotableObjects.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountReachEstimate.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountRecommendedCamapaignBudget.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountRoas.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountSubscribedApps.php +64 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountTargetingUnified.php +67 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountTrackingData.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAccountUser.php +76 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdActivity.php +61 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAssetFeedSpec.php +59 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAssetFeedSpecAssetLabel.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAssetFeedSpecBody.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAssetFeedSpecCaption.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAssetFeedSpecDescription.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAssetFeedSpecGroupRule.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAssetFeedSpecImage.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAssetFeedSpecLinkURL.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAssetFeedSpecTitle.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAssetFeedSpecVideo.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAsyncRequest.php +105 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAsyncRequestSet.php +167 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdAsyncRequestSetNotificationResult.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdBidAdjustments.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCampaignActivity.php +92 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCampaignBidConstraint.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCampaignDeliveryEstimate.php +59 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCampaignDeliveryStatsUnsupportedReasons.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCampaignFrequencyControlSpecs.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCampaignGroupActivity.php +84 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCampaignIssuesInfo.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCampaignLearningStageInfo.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCampaignOptimizationEvent.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCampaignPacedBidInfo.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreative.php +282 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeCollectionThumbnailInfo.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeInsights.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeInteractiveComponentsSpec.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeLinkData.php +61 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeLinkDataAppLinkSpec.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeLinkDataCallToAction.php +59 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeLinkDataCallToActionValue.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeLinkDataChildAttachment.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeLinkDataImageLayerSpec.php +71 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeLinkDataImageOverlaySpec.php +69 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeLinkDataSponsorshipInfoSpec.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeLinkDataTemplateVideoSpec.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeObjectStorySpec.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativePhotoData.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativePlaceData.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativePlatformCustomization.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativePortraitCustomizations.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativePostClickConfiguration.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeRecommenderSettings.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeStaticFallbackSpec.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeTemplateURLSpec.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeTextData.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCreativeVideoData.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdCustomizationRuleSpec.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdDynamicCreative.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdEntityTargetSpend.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdImage.php +264 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdKeywords.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdLabel.php +226 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdMonetizationProperty.php +183 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdNetworkAnalyticsAsyncQueryResult.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdNetworkAnalyticsSyncQueryResult.php +67 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdPlacePageSet.php +115 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdPlacePageSetMetadata.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdPlacement.php +80 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdPreview.php +68 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdPromotedObject.php +59 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRecommendation.php +61 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRecommendationData.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdReportRun.php +168 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdReportSpec.php +103 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRule.php +215 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRuleEvaluationSpec.php +59 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRuleExecutionOptions.php +59 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRuleExecutionSpec.php +59 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRuleFilters.php +59 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRuleHistory.php +59 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRuleHistoryResult.php +59 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRuleHistoryResultAction.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRuleSchedule.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRuleScheduleSpec.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdRuleTrigger.php +61 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdSet.php +702 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdStudy.php +251 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdStudyCell.php +204 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdStudyObjective.php +306 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdStudyObjectiveID.php +57 -0
- vendor/facebook/php-business-sdk/src/FacebookAds/Object/AdVideo.php +283 -0
changelog.txt
CHANGED
|
@@ -1,4 +1,7 @@
|
|
| 1 |
Â
*** Facebook for WordPress Changelog ***
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 2 |
Â
2019-12-02 version 1.8.0
|
| 3 |
Â
* Support for WordPress 5.3
|
| 4 |
Â
* Fix Gravity Forms confirmation redirect
|
| 1 |
Â
*** Facebook for WordPress Changelog ***
|
| 2 |
+
2020-03-09 version 2.0.0
|
| 3 |
+
* Added support for Server-Side API
|
| 4 |
+
|
| 5 |
Â
2019-12-02 version 1.8.0
|
| 6 |
Â
* Support for WordPress 5.3
|
| 7 |
Â
* Fix Gravity Forms confirmation redirect
|
composer.json
CHANGED
|
@@ -8,7 +8,10 @@
|
|
| 8 |
Â
"10up/wp_mock": "0.3.0"
|
| 9 |
Â
},
|
| 10 |
Â
"license": "GPL",
|
| 11 |
-
"require": {
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 12 |
Â
"autoload": {
|
| 13 |
Â
"psr-4": {
|
| 14 |
Â
"FacebookPixelPlugin\\": "./",
|
|
@@ -22,4 +25,4 @@
|
|
| 22 |
Â
"./"
|
| 23 |
Â
]
|
| 24 |
Â
}
|
| 25 |
-
}
|
| 8 |
Â
"10up/wp_mock": "0.3.0"
|
| 9 |
Â
},
|
| 10 |
Â
"license": "GPL",
|
| 11 |
+
"require": {
|
| 12 |
+
"facebook/php-business-sdk": "6.0.0",
|
| 13 |
+
"techcrunch/wp-async-task": "dev-master"
|
| 14 |
+
},
|
| 15 |
Â
"autoload": {
|
| 16 |
Â
"psr-4": {
|
| 17 |
Â
"FacebookPixelPlugin\\": "./",
|
| 25 |
Â
"./"
|
| 26 |
Â
]
|
| 27 |
Â
}
|
| 28 |
+
}
|
composer.lock
CHANGED
|
@@ -4,8 +4,97 @@
|
|
| 4 |
Â
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
| 5 |
Â
"This file is @generated automatically"
|
| 6 |
Â
],
|
| 7 |
-
"content-hash": "
|
| 8 |
-
"packages": [
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 9 |
Â
"packages-dev": [
|
| 10 |
Â
{
|
| 11 |
Â
"name": "10up/wp_mock",
|
|
@@ -50,21 +139,24 @@
|
|
| 50 |
Â
},
|
| 51 |
Â
{
|
| 52 |
Â
"name": "antecedent/patchwork",
|
| 53 |
-
"version": "2.1.
|
| 54 |
Â
"source": {
|
| 55 |
Â
"type": "git",
|
| 56 |
Â
"url": "https://github.com/antecedent/patchwork.git",
|
| 57 |
-
"reference": "
|
| 58 |
Â
},
|
| 59 |
Â
"dist": {
|
| 60 |
Â
"type": "zip",
|
| 61 |
-
"url": "https://api.github.com/repos/antecedent/patchwork/zipball/
|
| 62 |
-
"reference": "
|
| 63 |
Â
"shasum": ""
|
| 64 |
Â
},
|
| 65 |
Â
"require": {
|
| 66 |
Â
"php": ">=5.4.0"
|
| 67 |
Â
},
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 68 |
Â
"type": "library",
|
| 69 |
Â
"notification-url": "https://packagist.org/downloads/",
|
| 70 |
Â
"license": [
|
|
@@ -87,31 +179,33 @@
|
|
| 87 |
Â
"runkit",
|
| 88 |
Â
"testing"
|
| 89 |
Â
],
|
| 90 |
-
"time": "
|
| 91 |
Â
},
|
| 92 |
Â
{
|
| 93 |
Â
"name": "doctrine/instantiator",
|
| 94 |
-
"version": "1.
|
| 95 |
Â
"source": {
|
| 96 |
Â
"type": "git",
|
| 97 |
Â
"url": "https://github.com/doctrine/instantiator.git",
|
| 98 |
-
"reference": "
|
| 99 |
Â
},
|
| 100 |
Â
"dist": {
|
| 101 |
Â
"type": "zip",
|
| 102 |
-
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/
|
| 103 |
-
"reference": "
|
| 104 |
Â
"shasum": ""
|
| 105 |
Â
},
|
| 106 |
Â
"require": {
|
| 107 |
Â
"php": "^7.1"
|
| 108 |
Â
},
|
| 109 |
Â
"require-dev": {
|
| 110 |
-
"
|
| 111 |
Â
"ext-pdo": "*",
|
| 112 |
Â
"ext-phar": "*",
|
| 113 |
-
"
|
| 114 |
-
"
|
|
Â
|
|
|
Â
|
|
| 115 |
Â
},
|
| 116 |
Â
"type": "library",
|
| 117 |
Â
"extra": {
|
|
@@ -136,12 +230,12 @@
|
|
| 136 |
Â
}
|
| 137 |
Â
],
|
| 138 |
Â
"description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
|
| 139 |
-
"homepage": "https://
|
| 140 |
Â
"keywords": [
|
| 141 |
Â
"constructor",
|
| 142 |
Â
"instantiate"
|
| 143 |
Â
],
|
| 144 |
-
"time": "
|
| 145 |
Â
},
|
| 146 |
Â
{
|
| 147 |
Â
"name": "hamcrest/hamcrest-php",
|
|
@@ -229,16 +323,16 @@
|
|
| 229 |
Â
},
|
| 230 |
Â
{
|
| 231 |
Â
"name": "mockery/mockery",
|
| 232 |
-
"version": "1.
|
| 233 |
Â
"source": {
|
| 234 |
Â
"type": "git",
|
| 235 |
Â
"url": "https://github.com/mockery/mockery.git",
|
| 236 |
-
"reference": "
|
| 237 |
Â
},
|
| 238 |
Â
"dist": {
|
| 239 |
Â
"type": "zip",
|
| 240 |
-
"url": "https://api.github.com/repos/mockery/mockery/zipball/
|
| 241 |
-
"reference": "
|
| 242 |
Â
"shasum": ""
|
| 243 |
Â
},
|
| 244 |
Â
"require": {
|
|
@@ -247,12 +341,12 @@
|
|
| 247 |
Â
"php": ">=5.6.0"
|
| 248 |
Â
},
|
| 249 |
Â
"require-dev": {
|
| 250 |
-
"phpunit/phpunit": "~5.7.10|~6.5|~7.0"
|
| 251 |
Â
},
|
| 252 |
Â
"type": "library",
|
| 253 |
Â
"extra": {
|
| 254 |
Â
"branch-alias": {
|
| 255 |
-
"dev-master": "1.
|
| 256 |
Â
}
|
| 257 |
Â
},
|
| 258 |
Â
"autoload": {
|
|
@@ -290,20 +384,20 @@
|
|
| 290 |
Â
"test double",
|
| 291 |
Â
"testing"
|
| 292 |
Â
],
|
| 293 |
-
"time": "
|
| 294 |
Â
},
|
| 295 |
Â
{
|
| 296 |
Â
"name": "myclabs/deep-copy",
|
| 297 |
-
"version": "1.
|
| 298 |
Â
"source": {
|
| 299 |
Â
"type": "git",
|
| 300 |
Â
"url": "https://github.com/myclabs/DeepCopy.git",
|
| 301 |
-
"reference": "
|
| 302 |
Â
},
|
| 303 |
Â
"dist": {
|
| 304 |
Â
"type": "zip",
|
| 305 |
-
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/
|
| 306 |
-
"reference": "
|
| 307 |
Â
"shasum": ""
|
| 308 |
Â
},
|
| 309 |
Â
"require": {
|
|
@@ -338,7 +432,7 @@
|
|
| 338 |
Â
"object",
|
| 339 |
Â
"object graph"
|
| 340 |
Â
],
|
| 341 |
-
"time": "
|
| 342 |
Â
},
|
| 343 |
Â
{
|
| 344 |
Â
"name": "phar-io/manifest",
|
|
@@ -541,35 +635,33 @@
|
|
| 541 |
Â
},
|
| 542 |
Â
{
|
| 543 |
Â
"name": "phpdocumentor/reflection-common",
|
| 544 |
-
"version": "
|
| 545 |
Â
"source": {
|
| 546 |
Â
"type": "git",
|
| 547 |
Â
"url": "https://github.com/phpDocumentor/ReflectionCommon.git",
|
| 548 |
-
"reference": "
|
| 549 |
Â
},
|
| 550 |
Â
"dist": {
|
| 551 |
Â
"type": "zip",
|
| 552 |
-
"url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/
|
| 553 |
-
"reference": "
|
| 554 |
Â
"shasum": ""
|
| 555 |
Â
},
|
| 556 |
Â
"require": {
|
| 557 |
-
"php": ">=
|
| 558 |
Â
},
|
| 559 |
Â
"require-dev": {
|
| 560 |
-
"phpunit/phpunit": "
|
| 561 |
Â
},
|
| 562 |
Â
"type": "library",
|
| 563 |
Â
"extra": {
|
| 564 |
Â
"branch-alias": {
|
| 565 |
-
"dev-master": "
|
| 566 |
Â
}
|
| 567 |
Â
},
|
| 568 |
Â
"autoload": {
|
| 569 |
Â
"psr-4": {
|
| 570 |
-
"phpDocumentor\\Reflection\\":
|
| 571 |
-
"src"
|
| 572 |
-
]
|
| 573 |
Â
}
|
| 574 |
Â
},
|
| 575 |
Â
"notification-url": "https://packagist.org/downloads/",
|
|
@@ -591,44 +683,42 @@
|
|
| 591 |
Â
"reflection",
|
| 592 |
Â
"static analysis"
|
| 593 |
Â
],
|
| 594 |
-
"time": "
|
| 595 |
Â
},
|
| 596 |
Â
{
|
| 597 |
Â
"name": "phpdocumentor/reflection-docblock",
|
| 598 |
-
"version": "
|
| 599 |
Â
"source": {
|
| 600 |
Â
"type": "git",
|
| 601 |
Â
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
|
| 602 |
-
"reference": "
|
| 603 |
Â
},
|
| 604 |
Â
"dist": {
|
| 605 |
Â
"type": "zip",
|
| 606 |
-
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/
|
| 607 |
-
"reference": "
|
| 608 |
Â
"shasum": ""
|
| 609 |
Â
},
|
| 610 |
Â
"require": {
|
| 611 |
-
"
|
| 612 |
-
"
|
| 613 |
-
"phpdocumentor/
|
| 614 |
-
"
|
|
Â
|
|
| 615 |
Â
},
|
| 616 |
Â
"require-dev": {
|
| 617 |
-
"doctrine/instantiator": "
|
| 618 |
-
"mockery/mockery": "^1
|
| 619 |
-
"phpunit/phpunit": "^6.4"
|
| 620 |
Â
},
|
| 621 |
Â
"type": "library",
|
| 622 |
Â
"extra": {
|
| 623 |
Â
"branch-alias": {
|
| 624 |
-
"dev-master": "
|
| 625 |
Â
}
|
| 626 |
Â
},
|
| 627 |
Â
"autoload": {
|
| 628 |
Â
"psr-4": {
|
| 629 |
-
"phpDocumentor\\Reflection\\":
|
| 630 |
-
"src/"
|
| 631 |
-
]
|
| 632 |
Â
}
|
| 633 |
Â
},
|
| 634 |
Â
"notification-url": "https://packagist.org/downloads/",
|
|
@@ -639,44 +729,47 @@
|
|
| 639 |
Â
{
|
| 640 |
Â
"name": "Mike van Riel",
|
| 641 |
Â
"email": "me@mikevanriel.com"
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 642 |
Â
}
|
| 643 |
Â
],
|
| 644 |
Â
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
|
| 645 |
-
"time": "
|
| 646 |
Â
},
|
| 647 |
Â
{
|
| 648 |
Â
"name": "phpdocumentor/type-resolver",
|
| 649 |
-
"version": "0.
|
| 650 |
Â
"source": {
|
| 651 |
Â
"type": "git",
|
| 652 |
Â
"url": "https://github.com/phpDocumentor/TypeResolver.git",
|
| 653 |
-
"reference": "
|
| 654 |
Â
},
|
| 655 |
Â
"dist": {
|
| 656 |
Â
"type": "zip",
|
| 657 |
-
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/
|
| 658 |
-
"reference": "
|
| 659 |
Â
"shasum": ""
|
| 660 |
Â
},
|
| 661 |
Â
"require": {
|
| 662 |
-
"php": "^
|
| 663 |
-
"phpdocumentor/reflection-common": "^
|
| 664 |
Â
},
|
| 665 |
Â
"require-dev": {
|
| 666 |
-
"
|
| 667 |
-
"
|
|
Â
|
|
| 668 |
Â
},
|
| 669 |
Â
"type": "library",
|
| 670 |
Â
"extra": {
|
| 671 |
Â
"branch-alias": {
|
| 672 |
-
"dev-master": "1.
|
| 673 |
Â
}
|
| 674 |
Â
},
|
| 675 |
Â
"autoload": {
|
| 676 |
Â
"psr-4": {
|
| 677 |
-
"phpDocumentor\\Reflection\\":
|
| 678 |
-
"src/"
|
| 679 |
-
]
|
| 680 |
Â
}
|
| 681 |
Â
},
|
| 682 |
Â
"notification-url": "https://packagist.org/downloads/",
|
|
@@ -689,42 +782,43 @@
|
|
| 689 |
Â
"email": "me@mikevanriel.com"
|
| 690 |
Â
}
|
| 691 |
Â
],
|
| 692 |
-
"
|
|
Â
|
|
| 693 |
Â
},
|
| 694 |
Â
{
|
| 695 |
Â
"name": "phpspec/prophecy",
|
| 696 |
-
"version": "
|
| 697 |
Â
"source": {
|
| 698 |
Â
"type": "git",
|
| 699 |
Â
"url": "https://github.com/phpspec/prophecy.git",
|
| 700 |
-
"reference": "
|
| 701 |
Â
},
|
| 702 |
Â
"dist": {
|
| 703 |
Â
"type": "zip",
|
| 704 |
-
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/
|
| 705 |
-
"reference": "
|
| 706 |
Â
"shasum": ""
|
| 707 |
Â
},
|
| 708 |
Â
"require": {
|
| 709 |
Â
"doctrine/instantiator": "^1.0.2",
|
| 710 |
Â
"php": "^5.3|^7.0",
|
| 711 |
-
"phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
|
| 712 |
-
"sebastian/comparator": "^1.
|
| 713 |
-
"sebastian/recursion-context": "^1.0|^2.0|^3.0"
|
| 714 |
Â
},
|
| 715 |
Â
"require-dev": {
|
| 716 |
-
"phpspec/phpspec": "^2.5
|
| 717 |
Â
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
|
| 718 |
Â
},
|
| 719 |
Â
"type": "library",
|
| 720 |
Â
"extra": {
|
| 721 |
Â
"branch-alias": {
|
| 722 |
-
"dev-master": "1.
|
| 723 |
Â
}
|
| 724 |
Â
},
|
| 725 |
Â
"autoload": {
|
| 726 |
-
"psr-
|
| 727 |
-
"Prophecy\\": "src/"
|
| 728 |
Â
}
|
| 729 |
Â
},
|
| 730 |
Â
"notification-url": "https://packagist.org/downloads/",
|
|
@@ -752,7 +846,7 @@
|
|
| 752 |
Â
"spy",
|
| 753 |
Â
"stub"
|
| 754 |
Â
],
|
| 755 |
-
"time": "
|
| 756 |
Â
},
|
| 757 |
Â
{
|
| 758 |
Â
"name": "phpunit/php-code-coverage",
|
|
@@ -1005,16 +1099,16 @@
|
|
| 1005 |
Â
},
|
| 1006 |
Â
{
|
| 1007 |
Â
"name": "phpunit/phpunit",
|
| 1008 |
-
"version": "6.5.
|
| 1009 |
Â
"source": {
|
| 1010 |
Â
"type": "git",
|
| 1011 |
Â
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
| 1012 |
-
"reference": "
|
| 1013 |
Â
},
|
| 1014 |
Â
"dist": {
|
| 1015 |
Â
"type": "zip",
|
| 1016 |
-
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/
|
| 1017 |
-
"reference": "
|
| 1018 |
Â
"shasum": ""
|
| 1019 |
Â
},
|
| 1020 |
Â
"require": {
|
|
@@ -1085,7 +1179,7 @@
|
|
| 1085 |
Â
"testing",
|
| 1086 |
Â
"xunit"
|
| 1087 |
Â
],
|
| 1088 |
-
"time": "
|
| 1089 |
Â
},
|
| 1090 |
Â
{
|
| 1091 |
Â
"name": "phpunit/phpunit-mock-objects",
|
|
@@ -1144,8 +1238,58 @@
|
|
| 1144 |
Â
"mock",
|
| 1145 |
Â
"xunit"
|
| 1146 |
Â
],
|
|
Â
|
|
| 1147 |
Â
"time": "2018-08-09T05:50:03+00:00"
|
| 1148 |
Â
},
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 1149 |
Â
{
|
| 1150 |
Â
"name": "sebastian/code-unit-reverse-lookup",
|
| 1151 |
Â
"version": "1.0.1",
|
|
@@ -1359,16 +1503,16 @@
|
|
| 1359 |
Â
},
|
| 1360 |
Â
{
|
| 1361 |
Â
"name": "sebastian/exporter",
|
| 1362 |
-
"version": "3.1.
|
| 1363 |
Â
"source": {
|
| 1364 |
Â
"type": "git",
|
| 1365 |
Â
"url": "https://github.com/sebastianbergmann/exporter.git",
|
| 1366 |
-
"reference": "
|
| 1367 |
Â
},
|
| 1368 |
Â
"dist": {
|
| 1369 |
Â
"type": "zip",
|
| 1370 |
-
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/
|
| 1371 |
-
"reference": "
|
| 1372 |
Â
"shasum": ""
|
| 1373 |
Â
},
|
| 1374 |
Â
"require": {
|
|
@@ -1395,6 +1539,10 @@
|
|
| 1395 |
Â
"BSD-3-Clause"
|
| 1396 |
Â
],
|
| 1397 |
Â
"authors": [
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 1398 |
Â
{
|
| 1399 |
Â
"name": "Jeff Welch",
|
| 1400 |
Â
"email": "whatthejeff@gmail.com"
|
|
@@ -1403,17 +1551,13 @@
|
|
| 1403 |
Â
"name": "Volker Dusch",
|
| 1404 |
Â
"email": "github@wallbash.com"
|
| 1405 |
Â
},
|
| 1406 |
-
{
|
| 1407 |
-
"name": "Bernhard Schussek",
|
| 1408 |
-
"email": "bschussek@2bepublished.at"
|
| 1409 |
-
},
|
| 1410 |
-
{
|
| 1411 |
-
"name": "Sebastian Bergmann",
|
| 1412 |
-
"email": "sebastian@phpunit.de"
|
| 1413 |
-
},
|
| 1414 |
Â
{
|
| 1415 |
Â
"name": "Adam Harvey",
|
| 1416 |
Â
"email": "aharvey@php.net"
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 1417 |
Â
}
|
| 1418 |
Â
],
|
| 1419 |
Â
"description": "Provides the functionality to export PHP variables for visualization",
|
|
@@ -1422,7 +1566,7 @@
|
|
| 1422 |
Â
"export",
|
| 1423 |
Â
"exporter"
|
| 1424 |
Â
],
|
| 1425 |
-
"time": "
|
| 1426 |
Â
},
|
| 1427 |
Â
{
|
| 1428 |
Â
"name": "sebastian/global-state",
|
|
@@ -1707,37 +1851,44 @@
|
|
| 1707 |
Â
},
|
| 1708 |
Â
{
|
| 1709 |
Â
"name": "symfony/console",
|
| 1710 |
-
"version": "v4.
|
| 1711 |
Â
"source": {
|
| 1712 |
Â
"type": "git",
|
| 1713 |
Â
"url": "https://github.com/symfony/console.git",
|
| 1714 |
-
"reference": "
|
| 1715 |
Â
},
|
| 1716 |
Â
"dist": {
|
| 1717 |
Â
"type": "zip",
|
| 1718 |
-
"url": "https://api.github.com/repos/symfony/console/zipball/
|
| 1719 |
-
"reference": "
|
| 1720 |
Â
"shasum": ""
|
| 1721 |
Â
},
|
| 1722 |
Â
"require": {
|
| 1723 |
Â
"php": "^7.1.3",
|
| 1724 |
-
"symfony/
|
| 1725 |
-
"symfony/polyfill-
|
|
Â
|
|
| 1726 |
Â
},
|
| 1727 |
Â
"conflict": {
|
| 1728 |
Â
"symfony/dependency-injection": "<3.4",
|
|
Â
|
|
|
Â
|
|
| 1729 |
Â
"symfony/process": "<3.3"
|
| 1730 |
Â
},
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 1731 |
Â
"require-dev": {
|
| 1732 |
Â
"psr/log": "~1.0",
|
| 1733 |
-
"symfony/config": "
|
| 1734 |
-
"symfony/dependency-injection": "
|
| 1735 |
-
"symfony/event-dispatcher": "
|
| 1736 |
-
"symfony/lock": "
|
| 1737 |
-
"symfony/process": "
|
|
Â
|
|
| 1738 |
Â
},
|
| 1739 |
Â
"suggest": {
|
| 1740 |
-
"psr/log
|
| 1741 |
Â
"symfony/event-dispatcher": "",
|
| 1742 |
Â
"symfony/lock": "",
|
| 1743 |
Â
"symfony/process": ""
|
|
@@ -1745,7 +1896,7 @@
|
|
| 1745 |
Â
"type": "library",
|
| 1746 |
Â
"extra": {
|
| 1747 |
Â
"branch-alias": {
|
| 1748 |
-
"dev-master": "4.
|
| 1749 |
Â
}
|
| 1750 |
Â
},
|
| 1751 |
Â
"autoload": {
|
|
@@ -1772,48 +1923,40 @@
|
|
| 1772 |
Â
],
|
| 1773 |
Â
"description": "Symfony Console Component",
|
| 1774 |
Â
"homepage": "https://symfony.com",
|
| 1775 |
-
"time": "
|
| 1776 |
Â
},
|
| 1777 |
Â
{
|
| 1778 |
-
"name": "symfony/
|
| 1779 |
-
"version": "v1.0
|
| 1780 |
Â
"source": {
|
| 1781 |
Â
"type": "git",
|
| 1782 |
-
"url": "https://github.com/symfony/
|
| 1783 |
-
"reference": "
|
| 1784 |
Â
},
|
| 1785 |
Â
"dist": {
|
| 1786 |
Â
"type": "zip",
|
| 1787 |
-
"url": "https://api.github.com/repos/symfony/
|
| 1788 |
-
"reference": "
|
| 1789 |
Â
"shasum": ""
|
| 1790 |
Â
},
|
| 1791 |
Â
"require": {
|
| 1792 |
-
"php": "
|
| 1793 |
-
},
|
| 1794 |
-
"require-dev": {
|
| 1795 |
-
"psr/cache": "^1.0",
|
| 1796 |
-
"psr/container": "^1.0"
|
| 1797 |
Â
},
|
| 1798 |
Â
"suggest": {
|
| 1799 |
-
"
|
| 1800 |
-
"psr/container": "When using the Service contracts",
|
| 1801 |
-
"symfony/cache-contracts-implementation": "",
|
| 1802 |
-
"symfony/service-contracts-implementation": "",
|
| 1803 |
-
"symfony/translation-contracts-implementation": ""
|
| 1804 |
Â
},
|
| 1805 |
Â
"type": "library",
|
| 1806 |
Â
"extra": {
|
| 1807 |
Â
"branch-alias": {
|
| 1808 |
-
"dev-master": "1.
|
| 1809 |
Â
}
|
| 1810 |
Â
},
|
| 1811 |
Â
"autoload": {
|
| 1812 |
Â
"psr-4": {
|
| 1813 |
-
"Symfony\\
|
| 1814 |
Â
},
|
| 1815 |
-
"
|
| 1816 |
-
"
|
| 1817 |
Â
]
|
| 1818 |
Â
},
|
| 1819 |
Â
"notification-url": "https://packagist.org/downloads/",
|
|
@@ -1822,55 +1965,53 @@
|
|
| 1822 |
Â
],
|
| 1823 |
Â
"authors": [
|
| 1824 |
Â
{
|
| 1825 |
-
"name": "
|
| 1826 |
-
"email": "
|
| 1827 |
Â
},
|
| 1828 |
Â
{
|
| 1829 |
Â
"name": "Symfony Community",
|
| 1830 |
Â
"homepage": "https://symfony.com/contributors"
|
| 1831 |
Â
}
|
| 1832 |
Â
],
|
| 1833 |
-
"description": "
|
| 1834 |
Â
"homepage": "https://symfony.com",
|
| 1835 |
Â
"keywords": [
|
| 1836 |
-
"
|
| 1837 |
-
"
|
| 1838 |
-
"
|
| 1839 |
-
"
|
| 1840 |
-
"interoperability",
|
| 1841 |
-
"standards"
|
| 1842 |
Â
],
|
| 1843 |
-
"time": "
|
| 1844 |
Â
},
|
| 1845 |
Â
{
|
| 1846 |
-
"name": "symfony/polyfill-
|
| 1847 |
-
"version": "v1.
|
| 1848 |
Â
"source": {
|
| 1849 |
Â
"type": "git",
|
| 1850 |
-
"url": "https://github.com/symfony/polyfill-
|
| 1851 |
-
"reference": "
|
| 1852 |
Â
},
|
| 1853 |
Â
"dist": {
|
| 1854 |
Â
"type": "zip",
|
| 1855 |
-
"url": "https://api.github.com/repos/symfony/polyfill-
|
| 1856 |
-
"reference": "
|
| 1857 |
Â
"shasum": ""
|
| 1858 |
Â
},
|
| 1859 |
Â
"require": {
|
| 1860 |
Â
"php": ">=5.3.3"
|
| 1861 |
Â
},
|
| 1862 |
Â
"suggest": {
|
| 1863 |
-
"ext-
|
| 1864 |
Â
},
|
| 1865 |
Â
"type": "library",
|
| 1866 |
Â
"extra": {
|
| 1867 |
Â
"branch-alias": {
|
| 1868 |
-
"dev-master": "1.
|
| 1869 |
Â
}
|
| 1870 |
Â
},
|
| 1871 |
Â
"autoload": {
|
| 1872 |
Â
"psr-4": {
|
| 1873 |
-
"Symfony\\Polyfill\\
|
| 1874 |
Â
},
|
| 1875 |
Â
"files": [
|
| 1876 |
Â
"bootstrap.php"
|
|
@@ -1882,56 +2023,57 @@
|
|
| 1882 |
Â
],
|
| 1883 |
Â
"authors": [
|
| 1884 |
Â
{
|
| 1885 |
-
"name": "
|
| 1886 |
-
"
|
| 1887 |
Â
},
|
| 1888 |
Â
{
|
| 1889 |
-
"name": "
|
| 1890 |
-
"
|
| 1891 |
Â
}
|
| 1892 |
Â
],
|
| 1893 |
-
"description": "Symfony polyfill for
|
| 1894 |
Â
"homepage": "https://symfony.com",
|
| 1895 |
Â
"keywords": [
|
| 1896 |
Â
"compatibility",
|
| 1897 |
-
"
|
| 1898 |
Â
"polyfill",
|
| 1899 |
-
"portable"
|
|
Â
|
|
| 1900 |
Â
],
|
| 1901 |
-
"time": "
|
| 1902 |
Â
},
|
| 1903 |
Â
{
|
| 1904 |
-
"name": "symfony/polyfill-
|
| 1905 |
-
"version": "v1.
|
| 1906 |
Â
"source": {
|
| 1907 |
Â
"type": "git",
|
| 1908 |
-
"url": "https://github.com/symfony/polyfill-
|
| 1909 |
-
"reference": "
|
| 1910 |
Â
},
|
| 1911 |
Â
"dist": {
|
| 1912 |
Â
"type": "zip",
|
| 1913 |
-
"url": "https://api.github.com/repos/symfony/polyfill-
|
| 1914 |
-
"reference": "
|
| 1915 |
Â
"shasum": ""
|
| 1916 |
Â
},
|
| 1917 |
Â
"require": {
|
| 1918 |
Â
"php": ">=5.3.3"
|
| 1919 |
Â
},
|
| 1920 |
-
"suggest": {
|
| 1921 |
-
"ext-mbstring": "For best performance"
|
| 1922 |
-
},
|
| 1923 |
Â
"type": "library",
|
| 1924 |
Â
"extra": {
|
| 1925 |
Â
"branch-alias": {
|
| 1926 |
-
"dev-master": "1.
|
| 1927 |
Â
}
|
| 1928 |
Â
},
|
| 1929 |
Â
"autoload": {
|
| 1930 |
Â
"psr-4": {
|
| 1931 |
-
"Symfony\\Polyfill\\
|
| 1932 |
Â
},
|
| 1933 |
Â
"files": [
|
| 1934 |
Â
"bootstrap.php"
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 1935 |
Â
]
|
| 1936 |
Â
},
|
| 1937 |
Â
"notification-url": "https://packagist.org/downloads/",
|
|
@@ -1948,29 +2090,86 @@
|
|
| 1948 |
Â
"homepage": "https://symfony.com/contributors"
|
| 1949 |
Â
}
|
| 1950 |
Â
],
|
| 1951 |
-
"description": "Symfony polyfill
|
| 1952 |
Â
"homepage": "https://symfony.com",
|
| 1953 |
Â
"keywords": [
|
| 1954 |
Â
"compatibility",
|
| 1955 |
-
"mbstring",
|
| 1956 |
Â
"polyfill",
|
| 1957 |
Â
"portable",
|
| 1958 |
Â
"shim"
|
| 1959 |
Â
],
|
| 1960 |
-
"time": "
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 1961 |
Â
},
|
| 1962 |
Â
{
|
| 1963 |
Â
"name": "symfony/yaml",
|
| 1964 |
-
"version": "v4.
|
| 1965 |
Â
"source": {
|
| 1966 |
Â
"type": "git",
|
| 1967 |
Â
"url": "https://github.com/symfony/yaml.git",
|
| 1968 |
-
"reference": "
|
| 1969 |
Â
},
|
| 1970 |
Â
"dist": {
|
| 1971 |
Â
"type": "zip",
|
| 1972 |
-
"url": "https://api.github.com/repos/symfony/yaml/zipball/
|
| 1973 |
-
"reference": "
|
| 1974 |
Â
"shasum": ""
|
| 1975 |
Â
},
|
| 1976 |
Â
"require": {
|
|
@@ -1981,7 +2180,7 @@
|
|
| 1981 |
Â
"symfony/console": "<3.4"
|
| 1982 |
Â
},
|
| 1983 |
Â
"require-dev": {
|
| 1984 |
-
"symfony/console": "
|
| 1985 |
Â
},
|
| 1986 |
Â
"suggest": {
|
| 1987 |
Â
"symfony/console": "For validating YAML files using the lint command"
|
|
@@ -1989,7 +2188,7 @@
|
|
| 1989 |
Â
"type": "library",
|
| 1990 |
Â
"extra": {
|
| 1991 |
Â
"branch-alias": {
|
| 1992 |
-
"dev-master": "4.
|
| 1993 |
Â
}
|
| 1994 |
Â
},
|
| 1995 |
Â
"autoload": {
|
|
@@ -2016,20 +2215,20 @@
|
|
| 2016 |
Â
],
|
| 2017 |
Â
"description": "Symfony Yaml Component",
|
| 2018 |
Â
"homepage": "https://symfony.com",
|
| 2019 |
-
"time": "
|
| 2020 |
Â
},
|
| 2021 |
Â
{
|
| 2022 |
Â
"name": "theseer/tokenizer",
|
| 2023 |
-
"version": "1.1.
|
| 2024 |
Â
"source": {
|
| 2025 |
Â
"type": "git",
|
| 2026 |
Â
"url": "https://github.com/theseer/tokenizer.git",
|
| 2027 |
-
"reference": "
|
| 2028 |
Â
},
|
| 2029 |
Â
"dist": {
|
| 2030 |
Â
"type": "zip",
|
| 2031 |
-
"url": "https://api.github.com/repos/theseer/tokenizer/zipball/
|
| 2032 |
-
"reference": "
|
| 2033 |
Â
"shasum": ""
|
| 2034 |
Â
},
|
| 2035 |
Â
"require": {
|
|
@@ -2056,36 +2255,33 @@
|
|
| 2056 |
Â
}
|
| 2057 |
Â
],
|
| 2058 |
Â
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
|
| 2059 |
-
"time": "
|
| 2060 |
Â
},
|
| 2061 |
Â
{
|
| 2062 |
Â
"name": "webmozart/assert",
|
| 2063 |
-
"version": "1.
|
| 2064 |
Â
"source": {
|
| 2065 |
Â
"type": "git",
|
| 2066 |
Â
"url": "https://github.com/webmozart/assert.git",
|
| 2067 |
-
"reference": "
|
| 2068 |
Â
},
|
| 2069 |
Â
"dist": {
|
| 2070 |
Â
"type": "zip",
|
| 2071 |
-
"url": "https://api.github.com/repos/webmozart/assert/zipball/
|
| 2072 |
-
"reference": "
|
| 2073 |
Â
"shasum": ""
|
| 2074 |
Â
},
|
| 2075 |
Â
"require": {
|
| 2076 |
Â
"php": "^5.3.3 || ^7.0",
|
| 2077 |
Â
"symfony/polyfill-ctype": "^1.8"
|
| 2078 |
Â
},
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 2079 |
Â
"require-dev": {
|
| 2080 |
-
"phpunit/phpunit": "^4.
|
| 2081 |
-
"sebastian/version": "^1.0.1"
|
| 2082 |
Â
},
|
| 2083 |
Â
"type": "library",
|
| 2084 |
-
"extra": {
|
| 2085 |
-
"branch-alias": {
|
| 2086 |
-
"dev-master": "1.3-dev"
|
| 2087 |
-
}
|
| 2088 |
-
},
|
| 2089 |
Â
"autoload": {
|
| 2090 |
Â
"psr-4": {
|
| 2091 |
Â
"Webmozart\\Assert\\": "src/"
|
|
@@ -2107,12 +2303,13 @@
|
|
| 2107 |
Â
"check",
|
| 2108 |
Â
"validate"
|
| 2109 |
Â
],
|
| 2110 |
-
"time": "
|
| 2111 |
Â
}
|
| 2112 |
Â
],
|
| 2113 |
Â
"aliases": [],
|
| 2114 |
Â
"minimum-stability": "stable",
|
| 2115 |
Â
"stability-flags": {
|
|
Â
|
|
| 2116 |
Â
"phing/phing": 15
|
| 2117 |
Â
},
|
| 2118 |
Â
"prefer-stable": false,
|
| 4 |
Â
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
| 5 |
Â
"This file is @generated automatically"
|
| 6 |
Â
],
|
| 7 |
+
"content-hash": "8c78f3821e9ebc5ffc8c03dab0e2a8b3",
|
| 8 |
+
"packages": [
|
| 9 |
+
{
|
| 10 |
+
"name": "facebook/php-business-sdk",
|
| 11 |
+
"version": "6.0.0",
|
| 12 |
+
"source": {
|
| 13 |
+
"type": "git",
|
| 14 |
+
"url": "https://github.com/facebook/facebook-php-business-sdk.git",
|
| 15 |
+
"reference": "32c8678d3c50e0570b68d7cbb23062c16a5faf15"
|
| 16 |
+
},
|
| 17 |
+
"dist": {
|
| 18 |
+
"type": "zip",
|
| 19 |
+
"url": "https://api.github.com/repos/facebook/facebook-php-business-sdk/zipball/32c8678d3c50e0570b68d7cbb23062c16a5faf15",
|
| 20 |
+
"reference": "32c8678d3c50e0570b68d7cbb23062c16a5faf15",
|
| 21 |
+
"shasum": ""
|
| 22 |
+
},
|
| 23 |
+
"require-dev": {
|
| 24 |
+
"phpunit/phpunit": "~8",
|
| 25 |
+
"symfony/finder": "~2.6"
|
| 26 |
+
},
|
| 27 |
+
"type": "library",
|
| 28 |
+
"autoload": {
|
| 29 |
+
"psr-4": {
|
| 30 |
+
"FacebookAds\\": "src/FacebookAds/"
|
| 31 |
+
}
|
| 32 |
+
},
|
| 33 |
+
"notification-url": "https://packagist.org/downloads/",
|
| 34 |
+
"description": "PHP SDK for Facebook Business",
|
| 35 |
+
"homepage": "https://developers.facebook.com/",
|
| 36 |
+
"keywords": [
|
| 37 |
+
"ads",
|
| 38 |
+
"business",
|
| 39 |
+
"facebook",
|
| 40 |
+
"instagram",
|
| 41 |
+
"page",
|
| 42 |
+
"sdk"
|
| 43 |
+
],
|
| 44 |
+
"time": "2020-02-03T20:06:10+00:00"
|
| 45 |
+
},
|
| 46 |
+
{
|
| 47 |
+
"name": "techcrunch/wp-async-task",
|
| 48 |
+
"version": "dev-master",
|
| 49 |
+
"source": {
|
| 50 |
+
"type": "git",
|
| 51 |
+
"url": "https://github.com/techcrunch/wp-async-task.git",
|
| 52 |
+
"reference": "9bdbbf9df4ff5179711bb58b9a2451296f6753dc"
|
| 53 |
+
},
|
| 54 |
+
"dist": {
|
| 55 |
+
"type": "zip",
|
| 56 |
+
"url": "https://api.github.com/repos/techcrunch/wp-async-task/zipball/9bdbbf9df4ff5179711bb58b9a2451296f6753dc",
|
| 57 |
+
"reference": "9bdbbf9df4ff5179711bb58b9a2451296f6753dc",
|
| 58 |
+
"shasum": ""
|
| 59 |
+
},
|
| 60 |
+
"require-dev": {
|
| 61 |
+
"10up/wp_mock": "dev-master",
|
| 62 |
+
"phpunit/phpunit": "*@stable"
|
| 63 |
+
},
|
| 64 |
+
"type": "wordpress-plugin",
|
| 65 |
+
"autoload": {
|
| 66 |
+
"classmap": [
|
| 67 |
+
"wp-async-task.php"
|
| 68 |
+
]
|
| 69 |
+
},
|
| 70 |
+
"notification-url": "https://packagist.org/downloads/",
|
| 71 |
+
"license": [
|
| 72 |
+
"MIT"
|
| 73 |
+
],
|
| 74 |
+
"authors": [
|
| 75 |
+
{
|
| 76 |
+
"name": "Alex Khadiwala",
|
| 77 |
+
"role": "developer"
|
| 78 |
+
},
|
| 79 |
+
{
|
| 80 |
+
"name": "Nicolas Vincent",
|
| 81 |
+
"role": "developer"
|
| 82 |
+
},
|
| 83 |
+
{
|
| 84 |
+
"name": "Eric Mann",
|
| 85 |
+
"email": "eric.mann@10up.com",
|
| 86 |
+
"role": "developer"
|
| 87 |
+
},
|
| 88 |
+
{
|
| 89 |
+
"name": "John P. Bloch",
|
| 90 |
+
"email": "john.bloch@10up.com",
|
| 91 |
+
"role": "developer"
|
| 92 |
+
}
|
| 93 |
+
],
|
| 94 |
+
"description": "Run asynchronous tasks for long-running operations in WordPress",
|
| 95 |
+
"time": "2016-03-10T17:37:13+00:00"
|
| 96 |
+
}
|
| 97 |
+
],
|
| 98 |
Â
"packages-dev": [
|
| 99 |
Â
{
|
| 100 |
Â
"name": "10up/wp_mock",
|
| 139 |
Â
},
|
| 140 |
Â
{
|
| 141 |
Â
"name": "antecedent/patchwork",
|
| 142 |
+
"version": "2.1.12",
|
| 143 |
Â
"source": {
|
| 144 |
Â
"type": "git",
|
| 145 |
Â
"url": "https://github.com/antecedent/patchwork.git",
|
| 146 |
+
"reference": "b98e046dd4c0acc34a0846604f06f6111654d9ea"
|
| 147 |
Â
},
|
| 148 |
Â
"dist": {
|
| 149 |
Â
"type": "zip",
|
| 150 |
+
"url": "https://api.github.com/repos/antecedent/patchwork/zipball/b98e046dd4c0acc34a0846604f06f6111654d9ea",
|
| 151 |
+
"reference": "b98e046dd4c0acc34a0846604f06f6111654d9ea",
|
| 152 |
Â
"shasum": ""
|
| 153 |
Â
},
|
| 154 |
Â
"require": {
|
| 155 |
Â
"php": ">=5.4.0"
|
| 156 |
Â
},
|
| 157 |
+
"require-dev": {
|
| 158 |
+
"phpunit/phpunit": ">=4"
|
| 159 |
+
},
|
| 160 |
Â
"type": "library",
|
| 161 |
Â
"notification-url": "https://packagist.org/downloads/",
|
| 162 |
Â
"license": [
|
| 179 |
Â
"runkit",
|
| 180 |
Â
"testing"
|
| 181 |
Â
],
|
| 182 |
+
"time": "2019-12-22T17:52:09+00:00"
|
| 183 |
Â
},
|
| 184 |
Â
{
|
| 185 |
Â
"name": "doctrine/instantiator",
|
| 186 |
+
"version": "1.3.0",
|
| 187 |
Â
"source": {
|
| 188 |
Â
"type": "git",
|
| 189 |
Â
"url": "https://github.com/doctrine/instantiator.git",
|
| 190 |
+
"reference": "ae466f726242e637cebdd526a7d991b9433bacf1"
|
| 191 |
Â
},
|
| 192 |
Â
"dist": {
|
| 193 |
Â
"type": "zip",
|
| 194 |
+
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1",
|
| 195 |
+
"reference": "ae466f726242e637cebdd526a7d991b9433bacf1",
|
| 196 |
Â
"shasum": ""
|
| 197 |
Â
},
|
| 198 |
Â
"require": {
|
| 199 |
Â
"php": "^7.1"
|
| 200 |
Â
},
|
| 201 |
Â
"require-dev": {
|
| 202 |
+
"doctrine/coding-standard": "^6.0",
|
| 203 |
Â
"ext-pdo": "*",
|
| 204 |
Â
"ext-phar": "*",
|
| 205 |
+
"phpbench/phpbench": "^0.13",
|
| 206 |
+
"phpstan/phpstan-phpunit": "^0.11",
|
| 207 |
+
"phpstan/phpstan-shim": "^0.11",
|
| 208 |
+
"phpunit/phpunit": "^7.0"
|
| 209 |
Â
},
|
| 210 |
Â
"type": "library",
|
| 211 |
Â
"extra": {
|
| 230 |
Â
}
|
| 231 |
Â
],
|
| 232 |
Â
"description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
|
| 233 |
+
"homepage": "https://www.doctrine-project.org/projects/instantiator.html",
|
| 234 |
Â
"keywords": [
|
| 235 |
Â
"constructor",
|
| 236 |
Â
"instantiate"
|
| 237 |
Â
],
|
| 238 |
+
"time": "2019-10-21T16:45:58+00:00"
|
| 239 |
Â
},
|
| 240 |
Â
{
|
| 241 |
Â
"name": "hamcrest/hamcrest-php",
|
| 323 |
Â
},
|
| 324 |
Â
{
|
| 325 |
Â
"name": "mockery/mockery",
|
| 326 |
+
"version": "1.3.1",
|
| 327 |
Â
"source": {
|
| 328 |
Â
"type": "git",
|
| 329 |
Â
"url": "https://github.com/mockery/mockery.git",
|
| 330 |
+
"reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be"
|
| 331 |
Â
},
|
| 332 |
Â
"dist": {
|
| 333 |
Â
"type": "zip",
|
| 334 |
+
"url": "https://api.github.com/repos/mockery/mockery/zipball/f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be",
|
| 335 |
+
"reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be",
|
| 336 |
Â
"shasum": ""
|
| 337 |
Â
},
|
| 338 |
Â
"require": {
|
| 341 |
Â
"php": ">=5.6.0"
|
| 342 |
Â
},
|
| 343 |
Â
"require-dev": {
|
| 344 |
+
"phpunit/phpunit": "~5.7.10|~6.5|~7.0|~8.0"
|
| 345 |
Â
},
|
| 346 |
Â
"type": "library",
|
| 347 |
Â
"extra": {
|
| 348 |
Â
"branch-alias": {
|
| 349 |
+
"dev-master": "1.3.x-dev"
|
| 350 |
Â
}
|
| 351 |
Â
},
|
| 352 |
Â
"autoload": {
|
| 384 |
Â
"test double",
|
| 385 |
Â
"testing"
|
| 386 |
Â
],
|
| 387 |
+
"time": "2019-12-26T09:49:15+00:00"
|
| 388 |
Â
},
|
| 389 |
Â
{
|
| 390 |
Â
"name": "myclabs/deep-copy",
|
| 391 |
+
"version": "1.9.5",
|
| 392 |
Â
"source": {
|
| 393 |
Â
"type": "git",
|
| 394 |
Â
"url": "https://github.com/myclabs/DeepCopy.git",
|
| 395 |
+
"reference": "b2c28789e80a97badd14145fda39b545d83ca3ef"
|
| 396 |
Â
},
|
| 397 |
Â
"dist": {
|
| 398 |
Â
"type": "zip",
|
| 399 |
+
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef",
|
| 400 |
+
"reference": "b2c28789e80a97badd14145fda39b545d83ca3ef",
|
| 401 |
Â
"shasum": ""
|
| 402 |
Â
},
|
| 403 |
Â
"require": {
|
| 432 |
Â
"object",
|
| 433 |
Â
"object graph"
|
| 434 |
Â
],
|
| 435 |
+
"time": "2020-01-17T21:11:47+00:00"
|
| 436 |
Â
},
|
| 437 |
Â
{
|
| 438 |
Â
"name": "phar-io/manifest",
|
| 635 |
Â
},
|
| 636 |
Â
{
|
| 637 |
Â
"name": "phpdocumentor/reflection-common",
|
| 638 |
+
"version": "2.0.0",
|
| 639 |
Â
"source": {
|
| 640 |
Â
"type": "git",
|
| 641 |
Â
"url": "https://github.com/phpDocumentor/ReflectionCommon.git",
|
| 642 |
+
"reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a"
|
| 643 |
Â
},
|
| 644 |
Â
"dist": {
|
| 645 |
Â
"type": "zip",
|
| 646 |
+
"url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a",
|
| 647 |
+
"reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a",
|
| 648 |
Â
"shasum": ""
|
| 649 |
Â
},
|
| 650 |
Â
"require": {
|
| 651 |
+
"php": ">=7.1"
|
| 652 |
Â
},
|
| 653 |
Â
"require-dev": {
|
| 654 |
+
"phpunit/phpunit": "~6"
|
| 655 |
Â
},
|
| 656 |
Â
"type": "library",
|
| 657 |
Â
"extra": {
|
| 658 |
Â
"branch-alias": {
|
| 659 |
+
"dev-master": "2.x-dev"
|
| 660 |
Â
}
|
| 661 |
Â
},
|
| 662 |
Â
"autoload": {
|
| 663 |
Â
"psr-4": {
|
| 664 |
+
"phpDocumentor\\Reflection\\": "src/"
|
|
Â
|
|
|
Â
|
|
| 665 |
Â
}
|
| 666 |
Â
},
|
| 667 |
Â
"notification-url": "https://packagist.org/downloads/",
|
| 683 |
Â
"reflection",
|
| 684 |
Â
"static analysis"
|
| 685 |
Â
],
|
| 686 |
+
"time": "2018-08-07T13:53:10+00:00"
|
| 687 |
Â
},
|
| 688 |
Â
{
|
| 689 |
Â
"name": "phpdocumentor/reflection-docblock",
|
| 690 |
+
"version": "5.0.0",
|
| 691 |
Â
"source": {
|
| 692 |
Â
"type": "git",
|
| 693 |
Â
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
|
| 694 |
+
"reference": "a48807183a4b819072f26e347bbd0b5199a9d15f"
|
| 695 |
Â
},
|
| 696 |
Â
"dist": {
|
| 697 |
Â
"type": "zip",
|
| 698 |
+
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/a48807183a4b819072f26e347bbd0b5199a9d15f",
|
| 699 |
+
"reference": "a48807183a4b819072f26e347bbd0b5199a9d15f",
|
| 700 |
Â
"shasum": ""
|
| 701 |
Â
},
|
| 702 |
Â
"require": {
|
| 703 |
+
"ext-filter": "^7.1",
|
| 704 |
+
"php": "^7.2",
|
| 705 |
+
"phpdocumentor/reflection-common": "^2.0",
|
| 706 |
+
"phpdocumentor/type-resolver": "^1.0",
|
| 707 |
+
"webmozart/assert": "^1"
|
| 708 |
Â
},
|
| 709 |
Â
"require-dev": {
|
| 710 |
+
"doctrine/instantiator": "^1",
|
| 711 |
+
"mockery/mockery": "^1"
|
|
Â
|
|
| 712 |
Â
},
|
| 713 |
Â
"type": "library",
|
| 714 |
Â
"extra": {
|
| 715 |
Â
"branch-alias": {
|
| 716 |
+
"dev-master": "5.x-dev"
|
| 717 |
Â
}
|
| 718 |
Â
},
|
| 719 |
Â
"autoload": {
|
| 720 |
Â
"psr-4": {
|
| 721 |
+
"phpDocumentor\\Reflection\\": "src"
|
|
Â
|
|
|
Â
|
|
| 722 |
Â
}
|
| 723 |
Â
},
|
| 724 |
Â
"notification-url": "https://packagist.org/downloads/",
|
| 729 |
Â
{
|
| 730 |
Â
"name": "Mike van Riel",
|
| 731 |
Â
"email": "me@mikevanriel.com"
|
| 732 |
+
},
|
| 733 |
+
{
|
| 734 |
+
"name": "Jaap van Otterdijk",
|
| 735 |
+
"email": "account@ijaap.nl"
|
| 736 |
Â
}
|
| 737 |
Â
],
|
| 738 |
Â
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
|
| 739 |
+
"time": "2020-02-09T09:16:15+00:00"
|
| 740 |
Â
},
|
| 741 |
Â
{
|
| 742 |
Â
"name": "phpdocumentor/type-resolver",
|
| 743 |
+
"version": "1.0.1",
|
| 744 |
Â
"source": {
|
| 745 |
Â
"type": "git",
|
| 746 |
Â
"url": "https://github.com/phpDocumentor/TypeResolver.git",
|
| 747 |
+
"reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9"
|
| 748 |
Â
},
|
| 749 |
Â
"dist": {
|
| 750 |
Â
"type": "zip",
|
| 751 |
+
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
|
| 752 |
+
"reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9",
|
| 753 |
Â
"shasum": ""
|
| 754 |
Â
},
|
| 755 |
Â
"require": {
|
| 756 |
+
"php": "^7.1",
|
| 757 |
+
"phpdocumentor/reflection-common": "^2.0"
|
| 758 |
Â
},
|
| 759 |
Â
"require-dev": {
|
| 760 |
+
"ext-tokenizer": "^7.1",
|
| 761 |
+
"mockery/mockery": "~1",
|
| 762 |
+
"phpunit/phpunit": "^7.0"
|
| 763 |
Â
},
|
| 764 |
Â
"type": "library",
|
| 765 |
Â
"extra": {
|
| 766 |
Â
"branch-alias": {
|
| 767 |
+
"dev-master": "1.x-dev"
|
| 768 |
Â
}
|
| 769 |
Â
},
|
| 770 |
Â
"autoload": {
|
| 771 |
Â
"psr-4": {
|
| 772 |
+
"phpDocumentor\\Reflection\\": "src"
|
|
Â
|
|
|
Â
|
|
| 773 |
Â
}
|
| 774 |
Â
},
|
| 775 |
Â
"notification-url": "https://packagist.org/downloads/",
|
| 782 |
Â
"email": "me@mikevanriel.com"
|
| 783 |
Â
}
|
| 784 |
Â
],
|
| 785 |
+
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
|
| 786 |
+
"time": "2019-08-22T18:11:29+00:00"
|
| 787 |
Â
},
|
| 788 |
Â
{
|
| 789 |
Â
"name": "phpspec/prophecy",
|
| 790 |
+
"version": "v1.10.2",
|
| 791 |
Â
"source": {
|
| 792 |
Â
"type": "git",
|
| 793 |
Â
"url": "https://github.com/phpspec/prophecy.git",
|
| 794 |
+
"reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9"
|
| 795 |
Â
},
|
| 796 |
Â
"dist": {
|
| 797 |
Â
"type": "zip",
|
| 798 |
+
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/b4400efc9d206e83138e2bb97ed7f5b14b831cd9",
|
| 799 |
+
"reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9",
|
| 800 |
Â
"shasum": ""
|
| 801 |
Â
},
|
| 802 |
Â
"require": {
|
| 803 |
Â
"doctrine/instantiator": "^1.0.2",
|
| 804 |
Â
"php": "^5.3|^7.0",
|
| 805 |
+
"phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
|
| 806 |
+
"sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
|
| 807 |
+
"sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
|
| 808 |
Â
},
|
| 809 |
Â
"require-dev": {
|
| 810 |
+
"phpspec/phpspec": "^2.5 || ^3.2",
|
| 811 |
Â
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
|
| 812 |
Â
},
|
| 813 |
Â
"type": "library",
|
| 814 |
Â
"extra": {
|
| 815 |
Â
"branch-alias": {
|
| 816 |
+
"dev-master": "1.10.x-dev"
|
| 817 |
Â
}
|
| 818 |
Â
},
|
| 819 |
Â
"autoload": {
|
| 820 |
+
"psr-4": {
|
| 821 |
+
"Prophecy\\": "src/Prophecy"
|
| 822 |
Â
}
|
| 823 |
Â
},
|
| 824 |
Â
"notification-url": "https://packagist.org/downloads/",
|
| 846 |
Â
"spy",
|
| 847 |
Â
"stub"
|
| 848 |
Â
],
|
| 849 |
+
"time": "2020-01-20T15:57:02+00:00"
|
| 850 |
Â
},
|
| 851 |
Â
{
|
| 852 |
Â
"name": "phpunit/php-code-coverage",
|
| 1099 |
Â
},
|
| 1100 |
Â
{
|
| 1101 |
Â
"name": "phpunit/phpunit",
|
| 1102 |
+
"version": "6.5.14",
|
| 1103 |
Â
"source": {
|
| 1104 |
Â
"type": "git",
|
| 1105 |
Â
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
| 1106 |
+
"reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7"
|
| 1107 |
Â
},
|
| 1108 |
Â
"dist": {
|
| 1109 |
Â
"type": "zip",
|
| 1110 |
+
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7",
|
| 1111 |
+
"reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7",
|
| 1112 |
Â
"shasum": ""
|
| 1113 |
Â
},
|
| 1114 |
Â
"require": {
|
| 1179 |
Â
"testing",
|
| 1180 |
Â
"xunit"
|
| 1181 |
Â
],
|
| 1182 |
+
"time": "2019-02-01T05:22:47+00:00"
|
| 1183 |
Â
},
|
| 1184 |
Â
{
|
| 1185 |
Â
"name": "phpunit/phpunit-mock-objects",
|
| 1238 |
Â
"mock",
|
| 1239 |
Â
"xunit"
|
| 1240 |
Â
],
|
| 1241 |
+
"abandoned": true,
|
| 1242 |
Â
"time": "2018-08-09T05:50:03+00:00"
|
| 1243 |
Â
},
|
| 1244 |
+
{
|
| 1245 |
+
"name": "psr/container",
|
| 1246 |
+
"version": "1.0.0",
|
| 1247 |
+
"source": {
|
| 1248 |
+
"type": "git",
|
| 1249 |
+
"url": "https://github.com/php-fig/container.git",
|
| 1250 |
+
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
|
| 1251 |
+
},
|
| 1252 |
+
"dist": {
|
| 1253 |
+
"type": "zip",
|
| 1254 |
+
"url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
|
| 1255 |
+
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
|
| 1256 |
+
"shasum": ""
|
| 1257 |
+
},
|
| 1258 |
+
"require": {
|
| 1259 |
+
"php": ">=5.3.0"
|
| 1260 |
+
},
|
| 1261 |
+
"type": "library",
|
| 1262 |
+
"extra": {
|
| 1263 |
+
"branch-alias": {
|
| 1264 |
+
"dev-master": "1.0.x-dev"
|
| 1265 |
+
}
|
| 1266 |
+
},
|
| 1267 |
+
"autoload": {
|
| 1268 |
+
"psr-4": {
|
| 1269 |
+
"Psr\\Container\\": "src/"
|
| 1270 |
+
}
|
| 1271 |
+
},
|
| 1272 |
+
"notification-url": "https://packagist.org/downloads/",
|
| 1273 |
+
"license": [
|
| 1274 |
+
"MIT"
|
| 1275 |
+
],
|
| 1276 |
+
"authors": [
|
| 1277 |
+
{
|
| 1278 |
+
"name": "PHP-FIG",
|
| 1279 |
+
"homepage": "http://www.php-fig.org/"
|
| 1280 |
+
}
|
| 1281 |
+
],
|
| 1282 |
+
"description": "Common Container Interface (PHP FIG PSR-11)",
|
| 1283 |
+
"homepage": "https://github.com/php-fig/container",
|
| 1284 |
+
"keywords": [
|
| 1285 |
+
"PSR-11",
|
| 1286 |
+
"container",
|
| 1287 |
+
"container-interface",
|
| 1288 |
+
"container-interop",
|
| 1289 |
+
"psr"
|
| 1290 |
+
],
|
| 1291 |
+
"time": "2017-02-14T16:28:37+00:00"
|
| 1292 |
+
},
|
| 1293 |
Â
{
|
| 1294 |
Â
"name": "sebastian/code-unit-reverse-lookup",
|
| 1295 |
Â
"version": "1.0.1",
|
| 1503 |
Â
},
|
| 1504 |
Â
{
|
| 1505 |
Â
"name": "sebastian/exporter",
|
| 1506 |
+
"version": "3.1.2",
|
| 1507 |
Â
"source": {
|
| 1508 |
Â
"type": "git",
|
| 1509 |
Â
"url": "https://github.com/sebastianbergmann/exporter.git",
|
| 1510 |
+
"reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e"
|
| 1511 |
Â
},
|
| 1512 |
Â
"dist": {
|
| 1513 |
Â
"type": "zip",
|
| 1514 |
+
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e",
|
| 1515 |
+
"reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e",
|
| 1516 |
Â
"shasum": ""
|
| 1517 |
Â
},
|
| 1518 |
Â
"require": {
|
| 1539 |
Â
"BSD-3-Clause"
|
| 1540 |
Â
],
|
| 1541 |
Â
"authors": [
|
| 1542 |
+
{
|
| 1543 |
+
"name": "Sebastian Bergmann",
|
| 1544 |
+
"email": "sebastian@phpunit.de"
|
| 1545 |
+
},
|
| 1546 |
Â
{
|
| 1547 |
Â
"name": "Jeff Welch",
|
| 1548 |
Â
"email": "whatthejeff@gmail.com"
|
| 1551 |
Â
"name": "Volker Dusch",
|
| 1552 |
Â
"email": "github@wallbash.com"
|
| 1553 |
Â
},
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 1554 |
Â
{
|
| 1555 |
Â
"name": "Adam Harvey",
|
| 1556 |
Â
"email": "aharvey@php.net"
|
| 1557 |
+
},
|
| 1558 |
+
{
|
| 1559 |
+
"name": "Bernhard Schussek",
|
| 1560 |
+
"email": "bschussek@gmail.com"
|
| 1561 |
Â
}
|
| 1562 |
Â
],
|
| 1563 |
Â
"description": "Provides the functionality to export PHP variables for visualization",
|
| 1566 |
Â
"export",
|
| 1567 |
Â
"exporter"
|
| 1568 |
Â
],
|
| 1569 |
+
"time": "2019-09-14T09:02:43+00:00"
|
| 1570 |
Â
},
|
| 1571 |
Â
{
|
| 1572 |
Â
"name": "sebastian/global-state",
|
| 1851 |
Â
},
|
| 1852 |
Â
{
|
| 1853 |
Â
"name": "symfony/console",
|
| 1854 |
+
"version": "v4.4.4",
|
| 1855 |
Â
"source": {
|
| 1856 |
Â
"type": "git",
|
| 1857 |
Â
"url": "https://github.com/symfony/console.git",
|
| 1858 |
+
"reference": "f512001679f37e6a042b51897ed24a2f05eba656"
|
| 1859 |
Â
},
|
| 1860 |
Â
"dist": {
|
| 1861 |
Â
"type": "zip",
|
| 1862 |
+
"url": "https://api.github.com/repos/symfony/console/zipball/f512001679f37e6a042b51897ed24a2f05eba656",
|
| 1863 |
+
"reference": "f512001679f37e6a042b51897ed24a2f05eba656",
|
| 1864 |
Â
"shasum": ""
|
| 1865 |
Â
},
|
| 1866 |
Â
"require": {
|
| 1867 |
Â
"php": "^7.1.3",
|
| 1868 |
+
"symfony/polyfill-mbstring": "~1.0",
|
| 1869 |
+
"symfony/polyfill-php73": "^1.8",
|
| 1870 |
+
"symfony/service-contracts": "^1.1|^2"
|
| 1871 |
Â
},
|
| 1872 |
Â
"conflict": {
|
| 1873 |
Â
"symfony/dependency-injection": "<3.4",
|
| 1874 |
+
"symfony/event-dispatcher": "<4.3|>=5",
|
| 1875 |
+
"symfony/lock": "<4.4",
|
| 1876 |
Â
"symfony/process": "<3.3"
|
| 1877 |
Â
},
|
| 1878 |
+
"provide": {
|
| 1879 |
+
"psr/log-implementation": "1.0"
|
| 1880 |
+
},
|
| 1881 |
Â
"require-dev": {
|
| 1882 |
Â
"psr/log": "~1.0",
|
| 1883 |
+
"symfony/config": "^3.4|^4.0|^5.0",
|
| 1884 |
+
"symfony/dependency-injection": "^3.4|^4.0|^5.0",
|
| 1885 |
+
"symfony/event-dispatcher": "^4.3",
|
| 1886 |
+
"symfony/lock": "^4.4|^5.0",
|
| 1887 |
+
"symfony/process": "^3.4|^4.0|^5.0",
|
| 1888 |
+
"symfony/var-dumper": "^4.3|^5.0"
|
| 1889 |
Â
},
|
| 1890 |
Â
"suggest": {
|
| 1891 |
+
"psr/log": "For using the console logger",
|
| 1892 |
Â
"symfony/event-dispatcher": "",
|
| 1893 |
Â
"symfony/lock": "",
|
| 1894 |
Â
"symfony/process": ""
|
| 1896 |
Â
"type": "library",
|
| 1897 |
Â
"extra": {
|
| 1898 |
Â
"branch-alias": {
|
| 1899 |
+
"dev-master": "4.4-dev"
|
| 1900 |
Â
}
|
| 1901 |
Â
},
|
| 1902 |
Â
"autoload": {
|
| 1923 |
Â
],
|
| 1924 |
Â
"description": "Symfony Console Component",
|
| 1925 |
Â
"homepage": "https://symfony.com",
|
| 1926 |
+
"time": "2020-01-25T12:44:29+00:00"
|
| 1927 |
Â
},
|
| 1928 |
Â
{
|
| 1929 |
+
"name": "symfony/polyfill-ctype",
|
| 1930 |
+
"version": "v1.14.0",
|
| 1931 |
Â
"source": {
|
| 1932 |
Â
"type": "git",
|
| 1933 |
+
"url": "https://github.com/symfony/polyfill-ctype.git",
|
| 1934 |
+
"reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38"
|
| 1935 |
Â
},
|
| 1936 |
Â
"dist": {
|
| 1937 |
Â
"type": "zip",
|
| 1938 |
+
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/fbdeaec0df06cf3d51c93de80c7eb76e271f5a38",
|
| 1939 |
+
"reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38",
|
| 1940 |
Â
"shasum": ""
|
| 1941 |
Â
},
|
| 1942 |
Â
"require": {
|
| 1943 |
+
"php": ">=5.3.3"
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 1944 |
Â
},
|
| 1945 |
Â
"suggest": {
|
| 1946 |
+
"ext-ctype": "For best performance"
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 1947 |
Â
},
|
| 1948 |
Â
"type": "library",
|
| 1949 |
Â
"extra": {
|
| 1950 |
Â
"branch-alias": {
|
| 1951 |
+
"dev-master": "1.14-dev"
|
| 1952 |
Â
}
|
| 1953 |
Â
},
|
| 1954 |
Â
"autoload": {
|
| 1955 |
Â
"psr-4": {
|
| 1956 |
+
"Symfony\\Polyfill\\Ctype\\": ""
|
| 1957 |
Â
},
|
| 1958 |
+
"files": [
|
| 1959 |
+
"bootstrap.php"
|
| 1960 |
Â
]
|
| 1961 |
Â
},
|
| 1962 |
Â
"notification-url": "https://packagist.org/downloads/",
|
| 1965 |
Â
],
|
| 1966 |
Â
"authors": [
|
| 1967 |
Â
{
|
| 1968 |
+
"name": "Gert de Pagter",
|
| 1969 |
+
"email": "BackEndTea@gmail.com"
|
| 1970 |
Â
},
|
| 1971 |
Â
{
|
| 1972 |
Â
"name": "Symfony Community",
|
| 1973 |
Â
"homepage": "https://symfony.com/contributors"
|
| 1974 |
Â
}
|
| 1975 |
Â
],
|
| 1976 |
+
"description": "Symfony polyfill for ctype functions",
|
| 1977 |
Â
"homepage": "https://symfony.com",
|
| 1978 |
Â
"keywords": [
|
| 1979 |
+
"compatibility",
|
| 1980 |
+
"ctype",
|
| 1981 |
+
"polyfill",
|
| 1982 |
+
"portable"
|
|
Â
|
|
|
Â
|
|
| 1983 |
Â
],
|
| 1984 |
+
"time": "2020-01-13T11:15:53+00:00"
|
| 1985 |
Â
},
|
| 1986 |
Â
{
|
| 1987 |
+
"name": "symfony/polyfill-mbstring",
|
| 1988 |
+
"version": "v1.14.0",
|
| 1989 |
Â
"source": {
|
| 1990 |
Â
"type": "git",
|
| 1991 |
+
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
| 1992 |
+
"reference": "34094cfa9abe1f0f14f48f490772db7a775559f2"
|
| 1993 |
Â
},
|
| 1994 |
Â
"dist": {
|
| 1995 |
Â
"type": "zip",
|
| 1996 |
+
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/34094cfa9abe1f0f14f48f490772db7a775559f2",
|
| 1997 |
+
"reference": "34094cfa9abe1f0f14f48f490772db7a775559f2",
|
| 1998 |
Â
"shasum": ""
|
| 1999 |
Â
},
|
| 2000 |
Â
"require": {
|
| 2001 |
Â
"php": ">=5.3.3"
|
| 2002 |
Â
},
|
| 2003 |
Â
"suggest": {
|
| 2004 |
+
"ext-mbstring": "For best performance"
|
| 2005 |
Â
},
|
| 2006 |
Â
"type": "library",
|
| 2007 |
Â
"extra": {
|
| 2008 |
Â
"branch-alias": {
|
| 2009 |
+
"dev-master": "1.14-dev"
|
| 2010 |
Â
}
|
| 2011 |
Â
},
|
| 2012 |
Â
"autoload": {
|
| 2013 |
Â
"psr-4": {
|
| 2014 |
+
"Symfony\\Polyfill\\Mbstring\\": ""
|
| 2015 |
Â
},
|
| 2016 |
Â
"files": [
|
| 2017 |
Â
"bootstrap.php"
|
| 2023 |
Â
],
|
| 2024 |
Â
"authors": [
|
| 2025 |
Â
{
|
| 2026 |
+
"name": "Nicolas Grekas",
|
| 2027 |
+
"email": "p@tchwork.com"
|
| 2028 |
Â
},
|
| 2029 |
Â
{
|
| 2030 |
+
"name": "Symfony Community",
|
| 2031 |
+
"homepage": "https://symfony.com/contributors"
|
| 2032 |
Â
}
|
| 2033 |
Â
],
|
| 2034 |
+
"description": "Symfony polyfill for the Mbstring extension",
|
| 2035 |
Â
"homepage": "https://symfony.com",
|
| 2036 |
Â
"keywords": [
|
| 2037 |
Â
"compatibility",
|
| 2038 |
+
"mbstring",
|
| 2039 |
Â
"polyfill",
|
| 2040 |
+
"portable",
|
| 2041 |
+
"shim"
|
| 2042 |
Â
],
|
| 2043 |
+
"time": "2020-01-13T11:15:53+00:00"
|
| 2044 |
Â
},
|
| 2045 |
Â
{
|
| 2046 |
+
"name": "symfony/polyfill-php73",
|
| 2047 |
+
"version": "v1.14.0",
|
| 2048 |
Â
"source": {
|
| 2049 |
Â
"type": "git",
|
| 2050 |
+
"url": "https://github.com/symfony/polyfill-php73.git",
|
| 2051 |
+
"reference": "5e66a0fa1070bf46bec4bea7962d285108edd675"
|
| 2052 |
Â
},
|
| 2053 |
Â
"dist": {
|
| 2054 |
Â
"type": "zip",
|
| 2055 |
+
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/5e66a0fa1070bf46bec4bea7962d285108edd675",
|
| 2056 |
+
"reference": "5e66a0fa1070bf46bec4bea7962d285108edd675",
|
| 2057 |
Â
"shasum": ""
|
| 2058 |
Â
},
|
| 2059 |
Â
"require": {
|
| 2060 |
Â
"php": ">=5.3.3"
|
| 2061 |
Â
},
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 2062 |
Â
"type": "library",
|
| 2063 |
Â
"extra": {
|
| 2064 |
Â
"branch-alias": {
|
| 2065 |
+
"dev-master": "1.14-dev"
|
| 2066 |
Â
}
|
| 2067 |
Â
},
|
| 2068 |
Â
"autoload": {
|
| 2069 |
Â
"psr-4": {
|
| 2070 |
+
"Symfony\\Polyfill\\Php73\\": ""
|
| 2071 |
Â
},
|
| 2072 |
Â
"files": [
|
| 2073 |
Â
"bootstrap.php"
|
| 2074 |
+
],
|
| 2075 |
+
"classmap": [
|
| 2076 |
+
"Resources/stubs"
|
| 2077 |
Â
]
|
| 2078 |
Â
},
|
| 2079 |
Â
"notification-url": "https://packagist.org/downloads/",
|
| 2090 |
Â
"homepage": "https://symfony.com/contributors"
|
| 2091 |
Â
}
|
| 2092 |
Â
],
|
| 2093 |
+
"description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
|
| 2094 |
Â
"homepage": "https://symfony.com",
|
| 2095 |
Â
"keywords": [
|
| 2096 |
Â
"compatibility",
|
|
Â
|
|
| 2097 |
Â
"polyfill",
|
| 2098 |
Â
"portable",
|
| 2099 |
Â
"shim"
|
| 2100 |
Â
],
|
| 2101 |
+
"time": "2020-01-13T11:15:53+00:00"
|
| 2102 |
+
},
|
| 2103 |
+
{
|
| 2104 |
+
"name": "symfony/service-contracts",
|
| 2105 |
+
"version": "v2.0.1",
|
| 2106 |
+
"source": {
|
| 2107 |
+
"type": "git",
|
| 2108 |
+
"url": "https://github.com/symfony/service-contracts.git",
|
| 2109 |
+
"reference": "144c5e51266b281231e947b51223ba14acf1a749"
|
| 2110 |
+
},
|
| 2111 |
+
"dist": {
|
| 2112 |
+
"type": "zip",
|
| 2113 |
+
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749",
|
| 2114 |
+
"reference": "144c5e51266b281231e947b51223ba14acf1a749",
|
| 2115 |
+
"shasum": ""
|
| 2116 |
+
},
|
| 2117 |
+
"require": {
|
| 2118 |
+
"php": "^7.2.5",
|
| 2119 |
+
"psr/container": "^1.0"
|
| 2120 |
+
},
|
| 2121 |
+
"suggest": {
|
| 2122 |
+
"symfony/service-implementation": ""
|
| 2123 |
+
},
|
| 2124 |
+
"type": "library",
|
| 2125 |
+
"extra": {
|
| 2126 |
+
"branch-alias": {
|
| 2127 |
+
"dev-master": "2.0-dev"
|
| 2128 |
+
}
|
| 2129 |
+
},
|
| 2130 |
+
"autoload": {
|
| 2131 |
+
"psr-4": {
|
| 2132 |
+
"Symfony\\Contracts\\Service\\": ""
|
| 2133 |
+
}
|
| 2134 |
+
},
|
| 2135 |
+
"notification-url": "https://packagist.org/downloads/",
|
| 2136 |
+
"license": [
|
| 2137 |
+
"MIT"
|
| 2138 |
+
],
|
| 2139 |
+
"authors": [
|
| 2140 |
+
{
|
| 2141 |
+
"name": "Nicolas Grekas",
|
| 2142 |
+
"email": "p@tchwork.com"
|
| 2143 |
+
},
|
| 2144 |
+
{
|
| 2145 |
+
"name": "Symfony Community",
|
| 2146 |
+
"homepage": "https://symfony.com/contributors"
|
| 2147 |
+
}
|
| 2148 |
+
],
|
| 2149 |
+
"description": "Generic abstractions related to writing services",
|
| 2150 |
+
"homepage": "https://symfony.com",
|
| 2151 |
+
"keywords": [
|
| 2152 |
+
"abstractions",
|
| 2153 |
+
"contracts",
|
| 2154 |
+
"decoupling",
|
| 2155 |
+
"interfaces",
|
| 2156 |
+
"interoperability",
|
| 2157 |
+
"standards"
|
| 2158 |
+
],
|
| 2159 |
+
"time": "2019-11-18T17:27:11+00:00"
|
| 2160 |
Â
},
|
| 2161 |
Â
{
|
| 2162 |
Â
"name": "symfony/yaml",
|
| 2163 |
+
"version": "v4.4.4",
|
| 2164 |
Â
"source": {
|
| 2165 |
Â
"type": "git",
|
| 2166 |
Â
"url": "https://github.com/symfony/yaml.git",
|
| 2167 |
+
"reference": "cd014e425b3668220adb865f53bff64b3ad21767"
|
| 2168 |
Â
},
|
| 2169 |
Â
"dist": {
|
| 2170 |
Â
"type": "zip",
|
| 2171 |
+
"url": "https://api.github.com/repos/symfony/yaml/zipball/cd014e425b3668220adb865f53bff64b3ad21767",
|
| 2172 |
+
"reference": "cd014e425b3668220adb865f53bff64b3ad21767",
|
| 2173 |
Â
"shasum": ""
|
| 2174 |
Â
},
|
| 2175 |
Â
"require": {
|
| 2180 |
Â
"symfony/console": "<3.4"
|
| 2181 |
Â
},
|
| 2182 |
Â
"require-dev": {
|
| 2183 |
+
"symfony/console": "^3.4|^4.0|^5.0"
|
| 2184 |
Â
},
|
| 2185 |
Â
"suggest": {
|
| 2186 |
Â
"symfony/console": "For validating YAML files using the lint command"
|
| 2188 |
Â
"type": "library",
|
| 2189 |
Â
"extra": {
|
| 2190 |
Â
"branch-alias": {
|
| 2191 |
+
"dev-master": "4.4-dev"
|
| 2192 |
Â
}
|
| 2193 |
Â
},
|
| 2194 |
Â
"autoload": {
|
| 2215 |
Â
],
|
| 2216 |
Â
"description": "Symfony Yaml Component",
|
| 2217 |
Â
"homepage": "https://symfony.com",
|
| 2218 |
+
"time": "2020-01-21T11:12:16+00:00"
|
| 2219 |
Â
},
|
| 2220 |
Â
{
|
| 2221 |
Â
"name": "theseer/tokenizer",
|
| 2222 |
+
"version": "1.1.3",
|
| 2223 |
Â
"source": {
|
| 2224 |
Â
"type": "git",
|
| 2225 |
Â
"url": "https://github.com/theseer/tokenizer.git",
|
| 2226 |
+
"reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
|
| 2227 |
Â
},
|
| 2228 |
Â
"dist": {
|
| 2229 |
Â
"type": "zip",
|
| 2230 |
+
"url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
|
| 2231 |
+
"reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
|
| 2232 |
Â
"shasum": ""
|
| 2233 |
Â
},
|
| 2234 |
Â
"require": {
|
| 2255 |
Â
}
|
| 2256 |
Â
],
|
| 2257 |
Â
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
|
| 2258 |
+
"time": "2019-06-13T22:48:21+00:00"
|
| 2259 |
Â
},
|
| 2260 |
Â
{
|
| 2261 |
Â
"name": "webmozart/assert",
|
| 2262 |
+
"version": "1.7.0",
|
| 2263 |
Â
"source": {
|
| 2264 |
Â
"type": "git",
|
| 2265 |
Â
"url": "https://github.com/webmozart/assert.git",
|
| 2266 |
+
"reference": "aed98a490f9a8f78468232db345ab9cf606cf598"
|
| 2267 |
Â
},
|
| 2268 |
Â
"dist": {
|
| 2269 |
Â
"type": "zip",
|
| 2270 |
+
"url": "https://api.github.com/repos/webmozart/assert/zipball/aed98a490f9a8f78468232db345ab9cf606cf598",
|
| 2271 |
+
"reference": "aed98a490f9a8f78468232db345ab9cf606cf598",
|
| 2272 |
Â
"shasum": ""
|
| 2273 |
Â
},
|
| 2274 |
Â
"require": {
|
| 2275 |
Â
"php": "^5.3.3 || ^7.0",
|
| 2276 |
Â
"symfony/polyfill-ctype": "^1.8"
|
| 2277 |
Â
},
|
| 2278 |
+
"conflict": {
|
| 2279 |
+
"vimeo/psalm": "<3.6.0"
|
| 2280 |
+
},
|
| 2281 |
Â
"require-dev": {
|
| 2282 |
+
"phpunit/phpunit": "^4.8.36 || ^7.5.13"
|
|
Â
|
|
| 2283 |
Â
},
|
| 2284 |
Â
"type": "library",
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 2285 |
Â
"autoload": {
|
| 2286 |
Â
"psr-4": {
|
| 2287 |
Â
"Webmozart\\Assert\\": "src/"
|
| 2303 |
Â
"check",
|
| 2304 |
Â
"validate"
|
| 2305 |
Â
],
|
| 2306 |
+
"time": "2020-02-14T12:15:55+00:00"
|
| 2307 |
Â
}
|
| 2308 |
Â
],
|
| 2309 |
Â
"aliases": [],
|
| 2310 |
Â
"minimum-stability": "stable",
|
| 2311 |
Â
"stability-flags": {
|
| 2312 |
+
"techcrunch/wp-async-task": 20,
|
| 2313 |
Â
"phing/phing": 15
|
| 2314 |
Â
},
|
| 2315 |
Â
"prefer-stable": false,
|
core/EventIdGenerator.php
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Copyright (C) 2015-present, Facebook, Inc.
|
| 4 |
+
*
|
| 5 |
+
* This program is free software; you can redistribute it and/or modify
|
| 6 |
+
* it under the terms of the GNU General Public License as published by
|
| 7 |
+
* the Free Software Foundation; version 2 of the License.
|
| 8 |
+
*
|
| 9 |
+
* This program is distributed in the hope that it will be useful,
|
| 10 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| 11 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| 12 |
+
* GNU General Public License for more details.
|
| 13 |
+
*
|
| 14 |
+
* You should have received a copy of the GNU General Public License along
|
| 15 |
+
* with this program; if not, write to the Free Software Foundation, Inc.,
|
| 16 |
+
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
| 17 |
+
*/
|
| 18 |
+
|
| 19 |
+
namespace FacebookPixelPlugin\Core;
|
| 20 |
+
|
| 21 |
+
final class EventIdGenerator {
|
| 22 |
+
/**
|
| 23 |
+
* Creates a new guid v4 - via https://stackoverflow.com/a/15875555
|
| 24 |
+
* @return string A 36 character string containing dashes.
|
| 25 |
+
*/
|
| 26 |
+
public static function guidv4() {
|
| 27 |
+
$data = openssl_random_pseudo_bytes(16);
|
| 28 |
+
|
| 29 |
+
$data[6] = chr(ord($data[6]) & 0x0f | 0x40); // set version to 0100
|
| 30 |
+
$data[8] = chr(ord($data[8]) & 0x3f | 0x80); // set bits 6-7 to 10
|
| 31 |
+
|
| 32 |
+
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
|
| 33 |
+
}
|
| 34 |
+
}
|
core/FacebookPluginConfig.php
CHANGED
|
@@ -20,7 +20,7 @@ namespace FacebookPixelPlugin\Core;
|
|
| 20 |
Â
defined('ABSPATH') or die('Direct access not allowed');
|
| 21 |
Â
|
| 22 |
Â
class FacebookPluginConfig {
|
| 23 |
-
const PLUGIN_VERSION = '
|
| 24 |
Â
const SOURCE = 'wordpress';
|
| 25 |
Â
const TEXT_DOMAIN = 'official-facebook-pixel';
|
| 26 |
Â
|
|
@@ -32,6 +32,7 @@ class FacebookPluginConfig {
|
|
| 32 |
Â
const ADMIN_OPTION_GROUP = 'facebook_option_group';
|
| 33 |
Â
const ADMIN_PAGE_TITLE = 'Facebook Pixel Settings';
|
| 34 |
Â
const ADMIN_PRIVACY_URL = 'https://developers.facebook.com/docs/privacy/';
|
|
Â
|
|
| 35 |
Â
const ADMIN_SECTION_ID = 'facebook_settings_section';
|
| 36 |
Â
|
| 37 |
Â
const DEFAULT_PIXEL_ID = null;
|
|
@@ -39,6 +40,10 @@ class FacebookPluginConfig {
|
|
| 39 |
Â
const SETTINGS_KEY = 'facebook_config';
|
| 40 |
Â
const USE_PII_KEY = 'use_pii';
|
| 41 |
Â
const USE_ADVANCED_MATCHING_DEFAULT = null;
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 42 |
Â
|
| 43 |
Â
const IS_PIXEL_RENDERED = 'is_pixel_rendered';
|
| 44 |
Â
const IS_NOSCRIPT_RENDERED = 'is_noscript_rendered';
|
| 20 |
Â
defined('ABSPATH') or die('Direct access not allowed');
|
| 21 |
Â
|
| 22 |
Â
class FacebookPluginConfig {
|
| 23 |
+
const PLUGIN_VERSION = '2.0.0';
|
| 24 |
Â
const SOURCE = 'wordpress';
|
| 25 |
Â
const TEXT_DOMAIN = 'official-facebook-pixel';
|
| 26 |
Â
|
| 32 |
Â
const ADMIN_OPTION_GROUP = 'facebook_option_group';
|
| 33 |
Â
const ADMIN_PAGE_TITLE = 'Facebook Pixel Settings';
|
| 34 |
Â
const ADMIN_PRIVACY_URL = 'https://developers.facebook.com/docs/privacy/';
|
| 35 |
+
const ADMIN_S2S_URL = 'https://developers.facebook.com/docs/marketing-api/facebook-pixel/server-side-api';
|
| 36 |
Â
const ADMIN_SECTION_ID = 'facebook_settings_section';
|
| 37 |
Â
|
| 38 |
Â
const DEFAULT_PIXEL_ID = null;
|
| 40 |
Â
const SETTINGS_KEY = 'facebook_config';
|
| 41 |
Â
const USE_PII_KEY = 'use_pii';
|
| 42 |
Â
const USE_ADVANCED_MATCHING_DEFAULT = null;
|
| 43 |
+
const USE_S2S_KEY = 'use_s2s';
|
| 44 |
+
const DEFAULT_ACCESS_TOKEN = null;
|
| 45 |
+
const ACCESS_TOKEN_KEY = 'access_token';
|
| 46 |
+
const USE_S2S_DEFAULT = null;
|
| 47 |
Â
|
| 48 |
Â
const IS_PIXEL_RENDERED = 'is_pixel_rendered';
|
| 49 |
Â
const IS_NOSCRIPT_RENDERED = 'is_noscript_rendered';
|
core/FacebookPluginUtils.php
CHANGED
|
@@ -40,4 +40,17 @@ class FacebookPluginUtils {
|
|
| 40 |
Â
public static function isAdmin() {
|
| 41 |
Â
return current_user_can('install_plugins');
|
| 42 |
Â
}
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 43 |
Â
}
|
| 40 |
Â
public static function isAdmin() {
|
| 41 |
Â
return current_user_can('install_plugins');
|
| 42 |
Â
}
|
| 43 |
+
|
| 44 |
+
public static function getLoggedInUserInfo() {
|
| 45 |
+
$current_user = wp_get_current_user();
|
| 46 |
+
if (empty($current_user)) {
|
| 47 |
+
return array();
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
return array(
|
| 51 |
+
'email' => $current_user->user_email,
|
| 52 |
+
'first_name' => $current_user->user_firstname,
|
| 53 |
+
'last_name' => $current_user->user_lastname,
|
| 54 |
+
);
|
| 55 |
+
}
|
| 56 |
Â
}
|
core/FacebookServerSideEvent.php
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?php
|
| 2 |
+
/*
|
| 3 |
+
* Copyright (C) 2017-present, Facebook, Inc.
|
| 4 |
+
*
|
| 5 |
+
* This program is free software; you can redistribute it and/or modify
|
| 6 |
+
* it under the terms of the GNU General Public License as published by
|
| 7 |
+
* the Free Software Foundation; version 2 of the License.
|
| 8 |
+
* This program is distributed in the hope that it will be useful,
|
| 9 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| 10 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| 11 |
+
* GNU General Public License for more details.
|
| 12 |
+
*/
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* @package FacebookPixelPlugin
|
| 16 |
+
*/
|
| 17 |
+
|
| 18 |
+
namespace FacebookPixelPlugin\Core;
|
| 19 |
+
|
| 20 |
+
use FacebookAds\Api;
|
| 21 |
+
use FacebookAds\Object\ServerSide\Event;
|
| 22 |
+
use FacebookAds\Object\ServerSide\EventRequest;
|
| 23 |
+
use FacebookAds\Object\ServerSide\UserData;
|
| 24 |
+
|
| 25 |
+
defined('ABSPATH') or die('Direct access not allowed');
|
| 26 |
+
|
| 27 |
+
class FacebookServerSideEvent {
|
| 28 |
+
private static $instance = null;
|
| 29 |
+
private $tracked_events = [];
|
| 30 |
+
|
| 31 |
+
public static function getInstance() {
|
| 32 |
+
if (self::$instance == null) {
|
| 33 |
+
self::$instance = new FacebookServerSideEvent();
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
return self::$instance;
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
public function track($event) {
|
| 40 |
+
$this->tracked_events[] = $event;
|
| 41 |
+
|
| 42 |
+
if (FacebookWordpressOptions::getUseS2S()) {
|
| 43 |
+
do_action('send_server_event', $event);
|
| 44 |
+
}
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
public function getTrackedEvents() {
|
| 48 |
+
return $this->tracked_events;
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
public static function send($events) {
|
| 52 |
+
if (empty($events)) {
|
| 53 |
+
return;
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
$pixel_id = FacebookWordpressOptions::getPixelId();
|
| 57 |
+
$access_token = FacebookWordpressOptions::getAccessToken();
|
| 58 |
+
$agent = FacebookWordpressOptions::getAgentString();
|
| 59 |
+
|
| 60 |
+
$api = Api::init(null, null, $access_token);
|
| 61 |
+
|
| 62 |
+
$request = (new EventRequest($pixel_id))
|
| 63 |
+
->setEvents($events)
|
| 64 |
+
->setPartnerAgent($agent);
|
| 65 |
+
|
| 66 |
+
$response = $request->execute();
|
| 67 |
+
}
|
| 68 |
+
}
|
core/FacebookWordpressOptions.php
CHANGED
|
@@ -39,32 +39,57 @@ class FacebookWordpressOptions {
|
|
| 39 |
Â
? '' : FacebookPluginConfig::DEFAULT_PIXEL_ID;
|
| 40 |
Â
}
|
| 41 |
Â
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 42 |
Â
// Default is on for unset config
|
| 43 |
Â
public static function getDefaultUsePIIKey() {
|
| 44 |
Â
return (!is_null(FacebookPluginConfig::USE_ADVANCED_MATCHING_DEFAULT)
|
| 45 |
Â
&& !FacebookPluginConfig::USE_ADVANCED_MATCHING_DEFAULT) ? '0' : '1';
|
| 46 |
Â
}
|
| 47 |
Â
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 48 |
Â
private static function setOptions() {
|
| 49 |
Â
self::$options = \get_option(
|
| 50 |
Â
FacebookPluginConfig::SETTINGS_KEY,
|
| 51 |
Â
array(
|
| 52 |
Â
FacebookPluginConfig::PIXEL_ID_KEY => self::getDefaultPixelID(),
|
| 53 |
Â
FacebookPluginConfig::USE_PII_KEY => self::getDefaultUsePIIKey(),
|
|
Â
|
|
|
Â
|
|
| 54 |
Â
));
|
|
Â
|
|
| 55 |
Â
// we need esc_js because the id is set through the form
|
| 56 |
Â
self::$options[FacebookPluginConfig::PIXEL_ID_KEY] =
|
| 57 |
Â
esc_js(self::$options[FacebookPluginConfig::PIXEL_ID_KEY]);
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 58 |
Â
}
|
| 59 |
Â
|
| 60 |
Â
public static function getPixelId() {
|
| 61 |
Â
return self::$options[FacebookPluginConfig::PIXEL_ID_KEY];
|
| 62 |
Â
}
|
| 63 |
Â
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 64 |
Â
public static function getUsePii() {
|
| 65 |
Â
return self::$options[FacebookPluginConfig::USE_PII_KEY];
|
| 66 |
Â
}
|
| 67 |
Â
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 68 |
Â
public static function getUserInfo() {
|
| 69 |
Â
return self::$userInfo;
|
| 70 |
Â
}
|
| 39 |
Â
? '' : FacebookPluginConfig::DEFAULT_PIXEL_ID;
|
| 40 |
Â
}
|
| 41 |
Â
|
| 42 |
+
public static function getDefaultAccessToken() {
|
| 43 |
+
return is_null(FacebookPluginConfig::DEFAULT_ACCESS_TOKEN)
|
| 44 |
+
? '' : FacebookPluginConfig::DEFAULT_ACCESS_TOKEN;
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
Â
// Default is on for unset config
|
| 48 |
Â
public static function getDefaultUsePIIKey() {
|
| 49 |
Â
return (!is_null(FacebookPluginConfig::USE_ADVANCED_MATCHING_DEFAULT)
|
| 50 |
Â
&& !FacebookPluginConfig::USE_ADVANCED_MATCHING_DEFAULT) ? '0' : '1';
|
| 51 |
Â
}
|
| 52 |
Â
|
| 53 |
+
// We default not to send events through S2S, if the config is unset.
|
| 54 |
+
public static function getDefaultUseS2SKey() {
|
| 55 |
+
return (is_null(FacebookPluginConfig::USE_S2S_DEFAULT)
|
| 56 |
+
|| !FacebookPluginConfig::USE_S2S_DEFAULT) ? '0' : '1';
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
Â
private static function setOptions() {
|
| 60 |
Â
self::$options = \get_option(
|
| 61 |
Â
FacebookPluginConfig::SETTINGS_KEY,
|
| 62 |
Â
array(
|
| 63 |
Â
FacebookPluginConfig::PIXEL_ID_KEY => self::getDefaultPixelID(),
|
| 64 |
Â
FacebookPluginConfig::USE_PII_KEY => self::getDefaultUsePIIKey(),
|
| 65 |
+
FacebookPluginConfig::USE_S2S_KEY => self::getDefaultUseS2SKey(),
|
| 66 |
+
FacebookPluginConfig::ACCESS_TOKEN_KEY => self::getDefaultAccessToken(),
|
| 67 |
Â
));
|
| 68 |
+
|
| 69 |
Â
// we need esc_js because the id is set through the form
|
| 70 |
Â
self::$options[FacebookPluginConfig::PIXEL_ID_KEY] =
|
| 71 |
Â
esc_js(self::$options[FacebookPluginConfig::PIXEL_ID_KEY]);
|
| 72 |
+
|
| 73 |
+
self::$options[FacebookPluginConfig::ACCESS_TOKEN_KEY] =
|
| 74 |
+
esc_js(self::$options[FacebookPluginConfig::ACCESS_TOKEN_KEY]);
|
| 75 |
Â
}
|
| 76 |
Â
|
| 77 |
Â
public static function getPixelId() {
|
| 78 |
Â
return self::$options[FacebookPluginConfig::PIXEL_ID_KEY];
|
| 79 |
Â
}
|
| 80 |
Â
|
| 81 |
+
public static function getAccessToken() {
|
| 82 |
+
return self::$options[FacebookPluginConfig::ACCESS_TOKEN_KEY];
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
Â
public static function getUsePii() {
|
| 86 |
Â
return self::$options[FacebookPluginConfig::USE_PII_KEY];
|
| 87 |
Â
}
|
| 88 |
Â
|
| 89 |
+
public static function getUseS2S() {
|
| 90 |
+
return self::$options[FacebookPluginConfig::USE_S2S_KEY];
|
| 91 |
+
}
|
| 92 |
+
|
| 93 |
Â
public static function getUserInfo() {
|
| 94 |
Â
return self::$userInfo;
|
| 95 |
Â
}
|
core/FacebookWordpressPixelInjection.php
CHANGED
|
@@ -23,6 +23,9 @@ class FacebookWordpressPixelInjection {
|
|
| 23 |
Â
public static $renderCache = array();
|
| 24 |
Â
|
| 25 |
Â
public function __construct() {
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 26 |
Â
$pixel_id = FacebookWordpressOptions::getPixelId();
|
| 27 |
Â
if (FacebookPluginUtils::isPositiveInteger($pixel_id)) {
|
| 28 |
Â
add_action(
|
| 23 |
Â
public static $renderCache = array();
|
| 24 |
Â
|
| 25 |
Â
public function __construct() {
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
public function inject() {
|
| 29 |
Â
$pixel_id = FacebookWordpressOptions::getPixelId();
|
| 30 |
Â
if (FacebookPluginUtils::isPositiveInteger($pixel_id)) {
|
| 31 |
Â
add_action(
|
core/FacebookWordpressSettingsPage.php
CHANGED
|
@@ -88,6 +88,18 @@ class FacebookWordpressSettingsPage {
|
|
| 88 |
Â
array($this, 'usePiiFormField'),
|
| 89 |
Â
FacebookPluginConfig::ADMIN_MENU_SLUG,
|
| 90 |
Â
FacebookPluginConfig::ADMIN_SECTION_ID);
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 91 |
Â
}
|
| 92 |
Â
|
| 93 |
Â
public function sanitizeInput($input) {
|
|
@@ -130,6 +142,28 @@ class FacebookWordpressSettingsPage {
|
|
| 130 |
Â
$description);
|
| 131 |
Â
}
|
| 132 |
Â
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 133 |
Â
public function usePiiFormField() {
|
| 134 |
Â
$link = sprintf(
|
| 135 |
Â
wp_kses(
|
|
@@ -164,6 +198,44 @@ class FacebookWordpressSettingsPage {
|
|
| 164 |
Â
$link);
|
| 165 |
Â
}
|
| 166 |
Â
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 167 |
Â
public function registerNotices() {
|
| 168 |
Â
// Update class field
|
| 169 |
Â
$pixel_id = FacebookWordpressOptions::getPixelId();
|
| 88 |
Â
array($this, 'usePiiFormField'),
|
| 89 |
Â
FacebookPluginConfig::ADMIN_MENU_SLUG,
|
| 90 |
Â
FacebookPluginConfig::ADMIN_SECTION_ID);
|
| 91 |
+
add_settings_field(
|
| 92 |
+
FacebookPluginConfig::USE_S2S_KEY,
|
| 93 |
+
'Use Server-Side API?',
|
| 94 |
+
array($this, 'useS2SFormField'),
|
| 95 |
+
FacebookPluginConfig::ADMIN_MENU_SLUG,
|
| 96 |
+
FacebookPluginConfig::ADMIN_SECTION_ID);
|
| 97 |
+
add_settings_field(
|
| 98 |
+
FacebookPluginConfig::ACCESS_TOKEN_KEY,
|
| 99 |
+
'Access Token',
|
| 100 |
+
array($this, 'accessTokenFormField'),
|
| 101 |
+
FacebookPluginConfig::ADMIN_MENU_SLUG,
|
| 102 |
+
FacebookPluginConfig::ADMIN_SECTION_ID);
|
| 103 |
Â
}
|
| 104 |
Â
|
| 105 |
Â
public function sanitizeInput($input) {
|
| 142 |
Â
$description);
|
| 143 |
Â
}
|
| 144 |
Â
|
| 145 |
+
|
| 146 |
+
public function accessTokenFormField() {
|
| 147 |
+
$description = esc_html__(
|
| 148 |
+
'',
|
| 149 |
+
FacebookPluginConfig::TEXT_DOMAIN);
|
| 150 |
+
|
| 151 |
+
$access_token = FacebookWordpressOptions::getAccessToken();
|
| 152 |
+
$existing_access_token_value = isset($access_token) ? esc_attr($access_token) : '';
|
| 153 |
+
$input_name = FacebookPluginConfig::SETTINGS_KEY .
|
| 154 |
+
'[' . FacebookPluginConfig::ACCESS_TOKEN_KEY . ']';
|
| 155 |
+
|
| 156 |
+
printf(
|
| 157 |
+
'
|
| 158 |
+
<textarea name="%s" id="%s" rows=4 cols=60 maxlength=250>%s</textarea>
|
| 159 |
+
<p class="description">%s</p>
|
| 160 |
+
',
|
| 161 |
+
$input_name,
|
| 162 |
+
FacebookPluginConfig::ACCESS_TOKEN_KEY,
|
| 163 |
+
$existing_access_token_value,
|
| 164 |
+
$description);
|
| 165 |
+
}
|
| 166 |
+
|
| 167 |
Â
public function usePiiFormField() {
|
| 168 |
Â
$link = sprintf(
|
| 169 |
Â
wp_kses(
|
| 198 |
Â
$link);
|
| 199 |
Â
}
|
| 200 |
Â
|
| 201 |
+
// Allow to the Plugin to send S2S Events
|
| 202 |
+
public function useS2SFormField() {
|
| 203 |
+
$link = sprintf(
|
| 204 |
+
wp_kses(
|
| 205 |
+
__(
|
| 206 |
+
'An access token is required to use the server-side API.<br>
|
| 207 |
+
<a href="%s" target="_blank"> Generate Access Token</a>',
|
| 208 |
+
FacebookPluginConfig::TEXT_DOMAIN),
|
| 209 |
+
array('a' => array('href' => array(), 'target' => array()))),
|
| 210 |
+
esc_url(FacebookPluginConfig::ADMIN_S2S_URL));
|
| 211 |
+
printf(
|
| 212 |
+
'
|
| 213 |
+
<label for="%s">
|
| 214 |
+
<input
|
| 215 |
+
type="checkbox"
|
| 216 |
+
name="%s"
|
| 217 |
+
id="%s"
|
| 218 |
+
value="1"
|
| 219 |
+
',
|
| 220 |
+
FacebookPluginConfig::USE_S2S_KEY,
|
| 221 |
+
FacebookPluginConfig::SETTINGS_KEY . '[' . FacebookPluginConfig::USE_S2S_KEY . ']',
|
| 222 |
+
FacebookPluginConfig::USE_S2S_KEY);
|
| 223 |
+
checked(1, FacebookWordpressOptions::getUseS2S());
|
| 224 |
+
printf(
|
| 225 |
+
'
|
| 226 |
+
/>
|
| 227 |
+
%s
|
| 228 |
+
</label>
|
| 229 |
+
<p class="description">%s</p>
|
| 230 |
+
',
|
| 231 |
+
esc_html__(
|
| 232 |
+
'Also send events directly from your web server to Facebook through the
|
| 233 |
+
server-side API. This can help you capture more events.',
|
| 234 |
+
FacebookPluginConfig::TEXT_DOMAIN),
|
| 235 |
+
$link);
|
| 236 |
+
}
|
| 237 |
+
|
| 238 |
+
|
| 239 |
Â
public function registerNotices() {
|
| 240 |
Â
// Update class field
|
| 241 |
Â
$pixel_id = FacebookWordpressOptions::getPixelId();
|
core/PixelRenderer.php
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?php
|
| 2 |
+
/*
|
| 3 |
+
* Copyright (C) 2017-present, Facebook, Inc.
|
| 4 |
+
*
|
| 5 |
+
* This program is free software; you can redistribute it and/or modify
|
| 6 |
+
* it under the terms of the GNU General Public License as published by
|
| 7 |
+
* the Free Software Foundation; version 2 of the License.
|
| 8 |
+
* This program is distributed in the hope that it will be useful,
|
| 9 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| 10 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| 11 |
+
* GNU General Public License for more details.
|
| 12 |
+
*/
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* @package FacebookPixelPlugin
|
| 16 |
+
*/
|
| 17 |
+
|
| 18 |
+
namespace FacebookPixelPlugin\Core;
|
| 19 |
+
|
| 20 |
+
use ReflectionClass;
|
| 21 |
+
use FacebookAds\Object\ServerSide\CustomData;
|
| 22 |
+
|
| 23 |
+
defined('ABSPATH') or die('Direct access not allowed');
|
| 24 |
+
|
| 25 |
+
class PixelRenderer {
|
| 26 |
+
const EVENT_ID = 'eventID';
|
| 27 |
+
const TRACK = 'track';
|
| 28 |
+
const TRACK_CUSTOM = 'trackCustom';
|
| 29 |
+
const FB_INTEGRATION_TRACKING = 'fb_integration_tracking';
|
| 30 |
+
const SCRIPT_TAG = "<script type='text/javascript'>%s</script>";
|
| 31 |
+
const FBQ_CODE = "
|
| 32 |
+
fbq('%s', '%s', %s, %s);
|
| 33 |
+
";
|
| 34 |
+
|
| 35 |
+
public static function render($events, $fb_integration_tracking) {
|
| 36 |
+
if (empty($events)) {
|
| 37 |
+
return "";
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
$code = "";
|
| 41 |
+
foreach ($events as $event) {
|
| 42 |
+
$code .= self::getPixelTrackCode($event, $fb_integration_tracking);
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
return sprintf(self::SCRIPT_TAG, $code);
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
private static function getPixelTrackCode($event, $fb_integration_tracking) {
|
| 49 |
+
$event_data[self::EVENT_ID] = $event->getEventId();
|
| 50 |
+
|
| 51 |
+
$custom_data = $event->getCustomData() !== null ?
|
| 52 |
+
$event->getCustomData() :
|
| 53 |
+
new CustomData();
|
| 54 |
+
|
| 55 |
+
$normalized_custom_data = $custom_data->normalize();
|
| 56 |
+
if (!is_null($fb_integration_tracking)) {
|
| 57 |
+
$normalized_custom_data[
|
| 58 |
+
self::FB_INTEGRATION_TRACKING] = $fb_integration_tracking;
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
$class = new ReflectionClass('FacebookPixelPlugin\Core\FacebookPixel');
|
| 62 |
+
|
| 63 |
+
return sprintf(
|
| 64 |
+
self::FBQ_CODE,
|
| 65 |
+
$class->getConstant(strtoupper($event->getEventName())) !== false
|
| 66 |
+
? self::TRACK : self::TRACK_CUSTOM,
|
| 67 |
+
$event->getEventName(),
|
| 68 |
+
json_encode($normalized_custom_data, JSON_PRETTY_PRINT),
|
| 69 |
+
json_encode($event_data, JSON_PRETTY_PRINT)
|
| 70 |
+
);
|
| 71 |
+
}
|
| 72 |
+
}
|
core/ServerEventAsyncTask.php
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?php
|
| 2 |
+
/*
|
| 3 |
+
* Copyright (C) 2017-present, Facebook, Inc.
|
| 4 |
+
*
|
| 5 |
+
* This program is free software; you can redistribute it and/or modify
|
| 6 |
+
* it under the terms of the GNU General Public License as published by
|
| 7 |
+
* the Free Software Foundation; version 2 of the License.
|
| 8 |
+
* This program is distributed in the hope that it will be useful,
|
| 9 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| 10 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| 11 |
+
* GNU General Public License for more details.
|
| 12 |
+
*/
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* @package FacebookPixelPlugin
|
| 16 |
+
*/
|
| 17 |
+
|
| 18 |
+
namespace FacebookPixelPlugin\Core;
|
| 19 |
+
|
| 20 |
+
use FacebookPixelPlugin\Core\FacebookServerSideEvent;
|
| 21 |
+
|
| 22 |
+
defined('ABSPATH') or die('Direct access not allowed');
|
| 23 |
+
|
| 24 |
+
class ServerEventAsyncTask extends \WP_Async_Task {
|
| 25 |
+
protected $action = 'send_server_event';
|
| 26 |
+
|
| 27 |
+
protected function prepare_data($data) {
|
| 28 |
+
try {
|
| 29 |
+
if (!empty($data)) {
|
| 30 |
+
return array('data' => base64_encode(serialize($data)));
|
| 31 |
+
}
|
| 32 |
+
} catch (\Exception $ex) {
|
| 33 |
+
// Need to log
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
return array();
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
protected function run_action() {
|
| 40 |
+
$events = unserialize(base64_decode($_POST['data']));
|
| 41 |
+
if (empty($events)) {
|
| 42 |
+
return;
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
FacebookServerSideEvent::send($events);
|
| 46 |
+
}
|
| 47 |
+
}
|
core/ServerEventFactory.php
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?php
|
| 2 |
+
/*
|
| 3 |
+
* Copyright (C) 2017-present, Facebook, Inc.
|
| 4 |
+
*
|
| 5 |
+
* This program is free software; you can redistribute it and/or modify
|
| 6 |
+
* it under the terms of the GNU General Public License as published by
|
| 7 |
+
* the Free Software Foundation; version 2 of the License.
|
| 8 |
+
* This program is distributed in the hope that it will be useful,
|
| 9 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| 10 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| 11 |
+
* GNU General Public License for more details.
|
| 12 |
+
*/
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* @package FacebookPixelPlugin
|
| 16 |
+
*/
|
| 17 |
+
|
| 18 |
+
namespace FacebookPixelPlugin\Core;
|
| 19 |
+
|
| 20 |
+
use FacebookAds\Object\ServerSide\Event;
|
| 21 |
+
use FacebookAds\Object\ServerSide\UserData;
|
| 22 |
+
use FacebookAds\Object\ServerSide\CustomData;
|
| 23 |
+
use FacebookPixelPlugin\Core\EventIdGenerator;
|
| 24 |
+
use FacebookPixelPlugin\Core\FacebookWordpressOptions;
|
| 25 |
+
|
| 26 |
+
defined('ABSPATH') or die('Direct access not allowed');
|
| 27 |
+
|
| 28 |
+
class ServerEventFactory {
|
| 29 |
+
public static function newEvent($event_name) {
|
| 30 |
+
$user_data = (new UserData())
|
| 31 |
+
->setClientIpAddress(self::getIpAddress())
|
| 32 |
+
->setClientUserAgent(self::getHttpUserAgent())
|
| 33 |
+
->setFbp(self::getFbp())
|
| 34 |
+
->setFbc(self::getFbc());
|
| 35 |
+
|
| 36 |
+
$event = (new Event())
|
| 37 |
+
->setEventName($event_name)
|
| 38 |
+
->setEventTime(time())
|
| 39 |
+
->setEventId(EventIdGenerator::guidv4())
|
| 40 |
+
->setEventSourceUrl(self::getRequestUri())
|
| 41 |
+
->setUserData($user_data)
|
| 42 |
+
->setCustomData(new CustomData());
|
| 43 |
+
|
| 44 |
+
return $event;
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
private static function getIpAddress() {
|
| 48 |
+
$ip_address = null;
|
| 49 |
+
|
| 50 |
+
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
|
| 51 |
+
$ip_address = $_SERVER['HTTP_CLIENT_IP'];
|
| 52 |
+
} else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
|
| 53 |
+
$ip_address = $_SERVER['HTTP_X_FORWARDED_FOR'];
|
| 54 |
+
} else if (!empty($_SERVER['REMOTE_ADDR'])) {
|
| 55 |
+
$ip_address = $_SERVER['REMOTE_ADDR'];
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
return $ip_address;
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
private static function getHttpUserAgent() {
|
| 62 |
+
$user_agent = null;
|
| 63 |
+
|
| 64 |
+
if (!empty($_SERVER['HTTP_USER_AGENT'])) {
|
| 65 |
+
$user_agent = $_SERVER['HTTP_USER_AGENT'];
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
return $user_agent;
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
private static function getRequestUri() {
|
| 72 |
+
$request_uri = null;
|
| 73 |
+
|
| 74 |
+
if (!empty($_SERVER['REQUEST_URI'])) {
|
| 75 |
+
$request_uri = $_SERVER['REQUEST_URI'];
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
return $request_uri;
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
private static function getFbp() {
|
| 82 |
+
$fbp = null;
|
| 83 |
+
|
| 84 |
+
if (!empty($_COOKIE['_fbp'])) {
|
| 85 |
+
$fbp = $_COOKIE['_fbp'];
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
return $fbp;
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
private static function getFbc() {
|
| 92 |
+
$fbc = null;
|
| 93 |
+
|
| 94 |
+
if (!empty($_COOKIE['_fbc'])) {
|
| 95 |
+
$fbc = $_COOKIE['_fbc'];
|
| 96 |
+
}
|
| 97 |
+
|
| 98 |
+
return $fbc;
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
+
public static function safeCreateEvent($event_name, $callback, $arguments) {
|
| 102 |
+
$event = self::newEvent($event_name);
|
| 103 |
+
|
| 104 |
+
try {
|
| 105 |
+
$data = call_user_func_array($callback, $arguments);
|
| 106 |
+
|
| 107 |
+
if (FacebookWordpressOptions::getUsePii()) {
|
| 108 |
+
$user_data = $event->getUserData();
|
| 109 |
+
if (!empty($data['email'])) {
|
| 110 |
+
$user_data->setEmail($data['email']);
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
if (!empty($data['first_name'])) {
|
| 114 |
+
$user_data->setFirstName($data['first_name']);
|
| 115 |
+
}
|
| 116 |
+
|
| 117 |
+
if (!empty($data['last_name'])) {
|
| 118 |
+
$user_data->setLastName($data['last_name']);
|
| 119 |
+
}
|
| 120 |
+
}
|
| 121 |
+
|
| 122 |
+
$custom_data = $event->getCustomData();
|
| 123 |
+
if (!empty($data['currency'])) {
|
| 124 |
+
$custom_data->setCurrency($data['currency']);
|
| 125 |
+
}
|
| 126 |
+
|
| 127 |
+
if (!empty($data['value'])) {
|
| 128 |
+
$custom_data->setValue($data['value']);
|
| 129 |
+
}
|
| 130 |
+
|
| 131 |
+
if (!empty($data['content_ids'])) {
|
| 132 |
+
$custom_data->setContentIds($data['content_ids']);
|
| 133 |
+
}
|
| 134 |
+
|
| 135 |
+
if (!empty($data['content_type'])) {
|
| 136 |
+
$custom_data->setContentType($data['content_type']);
|
| 137 |
+
}
|
| 138 |
+
} catch (\Exception $e) {
|
| 139 |
+
// Need to log
|
| 140 |
+
}
|
| 141 |
+
|
| 142 |
+
return $event;
|
| 143 |
+
}
|
| 144 |
+
|
| 145 |
+
public static function splitName($name) {
|
| 146 |
+
$first_name = $name;
|
| 147 |
+
$last_name = null;
|
| 148 |
+
$index = strpos($name, ' ');
|
| 149 |
+
if ($index !== false) {
|
| 150 |
+
$first_name = substr($name, 0, $index);
|
| 151 |
+
$last_name = substr($name, $index + 1);
|
| 152 |
+
}
|
| 153 |
+
|
| 154 |
+
return array($first_name, $last_name);
|
| 155 |
+
}
|
| 156 |
+
}
|
facebook-for-wordpress.php
CHANGED
|
@@ -5,7 +5,7 @@
|
|
| 5 |
Â
* Description: <strong><em>***ATTENTION: After upgrade the plugin may be deactivated due to a known issue, to workaround please refresh this page and activate plugin.***</em></strong> The Facebook pixel is an analytics tool that helps you measure the effectiveness of your advertising. You can use the Facebook pixel to understand the actions people are taking on your website and reach audiences you care about.
|
| 6 |
Â
* Author: Facebook
|
| 7 |
Â
* Author URI: https://www.facebook.com/
|
| 8 |
-
* Version:
|
| 9 |
Â
* Text Domain: official-facebook-pixel
|
| 10 |
Â
*/
|
| 11 |
Â
|
|
@@ -36,6 +36,7 @@ use FacebookPixelPlugin\Core\FacebookPluginConfig;
|
|
| 36 |
Â
use FacebookPixelPlugin\Core\FacebookWordpressOptions;
|
| 37 |
Â
use FacebookPixelPlugin\Core\FacebookWordpressPixelInjection;
|
| 38 |
Â
use FacebookPixelPlugin\Core\FacebookWordpressSettingsPage;
|
|
Â
|
|
| 39 |
Â
|
| 40 |
Â
class FacebookForWordpress {
|
| 41 |
Â
public function __construct() {
|
|
@@ -43,24 +44,30 @@ class FacebookForWordpress {
|
|
| 43 |
Â
FacebookWordpressOptions::initialize();
|
| 44 |
Â
|
| 45 |
Â
// load textdomain
|
| 46 |
-
load_plugin_textdomain(
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 47 |
Â
|
| 48 |
Â
// initialize pixel
|
| 49 |
Â
$options = FacebookWordpressOptions::getOptions();
|
| 50 |
Â
FacebookPixel::initialize(FacebookWordpressOptions::getPixelId());
|
| 51 |
-
|
| 52 |
Â
// Register WordPress pixel injection controlling where to fire pixel
|
| 53 |
Â
add_action('init', array($this, 'registerPixelInjection'), 0);
|
| 54 |
Â
|
| 55 |
Â
// initialize admin page config
|
| 56 |
Â
$this->registerSettingsPage();
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 57 |
Â
}
|
| 58 |
Â
|
| 59 |
Â
/**
|
| 60 |
Â
* Helper function for registering pixel injection.
|
| 61 |
Â
*/
|
| 62 |
Â
public function registerPixelInjection() {
|
| 63 |
-
|
|
Â
|
|
| 64 |
Â
}
|
| 65 |
Â
|
| 66 |
Â
/**
|
| 5 |
Â
* Description: <strong><em>***ATTENTION: After upgrade the plugin may be deactivated due to a known issue, to workaround please refresh this page and activate plugin.***</em></strong> The Facebook pixel is an analytics tool that helps you measure the effectiveness of your advertising. You can use the Facebook pixel to understand the actions people are taking on your website and reach audiences you care about.
|
| 6 |
Â
* Author: Facebook
|
| 7 |
Â
* Author URI: https://www.facebook.com/
|
| 8 |
+
* Version: 2.0.0
|
| 9 |
Â
* Text Domain: official-facebook-pixel
|
| 10 |
Â
*/
|
| 11 |
Â
|
| 36 |
Â
use FacebookPixelPlugin\Core\FacebookWordpressOptions;
|
| 37 |
Â
use FacebookPixelPlugin\Core\FacebookWordpressPixelInjection;
|
| 38 |
Â
use FacebookPixelPlugin\Core\FacebookWordpressSettingsPage;
|
| 39 |
+
use FacebookPixelPlugin\Core\ServerEventAsyncTask;
|
| 40 |
Â
|
| 41 |
Â
class FacebookForWordpress {
|
| 42 |
Â
public function __construct() {
|
| 44 |
Â
FacebookWordpressOptions::initialize();
|
| 45 |
Â
|
| 46 |
Â
// load textdomain
|
| 47 |
+
load_plugin_textdomain(
|
| 48 |
+
FacebookPluginConfig::TEXT_DOMAIN,
|
| 49 |
+
false,
|
| 50 |
+
dirname(plugin_basename(__FILE__)) . '/languages/');
|
| 51 |
Â
|
| 52 |
Â
// initialize pixel
|
| 53 |
Â
$options = FacebookWordpressOptions::getOptions();
|
| 54 |
Â
FacebookPixel::initialize(FacebookWordpressOptions::getPixelId());
|
|
Â
|
|
| 55 |
Â
// Register WordPress pixel injection controlling where to fire pixel
|
| 56 |
Â
add_action('init', array($this, 'registerPixelInjection'), 0);
|
| 57 |
Â
|
| 58 |
Â
// initialize admin page config
|
| 59 |
Â
$this->registerSettingsPage();
|
| 60 |
+
|
| 61 |
+
// initialize the s2s event async task
|
| 62 |
+
new ServerEventAsyncTask();
|
| 63 |
Â
}
|
| 64 |
Â
|
| 65 |
Â
/**
|
| 66 |
Â
* Helper function for registering pixel injection.
|
| 67 |
Â
*/
|
| 68 |
Â
public function registerPixelInjection() {
|
| 69 |
+
$injectionObj = new FacebookWordpressPixelInjection();
|
| 70 |
+
$injectionObj->inject();
|
| 71 |
Â
}
|
| 72 |
Â
|
| 73 |
Â
/**
|
integration/EDDUtils.php
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?php
|
| 2 |
+
/*
|
| 3 |
+
* Copyright (C) 2017-present, Facebook, Inc.
|
| 4 |
+
*
|
| 5 |
+
* This program is free software; you can redistribute it and/or modify
|
| 6 |
+
* it under the terms of the GNU General Public License as published by
|
| 7 |
+
* the Free Software Foundation; version 2 of the License.
|
| 8 |
+
* This program is distributed in the hope that it will be useful,
|
| 9 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| 10 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| 11 |
+
* GNU General Public License for more details.
|
| 12 |
+
*/
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* @package FacebookPixelPlugin
|
| 16 |
+
*/
|
| 17 |
+
|
| 18 |
+
namespace FacebookPixelPlugin\Integration;
|
| 19 |
+
|
| 20 |
+
defined('ABSPATH') or die('Direct access not allowed');
|
| 21 |
+
|
| 22 |
+
class EDDUtils {
|
| 23 |
+
public static function getCurrency() {
|
| 24 |
+
return edd_get_currency();
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
public static function getCartTotal() {
|
| 28 |
+
return EDD()->cart->get_total();
|
| 29 |
+
}
|
| 30 |
+
}
|
integration/FacebookWordpressCalderaForm.php
CHANGED
|
@@ -19,8 +19,13 @@ namespace FacebookPixelPlugin\Integration;
|
|
| 19 |
Â
|
| 20 |
Â
defined('ABSPATH') or die('Direct access not allowed');
|
| 21 |
Â
|
| 22 |
-
use FacebookPixelPlugin\Core\FacebookPixel;
|
| 23 |
Â
use FacebookPixelPlugin\Core\FacebookPluginUtils;
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 24 |
Â
|
| 25 |
Â
class FacebookWordpressCalderaForm extends FacebookWordpressIntegrationBase {
|
| 26 |
Â
const PLUGIN_FILE = 'caldera-forms/caldera-core.php';
|
|
@@ -38,8 +43,14 @@ class FacebookWordpressCalderaForm extends FacebookWordpressIntegrationBase {
|
|
| 38 |
Â
return $out;
|
| 39 |
Â
}
|
| 40 |
Â
|
| 41 |
-
$
|
| 42 |
-
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 43 |
Â
$code = sprintf("
|
| 44 |
Â
<!-- Facebook Pixel Event Code -->
|
| 45 |
Â
%s
|
|
@@ -50,4 +61,42 @@ class FacebookWordpressCalderaForm extends FacebookWordpressIntegrationBase {
|
|
| 50 |
Â
$out['html'] .= $code;
|
| 51 |
Â
return $out;
|
| 52 |
Â
}
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 53 |
Â
}
|
| 19 |
Â
|
| 20 |
Â
defined('ABSPATH') or die('Direct access not allowed');
|
| 21 |
Â
|
|
Â
|
|
| 22 |
Â
use FacebookPixelPlugin\Core\FacebookPluginUtils;
|
| 23 |
+
use FacebookPixelPlugin\Core\FacebookServerSideEvent;
|
| 24 |
+
use FacebookPixelPlugin\Core\FacebookWordPressOptions;
|
| 25 |
+
use FacebookPixelPlugin\Core\ServerEventFactory;
|
| 26 |
+
use FacebookPixelPlugin\Core\PixelRenderer;
|
| 27 |
+
use FacebookAds\Object\ServerSide\Event;
|
| 28 |
+
use FacebookAds\Object\ServerSide\UserData;
|
| 29 |
Â
|
| 30 |
Â
class FacebookWordpressCalderaForm extends FacebookWordpressIntegrationBase {
|
| 31 |
Â
const PLUGIN_FILE = 'caldera-forms/caldera-core.php';
|
| 43 |
Â
return $out;
|
| 44 |
Â
}
|
| 45 |
Â
|
| 46 |
+
$server_event = ServerEventFactory::safeCreateEvent(
|
| 47 |
+
'Lead',
|
| 48 |
+
array(__CLASS__, 'readFormData'),
|
| 49 |
+
array($form)
|
| 50 |
+
);
|
| 51 |
+
FacebookServerSideEvent::getInstance()->track($server_event);
|
| 52 |
+
|
| 53 |
+
$code = PixelRenderer::render(array($server_event), self::TRACKING_NAME);
|
| 54 |
Â
$code = sprintf("
|
| 55 |
Â
<!-- Facebook Pixel Event Code -->
|
| 56 |
Â
%s
|
| 61 |
Â
$out['html'] .= $code;
|
| 62 |
Â
return $out;
|
| 63 |
Â
}
|
| 64 |
+
|
| 65 |
+
public static function readFormData($form) {
|
| 66 |
+
if (empty($form)) {
|
| 67 |
+
return array();
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
return array(
|
| 71 |
+
'email' => self::getEmail($form),
|
| 72 |
+
'first_name' => self::getFirstName($form),
|
| 73 |
+
'last_name' => self::getLastName($form)
|
| 74 |
+
);
|
| 75 |
+
}
|
| 76 |
+
|
| 77 |
+
private static function getEmail($form) {
|
| 78 |
+
return self::getFieldValue($form, 'type', 'email');
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
private static function getFirstName($form) {
|
| 82 |
+
return self::getFieldValue($form, 'slug', 'first_name');
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
private static function getLastName($form) {
|
| 86 |
+
return self::getFieldValue($form, 'slug', 'last_name');
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
private static function getFieldValue($form, $attr, $attr_value) {
|
| 90 |
+
if (empty($form['fields'])) {
|
| 91 |
+
return null;
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
foreach ($form['fields'] as $field) {
|
| 95 |
+
if (array_key_exists($attr, $field) && $field[$attr] == $attr_value) {
|
| 96 |
+
return $_POST[$field['ID']];
|
| 97 |
+
}
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
return null;
|
| 101 |
+
}
|
| 102 |
Â
}
|
integration/FacebookWordpressContactForm7.php
CHANGED
|
@@ -19,41 +19,104 @@ namespace FacebookPixelPlugin\Integration;
|
|
| 19 |
Â
|
| 20 |
Â
defined('ABSPATH') or die('Direct access not allowed');
|
| 21 |
Â
|
| 22 |
-
use FacebookPixelPlugin\Core\FacebookPixel;
|
| 23 |
Â
use FacebookPixelPlugin\Core\FacebookPluginUtils;
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 24 |
Â
|
| 25 |
Â
class FacebookWordpressContactForm7 extends FacebookWordpressIntegrationBase {
|
| 26 |
Â
const PLUGIN_FILE = 'contact-form-7/wp-contact-form-7.php';
|
| 27 |
Â
const TRACKING_NAME = 'contact-form-7';
|
| 28 |
Â
|
| 29 |
Â
public static function injectPixelCode() {
|
| 30 |
-
|
| 31 |
-
'
|
| 32 |
-
'
|
| 33 |
-
|
| 34 |
Â
}
|
| 35 |
Â
|
| 36 |
-
public static function
|
| 37 |
Â
if (FacebookPluginUtils::isAdmin()) {
|
| 38 |
-
return;
|
| 39 |
Â
}
|
| 40 |
Â
|
| 41 |
-
$
|
| 42 |
-
|
| 43 |
-
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 44 |
Â
|
| 45 |
-
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 46 |
Â
<!-- Facebook Pixel Event Code -->
|
| 47 |
-
|
| 48 |
-
document.addEventListener(
|
| 49 |
-
'%s',
|
| 50 |
-
function (event) {%s},
|
| 51 |
-
false
|
| 52 |
-
);
|
| 53 |
-
</script>
|
| 54 |
Â
<!-- End Facebook Pixel Event Code -->
|
| 55 |
Â
",
|
| 56 |
-
$listener,
|
| 57 |
Â
$code);
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 58 |
Â
}
|
| 59 |
Â
}
|
| 19 |
Â
|
| 20 |
Â
defined('ABSPATH') or die('Direct access not allowed');
|
| 21 |
Â
|
|
Â
|
|
| 22 |
Â
use FacebookPixelPlugin\Core\FacebookPluginUtils;
|
| 23 |
+
use FacebookPixelPlugin\Core\FacebookServerSideEvent;
|
| 24 |
+
use FacebookPixelPlugin\Core\FacebookWordPressOptions;
|
| 25 |
+
use FacebookPixelPlugin\Core\ServerEventFactory;
|
| 26 |
+
use FacebookPixelPlugin\Core\PixelRenderer;
|
| 27 |
+
use FacebookAds\Object\ServerSide\Event;
|
| 28 |
+
use FacebookAds\Object\ServerSide\UserData;
|
| 29 |
Â
|
| 30 |
Â
class FacebookWordpressContactForm7 extends FacebookWordpressIntegrationBase {
|
| 31 |
Â
const PLUGIN_FILE = 'contact-form-7/wp-contact-form-7.php';
|
| 32 |
Â
const TRACKING_NAME = 'contact-form-7';
|
| 33 |
Â
|
| 34 |
Â
public static function injectPixelCode() {
|
| 35 |
+
add_action(
|
| 36 |
+
'wpcf7_submit',
|
| 37 |
+
array(__CLASS__, 'trackServerEvent'),
|
| 38 |
+
10, 2);
|
| 39 |
Â
}
|
| 40 |
Â
|
| 41 |
+
public static function trackServerEvent($form, $result) {
|
| 42 |
Â
if (FacebookPluginUtils::isAdmin()) {
|
| 43 |
+
return $result;
|
| 44 |
Â
}
|
| 45 |
Â
|
| 46 |
+
$server_event = ServerEventFactory::safeCreateEvent(
|
| 47 |
+
'Lead',
|
| 48 |
+
array(__CLASS__, 'readFormData'),
|
| 49 |
+
array($form)
|
| 50 |
+
);
|
| 51 |
+
FacebookServerSideEvent::getInstance()->track($server_event);
|
| 52 |
Â
|
| 53 |
+
add_action(
|
| 54 |
+
'wpcf7_ajax_json_echo',
|
| 55 |
+
array(__CLASS__, 'injectLeadEvent'),
|
| 56 |
+
20, 2);
|
| 57 |
+
|
| 58 |
+
return $result;
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
public static function injectLeadEvent($response, $result) {
|
| 62 |
+
if (FacebookPluginUtils::isAdmin()) {
|
| 63 |
+
return $response;
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
$events = FacebookServerSideEvent::getInstance()->getTrackedEvents();
|
| 67 |
+
$code = PixelRenderer::render($events, self::TRACKING_NAME);
|
| 68 |
+
$code = sprintf("
|
| 69 |
Â
<!-- Facebook Pixel Event Code -->
|
| 70 |
+
%s
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 71 |
Â
<!-- End Facebook Pixel Event Code -->
|
| 72 |
Â
",
|
|
Â
|
|
| 73 |
Â
$code);
|
| 74 |
+
|
| 75 |
+
$response['message'] .= $code;
|
| 76 |
+
return $response;
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
public static function readFormData($form) {
|
| 80 |
+
if (empty($form)) {
|
| 81 |
+
return array();
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
$form_tags = $form->scan_form_tags();
|
| 85 |
+
$name = self::getName($form_tags);
|
| 86 |
+
|
| 87 |
+
return array(
|
| 88 |
+
'email' => self::getEmail($form_tags),
|
| 89 |
+
'first_name' => $name[0],
|
| 90 |
+
'last_name' => $name[1]
|
| 91 |
+
);
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
private static function getEmail($form_tags) {
|
| 95 |
+
if (empty($form_tags)) {
|
| 96 |
+
return null;
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
foreach ($form_tags as $tag) {
|
| 100 |
+
if ($tag->basetype == "email") {
|
| 101 |
+
return $_POST[$tag->name];
|
| 102 |
+
}
|
| 103 |
+
}
|
| 104 |
+
|
| 105 |
+
return null;
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
private static function getName($form_tags) {
|
| 109 |
+
if (empty($form_tags)) {
|
| 110 |
+
return null;
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
foreach ($form_tags as $tag) {
|
| 114 |
+
if ($tag->basetype === "text"
|
| 115 |
+
&& strpos(strtolower($tag->name), 'name') !== false) {
|
| 116 |
+
return ServerEventFactory::splitName($_POST[$tag->name]);
|
| 117 |
+
}
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
return null;
|
| 121 |
Â
}
|
| 122 |
Â
}
|
integration/FacebookWordpressEasyDigitalDownloads.php
CHANGED
|
@@ -21,6 +21,9 @@ defined('ABSPATH') or die('Direct access not allowed');
|
|
| 21 |
Â
|
| 22 |
Â
use FacebookPixelPlugin\Core\FacebookPixel;
|
| 23 |
Â
use FacebookPixelPlugin\Core\FacebookPluginUtils;
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 24 |
Â
|
| 25 |
Â
class FacebookWordpressEasyDigitalDownloads extends FacebookWordpressIntegrationBase {
|
| 26 |
Â
const PLUGIN_FILE = 'easy-digital-downloads/easy-digital-downloads.php';
|
|
@@ -73,10 +76,10 @@ jQuery(document).ready(function ($) {
|
|
| 73 |
Â
'inject_function' => 'injectInitiateCheckoutEvent'));
|
| 74 |
Â
|
| 75 |
Â
// Purchase
|
| 76 |
-
|
| 77 |
-
'
|
| 78 |
-
'
|
| 79 |
-
|
| 80 |
Â
|
| 81 |
Â
// ViewContent
|
| 82 |
Â
self::addPixelFireForHook(array(
|
|
@@ -112,14 +115,14 @@ jQuery(document).ready(function ($) {
|
|
| 112 |
Â
return;
|
| 113 |
Â
}
|
| 114 |
Â
|
| 115 |
-
$
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
'value' => $value,
|
| 120 |
Â
);
|
| 121 |
-
|
| 122 |
Â
|
|
Â
|
|
| 123 |
Â
printf("
|
| 124 |
Â
<!-- Facebook Pixel Event Code -->
|
| 125 |
Â
%s
|
|
@@ -128,27 +131,28 @@ jQuery(document).ready(function ($) {
|
|
| 128 |
Â
$code);
|
| 129 |
Â
}
|
| 130 |
Â
|
| 131 |
-
public static function
|
| 132 |
Â
if (FacebookPluginUtils::isAdmin() || empty($payment->ID)) {
|
| 133 |
Â
return;
|
| 134 |
Â
}
|
| 135 |
Â
|
| 136 |
-
$
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 137 |
Â
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
|
| 142 |
-
$value += $item['price'];
|
| 143 |
-
}
|
| 144 |
-
$currency = $payment_meta['currency'];
|
| 145 |
-
$param = array(
|
| 146 |
-
'content_ids' => $content_ids,
|
| 147 |
-
'content_type' => 'product',
|
| 148 |
-
'currency' => $currency,
|
| 149 |
-
'value' => $value,
|
| 150 |
Â
);
|
| 151 |
-
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 152 |
Â
|
| 153 |
Â
printf("
|
| 154 |
Â
<!-- Facebook Pixel Event Code -->
|
|
@@ -189,4 +193,39 @@ jQuery(document).ready(function ($) {
|
|
| 189 |
Â
",
|
| 190 |
Â
$code);
|
| 191 |
Â
}
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 192 |
Â
}
|
| 21 |
Â
|
| 22 |
Â
use FacebookPixelPlugin\Core\FacebookPixel;
|
| 23 |
Â
use FacebookPixelPlugin\Core\FacebookPluginUtils;
|
| 24 |
+
use FacebookPixelPlugin\Core\ServerEventFactory;
|
| 25 |
+
use FacebookPixelPlugin\Core\FacebookServerSideEvent;
|
| 26 |
+
use FacebookPixelPlugin\Core\PixelRenderer;
|
| 27 |
Â
|
| 28 |
Â
class FacebookWordpressEasyDigitalDownloads extends FacebookWordpressIntegrationBase {
|
| 29 |
Â
const PLUGIN_FILE = 'easy-digital-downloads/easy-digital-downloads.php';
|
| 76 |
Â
'inject_function' => 'injectInitiateCheckoutEvent'));
|
| 77 |
Â
|
| 78 |
Â
// Purchase
|
| 79 |
+
add_action(
|
| 80 |
+
'edd_payment_receipt_after',
|
| 81 |
+
array(__CLASS__, 'trackPurchaseEvent'),
|
| 82 |
+
10, 2);
|
| 83 |
Â
|
| 84 |
Â
// ViewContent
|
| 85 |
Â
self::addPixelFireForHook(array(
|
| 115 |
Â
return;
|
| 116 |
Â
}
|
| 117 |
Â
|
| 118 |
+
$server_event = ServerEventFactory::safeCreateEvent(
|
| 119 |
+
'InitiateCheckout',
|
| 120 |
+
array(__CLASS__, 'createInitiateCheckoutEvent'),
|
| 121 |
+
array()
|
|
Â
|
|
| 122 |
Â
);
|
| 123 |
+
FacebookServerSideEvent::getInstance()->track($server_event);
|
| 124 |
Â
|
| 125 |
+
$code = PixelRenderer::render(array($server_event), self::TRACKING_NAME);
|
| 126 |
Â
printf("
|
| 127 |
Â
<!-- Facebook Pixel Event Code -->
|
| 128 |
Â
%s
|
| 131 |
Â
$code);
|
| 132 |
Â
}
|
| 133 |
Â
|
| 134 |
+
public static function trackPurchaseEvent($payment, $edd_receipt_args) {
|
| 135 |
Â
if (FacebookPluginUtils::isAdmin() || empty($payment->ID)) {
|
| 136 |
Â
return;
|
| 137 |
Â
}
|
| 138 |
Â
|
| 139 |
+
$server_event = ServerEventFactory::safeCreateEvent(
|
| 140 |
+
'Purchase',
|
| 141 |
+
array(__CLASS__, 'createPurchaseEvent'),
|
| 142 |
+
array($payment)
|
| 143 |
+
);
|
| 144 |
+
FacebookServerSideEvent::getInstance()->track($server_event);
|
| 145 |
Â
|
| 146 |
+
add_action(
|
| 147 |
+
'wp_footer',
|
| 148 |
+
array(__CLASS__, 'injectPurchaseEvent'),
|
| 149 |
+
20
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 150 |
Â
);
|
| 151 |
+
}
|
| 152 |
+
|
| 153 |
+
public static function injectPurchaseEvent() {
|
| 154 |
+
$events = FacebookServerSideEvent::getInstance()->getTrackedEvents();
|
| 155 |
+
$code = PixelRenderer::render($events, self::TRACKING_NAME);
|
| 156 |
Â
|
| 157 |
Â
printf("
|
| 158 |
Â
<!-- Facebook Pixel Event Code -->
|
| 193 |
Â
",
|
| 194 |
Â
$code);
|
| 195 |
Â
}
|
| 196 |
+
|
| 197 |
+
public static function createInitiateCheckoutEvent() {
|
| 198 |
+
$event_data = FacebookPluginUtils::getLoggedInUserInfo();
|
| 199 |
+
$event_data['currency'] = EDDUtils::getCurrency();
|
| 200 |
+
$event_data['value'] = EDDUtils::getCartTotal();
|
| 201 |
+
|
| 202 |
+
return $event_data;
|
| 203 |
+
}
|
| 204 |
+
|
| 205 |
+
public static function createPurchaseEvent($payment) {
|
| 206 |
+
$event_data = array();
|
| 207 |
+
|
| 208 |
+
$payment_meta = \edd_get_payment_meta($payment->ID);
|
| 209 |
+
if (empty($payment_meta)) {
|
| 210 |
+
return $event_data;
|
| 211 |
+
}
|
| 212 |
+
|
| 213 |
+
$event_data['email'] = $payment_meta['email'];
|
| 214 |
+
$event_data['first_name'] = $payment_meta['user_info']['first_name'];
|
| 215 |
+
$event_data['last_name'] = $payment_meta['user_info']['last_name'];
|
| 216 |
+
|
| 217 |
+
$content_ids = array();
|
| 218 |
+
$value = 0;
|
| 219 |
+
foreach ($payment_meta['cart_details'] as $item) {
|
| 220 |
+
$content_ids[] = $item['id'];
|
| 221 |
+
$value += $item['price'];
|
| 222 |
+
}
|
| 223 |
+
|
| 224 |
+
$event_data['currency'] = $payment_meta['currency'];
|
| 225 |
+
$event_data['value'] = $value;
|
| 226 |
+
$event_data['content_ids'] = $content_ids;
|
| 227 |
+
$event_data['content_type'] = 'product';
|
| 228 |
+
|
| 229 |
+
return $event_data;
|
| 230 |
+
}
|
| 231 |
Â
}
|
integration/FacebookWordpressFormidableForm.php
CHANGED
|
@@ -21,34 +21,115 @@ defined('ABSPATH') or die('Direct access not allowed');
|
|
| 21 |
Â
|
| 22 |
Â
use FacebookPixelPlugin\Core\FacebookPixel;
|
| 23 |
Â
use FacebookPixelPlugin\Core\FacebookPluginUtils;
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 24 |
Â
|
| 25 |
Â
class FacebookWordpressFormidableForm extends FacebookWordpressIntegrationBase {
|
| 26 |
Â
const PLUGIN_FILE = 'formidable/formidable.php';
|
| 27 |
Â
const TRACKING_NAME = 'formidable-lite';
|
| 28 |
Â
|
| 29 |
Â
public static function injectPixelCode() {
|
| 30 |
-
|
| 31 |
-
'
|
| 32 |
-
'
|
| 33 |
-
|
| 34 |
-
|
|
Â
|
|
| 35 |
Â
}
|
| 36 |
Â
|
| 37 |
-
public static function
|
| 38 |
Â
if (FacebookPluginUtils::isAdmin()) {
|
| 39 |
Â
return;
|
| 40 |
Â
}
|
| 41 |
Â
|
| 42 |
-
$
|
| 43 |
-
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 44 |
Â
|
| 45 |
Â
printf("
|
| 46 |
Â
<!-- Facebook Pixel Event Code -->
|
| 47 |
-
<script>
|
| 48 |
Â
%s
|
| 49 |
-
</script>
|
| 50 |
Â
<!-- End Facebook Pixel Event Code -->
|
| 51 |
Â
",
|
| 52 |
Â
$code);
|
| 53 |
Â
}
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 54 |
Â
}
|
| 21 |
Â
|
| 22 |
Â
use FacebookPixelPlugin\Core\FacebookPixel;
|
| 23 |
Â
use FacebookPixelPlugin\Core\FacebookPluginUtils;
|
| 24 |
+
use FacebookPixelPlugin\Core\FacebookServerSideEvent;
|
| 25 |
+
use FacebookPixelPlugin\Core\FacebookWordPressOptions;
|
| 26 |
+
use FacebookPixelPlugin\Core\ServerEventFactory;
|
| 27 |
+
use FacebookPixelPlugin\Core\PixelRenderer;
|
| 28 |
+
use FacebookAds\Object\ServerSide\Event;
|
| 29 |
+
use FacebookAds\Object\ServerSide\UserData;
|
| 30 |
Â
|
| 31 |
Â
class FacebookWordpressFormidableForm extends FacebookWordpressIntegrationBase {
|
| 32 |
Â
const PLUGIN_FILE = 'formidable/formidable.php';
|
| 33 |
Â
const TRACKING_NAME = 'formidable-lite';
|
| 34 |
Â
|
| 35 |
Â
public static function injectPixelCode() {
|
| 36 |
+
add_action(
|
| 37 |
+
'frm_after_create_entry',
|
| 38 |
+
array(__CLASS__, 'trackServerEvent'),
|
| 39 |
+
20,
|
| 40 |
+
2
|
| 41 |
+
);
|
| 42 |
Â
}
|
| 43 |
Â
|
| 44 |
+
public static function trackServerEvent($entry_id, $form_id) {
|
| 45 |
Â
if (FacebookPluginUtils::isAdmin()) {
|
| 46 |
Â
return;
|
| 47 |
Â
}
|
| 48 |
Â
|
| 49 |
+
$server_event = ServerEventFactory::safeCreateEvent(
|
| 50 |
+
'Lead',
|
| 51 |
+
array(__CLASS__, 'readFormData'),
|
| 52 |
+
array($entry_id)
|
| 53 |
+
);
|
| 54 |
+
FacebookServerSideEvent::getInstance()->track($server_event);
|
| 55 |
+
|
| 56 |
+
add_action(
|
| 57 |
+
'wp_footer',
|
| 58 |
+
array(__CLASS__, 'injectLeadEvent'),
|
| 59 |
+
20
|
| 60 |
+
);
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
public static function injectLeadEvent() {
|
| 64 |
+
if (FacebookPluginUtils::isAdmin()) {
|
| 65 |
+
return;
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
$events = FacebookServerSideEvent::getInstance()->getTrackedEvents();
|
| 69 |
+
$code = PixelRenderer::render($events, self::TRACKING_NAME);
|
| 70 |
Â
|
| 71 |
Â
printf("
|
| 72 |
Â
<!-- Facebook Pixel Event Code -->
|
|
Â
|
|
| 73 |
Â
%s
|
|
Â
|
|
| 74 |
Â
<!-- End Facebook Pixel Event Code -->
|
| 75 |
Â
",
|
| 76 |
Â
$code);
|
| 77 |
Â
}
|
| 78 |
+
|
| 79 |
+
public static function readFormData($entry_id) {
|
| 80 |
+
if (empty($entry_id)) {
|
| 81 |
+
return array();
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
$entry_values =
|
| 85 |
+
IntegrationUtils::getFormidableFormsEntryValues($entry_id);
|
| 86 |
+
|
| 87 |
+
$field_values = $entry_values->get_field_values();
|
| 88 |
+
if (!empty($field_values)) {
|
| 89 |
+
return array(
|
| 90 |
+
'email' => self::getEmail($field_values),
|
| 91 |
+
'first_name' => self::getFirstName($field_values),
|
| 92 |
+
'last_name' => self::getLastName($field_values)
|
| 93 |
+
);
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
return array();
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
private static function getEmail($field_values) {
|
| 100 |
+
foreach ($field_values as $field_value) {
|
| 101 |
+
$field = $field_value->get_field();
|
| 102 |
+
if ($field->type == 'email') {
|
| 103 |
+
return $field_value->get_saved_value();
|
| 104 |
+
}
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
return null;
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
private static function getFirstName($field_values) {
|
| 111 |
+
return self::getFieldValue($field_values, 'text', 'Name', 'First');
|
| 112 |
+
}
|
| 113 |
+
|
| 114 |
+
private static function getLastName($field_values) {
|
| 115 |
+
return self::getFieldValue($field_values, 'text', 'Last', 'Last');
|
| 116 |
+
}
|
| 117 |
+
|
| 118 |
+
private static function getFieldValue(
|
| 119 |
+
$field_values,
|
| 120 |
+
$type,
|
| 121 |
+
$name,
|
| 122 |
+
$description)
|
| 123 |
+
{
|
| 124 |
+
foreach ($field_values as $field_value) {
|
| 125 |
+
$field = $field_value->get_field();
|
| 126 |
+
if ($field->type == $type &&
|
| 127 |
+
$field->name == $name &&
|
| 128 |
+
$field->description == $description) {
|
| 129 |
+
return $field_value->get_saved_value();
|
| 130 |
+
}
|
| 131 |
+
}
|
| 132 |
+
|
| 133 |
+
return null;
|
| 134 |
+
}
|
| 135 |
Â
}
|
integration/FacebookWordpressGravityForms.php
CHANGED
|
@@ -21,6 +21,12 @@ defined('ABSPATH') or die('Direct access not allowed');
|
|
| 21 |
Â
|
| 22 |
Â
use FacebookPixelPlugin\Core\FacebookPixel;
|
| 23 |
Â
use FacebookPixelPlugin\Core\FacebookPluginUtils;
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 24 |
Â
|
| 25 |
Â
class FacebookWordpressGravityForms extends FacebookWordpressIntegrationBase {
|
| 26 |
Â
const PLUGIN_FILE = 'gravityforms/gravityforms.php';
|
|
@@ -38,13 +44,17 @@ class FacebookWordpressGravityForms extends FacebookWordpressIntegrationBase {
|
|
| 38 |
Â
return $confirmation;
|
| 39 |
Â
}
|
| 40 |
Â
|
| 41 |
-
$
|
| 42 |
-
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 43 |
Â
$code = sprintf("
|
| 44 |
Â
<!-- Facebook Pixel Event Code -->
|
| 45 |
-
<script>
|
| 46 |
Â
%s
|
| 47 |
-
</script>
|
| 48 |
Â
<!-- End Facebook Pixel Event Code -->
|
| 49 |
Â
", $pixel_code);
|
| 50 |
Â
|
|
@@ -67,4 +77,59 @@ class FacebookWordpressGravityForms extends FacebookWordpressIntegrationBase {
|
|
| 67 |
Â
|
| 68 |
Â
return $confirmation;
|
| 69 |
Â
}
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 70 |
Â
}
|
| 21 |
Â
|
| 22 |
Â
use FacebookPixelPlugin\Core\FacebookPixel;
|
| 23 |
Â
use FacebookPixelPlugin\Core\FacebookPluginUtils;
|
| 24 |
+
use FacebookPixelPlugin\Core\FacebookServerSideEvent;
|
| 25 |
+
use FacebookPixelPlugin\Core\FacebookWordPressOptions;
|
| 26 |
+
use FacebookPixelPlugin\Core\ServerEventFactory;
|
| 27 |
+
use FacebookPixelPlugin\Core\PixelRenderer;
|
| 28 |
+
use FacebookAds\Object\ServerSide\Event;
|
| 29 |
+
use FacebookAds\Object\ServerSide\UserData;
|
| 30 |
Â
|
| 31 |
Â
class FacebookWordpressGravityForms extends FacebookWordpressIntegrationBase {
|
| 32 |
Â
const PLUGIN_FILE = 'gravityforms/gravityforms.php';
|
| 44 |
Â
return $confirmation;
|
| 45 |
Â
}
|
| 46 |
Â
|
| 47 |
+
$event = ServerEventFactory::safeCreateEvent(
|
| 48 |
+
'Lead',
|
| 49 |
+
array(__CLASS__, 'readFormData'),
|
| 50 |
+
array($form, $entry)
|
| 51 |
+
);
|
| 52 |
+
FacebookServerSideEvent::getInstance()->track($event);
|
| 53 |
+
|
| 54 |
+
$pixel_code = PixelRenderer::render(array($event), self::TRACKING_NAME);
|
| 55 |
Â
$code = sprintf("
|
| 56 |
Â
<!-- Facebook Pixel Event Code -->
|
|
Â
|
|
| 57 |
Â
%s
|
|
Â
|
|
| 58 |
Â
<!-- End Facebook Pixel Event Code -->
|
| 59 |
Â
", $pixel_code);
|
| 60 |
Â
|
| 77 |
Â
|
| 78 |
Â
return $confirmation;
|
| 79 |
Â
}
|
| 80 |
+
|
| 81 |
+
public static function readFormData($form, $entry) {
|
| 82 |
+
if (empty($form) || empty($entry)) {
|
| 83 |
+
return array();
|
| 84 |
+
}
|
| 85 |
+
|
| 86 |
+
return array(
|
| 87 |
+
'email' => self::getEmail($form, $entry),
|
| 88 |
+
'first_name' => self::getFirstName($form, $entry),
|
| 89 |
+
'last_name' => self::getLastName($form, $entry)
|
| 90 |
+
);
|
| 91 |
+
}
|
| 92 |
+
|
| 93 |
+
private static function getEmail($form, $entry) {
|
| 94 |
+
if (empty($form['fields'])) {
|
| 95 |
+
return null;
|
| 96 |
+
}
|
| 97 |
+
|
| 98 |
+
foreach ($form['fields'] as $field) {
|
| 99 |
+
if ($field->type == 'email') {
|
| 100 |
+
return $entry[$field->id];
|
| 101 |
+
}
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
return null;
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
private static function getFirstName($form, $entry) {
|
| 108 |
+
return self::getName($form, $entry, 'name', 'First');
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
private static function getLastName($form, $entry) {
|
| 112 |
+
return self::getName($form, $entry, 'name', 'Last');
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
private static function getName($form, $entry, $type, $label) {
|
| 116 |
+
if (empty($form['fields'])) {
|
| 117 |
+
return null;
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
foreach ($form['fields'] as $field) {
|
| 121 |
+
if ($field->type == $type) {
|
| 122 |
+
$inputs = $field->inputs;
|
| 123 |
+
if (!empty($inputs)) {
|
| 124 |
+
foreach ($inputs as $input) {
|
| 125 |
+
if ($input['label'] == $label) {
|
| 126 |
+
return $entry[$input['id']];
|
| 127 |
+
}
|
| 128 |
+
}
|
| 129 |
+
}
|
| 130 |
+
}
|
| 131 |
+
}
|
| 132 |
+
|
| 133 |
+
return null;
|
| 134 |
+
}
|
| 135 |
Â
}
|
integration/FacebookWordpressMailchimpForWp.php
CHANGED
|
@@ -21,6 +21,9 @@ defined('ABSPATH') or die('Direct access not allowed');
|
|
| 21 |
Â
|
| 22 |
Â
use FacebookPixelPlugin\Core\FacebookPixel;
|
| 23 |
Â
use FacebookPixelPlugin\Core\FacebookPluginUtils;
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 24 |
Â
|
| 25 |
Â
class FacebookWordpressMailchimpForWp extends FacebookWordpressIntegrationBase {
|
| 26 |
Â
const PLUGIN_FILE = 'mailchimp-for-wp/mailchimp-for-wp.php';
|
|
@@ -38,14 +41,36 @@ class FacebookWordpressMailchimpForWp extends FacebookWordpressIntegrationBase {
|
|
| 38 |
Â
return;
|
| 39 |
Â
}
|
| 40 |
Â
|
| 41 |
-
$
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 42 |
Â
printf("
|
| 43 |
Â
<!-- Facebook Pixel Event Code -->
|
| 44 |
-
<script>
|
| 45 |
Â
%s
|
| 46 |
-
</script>
|
| 47 |
Â
<!-- End Facebook Pixel Event Code -->
|
| 48 |
Â
",
|
| 49 |
Â
$code);
|
| 50 |
Â
}
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 51 |
Â
}
|
| 21 |
Â
|
| 22 |
Â
use FacebookPixelPlugin\Core\FacebookPixel;
|
| 23 |
Â
use FacebookPixelPlugin\Core\FacebookPluginUtils;
|
| 24 |
+
use FacebookPixelPlugin\Core\ServerEventFactory;
|
| 25 |
+
use FacebookPixelPlugin\Core\FacebookServerSideEvent;
|
| 26 |
+
use FacebookPixelPlugin\Core\PixelRenderer;
|
| 27 |
Â
|
| 28 |
Â
class FacebookWordpressMailchimpForWp extends FacebookWordpressIntegrationBase {
|
| 29 |
Â
const PLUGIN_FILE = 'mailchimp-for-wp/mailchimp-for-wp.php';
|
| 41 |
Â
return;
|
| 42 |
Â
}
|
| 43 |
Â
|
| 44 |
+
$server_event = ServerEventFactory::safeCreateEvent(
|
| 45 |
+
'Lead',
|
| 46 |
+
array(__CLASS__, 'readFormData'),
|
| 47 |
+
array()
|
| 48 |
+
);
|
| 49 |
+
FacebookServerSideEvent::getInstance()->track($server_event);
|
| 50 |
+
|
| 51 |
+
$code = PixelRenderer::render(array($server_event), self::TRACKING_NAME);
|
| 52 |
Â
printf("
|
| 53 |
Â
<!-- Facebook Pixel Event Code -->
|
|
Â
|
|
| 54 |
Â
%s
|
|
Â
|
|
| 55 |
Â
<!-- End Facebook Pixel Event Code -->
|
| 56 |
Â
",
|
| 57 |
Â
$code);
|
| 58 |
Â
}
|
| 59 |
+
|
| 60 |
+
public static function readFormData() {
|
| 61 |
+
$event_data = array();
|
| 62 |
+
if (!empty($_POST['EMAIL'])) {
|
| 63 |
+
$event_data['email'] = $_POST['EMAIL'];
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
if (!empty($_POST['FNAME'])) {
|
| 67 |
+
$event_data['first_name'] = $_POST['FNAME'];
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
if (!empty($_POST['LNAME'])) {
|
| 71 |
+
$event_data['last_name'] = $_POST['LNAME'];
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
return $event_data;
|
| 75 |
+
}
|
| 76 |
Â
}
|
integration/FacebookWordpressNinjaForms.php
CHANGED
|
@@ -21,6 +21,12 @@ defined('ABSPATH') or die('Direct access not allowed');
|
|
| 21 |
Â
|
| 22 |
Â
use FacebookPixelPlugin\Core\FacebookPixel;
|
| 23 |
Â
use FacebookPixelPlugin\Core\FacebookPluginUtils;
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 24 |
Â
|
| 25 |
Â
class FacebookWordpressNinjaForms extends FacebookWordpressIntegrationBase {
|
| 26 |
Â
const PLUGIN_FILE = 'ninja-forms/ninja-forms.php';
|
|
@@ -30,24 +36,14 @@ class FacebookWordpressNinjaForms extends FacebookWordpressIntegrationBase {
|
|
| 30 |
Â
add_action(
|
| 31 |
Â
'ninja_forms_submission_actions',
|
| 32 |
Â
array(__CLASS__, 'injectLeadEvent'),
|
| 33 |
-
10,
|
| 34 |
Â
}
|
| 35 |
Â
|
| 36 |
-
public static function injectLeadEvent($actions, $form_data) {
|
| 37 |
Â
if (FacebookPluginUtils::isAdmin()) {
|
| 38 |
Â
return $actions;
|
| 39 |
Â
}
|
| 40 |
Â
|
| 41 |
-
$param = array();
|
| 42 |
-
$pixel_code = FacebookPixel::getPixelLeadCode($param, self::TRACKING_NAME, true);
|
| 43 |
-
|
| 44 |
-
$code = sprintf("
|
| 45 |
-
<!-- Facebook Pixel Event Code -->
|
| 46 |
-
%s
|
| 47 |
-
<!-- End Facebook Pixel Event Code -->
|
| 48 |
-
",
|
| 49 |
-
$pixel_code);
|
| 50 |
-
|
| 51 |
Â
foreach ($actions as $key => $action) {
|
| 52 |
Â
if (!isset($action['settings']) || !isset($action['settings']['type'])) {
|
| 53 |
Â
continue;
|
|
@@ -60,6 +56,20 @@ class FacebookWordpressNinjaForms extends FacebookWordpressIntegrationBase {
|
|
| 60 |
Â
|
| 61 |
Â
// inject code when form is submitted successfully
|
| 62 |
Â
if ($type == 'successmessage') {
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 63 |
Â
$action['settings']['success_msg'] .= $code;
|
| 64 |
Â
$actions[$key] = $action;
|
| 65 |
Â
}
|
|
@@ -67,4 +77,39 @@ class FacebookWordpressNinjaForms extends FacebookWordpressIntegrationBase {
|
|
| 67 |
Â
|
| 68 |
Â
return $actions;
|
| 69 |
Â
}
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 70 |
Â
}
|
| 21 |
Â
|
| 22 |
Â
use FacebookPixelPlugin\Core\FacebookPixel;
|
| 23 |
Â
use FacebookPixelPlugin\Core\FacebookPluginUtils;
|
| 24 |
+
use FacebookPixelPlugin\Core\FacebookServerSideEvent;
|
| 25 |
+
use FacebookPixelPlugin\Core\FacebookWordPressOptions;
|
| 26 |
+
use FacebookPixelPlugin\Core\ServerEventFactory;
|
| 27 |
+
use FacebookPixelPlugin\Core\PixelRenderer;
|
| 28 |
+
use FacebookAds\Object\ServerSide\Event;
|
| 29 |
+
use FacebookAds\Object\ServerSide\UserData;
|
| 30 |
Â
|
| 31 |
Â
class FacebookWordpressNinjaForms extends FacebookWordpressIntegrationBase {
|
| 32 |
Â
const PLUGIN_FILE = 'ninja-forms/ninja-forms.php';
|
| 36 |
Â
add_action(
|
| 37 |
Â
'ninja_forms_submission_actions',
|
| 38 |
Â
array(__CLASS__, 'injectLeadEvent'),
|
| 39 |
+
10, 3);
|
| 40 |
Â
}
|
| 41 |
Â
|
| 42 |
+
public static function injectLeadEvent($actions, $form_cache, $form_data) {
|
| 43 |
Â
if (FacebookPluginUtils::isAdmin()) {
|
| 44 |
Â
return $actions;
|
| 45 |
Â
}
|
| 46 |
Â
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 47 |
Â
foreach ($actions as $key => $action) {
|
| 48 |
Â
if (!isset($action['settings']) || !isset($action['settings']['type'])) {
|
| 49 |
Â
continue;
|
| 56 |
Â
|
| 57 |
Â
// inject code when form is submitted successfully
|
| 58 |
Â
if ($type == 'successmessage') {
|
| 59 |
+
$event = ServerEventFactory::safeCreateEvent(
|
| 60 |
+
'Lead',
|
| 61 |
+
array(__CLASS__, 'readFormData'),
|
| 62 |
+
array($form_data)
|
| 63 |
+
);
|
| 64 |
+
FacebookServerSideEvent::getInstance()->track($event);
|
| 65 |
+
|
| 66 |
+
$pixel_code = PixelRenderer::render(array($event), self::TRACKING_NAME);
|
| 67 |
+
$code = sprintf("
|
| 68 |
+
<!-- Facebook Pixel Event Code -->
|
| 69 |
+
%s
|
| 70 |
+
<!-- End Facebook Pixel Event Code -->
|
| 71 |
+
", $pixel_code);
|
| 72 |
+
|
| 73 |
Â
$action['settings']['success_msg'] .= $code;
|
| 74 |
Â
$actions[$key] = $action;
|
| 75 |
Â
}
|
| 77 |
Â
|
| 78 |
Â
return $actions;
|
| 79 |
Â
}
|
| 80 |
+
|
| 81 |
+
public static function readFormData($form_data) {
|
| 82 |
+
if (empty($form_data)) {
|
| 83 |
+
return array();
|
| 84 |
+
}
|
| 85 |
+
|
| 86 |
+
$name = self::getName($form_data);
|
| 87 |
+
return array(
|
| 88 |
+
'email' => self::getEmail($form_data),
|
| 89 |
+
'first_name' => $name[0],
|
| 90 |
+
'last_name' => $name[1]
|
| 91 |
+
);
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
private static function getEmail($form_data) {
|
| 95 |
+
return self::getField($form_data, 'email');
|
| 96 |
+
}
|
| 97 |
+
|
| 98 |
+
private static function getName($form_data) {
|
| 99 |
+
return ServerEventFactory::splitName(self::getField($form_data, 'name'));
|
| 100 |
+
}
|
| 101 |
+
|
| 102 |
+
private static function getField($form_data, $key) {
|
| 103 |
+
if (empty($form_data['fields'])) {
|
| 104 |
+
return null;
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
foreach ($form_data['fields'] as $field) {
|
| 108 |
+
if ($field['key'] == $key) {
|
| 109 |
+
return $field['value'];
|
| 110 |
+
}
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
return null;
|
| 114 |
+
}
|
| 115 |
Â
}
|
integration/FacebookWordpressWPECommerce.php
CHANGED
|
@@ -21,6 +21,9 @@ defined('ABSPATH') or die('Direct access not allowed');
|
|
| 21 |
Â
|
| 22 |
Â
use FacebookPixelPlugin\Core\FacebookPixel;
|
| 23 |
Â
use FacebookPixelPlugin\Core\FacebookPluginUtils;
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 24 |
Â
|
| 25 |
Â
class FacebookWordpressWPECommerce extends FacebookWordpressIntegrationBase {
|
| 26 |
Â
const PLUGIN_FILE = 'wp-e-commerce/wp-e-commerce.php';
|
|
@@ -48,10 +51,16 @@ class FacebookWordpressWPECommerce extends FacebookWordpressIntegrationBase {
|
|
| 48 |
Â
if (FacebookPluginUtils::isAdmin()) {
|
| 49 |
Â
return $response;
|
| 50 |
Â
}
|
|
Â
|
|
| 51 |
Â
$product_id = $response['product_id'];
|
| 52 |
-
$
|
| 53 |
-
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 54 |
Â
|
|
Â
|
|
| 55 |
Â
$code = sprintf("
|
| 56 |
Â
<!-- Facebook Pixel Event Code -->
|
| 57 |
Â
%s
|
|
@@ -67,24 +76,39 @@ class FacebookWordpressWPECommerce extends FacebookWordpressIntegrationBase {
|
|
| 67 |
Â
return;
|
| 68 |
Â
}
|
| 69 |
Â
|
| 70 |
-
$
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 71 |
Â
printf("
|
| 72 |
Â
<!-- Facebook Pixel Event Code -->
|
| 73 |
-
<script>
|
| 74 |
Â
%s
|
| 75 |
-
</script>
|
| 76 |
Â
<!-- End Facebook Pixel Event Code -->
|
| 77 |
Â
",
|
| 78 |
Â
$code);
|
| 79 |
Â
}
|
| 80 |
Â
|
| 81 |
-
public static function injectPurchaseEvent(
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 82 |
Â
if (FacebookPluginUtils::isAdmin() || !$display_to_screen) {
|
| 83 |
Â
return;
|
| 84 |
Â
}
|
| 85 |
Â
|
| 86 |
-
$
|
| 87 |
-
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 88 |
Â
|
| 89 |
Â
printf("
|
| 90 |
Â
<!-- Facebook Pixel Event Code -->
|
|
@@ -94,29 +118,32 @@ class FacebookWordpressWPECommerce extends FacebookWordpressIntegrationBase {
|
|
| 94 |
Â
$code);
|
| 95 |
Â
}
|
| 96 |
Â
|
| 97 |
-
|
|
Â
|
|
|
Â
|
|
| 98 |
Â
$cart_items = $purchase_log_object->get_items();
|
| 99 |
Â
$total_price = $purchase_log_object->get_total();
|
| 100 |
-
$currency = function_exists('\wpsc_get_currency_code')
|
| 101 |
-
|
| 102 |
Â
|
|
Â
|
|
| 103 |
Â
foreach ($cart_items as $item) {
|
| 104 |
Â
// This is for backwards compatibility
|
| 105 |
Â
$item_array = (array) $item;
|
| 106 |
Â
$item_ids[] = $item_array['prodid'];
|
| 107 |
Â
}
|
| 108 |
Â
|
| 109 |
-
$
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
'value' => $total_price,
|
| 114 |
-
);
|
| 115 |
Â
|
| 116 |
-
return $
|
| 117 |
Â
}
|
| 118 |
Â
|
| 119 |
-
|
|
Â
|
|
|
Â
|
|
| 120 |
Â
global $wpsc_cart;
|
| 121 |
Â
$cart_items = $wpsc_cart->get_items();
|
| 122 |
Â
foreach ($cart_items as $item) {
|
|
@@ -126,13 +153,34 @@ class FacebookWordpressWPECommerce extends FacebookWordpressIntegrationBase {
|
|
| 126 |
Â
}
|
| 127 |
Â
}
|
| 128 |
Â
|
| 129 |
-
$
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 135 |
Â
|
| 136 |
-
return $
|
| 137 |
Â
}
|
| 138 |
Â
}
|
| 21 |
Â
|
| 22 |
Â
use FacebookPixelPlugin\Core\FacebookPixel;
|
| 23 |
Â
use FacebookPixelPlugin\Core\FacebookPluginUtils;
|
| 24 |
+
use FacebookPixelPlugin\Core\ServerEventFactory;
|
| 25 |
+
use FacebookPixelPlugin\Core\FacebookServerSideEvent;
|
| 26 |
+
use FacebookPixelPlugin\Core\PixelRenderer;
|
| 27 |
Â
|
| 28 |
Â
class FacebookWordpressWPECommerce extends FacebookWordpressIntegrationBase {
|
| 29 |
Â
const PLUGIN_FILE = 'wp-e-commerce/wp-e-commerce.php';
|
| 51 |
Â
if (FacebookPluginUtils::isAdmin()) {
|
| 52 |
Â
return $response;
|
| 53 |
Â
}
|
| 54 |
+
|
| 55 |
Â
$product_id = $response['product_id'];
|
| 56 |
+
$server_event = ServerEventFactory::safeCreateEvent(
|
| 57 |
+
'AddToCart',
|
| 58 |
+
array(__CLASS__, 'createAddToCartEvent'),
|
| 59 |
+
array($product_id)
|
| 60 |
+
);
|
| 61 |
+
FacebookServerSideEvent::getInstance()->track($server_event);
|
| 62 |
Â
|
| 63 |
+
$code = PixelRenderer::render(array($server_event), self::TRACKING_NAME);
|
| 64 |
Â
$code = sprintf("
|
| 65 |
Â
<!-- Facebook Pixel Event Code -->
|
| 66 |
Â
%s
|
| 76 |
Â
return;
|
| 77 |
Â
}
|
| 78 |
Â
|
| 79 |
+
$server_event = ServerEventFactory::safeCreateEvent(
|
| 80 |
+
'InitiateCheckout',
|
| 81 |
+
array(__CLASS__, 'createInitiateCheckoutEvent'),
|
| 82 |
+
array()
|
| 83 |
+
);
|
| 84 |
+
FacebookServerSideEvent::getInstance()->track($server_event);
|
| 85 |
+
|
| 86 |
+
$code = PixelRenderer::render(array($server_event), self::TRACKING_NAME);
|
| 87 |
Â
printf("
|
| 88 |
Â
<!-- Facebook Pixel Event Code -->
|
|
Â
|
|
| 89 |
Â
%s
|
|
Â
|
|
| 90 |
Â
<!-- End Facebook Pixel Event Code -->
|
| 91 |
Â
",
|
| 92 |
Â
$code);
|
| 93 |
Â
}
|
| 94 |
Â
|
| 95 |
+
public static function injectPurchaseEvent(
|
| 96 |
+
$purchase_log_object,
|
| 97 |
+
$session_id,
|
| 98 |
+
$display_to_screen)
|
| 99 |
+
{
|
| 100 |
Â
if (FacebookPluginUtils::isAdmin() || !$display_to_screen) {
|
| 101 |
Â
return;
|
| 102 |
Â
}
|
| 103 |
Â
|
| 104 |
+
$server_event = ServerEventFactory::safeCreateEvent(
|
| 105 |
+
'Purchase',
|
| 106 |
+
array(__CLASS__, 'createPurchaseEvent'),
|
| 107 |
+
array($purchase_log_object)
|
| 108 |
+
);
|
| 109 |
+
FacebookServerSideEvent::getInstance()->track($server_event);
|
| 110 |
+
|
| 111 |
+
$code = PixelRenderer::render(array($server_event), self::TRACKING_NAME);
|
| 112 |
Â
|
| 113 |
Â
printf("
|
| 114 |
Â
<!-- Facebook Pixel Event Code -->
|
| 118 |
Â
$code);
|
| 119 |
Â
}
|
| 120 |
Â
|
| 121 |
+
public static function createPurchaseEvent($purchase_log_object) {
|
| 122 |
+
$event_data = FacebookPluginUtils::getLoggedInUserInfo();
|
| 123 |
+
|
| 124 |
Â
$cart_items = $purchase_log_object->get_items();
|
| 125 |
Â
$total_price = $purchase_log_object->get_total();
|
| 126 |
+
$currency = function_exists('\wpsc_get_currency_code')
|
| 127 |
+
? \wpsc_get_currency_code() : '';
|
| 128 |
Â
|
| 129 |
+
$item_ids = array();
|
| 130 |
Â
foreach ($cart_items as $item) {
|
| 131 |
Â
// This is for backwards compatibility
|
| 132 |
Â
$item_array = (array) $item;
|
| 133 |
Â
$item_ids[] = $item_array['prodid'];
|
| 134 |
Â
}
|
| 135 |
Â
|
| 136 |
+
$event_data['content_ids'] = $item_ids;
|
| 137 |
+
$event_data['content_type'] = 'product';
|
| 138 |
+
$event_data['currency'] = $currency;
|
| 139 |
+
$event_data['value'] = $total_price;
|
|
Â
|
|
|
Â
|
|
| 140 |
Â
|
| 141 |
+
return $event_data;
|
| 142 |
Â
}
|
| 143 |
Â
|
| 144 |
+
public static function createAddToCartEvent($product_id) {
|
| 145 |
+
$event_data = FacebookPluginUtils::getLoggedInUserInfo();
|
| 146 |
+
|
| 147 |
Â
global $wpsc_cart;
|
| 148 |
Â
$cart_items = $wpsc_cart->get_items();
|
| 149 |
Â
foreach ($cart_items as $item) {
|
| 153 |
Â
}
|
| 154 |
Â
}
|
| 155 |
Â
|
| 156 |
+
$event_data['content_ids'] = array($product_id);
|
| 157 |
+
$event_data['content_type'] = 'product';
|
| 158 |
+
$event_data['currency'] =
|
| 159 |
+
function_exists('\wpsc_get_currency_code')
|
| 160 |
+
? \wpsc_get_currency_code() : '';
|
| 161 |
+
$event_data['value'] = $unit_price;
|
| 162 |
+
|
| 163 |
+
return $event_data;
|
| 164 |
+
}
|
| 165 |
+
|
| 166 |
+
public static function createInitiateCheckoutEvent() {
|
| 167 |
+
$event_data = FacebookPluginUtils::getLoggedInUserInfo();
|
| 168 |
+
$content_ids = array();
|
| 169 |
+
|
| 170 |
+
$value = 0;
|
| 171 |
+
global $wpsc_cart;
|
| 172 |
+
$cart_items = $wpsc_cart->get_items();
|
| 173 |
+
foreach ($cart_items as $item) {
|
| 174 |
+
$content_ids[] = $item->product_id;
|
| 175 |
+
$value += $item->unit_price;
|
| 176 |
+
}
|
| 177 |
+
|
| 178 |
+
$event_data['currency'] =
|
| 179 |
+
function_exists('\wpsc_get_currency_code')
|
| 180 |
+
? \wpsc_get_currency_code() : '';
|
| 181 |
+
$event_data['value'] = $value;
|
| 182 |
+
$event_data['content_ids'] = $content_ids;
|
| 183 |
Â
|
| 184 |
+
return $event_data;
|
| 185 |
Â
}
|
| 186 |
Â
}
|
integration/FacebookWordpressWPForms.php
CHANGED
|
@@ -21,46 +21,102 @@ defined('ABSPATH') or die('Direct access not allowed');
|
|
| 21 |
Â
|
| 22 |
Â
use FacebookPixelPlugin\Core\FacebookPixel;
|
| 23 |
Â
use FacebookPixelPlugin\Core\FacebookPluginUtils;
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 24 |
Â
|
| 25 |
Â
class FacebookWordpressWPForms extends FacebookWordpressIntegrationBase {
|
| 26 |
Â
const PLUGIN_FILE = 'wpforms-lite/wpforms.php';
|
| 27 |
Â
const TRACKING_NAME = 'wpforms-lite';
|
| 28 |
Â
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 33 |
Â
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
Â
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 44 |
Â
}
|
| 45 |
Â
|
| 46 |
-
public static function injectLeadEvent(
|
| 47 |
Â
if (FacebookPluginUtils::isAdmin()) {
|
| 48 |
Â
return;
|
| 49 |
Â
}
|
| 50 |
Â
|
| 51 |
-
$
|
| 52 |
-
$pixel_code =
|
| 53 |
-
$listener_code = sprintf(
|
| 54 |
-
self::$leadJS,
|
| 55 |
-
$pixel_code);
|
| 56 |
Â
|
| 57 |
Â
printf("
|
| 58 |
Â
<!-- Facebook Pixel Event Code -->
|
| 59 |
-
<script>
|
| 60 |
Â
%s
|
| 61 |
-
</script>
|
| 62 |
Â
<!-- End Facebook Pixel Event Code -->
|
| 63 |
Â
",
|
| 64 |
-
$
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 65 |
Â
}
|
| 66 |
Â
}
|
| 21 |
Â
|
| 22 |
Â
use FacebookPixelPlugin\Core\FacebookPixel;
|
| 23 |
Â
use FacebookPixelPlugin\Core\FacebookPluginUtils;
|
| 24 |
+
use FacebookPixelPlugin\Core\FacebookServerSideEvent;
|
| 25 |
+
use FacebookPixelPlugin\Core\FacebookWordPressOptions;
|
| 26 |
+
use FacebookPixelPlugin\Core\ServerEventFactory;
|
| 27 |
+
use FacebookPixelPlugin\Core\PixelRenderer;
|
| 28 |
+
use FacebookAds\Object\ServerSide\Event;
|
| 29 |
+
use FacebookAds\Object\ServerSide\UserData;
|
| 30 |
Â
|
| 31 |
Â
class FacebookWordpressWPForms extends FacebookWordpressIntegrationBase {
|
| 32 |
Â
const PLUGIN_FILE = 'wpforms-lite/wpforms.php';
|
| 33 |
Â
const TRACKING_NAME = 'wpforms-lite';
|
| 34 |
Â
|
| 35 |
+
public static function injectPixelCode() {
|
| 36 |
+
add_action(
|
| 37 |
+
'wpforms_process_before',
|
| 38 |
+
array(__CLASS__, 'trackEvent'),
|
| 39 |
+
20,
|
| 40 |
+
2
|
| 41 |
+
);
|
| 42 |
+
}
|
| 43 |
Â
|
| 44 |
+
public static function trackEvent($entry, $form_data) {
|
| 45 |
+
if (FacebookPluginUtils::isAdmin()) {
|
| 46 |
+
return;
|
| 47 |
+
}
|
| 48 |
Â
|
| 49 |
+
$server_event = ServerEventFactory::safeCreateEvent(
|
| 50 |
+
'Lead',
|
| 51 |
+
array(__CLASS__, 'readFormData'),
|
| 52 |
+
array($entry, $form_data)
|
| 53 |
+
);
|
| 54 |
+
FacebookServerSideEvent::getInstance()->track($server_event);
|
| 55 |
+
|
| 56 |
+
add_action(
|
| 57 |
+
'wp_footer',
|
| 58 |
+
array(__CLASS__, 'injectLeadEvent'),
|
| 59 |
+
20
|
| 60 |
+
);
|
| 61 |
Â
}
|
| 62 |
Â
|
| 63 |
+
public static function injectLeadEvent() {
|
| 64 |
Â
if (FacebookPluginUtils::isAdmin()) {
|
| 65 |
Â
return;
|
| 66 |
Â
}
|
| 67 |
Â
|
| 68 |
+
$events = FacebookServerSideEvent::getInstance()->getTrackedEvents();
|
| 69 |
+
$pixel_code = PixelRenderer::render($events, self::TRACKING_NAME);
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 70 |
Â
|
| 71 |
Â
printf("
|
| 72 |
Â
<!-- Facebook Pixel Event Code -->
|
|
Â
|
|
| 73 |
Â
%s
|
|
Â
|
|
| 74 |
Â
<!-- End Facebook Pixel Event Code -->
|
| 75 |
Â
",
|
| 76 |
+
$pixel_code);
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
public static function readFormData($entry, $form_data) {
|
| 80 |
+
if (empty($entry) || empty($form_data)) {
|
| 81 |
+
return array();
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
return array(
|
| 85 |
+
'email' => self::getEmail($entry, $form_data),
|
| 86 |
+
'first_name' => self::getFirstName($entry, $form_data),
|
| 87 |
+
'last_name' => self::getLastName($entry, $form_data)
|
| 88 |
+
);
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
private static function getEmail($entry, $form_data) {
|
| 92 |
+
return self::getField($entry, $form_data, 'email');
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
private static function getFirstName($entry, $form_data) {
|
| 96 |
+
return self::getField($entry, $form_data, 'name', 'first');
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
private static function getLastName($entry, $form_data) {
|
| 100 |
+
return self::getField($entry, $form_data, 'name', 'last');
|
| 101 |
+
}
|
| 102 |
+
|
| 103 |
+
private static function getField($entry, $form_data, $type, $label = null) {
|
| 104 |
+
if (empty($form_data['fields'])) {
|
| 105 |
+
return null;
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
foreach ($form_data['fields'] as $field) {
|
| 109 |
+
if ($field['type'] == $type) {
|
| 110 |
+
if (!empty($entry['fields'])) {
|
| 111 |
+
if (!empty($label)) {
|
| 112 |
+
return $entry['fields'][$field['id']][$label];
|
| 113 |
+
} else {
|
| 114 |
+
return $entry['fields'][$field['id']];
|
| 115 |
+
}
|
| 116 |
+
}
|
| 117 |
+
}
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
return null;
|
| 121 |
Â
}
|
| 122 |
Â
}
|
integration/IntegrationUtils.php
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?php
|
| 2 |
+
/*
|
| 3 |
+
* Copyright (C) 2017-present, Facebook, Inc.
|
| 4 |
+
*
|
| 5 |
+
* This program is free software; you can redistribute it and/or modify
|
| 6 |
+
* it under the terms of the GNU General Public License as published by
|
| 7 |
+
* the Free Software Foundation; version 2 of the License.
|
| 8 |
+
* This program is distributed in the hope that it will be useful,
|
| 9 |
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| 10 |
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| 11 |
+
* GNU General Public License for more details.
|
| 12 |
+
*/
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* @package FacebookPixelPlugin
|
| 16 |
+
*/
|
| 17 |
+
|
| 18 |
+
namespace FacebookPixelPlugin\Integration;
|
| 19 |
+
|
| 20 |
+
defined('ABSPATH') or die('Direct access not allowed');
|
| 21 |
+
|
| 22 |
+
class IntegrationUtils {
|
| 23 |
+
public static function getFormidableFormsEntryValues($entry_id) {
|
| 24 |
+
return new \FrmEntryValues($entry_id);
|
| 25 |
+
}
|
| 26 |
+
}
|
languages/official-facebook-pixel-ar_AR.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-cs_CZ.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-da_DK.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-de_DE.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-en_GB.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-es_ES.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-es_LA.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-fi_FI.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-fr_CA.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-fr_FR.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-he_IL.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-it_IT.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-ja_JP.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-ko_KR.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-nb_NO.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-nl_NL.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-pl_PL.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-pt_BR.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-pt_PT.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-ru_RU.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-sv_SE.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-th_TH.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-pixel\n"
|
| 7 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 8 |
Â
"PO-Revision-Date: 2018-11-28 17:37-0800\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-pixel\n"
|
| 7 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 8 |
Â
"PO-Revision-Date: 2018-11-28 17:37-0800\n"
|
languages/official-facebook-pixel-tr_TR.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-vi_VN.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-zh_CN.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel-zh_TW.po
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
languages/official-facebook-pixel.pot
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
# This file is distributed under the same license as the Official Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
-
"Project-Id-Version: Official Facebook Pixel
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
| 2 |
Â
# This file is distributed under the same license as the Official Facebook Pixel package.
|
| 3 |
Â
msgid ""
|
| 4 |
Â
msgstr ""
|
| 5 |
+
"Project-Id-Version: Official Facebook Pixel 2.0.0\n"
|
| 6 |
Â
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/official-facebook-"
|
| 7 |
Â
"pixel\n"
|
| 8 |
Â
"POT-Creation-Date: 2018-11-29 01:26:28+00:00\n"
|
readme.txt
CHANGED
|
@@ -4,18 +4,16 @@ Tags: Facebook, Facebook Conversion Pixel, Facebook Pixel, Facebook Pixel Events
|
|
| 4 |
Â
Requires at least: 4.4
|
| 5 |
Â
Tested up to: 5.3
|
| 6 |
Â
Requires PHP: 5.3
|
| 7 |
-
Stable tag:
|
| 8 |
Â
License: GPLv2
|
| 9 |
Â
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 10 |
Â
|
| 11 |
Â
Grow your business with Official Facebook Pixel!
|
| 12 |
Â
|
| 13 |
Â
== Description ==
|
| 14 |
-
|
| 15 |
Â
|
| 16 |
-
This plugin
|
| 17 |
-
|
| 18 |
-
Current plugins that we support:
|
| 19 |
Â
* Caldera Forms
|
| 20 |
Â
* Contact Form 7
|
| 21 |
Â
* Easy Digital Downloads
|
|
@@ -51,7 +49,14 @@ If you get stuck, or have any questions, you can ask for help in the [Official F
|
|
| 51 |
Â
Of course! This plugin is open sourced on the Facebook Incubator GitHub. You can find the code and contribution instructions in the [plugin repository](https://github.com/facebookincubator/Facebook-Pixel-for-WordPress).
|
| 52 |
Â
|
| 53 |
Â
== Changelog ==
|
| 54 |
-
=
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 55 |
Â
* remove get_called_class from the codebase
|
| 56 |
Â
|
| 57 |
Â
= 2019-02-10 version 1.7.24 =
|
| 4 |
Â
Requires at least: 4.4
|
| 5 |
Â
Tested up to: 5.3
|
| 6 |
Â
Requires PHP: 5.3
|
| 7 |
+
Stable tag: 2.0.0
|
| 8 |
Â
License: GPLv2
|
| 9 |
Â
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 10 |
Â
|
| 11 |
Â
Grow your business with Official Facebook Pixel!
|
| 12 |
Â
|
| 13 |
Â
== Description ==
|
| 14 |
+
This plugin will install a Facebook Pixel for your page so you can capture the actions people take when they interact with your page, such as Lead, ViewContent, AddToCart, InitiateCheckout and Purchase events. Version 2.0.0 also includes support for the server-side API, which lets you send events directly from your page's server so you can capture a more of these events when they happen. This can help you better understand your customer's journey from the moment they show interest in your business to the moment they complete a conversion. You can use this information to create ad campaigns that are relevant to your audience. [Learn More](https://www.facebook.com/business/learn/facebook-ads-pixel)
|
| 15 |
Â
|
| 16 |
+
This plugin also includes built-in support for these other WordPress plugins:
|
|
Â
|
|
|
Â
|
|
| 17 |
Â
* Caldera Forms
|
| 18 |
Â
* Contact Form 7
|
| 19 |
Â
* Easy Digital Downloads
|
| 49 |
Â
Of course! This plugin is open sourced on the Facebook Incubator GitHub. You can find the code and contribution instructions in the [plugin repository](https://github.com/facebookincubator/Facebook-Pixel-for-WordPress).
|
| 50 |
Â
|
| 51 |
Â
== Changelog ==
|
| 52 |
+
= 2020-03-09 version 2.0.0 =
|
| 53 |
+
* Added support for Server-Side API [Learn More](https://developers.facebook.com/docs/marketing-api/server-side-api)
|
| 54 |
+
|
| 55 |
+
= 2019-12-02 version 1.8.0 =
|
| 56 |
+
* Support for WordPress 5.3
|
| 57 |
+
* Fix Gravity Forms confirmation redirect
|
| 58 |
+
|
| 59 |
+
= 2019-02-18 version 1.7.25 =
|
| 60 |
Â
* remove get_called_class from the codebase
|
| 61 |
Â
|
| 62 |
Â
= 2019-02-10 version 1.7.24 =
|
vendor/autoload.php
CHANGED
|
@@ -4,4 +4,4 @@
|
|
| 4 |
Â
|
| 5 |
Â
require_once __DIR__ . '/composer/autoload_real.php';
|
| 6 |
Â
|
| 7 |
-
return
|
| 4 |
Â
|
| 5 |
Â
require_once __DIR__ . '/composer/autoload_real.php';
|
| 6 |
Â
|
| 7 |
+
return ComposerAutoloaderInite233542683f10f1b46247367fb9e8c6c::getLoader();
|
vendor/composer/autoload_classmap.php
CHANGED
|
@@ -6,4 +6,5 @@ $vendorDir = dirname(dirname(__FILE__));
|
|
| 6 |
Â
$baseDir = dirname($vendorDir);
|
| 7 |
Â
|
| 8 |
Â
return array(
|
|
Â
|
|
| 9 |
Â
);
|
| 6 |
Â
$baseDir = dirname($vendorDir);
|
| 7 |
Â
|
| 8 |
Â
return array(
|
| 9 |
+
'WP_Async_Task' => $vendorDir . '/techcrunch/wp-async-task/wp-async-task.php',
|
| 10 |
Â
);
|
vendor/composer/autoload_psr4.php
CHANGED
|
@@ -9,4 +9,5 @@ return array(
|
|
| 9 |
Â
'FacebookPixelPlugin\\Integration\\' => array($baseDir . '/integration'),
|
| 10 |
Â
'FacebookPixelPlugin\\Core\\' => array($baseDir . '/core'),
|
| 11 |
Â
'FacebookPixelPlugin\\' => array($baseDir . '/'),
|
|
Â
|
|
| 12 |
Â
);
|
| 9 |
Â
'FacebookPixelPlugin\\Integration\\' => array($baseDir . '/integration'),
|
| 10 |
Â
'FacebookPixelPlugin\\Core\\' => array($baseDir . '/core'),
|
| 11 |
Â
'FacebookPixelPlugin\\' => array($baseDir . '/'),
|
| 12 |
+
'FacebookAds\\' => array($vendorDir . '/facebook/php-business-sdk/src/FacebookAds'),
|
| 13 |
Â
);
|
vendor/composer/autoload_real.php
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
Â
|
| 3 |
Â
// autoload_real.php @generated by Composer
|
| 4 |
Â
|
| 5 |
-
class
|
| 6 |
Â
{
|
| 7 |
Â
private static $loader;
|
| 8 |
Â
|
|
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit48c7cb6b37b5ec317810ba8fa4c1ce53
|
|
| 19 |
Â
return self::$loader;
|
| 20 |
Â
}
|
| 21 |
Â
|
| 22 |
-
spl_autoload_register(array('
|
| 23 |
Â
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
| 24 |
-
spl_autoload_unregister(array('
|
| 25 |
Â
|
| 26 |
Â
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
| 27 |
Â
if ($useStaticLoader) {
|
| 28 |
Â
require_once __DIR__ . '/autoload_static.php';
|
| 29 |
Â
|
| 30 |
-
call_user_func(\Composer\Autoload\
|
| 31 |
Â
} else {
|
| 32 |
Â
$map = require __DIR__ . '/autoload_namespaces.php';
|
| 33 |
Â
foreach ($map as $namespace => $path) {
|
| 2 |
Â
|
| 3 |
Â
// autoload_real.php @generated by Composer
|
| 4 |
Â
|
| 5 |
+
class ComposerAutoloaderInite233542683f10f1b46247367fb9e8c6c
|
| 6 |
Â
{
|
| 7 |
Â
private static $loader;
|
| 8 |
Â
|
| 19 |
Â
return self::$loader;
|
| 20 |
Â
}
|
| 21 |
Â
|
| 22 |
+
spl_autoload_register(array('ComposerAutoloaderInite233542683f10f1b46247367fb9e8c6c', 'loadClassLoader'), true, true);
|
| 23 |
Â
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
| 24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInite233542683f10f1b46247367fb9e8c6c', 'loadClassLoader'));
|
| 25 |
Â
|
| 26 |
Â
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
| 27 |
Â
if ($useStaticLoader) {
|
| 28 |
Â
require_once __DIR__ . '/autoload_static.php';
|
| 29 |
Â
|
| 30 |
+
call_user_func(\Composer\Autoload\ComposerStaticInite233542683f10f1b46247367fb9e8c6c::getInitializer($loader));
|
| 31 |
Â
} else {
|
| 32 |
Â
$map = require __DIR__ . '/autoload_namespaces.php';
|
| 33 |
Â
foreach ($map as $namespace => $path) {
|
vendor/composer/autoload_static.php
CHANGED
|
@@ -4,7 +4,7 @@
|
|
| 4 |
Â
|
| 5 |
Â
namespace Composer\Autoload;
|
| 6 |
Â
|
| 7 |
-
class
|
| 8 |
Â
{
|
| 9 |
Â
public static $prefixLengthsPsr4 = array (
|
| 10 |
Â
'F' =>
|
|
@@ -12,6 +12,7 @@ class ComposerStaticInit48c7cb6b37b5ec317810ba8fa4c1ce53
|
|
| 12 |
Â
'FacebookPixelPlugin\\Integration\\' => 32,
|
| 13 |
Â
'FacebookPixelPlugin\\Core\\' => 25,
|
| 14 |
Â
'FacebookPixelPlugin\\' => 20,
|
|
Â
|
|
| 15 |
Â
),
|
| 16 |
Â
);
|
| 17 |
Â
|
|
@@ -28,13 +29,22 @@ class ComposerStaticInit48c7cb6b37b5ec317810ba8fa4c1ce53
|
|
| 28 |
Â
array (
|
| 29 |
Â
0 => __DIR__ . '/../..' . '/',
|
| 30 |
Â
),
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
| 31 |
Â
);
|
| 32 |
Â
|
| 33 |
Â
public static function getInitializer(ClassLoader $loader)
|
| 34 |
Â
{
|
| 35 |
Â
return \Closure::bind(function () use ($loader) {
|
| 36 |
-
$loader->prefixLengthsPsr4 =
|
| 37 |
-
$loader->prefixDirsPsr4 =
|
|
Â
|
|
| 38 |
Â
|
| 39 |
Â
}, null, ClassLoader::class);
|
| 40 |
Â
}
|
| 4 |
Â
|
| 5 |
Â
namespace Composer\Autoload;
|
| 6 |
Â
|
| 7 |
+
class ComposerStaticInite233542683f10f1b46247367fb9e8c6c
|
| 8 |
Â
{
|
| 9 |
Â
public static $prefixLengthsPsr4 = array (
|
| 10 |
Â
'F' =>
|
| 12 |
Â
'FacebookPixelPlugin\\Integration\\' => 32,
|
| 13 |
Â
'FacebookPixelPlugin\\Core\\' => 25,
|
| 14 |
Â
'FacebookPixelPlugin\\' => 20,
|
| 15 |
+
'FacebookAds\\' => 12,
|
| 16 |
Â
),
|
| 17 |
Â
);
|
| 18 |
Â
|
| 29 |
Â
array (
|
| 30 |
Â
0 => __DIR__ . '/../..' . '/',
|
| 31 |
Â
),
|
| 32 |
+
'FacebookAds\\' =>
|
| 33 |
+
array (
|
| 34 |
+
0 => __DIR__ . '/..' . '/facebook/php-business-sdk/src/FacebookAds',
|
| 35 |
+
),
|
| 36 |
+
);
|
| 37 |
+
|
| 38 |
+
public static $classMap = array (
|
| 39 |
+
'WP_Async_Task' => __DIR__ . '/..' . '/techcrunch/wp-async-task/wp-async-task.php',
|
| 40 |
Â
);
|
| 41 |
Â
|
| 42 |
Â
public static function getInitializer(ClassLoader $loader)
|
| 43 |
Â
{
|
| 44 |
Â
return \Closure::bind(function () use ($loader) {
|
| 45 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInite233542683f10f1b46247367fb9e8c6c::$prefixLengthsPsr4;
|
| 46 |
+
$loader->prefixDirsPsr4 = ComposerStaticInite233542683f10f1b46247367fb9e8c6c::$prefixDirsPsr4;
|
| 47 |
+
$loader->classMap = ComposerStaticInite233542683f10f1b46247367fb9e8c6c::$classMap;
|
| 48 |
Â
|
| 49 |
Â
}, null, ClassLoader::class);
|
| 50 |
Â
}
|
vendor/composer/installed.json
CHANGED
|
@@ -1 +1,94 @@
|
|
| 1 |
-
[
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"name": "facebook/php-business-sdk",
|
| 4 |
+
"version": "6.0.0",
|
| 5 |
+
"version_normalized": "6.0.0.0",
|
| 6 |
+
"source": {
|
| 7 |
+
"type": "git",
|
| 8 |
+
"url": "https://github.com/facebook/facebook-php-business-sdk.git",
|
| 9 |
+
"reference": "32c8678d3c50e0570b68d7cbb23062c16a5faf15"
|
| 10 |
+
},
|
| 11 |
+
"dist": {
|
| 12 |
+
"type": "zip",
|
| 13 |
+
"url": "https://api.github.com/repos/facebook/facebook-php-business-sdk/zipball/32c8678d3c50e0570b68d7cbb23062c16a5faf15",
|
| 14 |
+
"reference": "32c8678d3c50e0570b68d7cbb23062c16a5faf15",
|
| 15 |
+
"shasum": ""
|
| 16 |
+
},
|
| 17 |
+
"require-dev": {
|
| 18 |
+
"phpunit/phpunit": "~8",
|
| 19 |
+
"symfony/finder": "~2.6"
|
| 20 |
+
},
|
| 21 |
+
"time": "2020-02-03T20:06:10+00:00",
|
| 22 |
+
"type": "library",
|
| 23 |
+
"installation-source": "dist",
|
| 24 |
+
"autoload": {
|
| 25 |
+
"psr-4": {
|
| 26 |
+
"FacebookAds\\": "src/FacebookAds/"
|
| 27 |
+
}
|
| 28 |
+
},
|
| 29 |
+
"notification-url": "https://packagist.org/downloads/",
|
| 30 |
+
"description": "PHP SDK for Facebook Business",
|
| 31 |
+
"homepage": "https://developers.facebook.com/",
|
| 32 |
+
"keywords": [
|
| 33 |
+
"ads",
|
| 34 |
+
"business",
|
| 35 |
+
"facebook",
|
| 36 |
+
"instagram",
|
| 37 |
+
"page",
|
| 38 |
+
"sdk"
|
| 39 |
+
]
|
| 40 |
+
},
|
| 41 |
+
{
|
| 42 |
+
"name": "techcrunch/wp-async-task",
|
| 43 |
+
"version": "dev-master",
|
| 44 |
+
"version_normalized": "9999999-dev",
|
| 45 |
+
"source": {
|
| 46 |
+
"type": "git",
|
| 47 |
+
"url": "https://github.com/techcrunch/wp-async-task.git",
|
| 48 |
+
"reference": "9bdbbf9df4ff5179711bb58b9a2451296f6753dc"
|
| 49 |
+
},
|
| 50 |
+
"dist": {
|
| 51 |
+
"type": "zip",
|
| 52 |
+
"url": "https://api.github.com/repos/techcrunch/wp-async-task/zipball/9bdbbf9df4ff5179711bb58b9a2451296f6753dc",
|
| 53 |
+
"reference": "9bdbbf9df4ff5179711bb58b9a2451296f6753dc",
|
| 54 |
+
"shasum": ""
|
| 55 |
+
},
|
| 56 |
+
"require-dev": {
|
| 57 |
+
"10up/wp_mock": "dev-master",
|
| 58 |
+
"phpunit/phpunit": "*@stable"
|
| 59 |
+
},
|
| 60 |
+
"time": "2016-03-10T17:37:13+00:00",
|
| 61 |
+
"type": "wordpress-plugin",
|
| 62 |
+
"installation-source": "source",
|
| 63 |
+
"autoload": {
|
| 64 |
+
"classmap": [
|
| 65 |
+
"wp-async-task.php"
|
| 66 |
+
]
|
| 67 |
+
},
|
| 68 |
+
"notification-url": "https://packagist.org/downloads/",
|
| 69 |
+
"license": [
|
| 70 |
+
"MIT"
|
| 71 |
+
],
|
| 72 |
+
"authors": [
|
| 73 |
+
{
|
| 74 |
+
"name": "Alex Khadiwala",
|
| 75 |
+
"role": "developer"
|
| 76 |
+
},
|
| 77 |
+
{
|
| 78 |
+
"name": "Nicolas Vincent",
|
| 79 |
+
"role": "developer"
|
| 80 |
+
},
|
| 81 |
+
{
|
| 82 |
+
"name": "Eric Mann",
|
| 83 |
+
"email": "eric.mann@10up.com",
|
| 84 |
+
"role": "developer"
|
| 85 |
+
},
|
| 86 |
+
{
|
| 87 |
+
"name": "John P. Bloch",
|
| 88 |
+
"email": "john.bloch@10up.com",
|
| 89 |
+
"role": "developer"
|
| 90 |
+
}
|
| 91 |
+
],
|
| 92 |
+
"description": "Run asynchronous tasks for long-running operations in WordPress"
|
| 93 |
+
}
|
| 94 |
+
]
|
vendor/facebook/php-business-sdk/.github/ISSUE_TEMPLATE.md
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
# Facebook PHP Business SDK Issue
|
| 2 |
+
Since we want to handle bugs more efficiently, we've decided to close issue reporting in Github and move to our dedicated bug reporting channel.
|
| 3 |
+
If you encounter a bug with Business SDK (PHP), please report the issue at [our developer bug reporting channel](https://developers.facebook.com/support/bugs/).
|
vendor/facebook/php-business-sdk/.travis.yml
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
language: php
|
| 2 |
+
|
| 3 |
+
dist: trusty
|
| 4 |
+
|
| 5 |
+
php:
|
| 6 |
+
- 7.2
|
| 7 |
+
- 7.3
|
| 8 |
+
- 7.4
|
| 9 |
+
- hhvm
|
| 10 |
+
|
| 11 |
+
sudo: false
|
| 12 |
+
|
| 13 |
+
install:
|
| 14 |
+
- composer self-update && composer --version
|
| 15 |
+
- composer install --dev --prefer-source
|
| 16 |
+
|
| 17 |
+
script:
|
| 18 |
+
- vendor/bin/phpunit -v -c $PWD/test/phpunit-travis.xml --coverage-clover=coverage.clover
|
| 19 |
+
|
| 20 |
+
after_script:
|
| 21 |
+
- wget https://scrutinizer-ci.com/ocular.phar
|
| 22 |
+
- php ocular.phar code-coverage:upload --format=php-clover coverage.clover
|
| 23 |
+
|
| 24 |
+
notifications:
|
| 25 |
+
email: false
|
| 26 |
+
|
| 27 |
+
matrix:
|
| 28 |
+
fast_finish: true
|
| 29 |
+
allow_failures:
|
| 30 |
+
- php: hhvm
|
vendor/facebook/php-business-sdk/CHANGELOG.md
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
# Changelog
|
| 2 |
+
|
| 3 |
+
All notable changes to this project will be documented in this file.
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
## Unreleased
|
| 7 |
+
|
| 8 |
+
## v6.0.0
|
| 9 |
+
### Changed
|
| 10 |
+
- Graph API call upgrade to [v6.0](https://developers.facebook.com/docs/graph-api/changelog/version6.0)
|
| 11 |
+
|
| 12 |
+
## v5.0.5
|
| 13 |
+
### Added
|
| 14 |
+
- Server-side API added search_string to CustomData and fixed setLastName in UserData object.
|
| 15 |
+
|
| 16 |
+
## v5.0.3
|
| 17 |
+
### Added
|
| 18 |
+
- Added function `getHeaders` in RequestException class which provides header information
|
| 19 |
+
### Fixed
|
| 20 |
+
- Server Side API CustomData model normalization fix
|
| 21 |
+
|
| 22 |
+
## v5.0.2
|
| 23 |
+
|
| 24 |
+
### Added
|
| 25 |
+
- Added `CrashRepoter`, more context available [here](https://developers.facebook.com/docs/business-sdk/guides/crash-reports)
|
| 26 |
+
|
| 27 |
+
## v5.0.1
|
| 28 |
+
### Added
|
| 29 |
+
- Added strongly typed Server-Side API for Web (https://developers.facebook.com/docs/marketing-api/facebook-pixel/server-side-api/using-the-api)
|
| 30 |
+
|
| 31 |
+
## v5.0.0
|
| 32 |
+
### Changed
|
| 33 |
+
- Graph API call upgrade to [v5.0](https://developers.facebook.com/docs/graph-api/changelog/version5.0)
|
| 34 |
+
|
| 35 |
+
## v4.0.6
|
| 36 |
+
|
| 37 |
+
### Fixed
|
| 38 |
+
- Add back `source` param in `Adaccount->createAdVideo`.
|
| 39 |
+
|
| 40 |
+
## v4.0.5
|
| 41 |
+
|
| 42 |
+
### Fixed
|
| 43 |
+
- Introduce `addUsersMultiKey` and `removeUsersMultiKey` in `CustomAudience` to still allow add users to `CustomAudience` with multiple keys after `CustomAudienceMultiKey` been deprecated.
|
| 44 |
+
|
| 45 |
+
## v4.0.0
|
| 46 |
+
### Changed
|
| 47 |
+
- Graph API call upgrade to [v4.0](https://developers.facebook.com/docs/graph-api/changelog/version4.0)
|
| 48 |
+
|
| 49 |
+
## v3.3.1
|
| 50 |
+
### Changed
|
| 51 |
+
- Remove list of API call from Business SDK, any [these APIs](https://developers.facebook.com/docs/graph-api/changelog/4-30-2019-endpoint-deprecations) included in Business SDK will be deprecated.
|
| 52 |
+
|
| 53 |
+
## v3.3.0
|
| 54 |
+
### Changed
|
| 55 |
+
- Graph API call upgrade to [v3.3](https://developers.facebook.com/docs/graph-api/changelog/version3.3)
|
| 56 |
+
### Deprecated
|
| 57 |
+
- Deprecated `parentID` in `AbstractCrudObject`.
|
| 58 |
+
- Deprecated `CustomAudienceMultiKey`, use class `CustomAudience` instead.
|
| 59 |
+
- Deprecated functions `create`, `read`, `update` in `AbstractCrudObject`. Check out our [recommended way](https://github.com/facebook/facebook-php-business-sdk#object-classes) to make API call.
|
| 60 |
+
***`read` will reset the object fields, while `getSelf` will get a new object.*** For example :
|
| 61 |
+
```
|
| 62 |
+
$async_job = $adaccount->getInsightsAsync($fields, $params);
|
| 63 |
+
|
| 64 |
+
$async_job = $async_job->getSelf();
|
| 65 |
+
|
| 66 |
+
while (!$async_job->isComplete()) {
|
| 67 |
+
sleep(1);
|
| 68 |
+
$async_job = $async_job->getSelf();
|
| 69 |
+
}
|
| 70 |
+
```
|
| 71 |
+
|
vendor/facebook/php-business-sdk/CODE_OF_CONDUCT.md
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
# Code of Conduct
|
| 2 |
+
|
| 3 |
+
Facebook has adopted a Code of Conduct that we expect project participants to adhere to. Please [read the full text](https://code.facebook.com/codeofconduct) so that you can understand what actions will and will not be tolerated.
|
vendor/facebook/php-business-sdk/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
# Contributing to Facebook Ads API SDK for PHP
|
| 2 |
+
We want to make contributing to this project as easy and transparent as
|
| 3 |
+
possible.
|
| 4 |
+
|
| 5 |
+
## Code of Conduct
|
| 6 |
+
The code of conduct is described in [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md)
|
| 7 |
+
|
| 8 |
+
## Our Development Process
|
| 9 |
+
The Facebook Ads API SDK for PHP is currently developed in Facebook's internal
|
| 10 |
+
repositories and then exported out to GitHub by a Facebook team member. We invite
|
| 11 |
+
you to submit pull requests directly to GitHub and, after review, these can be
|
| 12 |
+
merged into the project.
|
| 13 |
+
|
| 14 |
+
## Pull Requests
|
| 15 |
+
We actively welcome your pull requests.
|
| 16 |
+
|
| 17 |
+
1. Fork the repo and create your branch from `master`.
|
| 18 |
+
2. If you've added code that should be tested, add tests.
|
| 19 |
+
3. If you've changed APIs, update the documentation.
|
| 20 |
+
4. Ensure the test suite passes.
|
| 21 |
+
5. Make sure your code lints.
|
| 22 |
+
6. If you haven't already, complete the Contributor License Agreement ("CLA").
|
| 23 |
+
|
| 24 |
+
## Contributor License Agreement ("CLA")
|
| 25 |
+
In order to accept your pull request, we need you to submit a CLA. You only need
|
| 26 |
+
to do this once to work on any of Facebook's open source projects.
|
| 27 |
+
|
| 28 |
+
Complete your CLA [here](https://code.facebook.com/cla)
|
| 29 |
+
|
| 30 |
+
## Issues
|
| 31 |
+
Since we want to handle bugs more efficiently, we encourage you report bug to
|
| 32 |
+
our dedicated bug reporting channel. If you encounter a bug with Business SDK
|
| 33 |
+
(PHP), please report the issue at
|
| 34 |
+
[our developer bug reporting channel](https://developers.facebook.com/support/bugs/).
|
| 35 |
+
|
| 36 |
+
Facebook has a [bounty program](https://www.facebook.com/whitehat/) for the safe
|
| 37 |
+
disclosure of security bugs. In those cases, please go through the process
|
| 38 |
+
outlined on that page
|
| 39 |
+
|
| 40 |
+
## Coding Style
|
| 41 |
+
Please follow [PHP Coding Standards](https://secure.phabricator.com/book/phabcontrib/article/php_coding_standards/)
|
| 42 |
+
|
| 43 |
+
## License
|
| 44 |
+
By contributing to Facebook Ads API SDK for PHP, you agree that your contributions
|
| 45 |
+
will be licensed under the LICENSE file in the root directory of this source tree.
|
vendor/facebook/php-business-sdk/DEVELOPER_GUIDE.md
ADDED
|
@@ -0,0 +1,495 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
# Facebook Ads SDK - Developer Guide
|
| 2 |
+
|
| 3 |
+
## Introduction
|
| 4 |
+
|
| 5 |
+
This guide assumes you have an app that has been whitelisted for the Facebook Ads API, that you have a fully working development environment with all required dependencies and that are ready to start coding. If you haven't done this, please see the [README](./README.md) file.
|
| 6 |
+
|
| 7 |
+
We also assume you are somewhat familiar with namespaces in PHP. If not, we recommend you take some time to read the [namespace basics](http://www.php.net/manual/en/language.namespaces.basics.php) in the PHP Manual.
|
| 8 |
+
|
| 9 |
+
You should also have the documentation for the [Facebook Marketing APIs](https://developers.facebook.com/docs/ads-api) available as you will need to refer to this to understand which combination of parameters are required for the different object types.
|
| 10 |
+
|
| 11 |
+
## Bootstrapping <a name="bootstrapping"></a>
|
| 12 |
+
The classes within the Facebook Ads SDK are designed to be included using an autoloader compliant with the [PSR-4](http://www.php-fig.org/psr/psr-4/). If you are using [Composer](https://getcomposer.org/) to include dependencies, you will find an implementation available within the vendor folder. This guide assumes you are using this autoloader.
|
| 13 |
+
|
| 14 |
+
```php
|
| 15 |
+
<?php
|
| 16 |
+
define('VENDOR_DIR', '/path/to/sdk/'); // Path to the Vendor directory
|
| 17 |
+
$loader = include VENDOR_DIR.'/vendor/autoload.php';
|
| 18 |
+
```
|
| 19 |
+
|
| 20 |
+
### Authentication <a name="authentication"></a>
|
| 21 |
+
To make any request to the Ads API, you will need to have a valid access token and the user has accepted the `ads_management` permission.
|
| 22 |
+
|
| 23 |
+
## The Api Object
|
| 24 |
+
|
| 25 |
+
The `FacebookAds\Api` object is the basis of the Ads SDK which encapsulates a `FacebookAds\Session` and is used to execute requests against the Graph API.
|
| 26 |
+
|
| 27 |
+
An easy to use init method is provided:
|
| 28 |
+
|
| 29 |
+
```php
|
| 30 |
+
use FacebookAds\Api;
|
| 31 |
+
|
| 32 |
+
// Set the default application to be used with this session and register an instance of the Api object
|
| 33 |
+
Api::init('<APP_ID>', '<APP_SECRET>', '<ACCESS_TOKEN>');
|
| 34 |
+
|
| 35 |
+
// The instace is now retrivable
|
| 36 |
+
$api = Api::instance();
|
| 37 |
+
```
|
| 38 |
+
|
| 39 |
+
### Making requests to the Graph <a name="making_requests"></a>
|
| 40 |
+
|
| 41 |
+
Generally you should not need to make requests to the Graph API directly as these calls are handled by the implementation of objects within the SDK. However, there may be some case where you do want to query the Graph directly. In this case, you can use the `call` method of the `Api` class which returns a `FacebookAds\Http\RequestInterface`, by default the registered class is `FacebookAds\Http\Request`:
|
| 42 |
+
|
| 43 |
+
```php
|
| 44 |
+
$response = $api->call(
|
| 45 |
+
'/61405622',
|
| 46 |
+
Api::HTTP_METHOD_GET,
|
| 47 |
+
array('fields'=>'name')
|
| 48 |
+
);
|
| 49 |
+
var_dump($response->getContent());
|
| 50 |
+
```
|
| 51 |
+
|
| 52 |
+
### Handling Multiple Access Tokens <a name="multiple_tokens"></a>
|
| 53 |
+
The first time an `Api` object is instantiated, we store a static reference to that object within the `Api` class and this is used as the default instance within the SDK. This saves you from having to pass around a reference to an `Api` instance within your application.
|
| 54 |
+
|
| 55 |
+
A common requirement amongst Facebook Ads API developers however is to be able to handle multiple sessions within a single script execution. For example, you may have a process which syncs updated objects for multiple app users into some local datastore.
|
| 56 |
+
|
| 57 |
+
To enable this, we provide two ways to manage sessions.
|
| 58 |
+
|
| 59 |
+
The first is by mutating the default instance used by the application. The default instance can be accessed using the method `Api::instance()`. You can also change the default instance using the static method `Api::setInstance($api)`.
|
| 60 |
+
|
| 61 |
+
The second is to explicitly define the `Api` instance you want to use when querying the Graph. This is achieved by passing an instance to the constructor of any class that extends from `Object\AbstractCrudObject`.
|
| 62 |
+
|
| 63 |
+
```php
|
| 64 |
+
use FacebookAds\Object\Ad;
|
| 65 |
+
$my_ad = new Ad($id, $parent_id=null, $api);
|
| 66 |
+
```
|
| 67 |
+
|
| 68 |
+
## Objects Types
|
| 69 |
+
|
| 70 |
+
|
| 71 |
+
### CRUD Objects
|
| 72 |
+
For any entity that can be directly queried from the Graph API we have provided classes which extend `Object\AbstractCrudObject`. This provides `create`, `read`, `update` and `delete` methods for the majority of these entities. However, in some cases the Graph API does not support all of these operations and you will receive an `\Exception` if you attempt to call an unsupported method.
|
| 73 |
+
|
| 74 |
+
When setting class variables on an object of this type we perform some basic validation to ensure the field is a valid field and an `\Exception` will be thrown if a field name is not found within the [field definition](#field_definition) for that class.
|
| 75 |
+
|
| 76 |
+
### Simple Objects
|
| 77 |
+
There is another set of entities which cannot be directly queried from the Graph such as an `AdPreview`. This type of object extends `Object\AbstractObject` which provides methods to access the response data.
|
| 78 |
+
|
| 79 |
+
### Field definitions <a name="field_definition"></a>
|
| 80 |
+
|
| 81 |
+
For each object type, we provide a class enumerating the available fields of that object. These can be found within the `FacebookAds\Object\Fields` namespace and provide a way to reference fields without using strings. You can alternatively use strings if you find this easier.
|
| 82 |
+
|
| 83 |
+
For example, you can set the data of an object using the field definitions in the following way:
|
| 84 |
+
|
| 85 |
+
```php
|
| 86 |
+
$someObject->setData(array(
|
| 87 |
+
MyObjectFields::ID => 1234,
|
| 88 |
+
MyObjectFields::NAME => 'My Name',
|
| 89 |
+
));
|
| 90 |
+
```
|
| 91 |
+
|
| 92 |
+
Alternatively, you can use the string equivalent:
|
| 93 |
+
|
| 94 |
+
```php
|
| 95 |
+
$someObject->setData(array(
|
| 96 |
+
'id'=>1234,
|
| 97 |
+
'name'=>'My Name',
|
| 98 |
+
));
|
| 99 |
+
```
|
| 100 |
+
|
| 101 |
+
Similarly the same applies for direct assignation:
|
| 102 |
+
|
| 103 |
+
```php
|
| 104 |
+
//Using field definitions:
|
| 105 |
+
$someObject->{SomeObjectFields::ID} = 123;
|
| 106 |
+
|
| 107 |
+
//Equivalent to using the variable name directly:
|
| 108 |
+
$someObject->id = 123;
|
| 109 |
+
```
|
| 110 |
+
|
| 111 |
+
### The Cursor Class
|
| 112 |
+
When requesting multiple objects from the Graph, responses may be returned in pages of data which can be traversed using cursors. We encapsulate this information into a `Cursor` class which represents the set of objects in the current page along with information about how to access subsequent pages of objects. This class implements the `\Iterable` and `\Countable` interfaces.
|
| 113 |
+
|
| 114 |
+
## Reading Objects
|
| 115 |
+
|
| 116 |
+
### Reading a single object
|
| 117 |
+
To read an object from the Graph you will need its `id`. By default, only the `id` field of an object is queried and you should specify when reading an object the fields you need. It is not recommended that you request all fields unless you require them all.
|
| 118 |
+
|
| 119 |
+
```php
|
| 120 |
+
use FacebookAds\Object\AdAccount;
|
| 121 |
+
use FacebookAds\Object\Fields\AdAccountFields;
|
| 122 |
+
|
| 123 |
+
$required_fields = array(
|
| 124 |
+
AdAccountFields::ID,
|
| 125 |
+
AdAccountFields::NAME,
|
| 126 |
+
AdAccountFields::DAILY_SPEND_LIMIT,
|
| 127 |
+
);
|
| 128 |
+
|
| 129 |
+
$adaccount = (new AdAccount($id))->read($required_fields);
|
| 130 |
+
```
|
| 131 |
+
See [Defining Default Fields](#default_fields) within the section about Extending the SDK for an example of how to avoid defining the fields you require every request.
|
| 132 |
+
|
| 133 |
+
|
| 134 |
+
### Reading multiple objects
|
| 135 |
+
We provide the static method `readIds($ids = array(...), $fields = array(...))` to enable you to request many objects of a single type and will return a `Cursor`:
|
| 136 |
+
|
| 137 |
+
```php
|
| 138 |
+
use FacebookAds\Object\AdAccount;
|
| 139 |
+
use FacebookAds\Object\Fields\AdAccountFields;
|
| 140 |
+
|
| 141 |
+
$required_fields = array(
|
| 142 |
+
AdAccountFields::ID,
|
| 143 |
+
AdAccountFields::NAME,
|
| 144 |
+
AdAccountFields::DAILY_SPEND_LIMIT,
|
| 145 |
+
);
|
| 146 |
+
$account_ids = array('act_x', 'act_y'...)
|
| 147 |
+
$adaccounts = AdAccount::readIds($account_ids, $required_fields);
|
| 148 |
+
foreach($adaccounts as $account) {
|
| 149 |
+
echo $account->id."\n";
|
| 150 |
+
}
|
| 151 |
+
```
|
| 152 |
+
|
| 153 |
+
## Creating Objects
|
| 154 |
+
|
| 155 |
+
When creating objects on the Graph, they are generally created by making a POST request to an edge of a parent object. For example, ads are created using the endpoint `https://graph.facebook.com/act_123123/ads`. Therefore when creating an object, you must know the `id` of the parent object which is generally the id of an AdAccount. You should consult the [Facebook Developer Documentation](https://developers.facebook.com/docs/ads-api) to see which parent object to use.
|
| 156 |
+
|
| 157 |
+
```php
|
| 158 |
+
use FacebookAds\Object\Ad;
|
| 159 |
+
use FacebookAds\Object\Fields\AdFields;
|
| 160 |
+
|
| 161 |
+
$account_id = 'act_123123';
|
| 162 |
+
$ad = new Ad($id=null, $account_id);
|
| 163 |
+
|
| 164 |
+
$ad->setData(array(
|
| 165 |
+
AdFields::NAME => 'My Test Ad',
|
| 166 |
+
AdFields::ADSET_ID => $adset_id,
|
| 167 |
+
));
|
| 168 |
+
|
| 169 |
+
$ad->create(array(
|
| 170 |
+
Ad::STATUS_PARAM_NAME => Ad::STATUS_PAUSED,
|
| 171 |
+
));
|
| 172 |
+
echo $ad->{AdFields::ID};
|
| 173 |
+
```
|
| 174 |
+
|
| 175 |
+
## Updating Objects
|
| 176 |
+
|
| 177 |
+
When you mutate an AdObject, we record which variables have changed and make it easy for you to write these change to the Graph API by calling the `update` method.
|
| 178 |
+
|
| 179 |
+
Please note that in some cases the variable name used to update an attribute of an entity differs from the one read from Graph API. Any variable you change will be included in the request to update an object an you will likely receive an `\Exception` if the field name is incorrect. Please consult the [Facebook Developer Documentation](https://developers.facebook.com/docs/ads-api) to see which fields are required.
|
| 180 |
+
|
| 181 |
+
```php
|
| 182 |
+
use FacebookAds\Object\Ad;
|
| 183 |
+
use FacebookAds\Object\Fields\AdFields;
|
| 184 |
+
|
| 185 |
+
$ad = new Ad($id);
|
| 186 |
+
$ad->name = 'Updated Name';
|
| 187 |
+
$ad->update();
|
| 188 |
+
```
|
| 189 |
+
|
| 190 |
+
## Deleting Objects
|
| 191 |
+
|
| 192 |
+
|
| 193 |
+
### Deleting a single object
|
| 194 |
+
|
| 195 |
+
To delete an object, you only need call the `delete` method on an instance of that object. Note, you do not have had to have read the object from the Graph API, all you need is the `id` of the object.
|
| 196 |
+
|
| 197 |
+
```php
|
| 198 |
+
use FacebookAds\Object\Ad;
|
| 199 |
+
use FacebookAds\Object\Fields\AdFields;
|
| 200 |
+
|
| 201 |
+
$ad = new Ad($id);
|
| 202 |
+
$ad->delete();
|
| 203 |
+
```
|
| 204 |
+
|
| 205 |
+
### Deleting multiple objects
|
| 206 |
+
|
| 207 |
+
We provide the static method `deleteIds($ids = array(...))` to enable you to delete many objects at the same time. This method returns a boolean value and will only return `true` if all objects were successfully deleted. A return value of `false` means one or more failed to be deleted. Please also note that we do not verify the type of the `id` you have passed into this function.
|
| 208 |
+
|
| 209 |
+
```php
|
| 210 |
+
use FacebookAds\Object\Ad;
|
| 211 |
+
$status = Ad::deleteIds($ids = array(...));
|
| 212 |
+
```
|
| 213 |
+
|
| 214 |
+
### Save Helper
|
| 215 |
+
|
| 216 |
+
On object that extends `AbstractCrudObject` you can call the `save` method which will call `create` if the object does not have a value for `id` set, or will call `update` a value is present.
|
| 217 |
+
|
| 218 |
+
|
| 219 |
+
## Connections
|
| 220 |
+
|
| 221 |
+
Objects on the Graph API may also have connections. A connection provides a way to retrieve objects which relate to the current object, for example, you can retrieve all the ads relative to an ad account using the URL `https://graph.facebook.com/act_123123/ads`.
|
| 222 |
+
|
| 223 |
+
For each connection an object has, we provide a helper method to retrieve its related objects. In the case of `ObjectObject\AdAccount` we provide several of these methods including `getAds($required_fields)` which will return a `Cursor` containing a page of `Object\Ad` objects.
|
| 224 |
+
|
| 225 |
+
```php
|
| 226 |
+
use FacebookAds\Object\AdAccount;
|
| 227 |
+
$account = new AdAccount($id);
|
| 228 |
+
$ads = $account->getAds($fields = array('name')));
|
| 229 |
+
foreach($ads as $ad) {
|
| 230 |
+
echo $ad->name."\n";
|
| 231 |
+
}
|
| 232 |
+
```
|
| 233 |
+
|
| 234 |
+
You only need the `id` of the object on which you want to call a connection method, therefore you do not need to have read the object from the Graph API first.
|
| 235 |
+
|
| 236 |
+
For cases where these helper methods are not available, see [Requesting Connections Without Helper Methods](#generic_connections).
|
| 237 |
+
|
| 238 |
+
## Targeting <a name="targeting"></a>
|
| 239 |
+
|
| 240 |
+
Facebook's targeting can generally be broken down into [interests](https://developers.facebook.com/docs/reference/ads-api/interest-targeting), [demographics](https://developers.facebook.com/docs/reference/ads-api/demographic-targeting), [behaviors](https://developers.facebook.com/docs/reference/ads-api/behavior-targeting) and [geo targeting](https://developers.facebook.com/docs/reference/ads-api/targeting-specs/#location). Many of these need to be queried from the Graph API search endpoint.
|
| 241 |
+
|
| 242 |
+
To query targeting using the Ads SDK, you can use the `Object\TargetingSearch` class.
|
| 243 |
+
|
| 244 |
+
## Examples
|
| 245 |
+
|
| 246 |
+
This set of examples will walk you through:
|
| 247 |
+
|
| 248 |
+
1. Reading AdAccounts for a user
|
| 249 |
+
* Creating a Campaign
|
| 250 |
+
* Searching targeting criteria
|
| 251 |
+
* Creating an AdSet
|
| 252 |
+
* Creating an AdImage
|
| 253 |
+
* Creating an AdCreative
|
| 254 |
+
* Creating an Ad
|
| 255 |
+
|
| 256 |
+
Examples can be found within the `examples/` folder of the SDK. This assumes you have bootstrap code with an access token:
|
| 257 |
+
|
| 258 |
+
```php
|
| 259 |
+
<?php
|
| 260 |
+
define('SDK_DIR', '/path/to/sdk/'); // Path to the SDK directory
|
| 261 |
+
|
| 262 |
+
$loader = include SDK_DIR.'/vendor/autoload.php';
|
| 263 |
+
|
| 264 |
+
use FacebookAds\Api;
|
| 265 |
+
|
| 266 |
+
Api::init($app_id, $app_secret, $access_token);
|
| 267 |
+
|
| 268 |
+
```
|
| 269 |
+
|
| 270 |
+
### 1. Reading AdAccounts
|
| 271 |
+
|
| 272 |
+
The `FacebookSession` contains the `id` of the user who has the active session and this can be used to read their `AdAccount` connections.
|
| 273 |
+
|
| 274 |
+
```php
|
| 275 |
+
use FacebookAds\Object\AdUser;
|
| 276 |
+
use FacebookAds\Object\Fields\AdUserFields;
|
| 277 |
+
use FacebookAds\Object\AdAccount;
|
| 278 |
+
use FacebookAds\Object\Fields\AdAccountFields;
|
| 279 |
+
|
| 280 |
+
$user = new AdUser('me');
|
| 281 |
+
$user->read(array(AdUserFields::ID));
|
| 282 |
+
|
| 283 |
+
$accounts = $user->getAdAccounts(array(
|
| 284 |
+
AdAccountFields::ID,
|
| 285 |
+
AdAccountFields::NAME,
|
| 286 |
+
));
|
| 287 |
+
|
| 288 |
+
// Print out the accounts
|
| 289 |
+
echo "Accounts:\n";
|
| 290 |
+
foreach($accounts as $account) {
|
| 291 |
+
echo $account->id . ' - ' .$account->name."\n";
|
| 292 |
+
}
|
| 293 |
+
|
| 294 |
+
// Grab the first account for next steps (you should probably choose one)
|
| 295 |
+
$account = (count($accounts)) ? $accounts->getObjects()[0] : null;
|
| 296 |
+
echo "\nUsing this account: ";
|
| 297 |
+
echo $account->id."\n";
|
| 298 |
+
```
|
| 299 |
+
|
| 300 |
+
### 2. Creating a Campaign
|
| 301 |
+
|
| 302 |
+
Now we have an `AdAccount` for the current user we can go ahead an create our [Campaign](https://developers.facebook.com/docs/reference/ads-api/adcampaign). All `ads` within your `campaign` should have the same objective. You can find the available objectives within the [`AdObjectives`](src/FacebookAds/Object/Values/AdObjectives.php) class.
|
| 303 |
+
|
| 304 |
+
In the following example we create a paused campaign so your ads do not go live, however you can omit the status field if you want your ad to run.
|
| 305 |
+
|
| 306 |
+
```php
|
| 307 |
+
use FacebookAds\Object\Campaign;
|
| 308 |
+
use FacebookAds\Object\Fields\CampaignFields;
|
| 309 |
+
use FacebookAds\Object\Values\AdObjectives;
|
| 310 |
+
use FacebookAds\Object\Values\AdBuyingTypes;
|
| 311 |
+
|
| 312 |
+
$campaign = new Campaign(null, $account->id);
|
| 313 |
+
$campaign->setData(array(
|
| 314 |
+
CampaignFields::NAME => 'My First Campaign',
|
| 315 |
+
CampaignFields::OBJECTIVE => AdObjectives::LINK_CLICKS,
|
| 316 |
+
));
|
| 317 |
+
|
| 318 |
+
$campaign->create(array(
|
| 319 |
+
Campaign::STATUS_PARAM_NAME => Campaign::STATUS_PAUSED,
|
| 320 |
+
));
|
| 321 |
+
echo "Campaign ID:".$campaign->id."\n";
|
| 322 |
+
```
|
| 323 |
+
|
| 324 |
+
|
| 325 |
+
### 3. Searching Targeting
|
| 326 |
+
|
| 327 |
+
The final thing we need before creating an `Ad` is some targeting. Many attributes of targeting can be found defined in the developer documentation, however some categories need you to search, such as interests. For this, we provide the `TargetingSearch` class.
|
| 328 |
+
|
| 329 |
+
```php
|
| 330 |
+
use FacebookAds\Object\TargetingSearch;
|
| 331 |
+
use FacebookAds\Object\Search\TargetingSearchTypes;
|
| 332 |
+
|
| 333 |
+
$results = TargetingSearch::search(
|
| 334 |
+
$type = TargetingSearchTypes::INTEREST,
|
| 335 |
+
$class = null,
|
| 336 |
+
$query = 'facebook london',
|
| 337 |
+
);
|
| 338 |
+
|
| 339 |
+
// we'll take the top result for now
|
| 340 |
+
$target = (count($results)) ? $results->getObjects()[0] : null;
|
| 341 |
+
echo "Using target: ".$target->name."\n";
|
| 342 |
+
```
|
| 343 |
+
|
| 344 |
+
Targeting for the moment is expressed in the form of a multidimensional array:
|
| 345 |
+
|
| 346 |
+
```php
|
| 347 |
+
$targeting = array(
|
| 348 |
+
'geo_locations' => array(
|
| 349 |
+
'countries' => array('GB'),
|
| 350 |
+
),
|
| 351 |
+
'interests' => array(
|
| 352 |
+
array(
|
| 353 |
+
'id' => $target->id,
|
| 354 |
+
'name'=>$target->name,
|
| 355 |
+
),
|
| 356 |
+
),
|
| 357 |
+
);
|
| 358 |
+
```
|
| 359 |
+
|
| 360 |
+
|
| 361 |
+
### 4. Creating an AdSet
|
| 362 |
+
|
| 363 |
+
An [`AdSet`](https://developers.facebook.com/docs/reference/ads-api/adset) is a set of [`Ad`](https://developers.facebook.com/docs/reference/ads-api/adgroup) objects and it is best practice to ensure all `Ad` objects within an `AdSet` have the same targeting.
|
| 364 |
+
|
| 365 |
+
The `AdSet` holds the attributes about the duration of a campaign and the budget. When deciding a budget, you should also choose between `lifetime_budget` and `daily_budget`.
|
| 366 |
+
|
| 367 |
+
```php
|
| 368 |
+
use FacebookAds\Object\AdSet;
|
| 369 |
+
use FacebookAds\Object\Fields\AdSetFields;
|
| 370 |
+
use FacebookAds\Object\Values\BillingEvents;
|
| 371 |
+
use FacebookAds\Object\Values\OptimizationGoals;
|
| 372 |
+
|
| 373 |
+
$adset = new AdSet(null, $account->id);
|
| 374 |
+
$adset->setData(array(
|
| 375 |
+
AdSetFields::NAME => 'My First AdSet',
|
| 376 |
+
AdSetFields::CAMPAIGN_ID => $campaign->id,
|
| 377 |
+
AdSetFields::DAILY_BUDGET => '150',
|
| 378 |
+
AdSetFields::OPTIMIZATION_GOAL => OptimizationGoals::REACH,
|
| 379 |
+
AdSetFields::BILLING_EVENT => BillingEvents::IMPRESSIONS,
|
| 380 |
+
AdSetFields::BID_AMOUNT => 2,
|
| 381 |
+
AdSetFields::TARGETING => $targeting,
|
| 382 |
+
AdSetFields::START_TIME =>
|
| 383 |
+
(new \DateTime("+1 week"))->format(\DateTime::ISO8601),
|
| 384 |
+
AdSetFields::END_TIME =>
|
| 385 |
+
(new \DateTime("+2 week"))->format(\DateTime::ISO8601),
|
| 386 |
+
));
|
| 387 |
+
|
| 388 |
+
$adset->create();
|
| 389 |
+
echo 'AdSet ID: '.$adset->id."\n";
|
| 390 |
+
```
|
| 391 |
+
### 5. Create an AdImage
|
| 392 |
+
|
| 393 |
+
Now you have a `AdSet`, you will be able to create an `Ad`, however, first you will need to upload the image you want to use as part of the `AdCreative`.
|
| 394 |
+
|
| 395 |
+
```php
|
| 396 |
+
use FacebookAds\Object\AdImage;
|
| 397 |
+
use FacebookAds\Object\Fields\AdImageFields;
|
| 398 |
+
|
| 399 |
+
$image = new AdImage(null, $account->id);
|
| 400 |
+
$image->filename = SDK_DIR.'/test/misc/FB-f-Logo__blue_512.png';
|
| 401 |
+
|
| 402 |
+
$image->create();
|
| 403 |
+
echo 'Image Hash: '.$image->hash."\n";
|
| 404 |
+
```
|
| 405 |
+
|
| 406 |
+
### 6. Creating an AdCreative
|
| 407 |
+
|
| 408 |
+
You can create an `AdCreative` in two ways. The first is by including a JSON object when creating an `Ad` and the second, which we will demonstrate here, is by explicitly creation an `AdCreative` and using its `id` when creating an `Ad`.
|
| 409 |
+
|
| 410 |
+
```php
|
| 411 |
+
use FacebookAds\Object\AdCreative;
|
| 412 |
+
use FacebookAds\Object\Fields\AdCreativeFields;
|
| 413 |
+
|
| 414 |
+
$creative = new AdCreative(null, $account->id);
|
| 415 |
+
$creative->setData(array(
|
| 416 |
+
AdCreativeFields::NAME => 'Sample Creative',
|
| 417 |
+
AdCreativeFields::TITLE => 'Welcome to the Jungle',
|
| 418 |
+
AdCreativeFields::BODY => 'We\'ve got fun \'n\' games',
|
| 419 |
+
AdCreativeFields::IMAGE_HASH => $image->hash,
|
| 420 |
+
AdCreativeFields::OBJECT_URL => 'http://www.example.com/',
|
| 421 |
+
));
|
| 422 |
+
|
| 423 |
+
$creative->create();
|
| 424 |
+
echo 'Creative ID: '.$creative->id . "\n";
|
| 425 |
+
```
|
| 426 |
+
|
| 427 |
+
### 7. Creating an Ad
|
| 428 |
+
|
| 429 |
+
The final step is to create the [`Ad`](https://developers.facebook.com/docs/reference/ads-api/adgroup/). The `Ad` contains all of the information about bid, creative and targeting. It should also have the asme objective as the `Campaign` we created.
|
| 430 |
+
|
| 431 |
+
```php
|
| 432 |
+
use FacebookAds\Object\Ad;
|
| 433 |
+
use FacebookAds\Object\Fields\AdFields;
|
| 434 |
+
|
| 435 |
+
$ad = new Ad(null, $account->id);
|
| 436 |
+
$ad->setData(array(
|
| 437 |
+
AdFields::CREATIVE => array('creative_id' => $creative->id),
|
| 438 |
+
AdFields::NAME => 'My First Ad',
|
| 439 |
+
AdFields::ADSET_ID => $adset->id,
|
| 440 |
+
));
|
| 441 |
+
|
| 442 |
+
$ad->create();
|
| 443 |
+
echo 'Ad ID:'.$ad->id."\n";
|
| 444 |
+
```
|
| 445 |
+
## Extending the SDK
|
| 446 |
+
|
| 447 |
+
There are many scenarios in which you may want to extend the SDK, and when developing this SDK we attempted to balance extensibility with ease of use for new developers.
|
| 448 |
+
|
| 449 |
+
### Defining Default Fields to Read <a name="default_fields"></a>
|
| 450 |
+
We noted earlier that by default no fields are requested when calling the `read` method of a class implementing `AbstractCrudObject`, however if you always require the same set of fields throughout your application we have provided a simple way to do this.
|
| 451 |
+
|
| 452 |
+
Within your own namespace, you can extend the any class implementing `AbstractCrudObject` and override the static variable `$defaultReadFields` to be an array of fields you want to be read by default. You should try to not change the classes in the SDK directly as this may break forward compatibly.
|
| 453 |
+
|
| 454 |
+
```php
|
| 455 |
+
namespace MyNamespace\Object;
|
| 456 |
+
|
| 457 |
+
use FacebookAds\Object\Fields\AdAccountFields;
|
| 458 |
+
|
| 459 |
+
class AdAccount extends FacebookAds\Object\AdAccount {
|
| 460 |
+
|
| 461 |
+
protected static $defaultReadFields = array(
|
| 462 |
+
AdAccountFields::ID,
|
| 463 |
+
AdAccountFields::NAME,
|
| 464 |
+
AdAccountFields::DAILY_SPEND_LIMIT,
|
| 465 |
+
AdAccountFields::CURRENCY,
|
| 466 |
+
);
|
| 467 |
+
}
|
| 468 |
+
```
|
| 469 |
+
|
| 470 |
+
Within your application, whenever you use an `AdAccount`, you should use the one within your namespace instead of the `FacebookAds` one.
|
| 471 |
+
|
| 472 |
+
```php
|
| 473 |
+
use MyNamespace\Object\AdAccount;
|
| 474 |
+
$adaccount = (new AdAccount($id))->read();
|
| 475 |
+
echo $adaccount->name;
|
| 476 |
+
```
|
| 477 |
+
|
| 478 |
+
### Requesting Connections Without Helper Methods<a name="generic_connections"></a>
|
| 479 |
+
|
| 480 |
+
As detailed in the [Connections](#connections) section, we provide helper methods to request objects relative to an object. However, in some cases these methods may not have been implemented, or if you have extended our based objects as in the example of [defining default fields to read](#default_fields), calling a connection helper method on a base object will return objects of the \FacebookAds namespace type.
|
| 481 |
+
|
| 482 |
+
In this case, you can use our generic connection methods to retrieve the correct type of object for any class extending `AbstractCrudObject`. To enable this, we provide two methods, `getOneByConnection` and `getManyByConnection` or which the latter is the most commonly used.
|
| 483 |
+
|
| 484 |
+
```php
|
| 485 |
+
use FacebookAds\Object\AdAccount;
|
| 486 |
+
|
| 487 |
+
// Ad in your namespace which you have used to extend the
|
| 488 |
+
// FacebookAds\Object\Ad class
|
| 489 |
+
use MyNamespace\Object\Ad;
|
| 490 |
+
|
| 491 |
+
$account = new AdAccount($id);
|
| 492 |
+
$my_adaccount_objects = $account->getManyByConnection(
|
| 493 |
+
Ad::className(), $fields = array(...), $params = array(...));
|
| 494 |
+
|
| 495 |
+
```
|
vendor/facebook/php-business-sdk/LICENSE
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
|
| 2 |
+
|
| 3 |
+
You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
| 4 |
+
use, copy, modify, and distribute this software in source code or binary
|
| 5 |
+
form for use in connection with the web services and APIs provided by
|
| 6 |
+
Facebook.
|
| 7 |
+
|
| 8 |
+
As with any software that integrates with the Facebook platform, your use
|
| 9 |
+
of this software is subject to the Facebook Developer Principles and
|
| 10 |
+
Policies [http://developers.facebook.com/policy/]. This copyright notice
|
| 11 |
+
shall be included in all copies or substantial portions of the software.
|
| 12 |
+
|
| 13 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 14 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 15 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
| 16 |
+
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 17 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
| 18 |
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
| 19 |
+
DEALINGS IN THE SOFTWARE.
|
vendor/facebook/php-business-sdk/README.md
ADDED
|
@@ -0,0 +1,360 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
# Facebook Business SDK for PHP
|
| 2 |
+
|
| 3 |
+
[](https://packagist.org/packages/facebook/php-business-sdk)
|
| 4 |
+
[](https://github.com/facebook/facebook-php-business-sdk/blob/master/LICENSE)
|
| 5 |
+
[](https://travis-ci.org/facebook/facebook-php-business-sdk)
|
| 6 |
+
[](https://scrutinizer-ci.com/g/facebook/facebook-php-business-sdk)
|
| 7 |
+
[](https://scrutinizer-ci.com/g/facebook/facebook-php-business-sdk)
|
| 8 |
+
|
| 9 |
+
## Introduction
|
| 10 |
+
|
| 11 |
+
The Facebook <a href="https://developers.facebook.com/docs/business-sdk" target="_blank">Business SDK</a> is a one-stop shop to help our partners better serve their businesses. Partners are using multiple Facebook API's to server the needs of their clients. Adopting all these API's and keeping them up to date across the various platforms can be time consuming and ultimately prohibitive. For this reason Facebook has developed the Business SDK bundling many of its APIs into one SDK to ease implementation and upkeep. The Business SDK is an upgraded version of the Marketing API SDK that includes the Marketing API as well as many Facebook APIs from different platforms such as Pages, Business Manager, Instagram, etc.
|
| 12 |
+
|
| 13 |
+
## Quick Start
|
| 14 |
+
|
| 15 |
+
Business SDK <a href="https://developers.facebook.com/docs/business-sdk/getting-started" target="_blank">Getting Started Guide</a>
|
| 16 |
+
|
| 17 |
+
## Pre-requisites
|
| 18 |
+
|
| 19 |
+
### Register An App
|
| 20 |
+
|
| 21 |
+
To get started with the SDK, you must have an app
|
| 22 |
+
registered on <a href="https://developers.facebook.com/" target="_blank">developers.facebook.com</a>.
|
| 23 |
+
|
| 24 |
+
To manage the Marketing API, please visit your
|
| 25 |
+
<a href="https://developers.facebook.com/apps/<YOUR APP ID>/dashboard"> App Dashboard </a>
|
| 26 |
+
and add the <b>Marketing API</b> product to your app.
|
| 27 |
+
|
| 28 |
+
**IMPORTANT**: For security, it is recommended that you turn on 'App Secret
|
| 29 |
+
Proof for Server API calls' in your app's Settings->Advanced page.
|
| 30 |
+
|
| 31 |
+
### Obtain An Access Token
|
| 32 |
+
|
| 33 |
+
When someone connects with an app using Facebook Login and approves the request
|
| 34 |
+
for permissions, the app obtains an access token that provides temporary, secure
|
| 35 |
+
access to Facebook APIs.
|
| 36 |
+
|
| 37 |
+
An access token is an opaque string that identifies a User, app, or Page.
|
| 38 |
+
|
| 39 |
+
For example, to access the Marketing API, you need to generate a User access token
|
| 40 |
+
for your app and ask for the ``ads_management`` permission; to access Pages API,
|
| 41 |
+
you need to generate a Page access token for your app and ask for the ``manage_page`` permission.
|
| 42 |
+
|
| 43 |
+
Refer to our
|
| 44 |
+
<a href="https://developers.facebook.com/docs/facebook-login/access-tokens" target="_blank">
|
| 45 |
+
Access Token Guide</a> to learn more.
|
| 46 |
+
|
| 47 |
+
For now, we can use the
|
| 48 |
+
<a href="https://developers.facebook.com/tools/explorer" target="_blank">Graph Explorer</a>
|
| 49 |
+
to get an access token.
|
| 50 |
+
|
| 51 |
+
## Installation
|
| 52 |
+
|
| 53 |
+
The Facebook Business SDK requires PHP 5.6 or greater.
|
| 54 |
+
|
| 55 |
+
### Composer
|
| 56 |
+
|
| 57 |
+
The Facebook Business SDK uses composer to manage dependencies. Visit the <a href="https://getcomposer.org/download/" target="_blank">composer documentation</a> to learn how to install composer.
|
| 58 |
+
|
| 59 |
+
Add the following to your `composer.json` file:
|
| 60 |
+
|
| 61 |
+
```json
|
| 62 |
+
{
|
| 63 |
+
"require": {
|
| 64 |
+
"facebook/php-business-sdk": "5.0.5"
|
| 65 |
+
}
|
| 66 |
+
}
|
| 67 |
+
```
|
| 68 |
+
then install it through composer:
|
| 69 |
+
|
| 70 |
+
```shell
|
| 71 |
+
php composer.phar install --no-dev
|
| 72 |
+
```
|
| 73 |
+
|
| 74 |
+
This SDK and its dependencies will be installed under `./vendor`.
|
| 75 |
+
|
| 76 |
+
### Alternatives
|
| 77 |
+
|
| 78 |
+
This repository is written following the [psr-4 autoloading standard](http://www.php-fig.org/psr/psr-4/). Any psr-4 compatible autoloader can be used.
|
| 79 |
+
|
| 80 |
+
## Usage
|
| 81 |
+
|
| 82 |
+
### Api main class
|
| 83 |
+
|
| 84 |
+
The `FacebookAds\Api` object is the foundation of the Business SDK which encapsulates a `FacebookAds\Session` and is used to execute requests against the Graph API.
|
| 85 |
+
|
| 86 |
+
To instantiate an Api object you will need a valid access token:
|
| 87 |
+
```php
|
| 88 |
+
use FacebookAds\Api;
|
| 89 |
+
|
| 90 |
+
// Initialize a new Session and instantiate an Api object
|
| 91 |
+
Api::init($app_id, $app_secret, $access_token);
|
| 92 |
+
|
| 93 |
+
// The Api object is now available through singleton
|
| 94 |
+
$api = Api::instance();
|
| 95 |
+
|
| 96 |
+
```
|
| 97 |
+
|
| 98 |
+
Once instantiated, the Api object will allow you to start making requests to the Graph API.
|
| 99 |
+
|
| 100 |
+
### Fields names
|
| 101 |
+
|
| 102 |
+
Due to the high number of field names in the Graph API existing objects, in order to facilitate your code maintainability, enum-like classes are provided.
|
| 103 |
+
These files are stored under the `FacebookAds/Object/Fields` directory.
|
| 104 |
+
You can access object properties in the same manner you would usually do in php:
|
| 105 |
+
|
| 106 |
+
```php
|
| 107 |
+
use FacebookAds\Object\AdAccount;
|
| 108 |
+
|
| 109 |
+
$account = new AdAccount();
|
| 110 |
+
$account->name = 'My account name';
|
| 111 |
+
echo $account->name;
|
| 112 |
+
```
|
| 113 |
+
|
| 114 |
+
or using the enums:
|
| 115 |
+
|
| 116 |
+
```php
|
| 117 |
+
use FacebookAds\Object\AdAccount;
|
| 118 |
+
use FacebookAds\Object\Fields\AdAccountFields;
|
| 119 |
+
|
| 120 |
+
$account = new AdAccount();
|
| 121 |
+
$account->{AdAccountFields::NAME} = 'My account name';
|
| 122 |
+
echo $account->{AdAccountFields::NAME};
|
| 123 |
+
```
|
| 124 |
+
|
| 125 |
+
### Object classes
|
| 126 |
+
|
| 127 |
+
Facebook Ads entities are defined as classes under the `FacebookAds/Object` directory.
|
| 128 |
+
|
| 129 |
+
#### Read Objects
|
| 130 |
+
|
| 131 |
+
```php
|
| 132 |
+
use FacebookAds\Object\AdAccount;
|
| 133 |
+
|
| 134 |
+
$account = (new AdAccount($account_id))->getSelf();
|
| 135 |
+
```
|
| 136 |
+
|
| 137 |
+
For some objects, the Ads API doesn't return all available fields by default. The first argument of the object's read method is an array of field names to be requested.
|
| 138 |
+
|
| 139 |
+
```php
|
| 140 |
+
use FacebookAds\Object\AdAccount;
|
| 141 |
+
use FacebookAds\Object\Fields\AdAccountFields;
|
| 142 |
+
|
| 143 |
+
$fields = array(
|
| 144 |
+
AdAccountFields::ID,
|
| 145 |
+
AdAccountFields::NAME,
|
| 146 |
+
);
|
| 147 |
+
|
| 148 |
+
$account = (new AdAccount($account_id))->getSelf($fields);
|
| 149 |
+
```
|
| 150 |
+
Requesting an high number of fields may cause the response time to visibly increase, you should always request only the fields you really need.
|
| 151 |
+
|
| 152 |
+
#### Create Objects
|
| 153 |
+
|
| 154 |
+
```php
|
| 155 |
+
use FacebookAds\Object\AdSet;
|
| 156 |
+
use FacebookAds\Object\AdAccount;
|
| 157 |
+
use FacebookAds\Object\Fields\AdSetFields;
|
| 158 |
+
|
| 159 |
+
$account_id = 'act_123123';
|
| 160 |
+
$campaign_id = '123456';
|
| 161 |
+
|
| 162 |
+
$account = new AdAccount($account_id);
|
| 163 |
+
$adset = $account->createAdSet(
|
| 164 |
+
array(),
|
| 165 |
+
array(
|
| 166 |
+
AdSetFields::NAME => 'My Test AdSet',
|
| 167 |
+
AdSetFields::CAMPAIGN_ID => campaign_id,
|
| 168 |
+
AdSetFields::DAILY_BUDGET => 150,
|
| 169 |
+
AdSetFields::START_TIME => (new \DateTime("+1 week"))->format(\DateTime::ISO8601),
|
| 170 |
+
AdSetFields::END_TIME => (new \DateTime("+2 week"))->format(\DateTime::ISO8601),
|
| 171 |
+
AdSetFields::BILLING_EVENT => 'IMPRESSIONS',
|
| 172 |
+
AdSetFields::TARGETING => array('geo_locations' => array('countries' => array('US'))),
|
| 173 |
+
AdSetFields::BID_AMOUNT => '1000',
|
| 174 |
+
)
|
| 175 |
+
);
|
| 176 |
+
|
| 177 |
+
echo $adset->id;
|
| 178 |
+
```
|
| 179 |
+
|
| 180 |
+
#### Update Objects
|
| 181 |
+
|
| 182 |
+
```php
|
| 183 |
+
use FacebookAds\Object\AdSet;
|
| 184 |
+
use FacebookAds\Object\Fields\AdSetFields;
|
| 185 |
+
|
| 186 |
+
$ad_set_id = '123456';
|
| 187 |
+
|
| 188 |
+
$set = new AdSet($ad_set_id);
|
| 189 |
+
$fields = array(
|
| 190 |
+
);
|
| 191 |
+
$params = array(
|
| 192 |
+
AdSetFields::NAME => 'My new AdSet name',
|
| 193 |
+
);
|
| 194 |
+
$set->updateSelf($fields, $params);
|
| 195 |
+
```
|
| 196 |
+
|
| 197 |
+
#### Delete Objects
|
| 198 |
+
|
| 199 |
+
```php
|
| 200 |
+
use FacebookAds\Object\AdSet;
|
| 201 |
+
|
| 202 |
+
$ad_set_id = '123456';
|
| 203 |
+
|
| 204 |
+
$set = new AdSet($ad_set_id);
|
| 205 |
+
$set->deleteSelf();
|
| 206 |
+
```
|
| 207 |
+
|
| 208 |
+
### Cursors
|
| 209 |
+
|
| 210 |
+
Since the release of the Facebook Graph API 2.0, pagination is handled through [cursors](https://developers.facebook.com/docs/graph-api/using-graph-api/v2.2#paging).
|
| 211 |
+
Here cursors are defined as in `\FacebookAds\Cursor`. Cursors are generally returned from connection methods:
|
| 212 |
+
|
| 213 |
+
```php
|
| 214 |
+
use FacebookAds\Object\AdAccount;
|
| 215 |
+
use FacebookAds\Object\Fields\CampaignFields;
|
| 216 |
+
|
| 217 |
+
$account = new AdAccount('<ACT_ID>');
|
| 218 |
+
$cursor = $account->getCampaigns(['id','name']);
|
| 219 |
+
|
| 220 |
+
// Loop over objects
|
| 221 |
+
foreach ($cursor as $campaign) {
|
| 222 |
+
echo $campaign->{CampaignFields::NAME}.PHP_EOL;
|
| 223 |
+
}
|
| 224 |
+
|
| 225 |
+
// Access objects by index
|
| 226 |
+
if ($cursor->count() > 0) {
|
| 227 |
+
echo "The first campaign in the cursor is: ".$cursor[0]->{CampaignFields::NAME}.PHP_EOL;
|
| 228 |
+
}
|
| 229 |
+
|
| 230 |
+
// Fetch the next page
|
| 231 |
+
$cursor->fetchAfter();
|
| 232 |
+
// New Objects will be appended to the cursor
|
| 233 |
+
```
|
| 234 |
+
|
| 235 |
+
#### Implicit Fetching
|
| 236 |
+
|
| 237 |
+
Whenever all object connected to a parent are required (carelessly from the number of HTTP requests) implicit fetching can help reducing the amount of code required.
|
| 238 |
+
If cursor has Implicit Fetching enabled, while iterating (foreach, Cursor::next(), Cursor::prev()) the page end is reached, the SDK will automatically fetch and append a new page, until cursor end.
|
| 239 |
+
Implicit Fetching will make you lose control of the number of HTTP request that will be sent and, for this reason, is disabled by default.
|
| 240 |
+
Implicit Fetching can be enabled for a specific cursor:
|
| 241 |
+
|
| 242 |
+
```php
|
| 243 |
+
$cursor->setUseImplicitFetch(true);
|
| 244 |
+
```
|
| 245 |
+
|
| 246 |
+
Or globally:
|
| 247 |
+
|
| 248 |
+
```php
|
| 249 |
+
use FacebookAds\Cursor;
|
| 250 |
+
|
| 251 |
+
Cursor::setDefaultUseImplicitFetch(true);
|
| 252 |
+
```
|
| 253 |
+
|
| 254 |
+
#### Reverse Iterations
|
| 255 |
+
|
| 256 |
+
Cursors are bi-directional, and can be iterated in reverse order:
|
| 257 |
+
|
| 258 |
+
```php
|
| 259 |
+
use FacebookAds\Object\AbstractCrudObject;
|
| 260 |
+
|
| 261 |
+
/** @var \FacebookAds\Cursor $cursor */
|
| 262 |
+
$cursor->setUseImplicitFetch(true);
|
| 263 |
+
|
| 264 |
+
$cursor->end();
|
| 265 |
+
while ($cursor->valid()) {
|
| 266 |
+
echo $cursor->current()->{AbstractCrudObject::FIELD_ID}.PHP_EOL;
|
| 267 |
+
$cursor->prev();
|
| 268 |
+
}
|
| 269 |
+
|
| 270 |
+
```
|
| 271 |
+
|
| 272 |
+
## Tests
|
| 273 |
+
|
| 274 |
+
The 'test' folder contains the test cases. These are logically divided in unit and integration tests.
|
| 275 |
+
Integration tests require an active Facebook Ad Account, a Facebook Application and a valid Access Token.
|
| 276 |
+
|
| 277 |
+
Note: we are currently unable to securely and reliably run integration tests on a public CI system. Our integrations with Travis and Scrutinizer (including badges at the top of this file) include only unit tests.
|
| 278 |
+
|
| 279 |
+
|
| 280 |
+
### Install dependencies
|
| 281 |
+
|
| 282 |
+
From the root folder run:
|
| 283 |
+
|
| 284 |
+
```shell
|
| 285 |
+
php composer.phar install --dev
|
| 286 |
+
```
|
| 287 |
+
|
| 288 |
+
### Execute unit tests only
|
| 289 |
+
|
| 290 |
+
```shell
|
| 291 |
+
./vendor/bin/phpunit -c test/phpunit-travis.xml
|
| 292 |
+
```
|
| 293 |
+
|
| 294 |
+
To run tests individually (be sure not to be pointing to an integration test file):
|
| 295 |
+
|
| 296 |
+
```shell
|
| 297 |
+
./vendor/bin/phpunit -c test/phpunit-travis.xml path/to/class/file
|
| 298 |
+
```
|
| 299 |
+
|
| 300 |
+
|
| 301 |
+
### Execute all tests (unit + integration)
|
| 302 |
+
|
| 303 |
+
Setup your integration config:
|
| 304 |
+
|
| 305 |
+
1 - Copy the config file template.
|
| 306 |
+
|
| 307 |
+
```shell
|
| 308 |
+
cp test/config.php.dist test/config.php
|
| 309 |
+
```
|
| 310 |
+
|
| 311 |
+
2 - Edit `test/config.php` with your informations.
|
| 312 |
+
|
| 313 |
+
Execute:
|
| 314 |
+
|
| 315 |
+
```shell
|
| 316 |
+
./vendor/bin/phpunit -c test/
|
| 317 |
+
```
|
| 318 |
+
|
| 319 |
+
To run tests individually:
|
| 320 |
+
|
| 321 |
+
```shell
|
| 322 |
+
./vendor/bin/phpunit -c test/ path/to/class/file
|
| 323 |
+
```
|
| 324 |
+
|
| 325 |
+
## Debug
|
| 326 |
+
|
| 327 |
+
If this SDK is not working as expected, it may be either a SDK issue or API issue.
|
| 328 |
+
|
| 329 |
+
This can be identified by constructing a raw cURL request and seeing if the response is as expected
|
| 330 |
+
|
| 331 |
+
for example:
|
| 332 |
+
|
| 333 |
+
```php
|
| 334 |
+
require __DIR__ . '/vendor/autoload.php';
|
| 335 |
+
use FacebookAds\Api;
|
| 336 |
+
use FacebookAds\Object\AdAccount;
|
| 337 |
+
|
| 338 |
+
Api::init($app_id, $app_secret, $access_token);
|
| 339 |
+
$api = Api::instance();
|
| 340 |
+
|
| 341 |
+
use FacebookAds\Logger\CurlLogger;
|
| 342 |
+
$api->setLogger(new CurlLogger());
|
| 343 |
+
$account = new AdAccount($account_id);
|
| 344 |
+
$account->read(array('id'));
|
| 345 |
+
```
|
| 346 |
+
|
| 347 |
+
When running this code, this cURL request will be printed to the console as:
|
| 348 |
+
```
|
| 349 |
+
curl -G \
|
| 350 |
+
-d 'fields=id' \
|
| 351 |
+
-d 'access_token=<access_token>' \
|
| 352 |
+
https://graph.facebook.com/v3.1/<act_accountid>
|
| 353 |
+
```
|
| 354 |
+
|
| 355 |
+
## SDK Codegen
|
| 356 |
+
Our SDK is autogenerated from [SDK Codegen](https://github.com/facebook/facebook-business-sdk-codegen). If you want to learn more about how our SDK code is generated, please check this repository.
|
| 357 |
+
|
| 358 |
+
## Issue
|
| 359 |
+
Since we want to handle bugs more efficiently, we've decided to close issue reporting in Github and move to our dedicated bug reporting channel.
|
| 360 |
+
If you encounter a bug with Business SDK (PHP), please report the issue at [our developer bug reporting channel](https://developers.facebook.com/support/bugs/).
|
vendor/facebook/php-business-sdk/bin/clean_account.php
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
#!/usr/bin/env php
|
| 2 |
+
<?php
|
| 3 |
+
/*
|
| 4 |
+
* Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
|
| 5 |
+
*
|
| 6 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
| 7 |
+
* use, copy, modify, and distribute this software in source code or binary
|
| 8 |
+
* form for use in connection with the web services and APIs provided by
|
| 9 |
+
* Facebook.
|
| 10 |
+
*
|
| 11 |
+
* As with any software that integrates with the Facebook platform, your use
|
| 12 |
+
* of this software is subject to the Facebook Developer Principles and
|
| 13 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
| 14 |
+
* shall be included in all copies or substantial portions of the software.
|
| 15 |
+
*
|
| 16 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 17 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 18 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
| 19 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 20 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
| 21 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
| 22 |
+
* DEALINGS IN THE SOFTWARE.
|
| 23 |
+
*
|
| 24 |
+
*/
|
| 25 |
+
|
| 26 |
+
use FacebookAds\Api;
|
| 27 |
+
use FacebookAds\Cursor;
|
| 28 |
+
use FacebookAds\Object\AbstractCrudObject;
|
| 29 |
+
use FacebookAds\Object\AdAccount;
|
| 30 |
+
use FacebookAds\Logger\CurlLogger;
|
| 31 |
+
use FacebookAdsTest\Bootstrap\IntegrationBootstrap;
|
| 32 |
+
|
| 33 |
+
chdir(__DIR__);
|
| 34 |
+
|
| 35 |
+
/** @var IntegrationBootstrap $bootstrap */
|
| 36 |
+
if (in_array('--docsmith-bootstrap', $_SERVER['argv'])) {
|
| 37 |
+
$bootstrap = require_once __DIR__.'/../docsmith/init_integration.php';
|
| 38 |
+
} else {
|
| 39 |
+
$bootstrap = require_once __DIR__.'/../test/init_integration.php';
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
$config = $bootstrap->getConfig();
|
| 43 |
+
|
| 44 |
+
Api::init($config->appId, $config->appSecret, $config->accessToken);
|
| 45 |
+
|
| 46 |
+
if (in_array('--dump', $_SERVER['argv'])) {
|
| 47 |
+
Api::instance()->setLogger(new CurlLogger(STDERR));
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
$get_class_name = function($object) {
|
| 51 |
+
return (new ReflectionClass($object))->getShortName();
|
| 52 |
+
};
|
| 53 |
+
|
| 54 |
+
$delete_object = function(AbstractCrudObject $object) use ($get_class_name) {
|
| 55 |
+
echo sprintf(
|
| 56 |
+
' > Deleting %s %d',
|
| 57 |
+
$get_class_name($object),
|
| 58 |
+
$object->{AbstractCrudObject::FIELD_ID}).PHP_EOL;
|
| 59 |
+
|
| 60 |
+
try {
|
| 61 |
+
$object->deleteSelf();
|
| 62 |
+
} catch (Exception $e) {
|
| 63 |
+
echo sprintf(" > Deletion failed with %s: %s",
|
| 64 |
+
$get_class_name($e),
|
| 65 |
+
$e->getMessage()).PHP_EOL;
|
| 66 |
+
}
|
| 67 |
+
};
|
| 68 |
+
|
| 69 |
+
$clean_edge = function($cursor_provider) use ($get_class_name, $delete_object) {
|
| 70 |
+
try {
|
| 71 |
+
$cursor = call_user_func($cursor_provider);
|
| 72 |
+
if (!$cursor instanceof Cursor) {
|
| 73 |
+
throw new ErrorException(sprintf(
|
| 74 |
+
"Provider returned instance of %s",
|
| 75 |
+
$get_class_name($cursor)));
|
| 76 |
+
}
|
| 77 |
+
$cursor->setUseImplicitFetch(true);
|
| 78 |
+
foreach ($cursor as $object) {
|
| 79 |
+
if (!$object instanceof AbstractCrudObject) {
|
| 80 |
+
throw new ErrorException(sprintf(
|
| 81 |
+
"Provider returned instance of %s, not a CRUD object",
|
| 82 |
+
$get_class_name($object)));
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
$trait = 'FacebookAds\Object\Traits\CannotDelete';
|
| 86 |
+
if (in_array($trait, (new ReflectionClass($object))->getTraitNames())) {
|
| 87 |
+
break;
|
| 88 |
+
}
|
| 89 |
+
$delete_object($object);
|
| 90 |
+
}
|
| 91 |
+
} catch (Exception $e) {
|
| 92 |
+
echo sprintf(" > Edge iteration failed with %s: %s",
|
| 93 |
+
$get_class_name($e),
|
| 94 |
+
$e->getMessage()).PHP_EOL;
|
| 95 |
+
}
|
| 96 |
+
};
|
| 97 |
+
|
| 98 |
+
$account = new AdAccount($config->accountId);
|
| 99 |
+
$reflection = new ReflectionClass($account);
|
| 100 |
+
|
| 101 |
+
foreach ($reflection->getMethods(ReflectionMethod::IS_PUBLIC) as $method) {
|
| 102 |
+
if (
|
| 103 |
+
strncasecmp($method->getName(), 'get', 3) !== 0
|
| 104 |
+
|| preg_match('/@return\s+Cursor/', $method->getDocComment()) !== 1
|
| 105 |
+
) {
|
| 106 |
+
continue;
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
echo sprintf(' > Fetching AdAccount::%s', $method->getName()).PHP_EOL;
|
| 110 |
+
$clean_edge($method->getClosure($account));
|
| 111 |
+
}
|
vendor/facebook/php-business-sdk/bin/create_phar.php
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
|
| 4 |
+
*
|
| 5 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
| 6 |
+
* use, copy, modify, and distribute this software in source code or binary
|
| 7 |
+
* form for use in connection with the web services and APIs provided by
|
| 8 |
+
* Facebook.
|
| 9 |
+
*
|
| 10 |
+
* As with any software that integrates with the Facebook platform, your use
|
| 11 |
+
* of this software is subject to the Facebook Developer Principles and
|
| 12 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
| 13 |
+
* shall be included in all copies or substantial portions of the software.
|
| 14 |
+
*
|
| 15 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 16 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 17 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
| 18 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 19 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
| 20 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
| 21 |
+
* DEALINGS IN THE SOFTWARE.
|
| 22 |
+
*
|
| 23 |
+
*/
|
| 24 |
+
|
| 25 |
+
namespace FacebookAdsBin;
|
| 26 |
+
|
| 27 |
+
use Symfony\Component\Finder\Finder;
|
| 28 |
+
|
| 29 |
+
chdir(__DIR__.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR);
|
| 30 |
+
|
| 31 |
+
require_once 'vendor'.DIRECTORY_SEPARATOR.'autoload.php';
|
| 32 |
+
|
| 33 |
+
// Options
|
| 34 |
+
$include_autoloader = !in_array('--no-autoloader', $_SERVER['argv']);
|
| 35 |
+
$compress_gzip = !in_array('--no-gzip', $_SERVER['argv']);
|
| 36 |
+
|
| 37 |
+
$alias = 'facebook-php-ads-sdk.phar';
|
| 38 |
+
$build_dir = '.'.DIRECTORY_SEPARATOR.'builds'.DIRECTORY_SEPARATOR;
|
| 39 |
+
$out = $build_dir.$alias;
|
| 40 |
+
|
| 41 |
+
if (!is_dir($build_dir)) {
|
| 42 |
+
mkdir($build_dir);
|
| 43 |
+
} else if (file_exists($out)) {
|
| 44 |
+
unlink($out);
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
$phar = new \Phar($out, 0, $alias);
|
| 48 |
+
$phar->setSignatureAlgorithm(\Phar::SHA1);
|
| 49 |
+
if ($compress_gzip) {
|
| 50 |
+
$phar->compressFiles(\Phar::GZ);
|
| 51 |
+
}
|
| 52 |
+
$phar->startBuffering();
|
| 53 |
+
$phar->addFile('LICENSE');
|
| 54 |
+
|
| 55 |
+
$finder = (new Finder())->files()
|
| 56 |
+
->ignoreVCS(true)
|
| 57 |
+
->name('*.php')
|
| 58 |
+
->in('src');
|
| 59 |
+
|
| 60 |
+
foreach ($finder->getIterator() as $file) {
|
| 61 |
+
$phar->addFile($file);
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
$stub = <<<'EOF'
|
| 65 |
+
<?php
|
| 66 |
+
/**
|
| 67 |
+
* Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
|
| 68 |
+
*
|
| 69 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
| 70 |
+
* use, copy, modify, and distribute this software in source code or binary
|
| 71 |
+
* form for use in connection with the web services and APIs provided by
|
| 72 |
+
* Facebook.
|
| 73 |
+
*
|
| 74 |
+
* As with any software that integrates with the Facebook platform, your use
|
| 75 |
+
* of this software is subject to the Facebook Developer Principles and
|
| 76 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
| 77 |
+
* shall be included in all copies or substantial portions of the software.
|
| 78 |
+
*
|
| 79 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 80 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 81 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
| 82 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 83 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
| 84 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
| 85 |
+
* DEALINGS IN THE SOFTWARE.
|
| 86 |
+
*
|
| 87 |
+
*/
|
| 88 |
+
Phar::mapPhar('%s');
|
| 89 |
+
|
| 90 |
+
if (%d) {
|
| 91 |
+
spl_autoload_register(function($class) {
|
| 92 |
+
$prefix = 'FacebookAds\\';
|
| 93 |
+
$base_dir = 'phar://%s/src/FacebookAds/';
|
| 94 |
+
$len = strlen($prefix);
|
| 95 |
+
if (strncmp($prefix, $class, $len) !== 0) {
|
| 96 |
+
return;
|
| 97 |
+
}
|
| 98 |
+
$relative_class = substr($class, $len);
|
| 99 |
+
$file = $base_dir.str_replace(
|
| 100 |
+
'\\', DIRECTORY_SEPARATOR, $relative_class).'.php';
|
| 101 |
+
if (file_exists($file)) {
|
| 102 |
+
require $file;
|
| 103 |
+
}
|
| 104 |
+
});
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
__HALT_COMPILER();
|
| 108 |
+
EOF;
|
| 109 |
+
|
| 110 |
+
|
| 111 |
+
$phar->setStub(sprintf($stub, $alias, $include_autoloader ? 1 : 0, $alias));
|
| 112 |
+
$phar->stopBuffering();
|
vendor/facebook/php-business-sdk/bin/docsmith.php
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
#!/usr/bin/env php
|
| 2 |
+
<?php
|
| 3 |
+
/**
|
| 4 |
+
* Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
|
| 5 |
+
*
|
| 6 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
| 7 |
+
* use, copy, modify, and distribute this software in source code or binary
|
| 8 |
+
* form for use in connection with the web services and APIs provided by
|
| 9 |
+
* Facebook.
|
| 10 |
+
*
|
| 11 |
+
* As with any software that integrates with the Facebook platform, your use
|
| 12 |
+
* of this software is subject to the Facebook Developer Principles and
|
| 13 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
| 14 |
+
* shall be included in all copies or substantial portions of the software.
|
| 15 |
+
*
|
| 16 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 17 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 18 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
| 19 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 20 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
| 21 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
| 22 |
+
* DEALINGS IN THE SOFTWARE.
|
| 23 |
+
*
|
| 24 |
+
*/
|
| 25 |
+
|
| 26 |
+
use FacebookAdsTest\Bootstrap;
|
| 27 |
+
use FacebookAdsDocsmith\Runner;
|
| 28 |
+
use FacebookAdsDocsmith\Runner\ActionsEnum;
|
| 29 |
+
use FacebookAdsDocsmith\Runner\OptionsEnum;
|
| 30 |
+
use FacebookAdsTest\Bootstrap\IntegrationBootstrap;
|
| 31 |
+
|
| 32 |
+
$relative_path = getcwd();
|
| 33 |
+
chdir(__DIR__);
|
| 34 |
+
|
| 35 |
+
/** @var IntegrationBootstrap $bootstrap */
|
| 36 |
+
$bootstrap = require_once __DIR__.'/../docsmith/init_auto.php';
|
| 37 |
+
|
| 38 |
+
if ($argc < 3) {
|
| 39 |
+
Runner::throwInvalidUsage("Insufficient number of arguments");
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
$action = $argv[1];
|
| 43 |
+
if (!ActionsEnum::getInstance()->isValidValue($action)) {
|
| 44 |
+
Runner::throwInvalidUsage("Unknown action {$action}");
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
$doc_path = $argv[2][0] == '/'
|
| 48 |
+
? $argv[2]
|
| 49 |
+
: realpath($relative_path.'/'.$argv[2]);
|
| 50 |
+
|
| 51 |
+
if (!file_exists($doc_path)) {
|
| 52 |
+
Runner::throwInvalidUsage("Can't open {$doc_path} for reading");
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
$opts = array_splice($argv, 3);
|
| 56 |
+
$options = new ArrayObject(
|
| 57 |
+
array_fill_keys(OptionsEnum::getInstance()->getValues(), false));
|
| 58 |
+
|
| 59 |
+
foreach ($opts as $opt) {
|
| 60 |
+
$opt = substr($opt, 1);
|
| 61 |
+
if (OptionsEnum::getInstance()->isValidValue($opt)) {
|
| 62 |
+
$options->offsetSet($opt, true);
|
| 63 |
+
}
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
$runner = new Runner($doc_path, $action, $options);
|
| 67 |
+
|
| 68 |
+
exit($runner->run());
|
vendor/facebook/php-business-sdk/bin/get_version.php
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
#!/usr/bin/env php
|
| 2 |
+
<?php
|
| 3 |
+
/**
|
| 4 |
+
* Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
|
| 5 |
+
*
|
| 6 |
+
* You are hereby granted a non-exclusive, worldwide, royalty-free license to
|
| 7 |
+
* use, copy, modify, and distribute this software in source code or binary
|
| 8 |
+
* form for use in connection with the web services and APIs provided by
|
| 9 |
+
* Facebook.
|
| 10 |
+
*
|
| 11 |
+
* As with any software that integrates with the Facebook platform, your use
|
| 12 |
+
* of this software is subject to the Facebook Developer Principles and
|
| 13 |
+
* Policies [http://developers.facebook.com/policy/]. This copyright notice
|
| 14 |
+
* shall be included in all copies or substantial portions of the software.
|
| 15 |
+
*
|
| 16 |
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 17 |
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 18 |
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
| 19 |
+
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 20 |
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
| 21 |
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
| 22 |
+
* DEALINGS IN THE SOFTWARE.
|
| 23 |
+
*
|
| 24 |
+
*/
|
| 25 |
+
|
| 26 |
+
use \FacebookAdsDocsmith\Bootstrap\IntegrationBootstrap;
|
| 27 |
+
use FacebookAds\Api;
|
| 28 |
+
|
| 29 |
+
chdir(__DIR__);
|
| 30 |
+
|
| 31 |
+
/** @var IntegrationBootstrap $bootstrap */
|
| 32 |
+
$bootstrap = require_once __DIR__.'/../docsmith/init_stub.php';
|
| 33 |
+
|
| 34 |
+
echo sprintf('v%s', Api::init('', '', '')->getDefaultGraphVersion()).PHP_EOL;
|
vendor/facebook/php-business-sdk/composer.json
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
{
|
| 2 |
+
"name": "facebook/php-business-sdk",
|
| 3 |
+
"description": "PHP SDK for Facebook Business",
|
| 4 |
+
"type": "library",
|
| 5 |
+
"keywords": [
|
| 6 |
+
"facebook",
|
| 7 |
+
"ads",
|
| 8 |
+
"business",
|
| 9 |
+
"sdk",
|
| 10 |
+
"instagram",
|
| 11 |
+
"page"
|
| 12 |
+
],
|
| 13 |
+
"homepage": "https://developers.facebook.com/",
|
| 14 |
+
"require-dev": {
|
| 15 |
+
"phpunit/phpunit": "~8",
|
| 16 |
+
"symfony/finder": "~2.6"
|
| 17 |
+
},
|
| 18 |
+
"autoload": {
|
| 19 |
+
"psr-4": {
|
| 20 |
+
"FacebookAds\\": "src/FacebookAds/"
|
| 21 |
+
}
|
| 22 |
+
}
|
| 23 |
+
}
|
vendor/facebook/php-business-sdk/fb_ca_chain_bundle.crt
ADDED
|
@@ -0,0 +1,3920 @@
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
|
|
Â
|
| 1 |
+
##
|
| 2 |
+
## ca-bundle.crt -- Bundle of CA Root Certificates
|
| 3 |
+
##
|
| 4 |
+
## Certificate data from Mozilla as of: Thu Oct 18 19:05:59 2012
|
| 5 |
+
##
|
| 6 |
+
## This is a bundle of X.509 certificates of public Certificate Authorities
|
| 7 |
+
## (CA). These were automatically extracted from Mozilla's root certificates
|
| 8 |
+
## file (certdata.txt). This file can be found in the mozilla source tree:
|
| 9 |
+
## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
|
| 10 |
+
##
|
| 11 |
+
## It contains the certificates in PEM format and therefore
|
| 12 |
+
## can be directly used with curl / libcurl / php_curl, or with
|
| 13 |
+
## an Apache+mod_ssl webserver for SSL client authentication.
|
| 14 |
+
## Just configure this file as the SSLCACertificateFile.
|
| 15 |
+
##
|
| 16 |
+
|
| 17 |
+
# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.86 $ $Date: 2012/10/18 16:26:52 $
|
| 18 |
+
|
| 19 |
+
GTE CyberTrust Global Root
|
| 20 |
+
==========================
|
| 21 |
+
-----BEGIN CERTIFICATE-----
|
| 22 |
+
MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg
|
| 23 |
+
Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG
|
| 24 |
+
A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz
|
| 25 |
+
MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL
|
| 26 |
+
Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0
|
| 27 |
+
IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u
|
| 28 |
+
sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql
|
| 29 |
+
HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID
|
| 30 |
+
AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW
|
| 31 |
+
M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF
|
| 32 |
+
NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
|
| 33 |
+
-----END CERTIFICATE-----
|
| 34 |
+
|
| 35 |
+
Thawte Server CA
|
| 36 |
+
================
|
| 37 |
+
-----BEGIN CERTIFICATE-----
|
| 38 |
+
MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
|
| 39 |
+
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
|
| 40 |
+
dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE
|
| 41 |
+
AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j
|
| 42 |
+
b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV
|
| 43 |
+
BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u
|
| 44 |
+
c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG
|
| 45 |
+
A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
|
| 46 |
+
ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl
|
| 47 |
+
/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7
|
| 48 |
+
1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR
|
| 49 |
+
MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J
|
| 50 |
+
GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ
|
| 51 |
+
GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
|
| 52 |
+
-----END CERTIFICATE-----
|
| 53 |
+
|
| 54 |
+
Thawte Premium Server CA
|
| 55 |
+
========================
|
| 56 |
+
-----BEGIN CERTIFICATE-----
|
| 57 |
+
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
|
| 58 |
+
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
|
| 59 |
+
dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
|
| 60 |
+
AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
|
| 61 |
+
ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
|
| 62 |
+
AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
|
| 63 |
+
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
|
| 64 |
+
aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
|
| 65 |
+
cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
|
| 66 |
+
aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
|
| 67 |
+
Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
|
| 68 |
+
qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
|
| 69 |
+
SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
|
| 70 |
+
8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
|
| 71 |
+
UCemDaYj+bvLpgcUQg==
|
| 72 |
+
-----END CERTIFICATE-----
|
| 73 |
+
|
| 74 |
+
Equifax Secure CA
|
| 75 |
+
=================
|
| 76 |
+
-----BEGIN CERTIFICATE-----
|
| 77 |
+
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
|
| 78 |
+
ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
|
| 79 |
+
MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
|
| 80 |
+
B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
|
| 81 |
+
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
|
| 82 |
+
fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
|
| 83 |
+
8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
|
| 84 |
+
A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
|
| 85 |
+
CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
|
| 86 |
+
A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
|
| 87 |
+
spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
|
| 88 |
+
Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
|
| 89 |
+
zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
|
| 90 |
+
BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
|
| 91 |
+
70+sB3c4
|
| 92 |
+
-----END CERTIFICATE-----
|
| 93 |
+
|
| 94 |
+
Digital Signature Trust Co. Global CA 1
|
| 95 |
+
=======================================
|
| 96 |
+
-----BEGIN CERTIFICATE-----
|
| 97 |
+
MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
|
| 98 |
+
ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy
|
| 99 |
+
MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
|
| 100 |
+
IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA
|
| 101 |
+
A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE
|
| 102 |
+
NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i
|
| 103 |
+
o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
|
| 104 |
+
BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
|
| 105 |
+
dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
|
| 106 |
+
IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY
|
| 107 |
+
MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM
|
| 108 |
+
BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
|
| 109 |
+
ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq
|
| 110 |
+
kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4
|
| 111 |
+
RbyhkwS7hp86W0N6w4pl
|
| 112 |
+
-----END CERTIFICATE-----
|
| 113 |
+
|
| 114 |
+
Digital Signature Trust Co. Global CA 3
|
| 115 |
+
=======================================
|
| 116 |
+
-----BEGIN CERTIFICATE-----
|
| 117 |
+
MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE
|
| 118 |
+
ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy
|
| 119 |
+
MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs
|
| 120 |
+
IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA
|
| 121 |
+
A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD
|
| 122 |
+
VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS
|
| 123 |
+
xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo
|
| 124 |
+
BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0
|
| 125 |
+
dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
|
| 126 |
+
IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
|
| 127 |
+
MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM
|
| 128 |
+
BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB
|
| 129 |
+
AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi
|
| 130 |
+
up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1
|
| 131 |
+
mPnHfxsb1gYgAlihw6ID
|
| 132 |
+
-----END CERTIFICATE-----
|
| 133 |
+
|
| 134 |
+
Verisign Class 3 Public Primary Certification Authority
|
| 135 |
+
=======================================================
|
| 136 |
+
-----BEGIN CERTIFICATE-----
|
| 137 |
+
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx
|
| 138 |
+
FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5
|
| 139 |
+
IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
|
| 140 |
+
XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz
|
| 141 |
+
IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
|
| 142 |
+
A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94
|
| 143 |
+
f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol
|
| 144 |
+
hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA
|
| 145 |
+
TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah
|
| 146 |
+
WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf
|
| 147 |
+
Tqj/ZA1k
|
| 148 |
+
-----END CERTIFICATE-----
|
| 149 |
+
|
| 150 |
+
Verisign Class 1 Public Primary Certification Authority - G2
|
| 151 |
+
============================================================
|
| 152 |
+
-----BEGIN CERTIFICATE-----
|
| 153 |
+
MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
|
| 154 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
|
| 155 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
| 156 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
| 157 |
+
dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
|
| 158 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy
|
| 159 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
| 160 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
| 161 |
+
dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd
|
| 162 |
+
k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq
|
| 163 |
+
WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB
|
| 164 |
+
MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM
|
| 165 |
+
XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC
|
| 166 |
+
lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ
|
| 167 |
+
-----END CERTIFICATE-----
|
| 168 |
+
|
| 169 |
+
Verisign Class 2 Public Primary Certification Authority - G2
|
| 170 |
+
============================================================
|
| 171 |
+
-----BEGIN CERTIFICATE-----
|
| 172 |
+
MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV
|
| 173 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
|
| 174 |
+
cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
|
| 175 |
+
Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
|
| 176 |
+
c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV
|
| 177 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h
|
| 178 |
+
cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp
|
| 179 |
+
Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
|
| 180 |
+
c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx
|
| 181 |
+
nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC
|
| 182 |
+
wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA
|
| 183 |
+
ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK
|
| 184 |
+
1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk
|
| 185 |
+
LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg==
|
| 186 |
+
-----END CERTIFICATE-----
|
| 187 |
+
|
| 188 |
+
Verisign Class 3 Public Primary Certification Authority - G2
|
| 189 |
+
============================================================
|
| 190 |
+
-----BEGIN CERTIFICATE-----
|
| 191 |
+
MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT
|
| 192 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
|
| 193 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
| 194 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
| 195 |
+
dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT
|
| 196 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
|
| 197 |
+
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln
|
| 198 |
+
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz
|
| 199 |
+
dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO
|
| 200 |
+
FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71
|
| 201 |
+
lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB
|
| 202 |
+
MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT
|
| 203 |
+
1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD
|
| 204 |
+
Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9
|
| 205 |
+
-----END CERTIFICATE-----
|
| 206 |
+
|
| 207 |
+
GlobalSign Root CA
|
| 208 |
+
==================
|
| 209 |
+
-----BEGIN CERTIFICATE-----
|
| 210 |
+
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
|
| 211 |
+
GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
|
| 212 |
+
b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
|
| 213 |
+
BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
|
| 214 |
+
VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
|
| 215 |
+
DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
|
| 216 |
+
THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
|
| 217 |
+
Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
|
| 218 |
+
c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
|
| 219 |
+
gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
|
| 220 |
+
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
|
| 221 |
+
AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
|
| 222 |
+
Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
|
| 223 |
+
j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
|
| 224 |
+
hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
|
| 225 |
+
X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
|
| 226 |
+
-----END CERTIFICATE-----
|
| 227 |
+
|
| 228 |
+
GlobalSign Root CA - R2
|
| 229 |
+
=======================
|
| 230 |
+
-----BEGIN CERTIFICATE-----
|
| 231 |
+
MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
|
| 232 |
+
YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
|
| 233 |
+
bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
|
| 234 |
+
aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
|
| 235 |
+
bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
|
| 236 |
+
ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
|
| 237 |
+
s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
|
| 238 |
+
S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
|
| 239 |
+
TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
|
| 240 |
+
ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
|
| 241 |
+
FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
|
| 242 |
+
YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
|
| 243 |
+
BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
|
| 244 |
+
9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
|
| 245 |
+
01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
|
| 246 |
+
9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
|
| 247 |
+
TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
|
| 248 |
+
-----END CERTIFICATE-----
|
| 249 |
+
|
| 250 |
+
ValiCert Class 1 VA
|
| 251 |
+
===================
|
| 252 |
+
-----BEGIN CERTIFICATE-----
|
| 253 |
+
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
|
| 254 |
+
b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
| 255 |
+
YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
|
| 256 |
+
bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy
|
| 257 |
+
MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
|
| 258 |
+
d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg
|
| 259 |
+
UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
|
| 260 |
+
LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
|
| 261 |
+
A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi
|
| 262 |
+
GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm
|
| 263 |
+
DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG
|
| 264 |
+
lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX
|
| 265 |
+
icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP
|
| 266 |
+
Orf1LXLI
|
| 267 |
+
-----END CERTIFICATE-----
|
| 268 |
+
|
| 269 |
+
ValiCert Class 2 VA
|
| 270 |
+
===================
|
| 271 |
+
-----BEGIN CERTIFICATE-----
|
| 272 |
+
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
|
| 273 |
+
b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
| 274 |
+
YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
|
| 275 |
+
bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
|
| 276 |
+
MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
|
| 277 |
+
d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg
|
| 278 |
+
UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
|
| 279 |
+
LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
|
| 280 |
+
A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC
|
| 281 |
+
CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf
|
| 282 |
+
ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ
|
| 283 |
+
SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV
|
| 284 |
+
UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8
|
| 285 |
+
W9ViH0Pd
|
| 286 |
+
-----END CERTIFICATE-----
|
| 287 |
+
|
| 288 |
+
RSA Root Certificate 1
|
| 289 |
+
======================
|
| 290 |
+
-----BEGIN CERTIFICATE-----
|
| 291 |
+
MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp
|
| 292 |
+
b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
|
| 293 |
+
YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh
|
| 294 |
+
bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw
|
| 295 |
+
MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0
|
| 296 |
+
d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg
|
| 297 |
+
UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0
|
| 298 |
+
LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA
|
| 299 |
+
A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td
|
| 300 |
+
3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H
|
| 301 |
+
BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs
|
| 302 |
+
3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF
|
| 303 |
+
V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r
|
| 304 |
+
on+jjBXu
|
| 305 |
+
-----END CERTIFICATE-----
|
| 306 |
+
|
| 307 |
+
Verisign Class 1 Public Primary Certification Authority - G3
|
| 308 |
+
============================================================
|
| 309 |
+
-----BEGIN CERTIFICATE-----
|
| 310 |
+
MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
|
| 311 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
| 312 |
+
cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
| 313 |
+
IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
|
| 314 |
+
dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
|
| 315 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
|
| 316 |
+
dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
|
| 317 |
+
cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg
|
| 318 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
| 319 |
+
ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E
|
| 320 |
+
bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ
|
| 321 |
+
rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+
|
| 322 |
+
Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB
|
| 323 |
+
FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
|
| 324 |
+
q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N
|
| 325 |
+
y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
|
| 326 |
+
ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h
|
| 327 |
+
a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc
|
| 328 |
+
D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
|
| 329 |
+
-----END CERTIFICATE-----
|
| 330 |
+
|
| 331 |
+
Verisign Class 2 Public Primary Certification Authority - G3
|
| 332 |
+
============================================================
|
| 333 |
+
-----BEGIN CERTIFICATE-----
|
| 334 |
+
MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT
|
| 335 |
+
MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y
|
| 336 |
+
azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug
|
| 337 |
+
b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0
|
| 338 |
+
aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ
|
| 339 |
+
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1
|
| 340 |
+
c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
|
| 341 |
+
aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD
|
| 342 |
+
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
| 343 |
+
AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6
|
| 344 |
+
tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7
|
| 345 |
+
C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS
|
| 346 |
+
0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs
|
| 347 |
+
Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0
|
| 348 |
+
JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf
|
| 349 |
+
0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
|
| 350 |
+
sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx
|
| 351 |
+
JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j
|
| 352 |
+
GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
|
| 353 |
+
-----END CERTIFICATE-----
|
| 354 |
+
|
| 355 |
+
Verisign Class 3 Public Primary Certification Authority - G3
|
| 356 |
+
============================================================
|
| 357 |
+
-----BEGIN CERTIFICATE-----
|
| 358 |
+
MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
|
| 359 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
| 360 |
+
cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
| 361 |
+
IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
|
| 362 |
+
dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
|
| 363 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
|
| 364 |
+
dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
|
| 365 |
+
cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
|
| 366 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
| 367 |
+
ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
|
| 368 |
+
EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
|
| 369 |
+
cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
|
| 370 |
+
EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
|
| 371 |
+
055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
|
| 372 |
+
ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
|
| 373 |
+
j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
|
| 374 |
+
/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
|
| 375 |
+
xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
|
| 376 |
+
t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
|
| 377 |
+
-----END CERTIFICATE-----
|
| 378 |
+
|
| 379 |
+
Verisign Class 4 Public Primary Certification Authority - G3
|
| 380 |
+
============================================================
|
| 381 |
+
-----BEGIN CERTIFICATE-----
|
| 382 |
+
MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
|
| 383 |
+
UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
|
| 384 |
+
cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
|
| 385 |
+
IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
|
| 386 |
+
dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
|
| 387 |
+
CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
|
| 388 |
+
dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
|
| 389 |
+
cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
|
| 390 |
+
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
| 391 |
+
ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
|
| 392 |
+
tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
|
| 393 |
+
8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
|
| 394 |
+
Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
|
| 395 |
+
Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
|
| 396 |
+
j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
|
| 397 |
+
mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
|
| 398 |
+
fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
|
| 399 |
+
RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
|
| 400 |
+
UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
|
| 401 |
+
-----END CERTIFICATE-----
|
| 402 |
+
|
| 403 |
+
Entrust.net Secure Server CA
|
| 404 |
+
============================
|
| 405 |
+
-----BEGIN CERTIFICATE-----
|
| 406 |
+
MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV
|
| 407 |
+
BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg
|
| 408 |
+
cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl
|
| 409 |
+
ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv
|
| 410 |
+
cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG
|
| 411 |
+
A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi
|
| 412 |
+
eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p
|
| 413 |
+
dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0
|
| 414 |
+
aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ
|
| 415 |
+
aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5
|
| 416 |
+
gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw
|
| 417 |
+
ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw
|
| 418 |
+
CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l
|
| 419 |
+
dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
|
| 420 |
+
bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
|
| 421 |
+
cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
|
| 422 |
+
dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw
|
| 423 |
+
NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow
|
| 424 |
+
HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
|
| 425 |
+
BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN
|
| 426 |
+
Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9
|
| 427 |
+
n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
|
| 428 |
+
-----END CERTIFICATE-----
|
| 429 |
+
|
| 430 |
+
Entrust.net Premium 2048 Secure Server CA
|
| 431 |
+
=========================================
|
| 432 |
+
-----BEGIN CERTIFICATE-----
|
| 433 |
+
MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
|
| 434 |
+
ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
|
| 435 |
+
bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
|
| 436 |
+
BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
|
| 437 |
+
NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
|
| 438 |
+
d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
|
| 439 |
+
MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
|
| 440 |
+
ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
| 441 |
+
MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
|
| 442 |
+
Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
|
| 443 |
+
hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
|
| 444 |
+
nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
|
| 445 |
+
VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC
|
| 446 |
+
AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER
|
| 447 |
+
gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
|
| 448 |
+
AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
|
| 449 |
+
oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS
|
| 450 |
+
o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z
|
| 451 |
+
2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX
|
| 452 |
+
OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
|
| 453 |
+
-----END CERTIFICATE-----
|
| 454 |
+
|
| 455 |
+
Baltimore CyberTrust Root
|
| 456 |
+
=========================
|
| 457 |
+
-----BEGIN CERTIFICATE-----
|
| 458 |
+
MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
|
| 459 |
+
ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
|
| 460 |
+
ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
|
| 461 |
+
SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
|
| 462 |
+
dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
|
| 463 |
+
uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
|
| 464 |
+
UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
|
| 465 |
+
G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
|
| 466 |
+
XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
|
| 467 |
+
l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
|
| 468 |
+
VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
|
| 469 |
+
BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
|
| 470 |
+
cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
|
| 471 |
+
hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
|
| 472 |
+
Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
|
| 473 |
+
RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
|
| 474 |
+
-----END CERTIFICATE-----
|
| 475 |
+
|
| 476 |
+
Equifax Secure Global eBusiness CA
|
| 477 |
+
==================================
|
| 478 |
+
-----BEGIN CERTIFICATE-----
|
| 479 |
+
MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
| 480 |
+
RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp
|
| 481 |
+
bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx
|
| 482 |
+
HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds
|
| 483 |
+
b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV
|
| 484 |
+
PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN
|
| 485 |
+
qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn
|
| 486 |
+
hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j
|
| 487 |
+
BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs
|
| 488 |
+
MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN
|
| 489 |
+
I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY
|
| 490 |
+
NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
|
| 491 |
+
-----END CERTIFICATE-----
|
| 492 |
+
|
| 493 |
+
Equifax Secure eBusiness CA 1
|
| 494 |
+
=============================
|
| 495 |
+
-----BEGIN CERTIFICATE-----
|
| 496 |
+
MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
| 497 |
+
RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB
|
| 498 |
+
LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE
|
| 499 |
+
ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz
|
| 500 |
+
IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ
|
| 501 |
+
1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a
|
| 502 |
+
IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk
|
| 503 |
+
MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW
|
| 504 |
+
Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF
|
| 505 |
+
AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5
|
| 506 |
+
lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+
|
| 507 |
+
KpYrtWKmpj29f5JZzVoqgrI3eQ==
|
| 508 |
+
-----END CERTIFICATE-----
|
| 509 |
+
|
| 510 |
+
Equifax Secure eBusiness CA 2
|
| 511 |
+
=============================
|
| 512 |
+
-----BEGIN CERTIFICATE-----
|
| 513 |
+
MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE
|
| 514 |
+
ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
|
| 515 |
+
MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT
|
| 516 |
+
DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB
|
| 517 |
+
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn
|
| 518 |
+
2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5
|
| 519 |
+
BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG
|
| 520 |
+
A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx
|
| 521 |
+
JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG
|
| 522 |
+
A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e
|
| 523 |
+
uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB
|
| 524 |
+
Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1
|
| 525 |
+
jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia
|
| 526 |
+
78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm
|
| 527 |
+
V+GRMOrN
|
| 528 |
+
-----END CERTIFICATE-----
|
| 529 |
+
|
| 530 |
+
AddTrust Low-Value Services Root
|
| 531 |
+
================================
|
| 532 |
+
-----BEGIN CERTIFICATE-----
|
| 533 |
+
MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
| 534 |
+
QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
|
| 535 |
+
cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
|
| 536 |
+
CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
|
| 537 |
+
ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
|
| 538 |
+
AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
|
| 539 |
+
54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
|
| 540 |
+
oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
|
| 541 |
+
Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
|
| 542 |
+
GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
|
| 543 |
+
HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
|
| 544 |
+
AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
|
| 545 |
+
RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
|
| 546 |
+
HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
|
| 547 |
+
ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
|
| 548 |
+
iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
|
| 549 |
+
eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
|
| 550 |
+
mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
|
| 551 |
+
ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
|
| 552 |
+
-----END CERTIFICATE-----
|
| 553 |
+
|
| 554 |
+
AddTrust External Root
|
| 555 |
+
======================
|
| 556 |
+
-----BEGIN CERTIFICATE-----
|
| 557 |
+
MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
| 558 |
+
QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
|
| 559 |
+
VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
|
| 560 |
+
NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
|
| 561 |
+
cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
|
| 562 |
+
Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
|
| 563 |
+
+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
|
| 564 |
+
Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
|
| 565 |
+
aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
|
| 566 |
+
2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
|
| 567 |
+
7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
|
| 568 |
+
BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
|
| 569 |
+
VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
|
| 570 |
+
VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
|
| 571 |
+
IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
|
| 572 |
+
j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
|
| 573 |
+
6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
|
| 574 |
+
e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
|
| 575 |
+
G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
|
| 576 |
+
-----END CERTIFICATE-----
|
| 577 |
+
|
| 578 |
+
AddTrust Public Services Root
|
| 579 |
+
=============================
|
| 580 |
+
-----BEGIN CERTIFICATE-----
|
| 581 |
+
MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
| 582 |
+
QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
|
| 583 |
+
cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
|
| 584 |
+
BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
|
| 585 |
+
dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
|
| 586 |
+
AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
|
| 587 |
+
nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
|
| 588 |
+
d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
|
| 589 |
+
Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
|
| 590 |
+
HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
|
| 591 |
+
A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
|
| 592 |
+
/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
|
| 593 |
+
FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
|
| 594 |
+
A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
|
| 595 |
+
JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
|
| 596 |
+
+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
|
| 597 |
+
GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
|
| 598 |
+
Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
|
| 599 |
+
EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
|
| 600 |
+
-----END CERTIFICATE-----
|
| 601 |
+
|
| 602 |
+
AddTrust Qualified Certificates Root
|
| 603 |
+
====================================
|
| 604 |
+
-----BEGIN CERTIFICATE-----
|
| 605 |
+
MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
|
| 606 |
+
QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
|
| 607 |
+
cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
|
| 608 |
+
CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
|
| 609 |
+
IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
|
| 610 |
+
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
|
| 611 |
+
64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
|
| 612 |
+
KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
|
| 613 |
+
L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
|
| 614 |
+
wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
|
| 615 |
+
MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
|
| 616 |
+
BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
|
| 617 |
+
BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
|
| 618 |
+
azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
|
| 619 |
+
ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
|
| 620 |
+
GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
|
| 621 |
+
dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
|
| 622 |
+
RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
|
| 623 |
+
iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
|
| 624 |
+
-----END CERTIFICATE-----
|
| 625 |
+
|
| 626 |
+
Entrust Root Certification Authority
|
| 627 |
+
====================================
|
| 628 |
+
-----BEGIN CERTIFICATE-----
|
| 629 |
+
MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
|
| 630 |
+
BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
|
| 631 |
+
b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
|
| 632 |
+
A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
|
| 633 |
+
MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
|
| 634 |
+
MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
|
| 635 |
+
Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
|
| 636 |
+
dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
| 637 |
+
ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
|
| 638 |
+
A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
|
| 639 |
+
Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
|
| 640 |
+
j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
|
| 641 |
+
rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
|
| 642 |
+
DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
|
| 643 |
+
MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
|
| 644 |
+
hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
|
| 645 |
+
A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
|
| 646 |
+
Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
|
| 647 |
+
v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
|
| 648 |
+
W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
|
| 649 |
+
tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
|
| 650 |
+
-----END CERTIFICATE-----
|
| 651 |
+
|
| 652 |
+
RSA Security 2048 v3
|
| 653 |
+
====================
|
| 654 |
+
-----BEGIN CERTIFICATE-----
|
| 655 |
+
MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
|
| 656 |
+
ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
|
| 657 |
+
MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
|
| 658 |
+
BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
| 659 |
+
AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
|
| 660 |
+
Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
|
| 661 |
+
WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
|
| 662 |
+
KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
|
| 663 |
+
+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
|
| 664 |
+
MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
|
| 665 |
+
FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
|
| 666 |
+
v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
|
| 667 |
+
0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
|
| 668 |
+
VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
|
| 669 |
+
nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
|
| 670 |
+
pKnXwiJPZ9d37CAFYd4=
|
| 671 |
+
-----END CERTIFICATE-----
|
| 672 |
+
|
| 673 |
+
GeoTrust Global CA
|
| 674 |
+
==================
|
| 675 |
+
-----BEGIN CERTIFICATE-----
|
| 676 |
+
MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
|
| 677 |
+
Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
|
| 678 |
+
MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
|
| 679 |
+
LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
| 680 |
+
CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
|
| 681 |
+
BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
|
| 682 |
+
8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
|
| 683 |
+
T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
|
| 684 |
+
vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
|
| 685 |
+
AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
|
| 686 |
+
DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
|
| 687 |
+
zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
|
| 688 |
+
d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
|
| 689 |
+
mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
|
| 690 |
+
XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
|
| 691 |
+
Mw==
|
| 692 |
+
-----END CERTIFICATE-----
|
| 693 |
+
|
| 694 |
+
GeoTrust Global CA 2
|
| 695 |
+
====================
|
| 696 |
+
-----BEGIN CERTIFICATE-----
|
| 697 |
+
MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
|
| 698 |
+
R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
|
| 699 |
+
MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
|
| 700 |
+
LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
|
| 701 |
+
ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
|
| 702 |
+
NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
|
| 703 |
+
LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
|
| 704 |
+
Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
|
| 705 |
+
HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
|
| 706 |
+
MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
|
| 707 |
+
K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
|
| 708 |
+
srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
|
| 709 |
+
ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
|
| 710 |
+
OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
|
| 711 |
+
x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
|
| 712 |
+
H4z1Ir+rzoPz4iIprn2DQKi6bA==
|
| 713 |
+
-----END CERTIFICATE-----
|
| 714 |
+
|
| 715 |
+
GeoTrust Universal CA
|
| 716 |
+
=====================
|
| 717 |
+
-----BEGIN CERTIFICATE-----
|
| 718 |
+
MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
|
| 719 |
+
R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
|
| 720 |
+
MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
|
| 721 |
+
Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
|
| 722 |
+
ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
|
| 723 |
+
JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
|
| 724 |
+
RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
|
| 725 |
+
7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
|
| 726 |
+
8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
|
| 727 |
+
qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
|
| 728 |
+
Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
|
| 729 |
+
Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
|
| 730 |
+
KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
|
| 731 |
+
ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
|
| 732 |
+
XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
|
| 733 |
+
hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
|
| 734 |
+
aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
|
| 735 |
+
qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
|
| 736 |
+
oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
|
| 737 |
+
xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
|
| 738 |
+
KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
|
| 739 |
+
DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
|
| 740 |
+
xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
|
| 741 |
+
p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
|
| 742 |
+
P/rmMuGNG2+k5o7Y+SlIis5z/iw=
|
| 743 |
+
-----END CERTIFICATE-----
|
| 744 |
+
|
| 745 |
+
GeoTrust Universal CA 2
|
| 746 |
+
=======================
|
| 747 |
+
-----BEGIN CERTIFICATE-----
|
| 748 |
+
MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
|
| 749 |
+
R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
|
| 750 |
+
MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
|
| 751 |
+
SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
|
| 752 |
+
A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
|
| 753 |
+
DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
|
| 754 |
+
j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
|
| 755 |
+
JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
|
| 756 |
+
QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
|
| 757 |
+
WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
|
| 758 |
+
20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
|
| 759 |
+
ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
|
| 760 |
+
SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
|
| 761 |
+
8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
|
| 762 |
+
+/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
|
| 763 |
+
BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
|
| 764 |
+
dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
|
| 765 |
+
4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
|
| 766 |
+
mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
|
| 767 |
+
A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
|
| 768 |
+
Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
|
| 769 |
+
pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
|
| 770 |
+
FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
|
| 771 |
+
gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
|
| 772 |
+
X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
|
| 773 |
+
-----END CERTIFICATE-----
|
| 774 |
+
|
| 775 |
+
UTN-USER First-Network Applications
|
| 776 |
+
===================================
|
| 777 |
+
-----BEGIN CERTIFICATE-----
|
| 778 |
+
MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE
|
| 779 |
+
BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
|
| 780 |
+
IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp
|
| 781 |
+
BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5
|
| 782 |
+
WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T
|
| 783 |
+
YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
|
| 784 |
+
dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB
|
| 785 |
+
cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug
|
| 786 |
+
mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj
|
| 787 |
+
DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu
|
| 788 |
+
Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi
|
| 789 |
+
P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE
|
| 790 |
+
j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w
|
| 791 |
+
HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j
|
| 792 |
+
cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G
|
| 793 |
+
CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
|
| 794 |
+
IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK
|
| 795 |
+
RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp
|
| 796 |
+
xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq
|
| 797 |
+
DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE
|
| 798 |
+
-----END CERTIFICATE-----
|
| 799 |
+
|
| 800 |
+
America Online Root Certification Authority 1
|
| 801 |
+
=============================================
|
| 802 |
+
-----BEGIN CERTIFICATE-----
|
| 803 |
+
MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
| 804 |
+
QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
|
| 805 |
+
Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG
|
| 806 |
+
A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
|
| 807 |
+
T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD
|
| 808 |
+
ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG
|
| 809 |
+
v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z
|
| 810 |
+
DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh
|
| 811 |
+
sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP
|
| 812 |
+
8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T
|
| 813 |
+
AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z
|
| 814 |
+
o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf
|
| 815 |
+
GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF
|
| 816 |
+
VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft
|
| 817 |
+
3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
|
| 818 |
+
Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
|
| 819 |
+
sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
|
| 820 |
+
-----END CERTIFICATE-----
|
| 821 |
+
|
| 822 |
+
America Online Root Certification Authority 2
|
| 823 |
+
=============================================
|
| 824 |
+
-----BEGIN CERTIFICATE-----
|
| 825 |
+
MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT
|
| 826 |
+
QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp
|
| 827 |
+
Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG
|
| 828 |
+
A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg
|
| 829 |
+
T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD
|
| 830 |
+
ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en
|
| 831 |
+
fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8
|
| 832 |
+
f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO
|
| 833 |
+
qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN
|
| 834 |
+
RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0
|
| 835 |
+
gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn
|
| 836 |
+
6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid
|
| 837 |
+
FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6
|
| 838 |
+
Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj
|
| 839 |
+
B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
|
| 840 |
+
aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
|
| 841 |
+
AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY
|
| 842 |
+
T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p
|
| 843 |
+
+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg
|
| 844 |
+
JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy
|
| 845 |
+
zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO
|
| 846 |
+
ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh
|
| 847 |
+
1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf
|
| 848 |
+
GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff
|
| 849 |
+
Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP
|
| 850 |
+
cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk=
|
| 851 |
+
-----END CERTIFICATE-----
|
| 852 |
+
|
| 853 |
+
Visa eCommerce Root
|
| 854 |
+
===================
|
| 855 |
+
-----BEGIN CERTIFICATE-----
|
| 856 |
+
MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
|
| 857 |
+
EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
|
| 858 |
+
QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
|
| 859 |
+
WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
|
| 860 |
+
VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
|
| 861 |
+
bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
|
| 862 |
+
F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
|
| 863 |
+
RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
|
| 864 |
+
TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
|
| 865 |
+
/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
|
| 866 |
+
GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
|
| 867 |
+
MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
|
| 868 |
+
CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
|
| 869 |
+
YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
|
| 870 |
+
zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
|
| 871 |
+
YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
|
| 872 |
+
398znM/jra6O1I7mT1GvFpLgXPYHDw==
|
| 873 |
+
-----END CERTIFICATE-----
|
| 874 |
+
|
| 875 |
+
Certum Root CA
|
| 876 |
+
==============
|
| 877 |
+
-----BEGIN CERTIFICATE-----
|
| 878 |
+
MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
|
| 879 |
+
ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
|
| 880 |
+
Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
|
| 881 |
+
by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
|
| 882 |
+
wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
|
| 883 |
+
kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
|
| 884 |
+
89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
|
| 885 |
+
Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
|
| 886 |
+
NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
|
| 887 |
+
hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
|
| 888 |
+
GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
|
| 889 |
+
GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
|
| 890 |
+
0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
|
| 891 |
+
qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
|
| 892 |
+
-----END CERTIFICATE-----
|
| 893 |
+
|
| 894 |
+
Comodo AAA Services root
|
| 895 |
+
========================
|
| 896 |
+
-----BEGIN CERTIFICATE-----
|
| 897 |
+
MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
|
| 898 |
+
R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
|
| 899 |
+
TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
|
| 900 |
+
MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
|
| 901 |
+
c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
|
| 902 |
+
BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
|
| 903 |
+
ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
|
| 904 |
+
C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
|
| 905 |
+
i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
|
| 906 |
+
Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
|
| 907 |
+
Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
|
| 908 |
+
Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
|
| 909 |
+
BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
|
| 910 |
+
cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
|
| 911 |
+
LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
|
| 912 |
+
7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
|
| 913 |
+
Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
|
| 914 |
+
8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
|
| 915 |
+
12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
|
| 916 |
+
-----END CERTIFICATE-----
|
| 917 |
+
|
| 918 |
+
Comodo Secure Services root
|
| 919 |
+
===========================
|
| 920 |
+
-----BEGIN CERTIFICATE-----
|
| 921 |
+
MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
|
| 922 |
+
R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
|
| 923 |
+
TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
|
| 924 |
+
MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
|
| 925 |
+
Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
|
| 926 |
+
BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
| 927 |
+
ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
|
| 928 |
+
9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
|
| 929 |
+
rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
|
| 930 |
+
oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
|
| 931 |
+
p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
|
| 932 |
+
FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
|
| 933 |
+
gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
|
| 934 |
+
YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
|
| 935 |
+
aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
|
| 936 |
+
4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
|
| 937 |
+
Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
|
| 938 |
+
DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
|
| 939 |
+
pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
|
| 940 |
+
RR3B7Hzs/Sk=
|
| 941 |
+
-----END CERTIFICATE-----
|
| 942 |
+
|
| 943 |
+
Comodo Trusted Services root
|
| 944 |
+
============================
|
| 945 |
+
-----BEGIN CERTIFICATE-----
|
| 946 |
+
MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
|
| 947 |
+
R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
|
| 948 |
+
TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
|
| 949 |
+
MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
|
| 950 |
+
bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
|
| 951 |
+
IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
| 952 |
+
AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
|
| 953 |
+
3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
|
| 954 |
+
/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
|
| 955 |
+
juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
|
| 956 |
+
ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
|
| 957 |
+
DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
|
| 958 |
+
/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
|
| 959 |
+
ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
|
| 960 |
+
cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
|
| 961 |
+
uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
|
| 962 |
+
pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
|
| 963 |
+
BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
|
| 964 |
+
R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
|
| 965 |
+
9y5Xt5hwXsjEeLBi
|
| 966 |
+
-----END CERTIFICATE-----
|
| 967 |
+
|
| 968 |
+
QuoVadis Root CA
|
| 969 |
+
================
|
| 970 |
+
-----BEGIN CERTIFICATE-----
|
| 971 |
+
MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
|
| 972 |
+
ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
|
| 973 |
+
eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
|
| 974 |
+
MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
|
| 975 |
+
cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
|
| 976 |
+
EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
|
| 977 |
+
AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
|
| 978 |
+
J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
|
| 979 |
+
F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
|
| 980 |
+
YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
|
| 981 |
+
AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
|
| 982 |
+
PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
|
| 983 |
+
ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
|
| 984 |
+
MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
|
| 985 |
+
YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
|
| 986 |
+
ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
|
| 987 |
+
Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
|
| 988 |
+
Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
|
| 989 |
+
BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
|
| 990 |
+
FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
|
| 991 |
+
aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
|
| 992 |
+
tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
|
| 993 |
+
fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
|
| 994 |
+
LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
|
| 995 |
+
gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
|
| 996 |
+
5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
|
| 997 |
+
5nrQNiOKSnQ2+Q==
|
| 998 |
+
-----END CERTIFICATE-----
|
| 999 |
+
|
| 1000 |
+
QuoVadis Root CA 2
|
| 1001 |
+
==================
|
| 1002 |
+
-----BEGIN CERTIFICATE-----
|
| 1003 |
+
MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
|
| 1004 |
+
EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
|
| 1005 |
+
ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
|
| 1006 |
+
aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
|
| 1007 |
+
DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
|
| 1008 |
+
XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
|
| 1009 |
+
lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
|
| 1010 |
+
lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
|
| 1011 |
+
lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
|
| 1012 |
+
66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
|
| 1013 |
+
wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
|
| 1014 |
+
D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
|
| 1015 |
+
BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
|
| 1016 |
+
J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
|
| 1017 |
+
DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
|
| 1018 |
+
a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
|
| 1019 |
+
ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
|
| 1020 |
+
Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
|
| 1021 |
+
UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
|
| 1022 |
+
VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
|
| 1023 |
+
+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
|
| 1024 |
+
IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
|
| 1025 |
+
WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
|
| 1026 |
+
f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
|
| 1027 |
+
4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
|
| 1028 |
+
VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
|
| 1029 |
+
-----END CERTIFICATE-----
|
| 1030 |
+
|
| 1031 |
+
QuoVadis Root CA 3
|
| 1032 |
+
==================
|
| 1033 |
+
-----BEGIN CERTIFICATE-----
|
| 1034 |
+
MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
|
| 1035 |
+
EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
|
| 1036 |
+
OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
|
| 1037 |
+
aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
|
| 1038 |
+
DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
|
| 1039 |
+
DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
|
| 1040 |
+
KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
|
| 1041 |
+
DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
|
| 1042 |
+
BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
|
| 1043 |
+
p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
|
| 1044 |
+
nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
|
| 1045 |
+
MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
|
| 1046 |
+
Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
|
| 1047 |
+
uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
|
| 1048 |
+
BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
|
| 1049 |
+
YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
|
| 1050 |
+
aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
|
| 1051 |
+
BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
|
| 1052 |
+
VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
|
| 1053 |
+
ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
|
| 1054 |
+
AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
|
| 1055 |
+
qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
|
| 1056 |
+
hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
|
| 1057 |
+
POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
|
| 1058 |
+
Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
|
| 1059 |
+
8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
|
| 1060 |
+
bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
|
| 1061 |
+
g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
|
| 1062 |
+
vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
|
| 1063 |
+
qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
|
