From be83910651163fcfabea33e8441bb3c4b61222e6 Mon Sep 17 00:00:00 2001 From: Tony Volpe Date: Fri, 19 Jan 2024 16:44:43 +0000 Subject: [PATCH] Merged in feature/280-dev-dev01 (pull request #21) auto-patch 280-dev-dev01-2024-01-19T16_41_58 * auto-patch 280-dev-dev01-2024-01-19T16_41_58 --- wp/.lando.yml | 14 + wp/pantheon.upstream.yml | 25 + wp/pantheon.yml | 22 + wp/wp-config.php_local | 71 + .../ip-geo-api/drop-in-admin-sample.php | 100 + wp/wp-content/ip-geo-api/drop-in-sample.php | 61 + wp/wp-content/ip-geo-api/index.php | 2 + .../ip-geo-api/ip2location/IP2Location.php | 848 + .../ip-geo-api/ip2location/bcmath.php | 216 + .../ip2location/class-ip2location.php | 226 + .../ip-geo-api/ip2location/index.php | 2 + .../ip-geo-api/maxmind/GeoLite2/index.php | 2 + wp/wp-content/ip-geo-api/maxmind/LICENSE | 674 + .../maxmind/class-maxmind-geolite2.php | 234 + .../maxmind/class-maxmind-legacy.php | 383 + .../ip-geo-api/maxmind/class-maxmind.php | 25 + wp/wp-content/ip-geo-api/maxmind/geoip.inc | 478 + .../ip-geo-api/maxmind/geoipcity.inc | 171 + wp/wp-content/ip-geo-api/maxmind/index.php | 2 + .../ip-geo-api/maxmind/vendor/LICENSE | 202 + .../ip-geo-api/maxmind/vendor/autoload.php | 7 + .../maxmind/vendor/composer/ClassLoader.php | 445 + .../maxmind/vendor/composer/LICENSE | 21 + .../vendor/composer/autoload_classmap.php | 9 + .../vendor/composer/autoload_namespaces.php | 9 + .../maxmind/vendor/composer/autoload_psr4.php | 14 + .../maxmind/vendor/composer/autoload_real.php | 52 + .../vendor/composer/autoload_static.php | 57 + .../maxmind/vendor/composer/ca-bundle/LICENSE | 19 + .../vendor/composer/ca-bundle/README.md | 85 + .../vendor/composer/ca-bundle/composer.json | 54 + .../vendor/composer/ca-bundle/res/cacert.pem | 3646 +++ .../composer/ca-bundle/src/CaBundle.php | 308 + .../maxmind/vendor/composer/installed.json | 221 + .../maxmind/vendor/geoip2/geoip2/.gitmodules | 3 + .../maxmind/vendor/geoip2/geoip2/.php_cs | 34 + .../maxmind/vendor/geoip2/geoip2/CHANGELOG.md | 250 + .../maxmind/vendor/geoip2/geoip2/LICENSE | 202 + .../maxmind/vendor/geoip2/geoip2/README.md | 401 + .../vendor/geoip2/geoip2/composer.json | 31 + .../vendor/geoip2/geoip2/maxmind-db/index.php | 2 + .../geoip2/geoip2/src/Database/Reader.php | 283 + .../Exception/AddressNotFoundException.php | 10 + .../src/Exception/AuthenticationException.php | 10 + .../geoip2/src/Exception/GeoIp2Exception.php | 10 + .../geoip2/src/Exception/HttpException.php | 24 + .../src/Exception/InvalidRequestException.php | 26 + .../src/Exception/OutOfQueriesException.php | 10 + .../geoip2/geoip2/src/Model/AbstractModel.php | 67 + .../geoip2/geoip2/src/Model/AnonymousIp.php | 46 + .../vendor/geoip2/geoip2/src/Model/Asn.php | 35 + .../vendor/geoip2/geoip2/src/Model/City.php | 133 + .../geoip2/src/Model/ConnectionType.php | 31 + .../geoip2/geoip2/src/Model/Country.php | 71 + .../vendor/geoip2/geoip2/src/Model/Domain.php | 31 + .../geoip2/geoip2/src/Model/Enterprise.php | 47 + .../geoip2/geoip2/src/Model/Insights.php | 47 + .../vendor/geoip2/geoip2/src/Model/Isp.php | 44 + .../geoip2/geoip2/src/ProviderInterface.php | 20 + .../geoip2/src/Record/AbstractPlaceRecord.php | 66 + .../geoip2/src/Record/AbstractRecord.php | 61 + .../vendor/geoip2/geoip2/src/Record/City.php | 29 + .../geoip2/geoip2/src/Record/Continent.php | 32 + .../geoip2/geoip2/src/Record/Country.php | 37 + .../geoip2/geoip2/src/Record/Location.php | 52 + .../geoip2/geoip2/src/Record/MaxMind.php | 19 + .../geoip2/geoip2/src/Record/Postal.php | 26 + .../geoip2/src/Record/RepresentedCountry.php | 35 + .../geoip2/geoip2/src/Record/Subdivision.php | 40 + .../geoip2/geoip2/src/Record/Traits.php | 114 + .../geoip2/geoip2/src/WebService/Client.php | 239 + .../vendor/maxmind-db/reader/CHANGELOG.md | 108 + .../maxmind/vendor/maxmind-db/reader/LICENSE | 202 + .../vendor/maxmind-db/reader/README.md | 139 + .../vendor/maxmind-db/reader/composer.json | 34 + .../vendor/maxmind-db/reader/ext/config.m4 | 19 + .../vendor/maxmind-db/reader/ext/maxminddb.c | 564 + .../maxmind-db/reader/ext/php_maxminddb.h | 24 + .../maxmind-db/reader/ext/tests/001-load.phpt | 12 + .../reader/ext/tests/002-final.phpt | 13 + .../reader/src/MaxMind/Db/Reader.php | 309 + .../reader/src/MaxMind/Db/Reader/Decoder.php | 311 + .../Db/Reader/InvalidDatabaseException.php | 10 + .../reader/src/MaxMind/Db/Reader/Metadata.php | 69 + .../reader/src/MaxMind/Db/Reader/Util.php | 26 + .../maxmind/web-service-common/CHANGELOG.md | 74 + .../vendor/maxmind/web-service-common/LICENSE | 202 + .../maxmind/web-service-common/README.md | 26 + .../maxmind/web-service-common/composer.json | 31 + .../src/Exception/AuthenticationException.php | 10 + .../src/Exception/HttpException.php | 40 + .../Exception/InsufficientFundsException.php | 10 + .../src/Exception/InvalidInputException.php | 12 + .../src/Exception/InvalidRequestException.php | 37 + .../Exception/IpAddressNotFoundException.php | 7 + .../Exception/PermissionRequiredException.php | 10 + .../src/Exception/WebServiceException.php | 10 + .../src/WebService/Client.php | 470 + .../src/WebService/Http/CurlRequest.php | 110 + .../src/WebService/Http/Request.php | 29 + .../src/WebService/Http/RequestFactory.php | 26 + .../contact-form-7/includes/functions.php | 8 +- .../plugins/contact-form-7/includes/mail.php | 2 +- .../contact-form-7/includes/submission.php | 10 +- .../plugins/contact-form-7/license.txt | 2 +- .../sendinblue/contact-form-properties.php | 38 +- .../modules/sendinblue/service.php | 12 +- .../plugins/contact-form-7/readme.txt | 6 +- .../contact-form-7/wp-contact-form-7.php | 4 +- .../plugins/ip-geo-block/LICENSE.txt | 674 + wp/wp-content/plugins/ip-geo-block/README.txt | 766 + .../admin/class-ip-geo-block-admin.php | 1744 ++ .../ip-geo-block/admin/css/admin-icons.css | 79 + .../admin/css/admin-icons.min.css | 7 + .../plugins/ip-geo-block/admin/css/admin.css | 1015 + .../ip-geo-block/admin/css/admin.min.css | 6 + .../ip-geo-block/admin/css/cidr.min.css | 1 + .../ip-geo-block/admin/css/fonts/icomoon.eot | Bin 0 -> 3988 bytes .../ip-geo-block/admin/css/fonts/icomoon.svg | 22 + .../ip-geo-block/admin/css/fonts/icomoon.ttf | Bin 0 -> 3824 bytes .../ip-geo-block/admin/css/fonts/icomoon.woff | Bin 0 -> 3900 bytes .../admin/datatables/css/datatables-all.css | 679 + .../datatables/css/datatables-all.min.css | 15 + .../admin/datatables/css/datatables.mark.css | 9 + .../datatables/css/datatables.mark.min.css | 1 + .../datatables/css/jquery.dataTables.css | 449 + .../datatables/css/jquery.dataTables.min.css | 1 + .../datatables/css/responsive.dataTables.css | 182 + .../css/responsive.dataTables.min.css | 1 + .../admin/datatables/images/Sorting icons.psd | Bin 0 -> 27490 bytes .../admin/datatables/images/favicon.ico | Bin 0 -> 894 bytes .../admin/datatables/images/sort_asc.png | Bin 0 -> 192 bytes .../datatables/images/sort_asc_disabled.png | Bin 0 -> 103 bytes .../admin/datatables/images/sort_both.png | Bin 0 -> 112 bytes .../admin/datatables/images/sort_desc.png | Bin 0 -> 189 bytes .../datatables/images/sort_desc_disabled.png | Bin 0 -> 102 bytes .../ip-geo-block/admin/datatables/js/LICENSE | 21 + .../datatables/js/dataTables.responsive.js | 1255 + .../js/dataTables.responsive.min.js | 26 + .../admin/datatables/js/datatables-all.js | 17649 +++++++++++++++ .../admin/datatables/js/datatables-all.min.js | 204 + .../admin/datatables/js/datatables.mark.js | 114 + .../datatables/js/datatables.mark.min.js | 7 + .../admin/datatables/js/jquery.dataTables.js | 15243 +++++++++++++ .../datatables/js/jquery.dataTables.min.js | 164 + .../admin/datatables/js/jquery.mark.js | 1034 + .../admin/datatables/js/jquery.mark.min.js | 7 + .../ip-geo-block/admin/datatables/license.txt | 20 + .../admin/images/ajax-loader-snake.gif | Bin 0 -> 1638 bytes .../ip-geo-block/admin/images/alert.png | Bin 0 -> 471 bytes .../ip-geo-block/admin/images/find.png | Bin 0 -> 455 bytes .../ip-geo-block/admin/images/icon-72x72.png | Bin 0 -> 8465 bytes .../ip-geo-block/admin/images/lock.png | Bin 0 -> 427 bytes .../ip-geo-block/admin/images/unlock.png | Bin 0 -> 405 bytes .../admin/includes/class-admin-ajax.php | 920 + .../admin/includes/class-admin-rewrite.php | 470 + .../admin/includes/tab-accesslog.php | 210 + .../admin/includes/tab-attribution.php | 35 + .../admin/includes/tab-geolocation.php | 118 + .../admin/includes/tab-network.php | 168 + .../admin/includes/tab-settings.php | 1668 ++ .../admin/includes/tab-statistics.php | 420 + .../plugins/ip-geo-block/admin/js/admin.js | 2104 ++ .../ip-geo-block/admin/js/admin.min.js | 6 + .../ip-geo-block/admin/js/authenticate.js | 520 + .../ip-geo-block/admin/js/authenticate.min.js | 16 + .../plugins/ip-geo-block/admin/js/cidr.min.js | 11 + .../plugins/ip-geo-block/admin/js/gmap.js | 127 + .../plugins/ip-geo-block/admin/js/gmap.min.js | 8 + .../plugins/ip-geo-block/admin/js/whois.js | 80 + .../ip-geo-block/admin/js/whois.min.js | 8 + .../classes/class-ip-geo-block-actv.php | 120 + .../classes/class-ip-geo-block-apis.php | 678 + .../classes/class-ip-geo-block-cron.php | 440 + .../classes/class-ip-geo-block-file.php | 330 + .../classes/class-ip-geo-block-lkup.php | 115 + .../classes/class-ip-geo-block-load.php | 160 + .../classes/class-ip-geo-block-logs.php | 1230 + .../classes/class-ip-geo-block-opts.php | 575 + .../classes/class-ip-geo-block-util.php | 1095 + .../classes/class-ip-geo-block.php | 1136 + .../plugins/ip-geo-block/database/index.php | 2 + .../ip-geo-block/includes/Net/DNS2.php | 1424 ++ .../includes/Net/DNS2/Exception.php | 142 + .../ip-geo-block/includes/Net/DNS2/Header.php | 277 + .../includes/Net/DNS2/Lookups.php | 578 + .../ip-geo-block/includes/Net/DNS2/Packet.php | 434 + .../includes/Net/DNS2/Packet/Request.php | 217 + .../includes/Net/DNS2/Packet/Response.php | 194 + .../includes/Net/DNS2/Question.php | 244 + .../ip-geo-block/includes/Net/DNS2/RR.php | 644 + .../includes/Net/DNS2/RR/CNAME.php | 153 + .../ip-geo-block/includes/Net/DNS2/RR/OPT.php | 292 + .../ip-geo-block/includes/Net/DNS2/RR/PTR.php | 152 + .../ip-geo-block/includes/Net/DNS2/RR/SIG.php | 459 + .../ip-geo-block/includes/Net/DNS2/RR/SOA.php | 240 + .../includes/Net/DNS2/RR/TSIG.php | 504 + .../includes/Net/DNS2/Resolver.php | 332 + .../ip-geo-block/includes/Net/DNS2/Socket.php | 190 + .../includes/Net/DNS2/Socket/Sockets.php | 364 + .../includes/Net/DNS2/Socket/Streams.php | 389 + .../ip-geo-block/includes/Net/IPv4.php | 16 + .../ip-geo-block/includes/Net/IPv6.php | 1113 + .../plugins/ip-geo-block/includes/Net/LICENSE | 33 + .../includes/random_compat/LICENSE | 22 + .../random_compat/byte_safe_strings.php | 195 + .../includes/random_compat/cast_to_int.php | 77 + .../includes/random_compat/error_polyfill.php | 49 + .../includes/random_compat/random.php | 225 + .../random_compat/random_bytes_com_dotnet.php | 91 + .../random_bytes_dev_urandom.php | 190 + .../random_compat/random_bytes_libsodium.php | 91 + .../random_bytes_libsodium_legacy.php | 93 + .../random_compat/random_bytes_mcrypt.php | 79 + .../includes/random_compat/random_int.php | 204 + wp/wp-content/plugins/ip-geo-block/index.php | 2 + .../plugins/ip-geo-block/ip-geo-block.php | 120 + .../ip-geo-block/languages/ip-geo-block-ja.mo | Bin 0 -> 57708 bytes .../ip-geo-block/languages/ip-geo-block-ja.po | 1849 ++ .../ip-geo-block/languages/ip-geo-block.mo | Bin 0 -> 701 bytes .../ip-geo-block/languages/ip-geo-block.po | 1677 ++ .../ip-geo-block/languages/ip-geo-block.pot | 1677 ++ .../plugins/ip-geo-block/rewrite-ini.php | 75 + .../plugins/ip-geo-block/rewrite.php | 196 + .../plugins/ip-geo-block/samples.php | 418 + .../plugins/ip-geo-block/uninstall.php | 64 + .../plugins/ip-geo-block/wp-content/index.php | 2 + .../ip-geo-api/drop-in-admin-sample.php | 100 + .../wp-content/ip-geo-api/drop-in-sample.php | 61 + .../wp-content/ip-geo-api/index.php | 2 + .../ip-geo-api/ip2location/IP2Location.php | 848 + .../ip-geo-api/ip2location/bcmath.php | 216 + .../ip2location/class-ip2location.php | 226 + .../ip-geo-api/ip2location/index.php | 2 + .../ip-geo-api/maxmind/GeoLite2/index.php | 2 + .../wp-content/ip-geo-api/maxmind/LICENSE | 674 + .../maxmind/class-maxmind-geolite2.php | 234 + .../maxmind/class-maxmind-legacy.php | 383 + .../ip-geo-api/maxmind/class-maxmind.php | 25 + .../wp-content/ip-geo-api/maxmind/geoip.inc | 478 + .../ip-geo-api/maxmind/geoipcity.inc | 171 + .../wp-content/ip-geo-api/maxmind/index.php | 2 + .../ip-geo-api/maxmind/vendor/LICENSE | 202 + .../ip-geo-api/maxmind/vendor/autoload.php | 7 + .../maxmind/vendor/composer/ClassLoader.php | 445 + .../maxmind/vendor/composer/LICENSE | 21 + .../vendor/composer/autoload_classmap.php | 9 + .../vendor/composer/autoload_namespaces.php | 9 + .../maxmind/vendor/composer/autoload_psr4.php | 14 + .../maxmind/vendor/composer/autoload_real.php | 52 + .../vendor/composer/autoload_static.php | 57 + .../maxmind/vendor/composer/ca-bundle/LICENSE | 19 + .../vendor/composer/ca-bundle/README.md | 85 + .../vendor/composer/ca-bundle/composer.json | 54 + .../vendor/composer/ca-bundle/res/cacert.pem | 3646 +++ .../composer/ca-bundle/src/CaBundle.php | 308 + .../maxmind/vendor/composer/installed.json | 221 + .../maxmind/vendor/geoip2/geoip2/.gitmodules | 3 + .../maxmind/vendor/geoip2/geoip2/.php_cs | 34 + .../maxmind/vendor/geoip2/geoip2/CHANGELOG.md | 250 + .../maxmind/vendor/geoip2/geoip2/LICENSE | 202 + .../maxmind/vendor/geoip2/geoip2/README.md | 401 + .../vendor/geoip2/geoip2/composer.json | 31 + .../vendor/geoip2/geoip2/maxmind-db/index.php | 2 + .../geoip2/geoip2/src/Database/Reader.php | 283 + .../Exception/AddressNotFoundException.php | 10 + .../src/Exception/AuthenticationException.php | 10 + .../geoip2/src/Exception/GeoIp2Exception.php | 10 + .../geoip2/src/Exception/HttpException.php | 24 + .../src/Exception/InvalidRequestException.php | 26 + .../src/Exception/OutOfQueriesException.php | 10 + .../geoip2/geoip2/src/Model/AbstractModel.php | 67 + .../geoip2/geoip2/src/Model/AnonymousIp.php | 46 + .../vendor/geoip2/geoip2/src/Model/Asn.php | 35 + .../vendor/geoip2/geoip2/src/Model/City.php | 133 + .../geoip2/src/Model/ConnectionType.php | 31 + .../geoip2/geoip2/src/Model/Country.php | 71 + .../vendor/geoip2/geoip2/src/Model/Domain.php | 31 + .../geoip2/geoip2/src/Model/Enterprise.php | 47 + .../geoip2/geoip2/src/Model/Insights.php | 47 + .../vendor/geoip2/geoip2/src/Model/Isp.php | 44 + .../geoip2/geoip2/src/ProviderInterface.php | 20 + .../geoip2/src/Record/AbstractPlaceRecord.php | 66 + .../geoip2/src/Record/AbstractRecord.php | 61 + .../vendor/geoip2/geoip2/src/Record/City.php | 29 + .../geoip2/geoip2/src/Record/Continent.php | 32 + .../geoip2/geoip2/src/Record/Country.php | 37 + .../geoip2/geoip2/src/Record/Location.php | 52 + .../geoip2/geoip2/src/Record/MaxMind.php | 19 + .../geoip2/geoip2/src/Record/Postal.php | 26 + .../geoip2/src/Record/RepresentedCountry.php | 35 + .../geoip2/geoip2/src/Record/Subdivision.php | 40 + .../geoip2/geoip2/src/Record/Traits.php | 114 + .../geoip2/geoip2/src/WebService/Client.php | 239 + .../vendor/maxmind-db/reader/CHANGELOG.md | 108 + .../maxmind/vendor/maxmind-db/reader/LICENSE | 202 + .../vendor/maxmind-db/reader/README.md | 139 + .../vendor/maxmind-db/reader/composer.json | 34 + .../vendor/maxmind-db/reader/ext/config.m4 | 19 + .../vendor/maxmind-db/reader/ext/maxminddb.c | 564 + .../maxmind-db/reader/ext/php_maxminddb.h | 24 + .../maxmind-db/reader/ext/tests/001-load.phpt | 12 + .../reader/ext/tests/002-final.phpt | 13 + .../reader/src/MaxMind/Db/Reader.php | 309 + .../reader/src/MaxMind/Db/Reader/Decoder.php | 311 + .../Db/Reader/InvalidDatabaseException.php | 10 + .../reader/src/MaxMind/Db/Reader/Metadata.php | 69 + .../reader/src/MaxMind/Db/Reader/Util.php | 26 + .../maxmind/web-service-common/CHANGELOG.md | 74 + .../vendor/maxmind/web-service-common/LICENSE | 202 + .../maxmind/web-service-common/README.md | 26 + .../maxmind/web-service-common/composer.json | 31 + .../src/Exception/AuthenticationException.php | 10 + .../src/Exception/HttpException.php | 40 + .../Exception/InsufficientFundsException.php | 10 + .../src/Exception/InvalidInputException.php | 12 + .../src/Exception/InvalidRequestException.php | 37 + .../Exception/IpAddressNotFoundException.php | 7 + .../Exception/PermissionRequiredException.php | 10 + .../src/Exception/WebServiceException.php | 10 + .../src/WebService/Client.php | 470 + .../src/WebService/Http/CurlRequest.php | 110 + .../src/WebService/Http/Request.php | 29 + .../src/WebService/Http/RequestFactory.php | 26 + .../wp-content/mu-plugins/index.php | 2 + .../wp-content/mu-plugins/ip-geo-block-mu.php | 79 + .../campaign/IperCampaignController.php | 112 +- .../campaign/lib/IperCptCampaign.php | 28 +- .../campaign/templates/single-campaign.php | 16 +- .../admin/class-nginx-helper-admin.php | 27 +- .../nginx-helper/admin/class-purger.php | 4 +- .../admin/css/nginx-helper-admin.css | 5 + .../partials/nginx-helper-general-options.php | 41 +- .../includes/class-nginx-helper.php | 2 +- .../nginx-helper/languages/nginx-helper.mo | Bin 427 -> 427 bytes .../nginx-helper/languages/nginx-helper.po | 194 +- .../plugins/nginx-helper/nginx-helper.php | 4 +- wp/wp-content/plugins/nginx-helper/readme.txt | 10 +- .../client/admin/47c7fb356fcb2d963681.svg | 1 + .../admin/activity-panels-help/style-rtl.css | 2 +- .../admin/activity-panels-inbox/style-rtl.css | 2 +- .../client/admin/admin-layout/index.asset.php | 2 +- .../assets/client/admin/admin-layout/index.js | 2 +- .../client/admin/admin-layout/style-rtl.css | 225 +- .../client/admin/admin-layout/style.css | 225 +- .../analytics-report-categories/style-rtl.css | 2 +- .../analytics-report-coupons/style-rtl.css | 2 +- .../analytics-report-customers/style-rtl.css | 2 +- .../analytics-report-downloads/style-rtl.css | 2 +- .../analytics-report-orders/style-rtl.css | 2 +- .../analytics-report-products/style-rtl.css | 2 +- .../analytics-report-revenue/style-rtl.css | 2 +- .../analytics-report-stock/style-rtl.css | 2 +- .../analytics-report-taxes/style-rtl.css | 2 +- .../analytics-report-variations/style-rtl.css | 2 +- .../admin/analytics-report/style-rtl.css | 2 +- .../admin/analytics-settings/style-rtl.css | 2 +- .../assets/client/admin/app/index.asset.php | 2 +- .../assets/client/admin/app/index.js | 2 +- .../client/admin/app/index.js.LICENSE.txt | 8 +- .../assets/client/admin/app/style-rtl.css | 2 +- .../assets/client/admin/app/style.css | 2 +- .../style-rtl.css | 2 +- .../beta-features-tracking-modal/style.css | 2 +- .../admin/block-templates/index.asset.php | 2 +- .../client/admin/block-templates/index.js | 2 +- .../admin/block-templates/style-rtl.css | 225 +- .../client/admin/block-templates/style.css | 225 +- .../assets/client/admin/chunks/1122.js | 1 + .../assets/client/admin/chunks/1828.style.css | 2 +- .../assets/client/admin/chunks/185.style.css | 2 +- .../assets/client/admin/chunks/2089.js | 1 + .../assets/client/admin/chunks/2397.style.css | 2 +- .../assets/client/admin/chunks/2502.style.css | 2 +- .../assets/client/admin/chunks/2624.style.css | 2 +- .../assets/client/admin/chunks/2953.style.css | 2 +- .../assets/client/admin/chunks/3307.style.css | 2 +- .../assets/client/admin/chunks/3538.js | 1 + .../assets/client/admin/chunks/3538.style.css | 1 + .../assets/client/admin/chunks/3576.style.css | 2 +- .../assets/client/admin/chunks/3700.style.css | 2 +- .../assets/client/admin/chunks/3994.style.css | 2 +- .../assets/client/admin/chunks/4011.style.css | 2 +- .../assets/client/admin/chunks/4300.js | 1 + .../assets/client/admin/chunks/4300.style.css | 1 + .../assets/client/admin/chunks/4854.style.css | 2 +- .../assets/client/admin/chunks/4882.style.css | 2 +- .../assets/client/admin/chunks/4940.js | 2 + .../client/admin/chunks/4940.js.LICENSE.txt | 5 + .../assets/client/admin/chunks/5031.js | 2 + .../client/admin/chunks/5031.js.LICENSE.txt | 14 + .../assets/client/admin/chunks/5502.style.css | 2 +- .../assets/client/admin/chunks/5641.js | 2 + .../client/admin/chunks/5641.js.LICENSE.txt | 19 + .../assets/client/admin/chunks/5642.js | 7 + .../client/admin/chunks/5642.js.LICENSE.txt | 8 + .../assets/client/admin/chunks/6125.style.css | 2 +- .../assets/client/admin/chunks/6732.style.css | 2 +- .../assets/client/admin/chunks/6824.style.css | 2 +- .../assets/client/admin/chunks/7202.js | 2 + .../client/admin/chunks/7202.js.LICENSE.txt | 14 + .../assets/client/admin/chunks/727.style.css | 2 +- .../assets/client/admin/chunks/7443.js | 1 + .../assets/client/admin/chunks/7708.style.css | 2 +- .../assets/client/admin/chunks/8544.style.css | 2 +- .../assets/client/admin/chunks/8558.js | 1 + .../assets/client/admin/chunks/8570.js | 1 + .../assets/client/admin/chunks/8597.style.css | 2 +- .../assets/client/admin/chunks/8851.style.css | 2 +- .../assets/client/admin/chunks/8858.js | 1 + .../assets/client/admin/chunks/925.style.css | 2 +- .../assets/client/admin/chunks/9360.style.css | 2 +- .../assets/client/admin/chunks/9456.style.css | 2 +- .../assets/client/admin/chunks/9669.style.css | 2 +- .../assets/client/admin/chunks/9693.js | 1 + .../assets/client/admin/chunks/9693.style.css | 1 + .../assets/client/admin/chunks/9792.style.css | 2 +- .../assets/client/admin/chunks/9850.js | 1 + .../assets/client/admin/chunks/9890.js | 2 + .../client/admin/chunks/9890.js.LICENSE.txt | 6 + .../assets/client/admin/chunks/9966.style.css | 2 +- .../admin/chunks/activity-panels-help.js | 2 +- .../admin/chunks/activity-panels-inbox.js | 2 +- .../admin/chunks/activity-panels-setup.js | 2 +- .../chunks/analytics-report-categories.js | 2 +- .../admin/chunks/analytics-report-coupons.js | 2 +- .../chunks/analytics-report-customers.js | 2 +- .../chunks/analytics-report-downloads.js | 2 +- .../admin/chunks/analytics-report-orders.js | 2 +- .../admin/chunks/analytics-report-products.js | 2 +- .../admin/chunks/analytics-report-revenue.js | 2 +- .../admin/chunks/analytics-report-stock.js | 2 +- .../admin/chunks/analytics-report-taxes.js | 2 +- .../chunks/analytics-report-variations.js | 2 +- .../client/admin/chunks/analytics-report.js | 2 +- .../client/admin/chunks/analytics-settings.js | 2 +- .../client/admin/chunks/category-metabox.js | 2 +- .../client/admin/chunks/core-profiler.js | 2 +- .../admin/chunks/customizable-dashboard.js | 2 +- .../client/admin/chunks/customize-store.js | 2 +- .../client/admin/chunks/dashboard-charts.js | 2 +- .../assets/client/admin/chunks/dashboard.js | 2 +- .../client/admin/chunks/edit-product-page.js | 2 +- .../assets/client/admin/chunks/homescreen.js | 2 +- .../client/admin/chunks/leaderboards.js | 2 +- .../assets/client/admin/chunks/marketplace.js | 2 +- .../admin/chunks/multichannel-marketing.js | 2 +- .../admin/chunks/payment-recommendations.js | 2 +- .../client/admin/chunks/product-page.js | 2 +- .../client/admin/chunks/profile-wizard.js | 2 +- .../admin/chunks/shipping-recommendations.js | 2 +- .../client/admin/chunks/store-alerts.js | 2 +- .../client/admin/chunks/store-performance.js | 2 +- .../chunks/wcpay-payment-welcome-page.js | 2 +- .../client/admin/components/index.asset.php | 2 +- .../assets/client/admin/components/index.js | 2 +- .../admin/components/index.js.LICENSE.txt | 8 +- .../client/admin/components/style-rtl.css | 17 +- .../assets/client/admin/components/style.css | 18 +- .../client/admin/core-profiler/style-rtl.css | 2 +- .../client/admin/csv-export/index.asset.php | 2 +- .../assets/client/admin/csv-export/index.js | 2 +- .../client/admin/currency/index.asset.php | 2 +- .../assets/client/admin/currency/index.js | 2 +- .../customer-effort-score/index.asset.php | 2 +- .../admin/customer-effort-score/index.js | 2 +- .../index.js.LICENSE.txt | 6 +- .../admin/customer-effort-score/style-rtl.css | 364 +- .../admin/customer-effort-score/style.css | 364 +- .../admin/customize-store/style-rtl.css | 2 +- .../admin/dashboard-charts/style-rtl.css | 2 +- .../client/admin/dashboard/style-rtl.css | 2 +- .../assets/client/admin/data/index.asset.php | 2 +- .../assets/client/admin/data/index.js | 2 +- .../assets/client/admin/date/index.asset.php | 2 +- .../assets/client/admin/date/index.js | 2 +- .../admin/edit-product-page/style-rtl.css | 2 +- .../client/admin/experimental/index.asset.php | 2 +- .../assets/client/admin/experimental/index.js | 2 +- .../admin/experimental/index.js.LICENSE.txt | 8 +- .../client/admin/experimental/style-rtl.css | 759 +- .../client/admin/experimental/style.css | 759 +- .../client/admin/explat/index.asset.php | 2 +- .../assets/client/admin/explat/index.js | 2 +- .../client/admin/homescreen/style-rtl.css | 2 +- .../client/admin/leaderboards/style-rtl.css | 2 +- .../admin/marketing-coupons/style-rtl.css | 2 +- .../client/admin/marketing-coupons/style.css | 2 +- .../client/admin/marketplace/style-rtl.css | 2 +- .../multichannel-marketing/style-rtl.css | 2 +- .../admin/navigation-opt-out/style-rtl.css | 2 +- .../client/admin/navigation-opt-out/style.css | 2 +- .../client/admin/navigation/index.asset.php | 2 +- .../assets/client/admin/navigation/index.js | 2 +- .../client/admin/notices/index.asset.php | 2 +- .../assets/client/admin/notices/index.js | 2 +- .../assets/client/admin/null/style-rtl.css | 2 +- .../client/admin/number/index.asset.php | 2 +- .../assets/client/admin/number/index.js | 2 +- .../client/admin/onboarding/index.asset.php | 2 +- .../assets/client/admin/onboarding/index.js | 2 +- .../admin/onboarding/index.js.LICENSE.txt | 6 +- .../client/admin/onboarding/style-rtl.css | 439 +- .../assets/client/admin/onboarding/style.css | 439 +- .../payment-method-promotions/style-rtl.css | 2 +- .../admin/payment-method-promotions/style.css | 2 +- .../print-shipping-label-banner/style-rtl.css | 2 +- .../print-shipping-label-banner/style.css | 2 +- .../product-category-metabox/style-rtl.css | 2 +- .../admin/product-category-metabox/style.css | 2 +- .../blocks/generic/conditional/block.json | 52 +- .../blocks/generic/conditional/edit.js | 2 +- .../blocks/generic/number/block.json | 4 + .../blocks/generic/number/edit.js | 2 +- .../generic/product-number-field/block.json | 4 + .../product-number-field/editor-rtl.css | 225 +- .../generic/product-number-field/editor.css | 225 +- .../product-pricing-field/editor-rtl.css | 232 +- .../generic/product-pricing-field/editor.css | 232 +- .../product-section-description/block.json | 25 + .../generic/product-section/editor-rtl.css | 272 +- .../blocks/generic/product-section/editor.css | 272 +- .../blocks/generic/product-tab/block.json | 3 +- .../blocks/generic/product-tab/editor-rtl.css | 236 +- .../blocks/generic/product-tab/editor.css | 236 +- .../product-taxonomy-field/editor-rtl.css | 251 +- .../generic/product-taxonomy-field/editor.css | 251 +- .../generic/product-text-field/editor-rtl.css | 233 +- .../generic/product-text-field/editor.css | 233 +- .../generic/section-description/block.json | 25 + .../generic/section-description/edit.js | 1 + .../generic/section-description/index.js | 1 + .../generic/section-description/types.js | 1 + .../blocks/generic/section/edit.js | 2 +- .../blocks/generic/section/index.js | 2 +- .../blocks/generic/tab/block.json | 3 +- .../product-editor/blocks/generic/tab/edit.js | 2 +- .../blocks/generic/tab/index.js | 2 +- .../admin/product-editor/blocks/index.js | 2 +- .../product-fields/description/block.json | 2 +- .../components/full-editor-toolbar-button.js | 1 + .../with-full-editor-toolbar-button.js | 1 + .../blocks/product-fields/description/edit.js | 2 +- .../product-fields/description/index.js | 2 +- .../product-fields/description/types.js | 1 + .../downloads-menu/downloads-menu.js | 2 +- .../blocks/product-fields/downloads/edit.js | 2 +- .../insert-url-menu-item.js | 2 +- .../upload-files-menu-item.js | 2 +- .../notice-edit-single-variation/block.json | 3 +- .../notice-has-variations/block.json | 3 +- .../product-attributes-field/editor-rtl.css | 242 +- .../product-attributes-field/editor.css | 242 +- .../product-description-field/block.json | 2 +- .../product-downloads-field/editor-rtl.css | 368 +- .../product-downloads-field/editor.css | 368 +- .../product-has-variations-notice/block.json | 3 +- .../editor-rtl.css | 232 +- .../product-has-variations-notice/editor.css | 232 +- .../product-images-field/editor-rtl.css | 285 +- .../product-images-field/editor.css | 285 +- .../editor-rtl.css | 228 +- .../product-inventory-email-field/editor.css | 228 +- .../product-list-field/block.json | 27 + .../product-list-field/editor-rtl.css | 1 + .../product-list-field/editor.css | 1 + .../product-fields/product-list/block.json | 27 + .../product-fields/product-list/edit.js | 1 + .../product-list/images/glasses.js | 1 + .../product-list/images/index.js | 1 + .../product-list/images/pants.js | 1 + .../product-list/images/shirt.js | 1 + .../product-fields/product-list/index.js | 1 + .../product-fields/product-list/types.js | 1 + .../product-name-field/editor-rtl.css | 248 +- .../product-name-field/editor.css | 248 +- .../product-password-field/editor-rtl.css | 228 +- .../product-password-field/editor.css | 228 +- .../editor-rtl.css | 232 +- .../product-regular-price-field/editor.css | 232 +- .../product-sale-price-field/editor-rtl.css | 232 +- .../product-sale-price-field/editor.css | 232 +- .../editor-rtl.css | 228 +- .../product-schedule-sale-fields/editor.css | 228 +- .../editor-rtl.css | 241 +- .../editor.css | 241 +- .../block.json | 3 +- .../editor-rtl.css | 231 +- .../editor.css | 231 +- .../product-sku-field/editor-rtl.css | 235 +- .../product-sku-field/editor.css | 235 +- .../product-summary-field/editor-rtl.css | 257 +- .../product-summary-field/editor.css | 258 +- .../product-tag-field/editor-rtl.css | 234 +- .../product-tag-field/editor.css | 234 +- .../editor-rtl.css | 249 +- .../product-variation-items-field/editor.css | 249 +- .../product-variations-fields/editor-rtl.css | 248 +- .../product-variations-fields/editor.css | 248 +- .../editor-rtl.css | 244 +- .../editor.css | 244 +- .../blocks/product-fields/summary/edit.js | 2 +- .../blocks/product-fields/summary/index.js | 2 +- .../product-fields/variation-options/edit.js | 2 +- .../admin/product-editor/index.asset.php | 2 +- .../client/admin/product-editor/index.js | 2 +- .../admin/product-editor/index.js.LICENSE.txt | 8 +- .../client/admin/product-editor/style-rtl.css | 3201 +-- .../client/admin/product-editor/style.css | 3202 +-- .../client/admin/profile-wizard/style-rtl.css | 2 +- .../shipping-recommendations/style-rtl.css | 2 +- .../client/admin/store-alerts/style-rtl.css | 2 +- .../admin/store-performance/style-rtl.css | 2 +- .../client/admin/tracks/index.asset.php | 2 +- .../assets/client/admin/tracks/index.js | 2 +- .../client/admin/undefined/style-rtl.css | 2 +- .../wcpay-payment-welcome-page/style-rtl.css | 2 +- .../add-term-tracking.asset.php | 2 +- .../wp-admin-scripts/add-term-tracking.js | 2 +- .../attributes-tracking.asset.php | 2 +- .../wp-admin-scripts/attributes-tracking.js | 2 +- .../beta-features-tracking-modal.asset.php | 2 +- .../beta-features-tracking-modal.js | 2 +- .../category-tracking.asset.php | 2 +- .../wp-admin-scripts/category-tracking.js | 2 +- .../command-palette-analytics.asset.php | 1 + .../command-palette-analytics.js | 1 + .../command-palette.asset.php | 1 + .../admin/wp-admin-scripts/command-palette.js | 1 + .../marketing-coupons.asset.php | 2 +- .../wp-admin-scripts/marketing-coupons.js | 2 +- .../marketing-coupons.js.LICENSE.txt | 6 +- .../navigation-opt-out.asset.php | 2 +- .../onboarding-homepage-notice.asset.php | 2 +- ...ding-load-sample-products-notice.asset.php | 2 +- ...onboarding-product-import-notice.asset.php | 2 +- .../onboarding-product-notice.asset.php | 2 +- .../onboarding-tax-notice.asset.php | 2 +- .../wp-admin-scripts/order-tracking.asset.php | 2 +- .../admin/wp-admin-scripts/order-tracking.js | 2 +- .../payment-method-promotions.asset.php | 2 +- .../payment-method-promotions.js | 2 +- .../payment-method-promotions.js.LICENSE.txt | 2 +- .../print-shipping-label-banner.asset.php | 2 +- .../print-shipping-label-banner.js | 2 +- .../product-category-metabox.asset.php | 2 +- .../product-category-metabox.js | 2 +- .../product-import-tracking.asset.php | 2 +- .../wp-admin-scripts/product-tour.asset.php | 2 +- .../admin/wp-admin-scripts/product-tour.js | 2 +- .../product-tracking.asset.php | 2 +- .../wp-admin-scripts/product-tracking.js | 2 +- .../settings-tracking.asset.php | 2 +- .../shipping-settings-region-picker.asset.php | 2 +- .../shipping-settings-region-picker.js | 2 +- .../wp-admin-scripts/tags-tracking.asset.php | 2 +- .../admin/wp-admin-scripts/tags-tracking.js | 2 +- .../variable-product-tour.asset.php | 2 +- .../wp-admin-scripts/variable-product-tour.js | 2 +- .../wp-admin-scripts/wc-addons-tour.asset.php | 2 +- .../admin/wp-admin-scripts/wc-addons-tour.js | 2 +- .../assets/client/blocks/1092-frontend.js | 1 + .../client/blocks/1720-style.js.LICENSE.txt | 8 + .../assets/client/blocks/3030-frontend.js | 1 + .../client/blocks/64-style.js.LICENSE.txt | 5 + .../client/blocks/9178-style.js.LICENSE.txt | 5 + .../assets/client/blocks/9782-frontend.js | 1 + .../blocks/active-filters-frontend.asset.php | 1 + .../client/blocks/active-filters-frontend.js | 6 + .../client/blocks/active-filters-rtl.css | 3 + .../blocks/active-filters-style.asset.php | 1 + .../active-filters-style.js.LICENSE.txt | 5 + .../blocks/active-filters-wrapper-frontend.js | 6 + .../blocks/active-filters-wrapper-rtl.css | 2 + .../client/blocks/active-filters-wrapper.css | 2 + .../client/blocks/active-filters.asset.php | 1 + .../assets/client/blocks/active-filters.css | 3 + .../assets/client/blocks/active-filters.js | 6 + .../client/blocks/active-filters/block.json | 31 + .../client/blocks/add-to-cart-form-rtl.css | 2 + .../blocks/add-to-cart-form-style.asset.php | 1 + .../assets/client/blocks/add-to-cart-form.css | 2 + .../client/blocks/add-to-cart-form/block.json | 18 + .../blocks/all-products-frontend.asset.php | 1 + .../client/blocks/all-products-frontend.js | 5 + .../assets/client/blocks/all-products-rtl.css | 25 + .../blocks/all-products-style.asset.php | 1 + .../blocks/all-products-style.js.LICENSE.txt | 20 + .../client/blocks/all-products.asset.php | 1 + .../assets/client/blocks/all-products.css | 25 + .../assets/client/blocks/all-products.js | 26 + .../client/blocks/all-products/block.json | 39 + .../assets/client/blocks/all-reviews-rtl.css | 4 + .../client/blocks/all-reviews-style.asset.php | 1 + .../blocks/all-reviews-style.js.LICENSE.txt | 5 + .../client/blocks/all-reviews.asset.php | 1 + .../assets/client/blocks/all-reviews.css | 4 + .../assets/client/blocks/all-reviews.js | 7 + .../attribute-filter-frontend.asset.php | 1 + .../blocks/attribute-filter-frontend.js | 17 + .../client/blocks/attribute-filter-rtl.css | 7 + .../blocks/attribute-filter-style.asset.php | 1 + .../attribute-filter-style.js.LICENSE.txt | 11 + .../attribute-filter-wrapper-frontend.js | 17 + .../blocks/attribute-filter-wrapper-rtl.css | 6 + .../blocks/attribute-filter-wrapper.css | 6 + .../client/blocks/attribute-filter.asset.php | 1 + .../assets/client/blocks/attribute-filter.css | 7 + .../assets/client/blocks/attribute-filter.js | 18 + .../client/blocks/attribute-filter/block.json | 58 + .../client/blocks/blocks-checkout.asset.php | 1 + .../assets/client/blocks/blocks-checkout.js | 4 + .../client/blocks/blocks-components.asset.php | 1 + .../assets/client/blocks/blocks-components.js | 6 + .../assets/client/blocks/breadcrumbs-rtl.css | 1 + .../client/blocks/breadcrumbs-style.asset.php | 1 + .../client/blocks/breadcrumbs.asset.php | 1 + .../assets/client/blocks/breadcrumbs.css | 1 + .../assets/client/blocks/breadcrumbs.js | 1 + .../client/blocks/breadcrumbs/block.json | 36 + .../cart-accepted-payment-methods-frontend.js | 1 + .../cart-accepted-payment-methods-style.js | 1 + .../cart-blocks/cart-cross-sells-frontend.js | 1 + .../cart-cross-sells-products-frontend.js | 7 + .../cart-cross-sells-products-style.js | 1 + .../cart-blocks/cart-cross-sells-style.js | 1 + .../cart-express-payment-frontend.js | 3 + .../cart-blocks/cart-express-payment-style.js | 1 + .../blocks/cart-blocks/cart-items-frontend.js | 1 + .../blocks/cart-blocks/cart-items-style.js | 1 + .../cart-blocks/cart-line-items-frontend.js | 11 + .../cart-blocks/cart-line-items-style.js | 1 + .../cart-order-summary-frontend.js | 13 + .../cart-blocks/cart-order-summary-style.js | 1 + .../cart-blocks/cart-totals-frontend.js | 1 + .../blocks/cart-blocks/cart-totals-style.js | 1 + .../blocks/cart-blocks/empty-cart-frontend.js | 1 + .../blocks/cart-blocks/empty-cart-style.js | 1 + .../cart-blocks/filled-cart-frontend.js | 1 + .../blocks/cart-blocks/filled-cart-style.js | 1 + .../order-summary-coupon-form-frontend.js | 15 + .../order-summary-coupon-form-style.js | 1 + .../order-summary-discount-frontend.js | 15 + .../order-summary-discount-style.js | 1 + .../cart-blocks/order-summary-fee-frontend.js | 1 + .../cart-blocks/order-summary-fee-style.js | 1 + .../order-summary-heading-frontend.js | 1 + .../order-summary-heading-style.js | 1 + .../order-summary-shipping-frontend.js | 13 + .../order-summary-shipping-style.js | 1 + .../order-summary-subtotal-frontend.js | 1 + .../order-summary-subtotal-style.js | 1 + .../order-summary-taxes-frontend.js | 1 + .../cart-blocks/order-summary-taxes-style.js | 1 + .../proceed-to-checkout-frontend.js | 1 + .../cart-blocks/proceed-to-checkout-style.js | 1 + .../client/blocks/cart-frontend.asset.php | 1 + .../assets/client/blocks/cart-frontend.js | 2 + .../assets/client/blocks/cart-rtl.css | 36 + .../assets/client/blocks/cart-style.asset.php | 1 + .../client/blocks/cart-style.js.LICENSE.txt | 13 + .../assets/client/blocks/cart.asset.php | 1 + .../woocommerce/assets/client/blocks/cart.css | 36 + .../woocommerce/assets/client/blocks/cart.js | 35 + .../client/blocks/catalog-sorting-rtl.css | 1 + .../blocks/catalog-sorting-style.asset.php | 1 + .../client/blocks/catalog-sorting.asset.php | 1 + .../assets/client/blocks/catalog-sorting.css | 1 + .../assets/client/blocks/catalog-sorting.js | 1 + .../client/blocks/catalog-sorting/block.json | 26 + .../checkout-blocks/actions-frontend.js | 1 + .../blocks/checkout-blocks/actions-style.js | 1 + .../billing-address-frontend.js | 4 + .../checkout-blocks/billing-address-style.js | 1 + .../contact-information-frontend.js | 1 + .../contact-information-style.js | 1 + .../express-payment-frontend.js | 3 + .../blocks/checkout-blocks/fields-frontend.js | 1 + .../blocks/checkout-blocks/fields-style.js | 1 + .../checkout-blocks/order-note-frontend.js | 1 + .../order-summary-cart-items-frontend.js | 5 + .../order-summary-cart-items-style.js | 1 + .../order-summary-coupon-form-frontend.js | 15 + .../order-summary-coupon-form-style.js | 1 + .../order-summary-discount-frontend.js | 15 + .../order-summary-discount-style.js | 1 + .../order-summary-fee-frontend.js | 1 + .../order-summary-fee-style.js | 1 + .../checkout-blocks/order-summary-frontend.js | 13 + .../order-summary-shipping-frontend.js | 13 + .../order-summary-shipping-style.js | 1 + .../checkout-blocks/order-summary-style.js | 1 + .../order-summary-subtotal-frontend.js | 1 + .../order-summary-subtotal-style.js | 1 + .../order-summary-taxes-frontend.js | 1 + .../order-summary-taxes-style.js | 1 + .../checkout-blocks/payment-frontend.js | 6 + .../blocks/checkout-blocks/payment-style.js | 1 + .../pickup-options-frontend.js | 3 + .../checkout-blocks/pickup-options-style.js | 1 + .../shipping-address-frontend.js | 4 + .../checkout-blocks/shipping-address-style.js | 1 + .../shipping-method-frontend.js | 1 + .../checkout-blocks/shipping-method-style.js | 1 + .../shipping-methods-frontend.js | 5 + .../checkout-blocks/shipping-methods-style.js | 1 + .../blocks/checkout-blocks/terms-frontend.js | 3 + .../blocks/checkout-blocks/terms-style.js | 1 + .../blocks/checkout-blocks/totals-frontend.js | 1 + .../blocks/checkout-blocks/totals-style.js | 1 + .../client/blocks/checkout-frontend.asset.php | 1 + .../assets/client/blocks/checkout-frontend.js | 2 + .../assets/client/blocks/checkout-rtl.css | 42 + .../client/blocks/checkout-style.asset.php | 1 + .../blocks/checkout-style.js.LICENSE.txt | 13 + .../assets/client/blocks/checkout.asset.php | 1 + .../assets/client/blocks/checkout.css | 42 + .../assets/client/blocks/checkout.js | 30 + .../assets/client/blocks/checkout/block.json | 53 + .../client/blocks/classic-shortcode-rtl.css | 1 + .../blocks/classic-shortcode-style.asset.php | 1 + .../classic-shortcode-style.js.LICENSE.txt | 5 + .../client/blocks/classic-shortcode.asset.php | 1 + .../client/blocks/classic-shortcode.css | 1 + .../assets/client/blocks/classic-shortcode.js | 1 + .../blocks/classic-shortcode/block.json | 29 + ...llection-active-filters-frontend.asset.php | 1 + .../collection-active-filters-frontend.js | 1 + .../blocks/collection-active-filters-rtl.css | 1 + .../collection-active-filters-style.asset.php | 1 + ...ection-active-filters-style.js.LICENSE.txt | 5 + .../collection-active-filters.asset.php | 1 + .../blocks/collection-active-filters.css | 1 + .../blocks/collection-active-filters.js | 2 + .../collection-active-filters/block.json | 28 + ...ection-attribute-filter-frontend.asset.php | 1 + .../collection-attribute-filter-frontend.js | 1 + .../collection-attribute-filter-rtl.css | 3 + ...ollection-attribute-filter-style.asset.php | 1 + ...tion-attribute-filter-style.js.LICENSE.txt | 11 + .../collection-attribute-filter.asset.php | 1 + .../blocks/collection-attribute-filter.css | 3 + .../blocks/collection-attribute-filter.js | 10 + .../collection-attribute-filter/block.json | 52 + .../blocks/collection-filters-style.asset.php | 1 + .../blocks/collection-filters.asset.php | 1 + .../client/blocks/collection-filters.js | 4 + .../blocks/collection-filters/block.json | 31 + ...collection-price-filter-frontend.asset.php | 1 + .../collection-price-filter-frontend.js | 1 + .../blocks/collection-price-filter-rtl.css | 1 + .../collection-price-filter-style.asset.php | 1 + ...llection-price-filter-style.js.LICENSE.txt | 5 + .../blocks/collection-price-filter.asset.php | 1 + .../client/blocks/collection-price-filter.css | 1 + .../client/blocks/collection-price-filter.js | 1 + .../blocks/collection-price-filter/block.json | 38 + ...ollection-rating-filter-frontend.asset.php | 1 + .../collection-rating-filter-frontend.js | 1 + .../blocks/collection-rating-filter-rtl.css | 3 + .../collection-rating-filter-style.asset.php | 1 + ...lection-rating-filter-style.js.LICENSE.txt | 11 + .../blocks/collection-rating-filter.asset.php | 1 + .../blocks/collection-rating-filter.css | 3 + .../client/blocks/collection-rating-filter.js | 10 + .../collection-rating-filter/block.json | 44 + ...collection-stock-filter-frontend.asset.php | 1 + .../collection-stock-filter-frontend.js | 1 + .../blocks/collection-stock-filter-rtl.css | 3 + .../collection-stock-filter-style.asset.php | 1 + ...llection-stock-filter-style.js.LICENSE.txt | 11 + .../blocks/collection-stock-filter.asset.php | 1 + .../client/blocks/collection-stock-filter.css | 3 + .../client/blocks/collection-stock-filter.js | 2 + .../blocks/collection-stock-filter/block.json | 46 + .../client/blocks/customer-account-rtl.css | 1 + .../blocks/customer-account-style.asset.php | 1 + .../customer-account-style.js.LICENSE.txt | 5 + .../client/blocks/customer-account.asset.php | 1 + .../assets/client/blocks/customer-account.css | 1 + .../assets/client/blocks/customer-account.js | 1 + .../client/blocks/customer-account/block.json | 38 + .../client/blocks/featured-category-rtl.css | 1 + .../blocks/featured-category-style.asset.php | 1 + .../featured-category-style.js.LICENSE.txt | 5 + .../client/blocks/featured-category.asset.php | 1 + .../client/blocks/featured-category.css | 1 + .../assets/client/blocks/featured-category.js | 15 + .../blocks/featured-category/block.json | 108 + .../client/blocks/featured-product-rtl.css | 1 + .../blocks/featured-product-style.asset.php | 1 + .../featured-product-style.js.LICENSE.txt | 5 + .../client/blocks/featured-product.asset.php | 1 + .../assets/client/blocks/featured-product.css | 1 + .../assets/client/blocks/featured-product.js | 15 + .../client/blocks/featured-product/block.json | 108 + .../blocks/filter-wrapper-frontend.asset.php | 1 + .../client/blocks/filter-wrapper-frontend.js | 1 + .../client/blocks/filter-wrapper-rtl.css | 1 + .../blocks/filter-wrapper-style.asset.php | 1 + .../client/blocks/filter-wrapper.asset.php | 1 + .../assets/client/blocks/filter-wrapper.css | 1 + .../assets/client/blocks/filter-wrapper.js | 1 + .../client/blocks/filter-wrapper/block.json | 18 + .../handpicked-products-style.asset.php | 1 + .../handpicked-products-style.js.LICENSE.txt | 5 + .../blocks/handpicked-products.asset.php | 1 + .../client/blocks/handpicked-products.js | 8 + .../blocks/handpicked-products/block.json | 80 + .../block.json | 18 + .../cart-cross-sells-block/block.json | 18 + .../block.json | 32 + .../cart-express-payment-block/block.json | 28 + .../inner-blocks/cart-items-block/block.json | 28 + .../cart-line-items-block/block.json | 28 + .../cart-order-summary-block/block.json | 28 + .../block.json | 30 + .../block.json | 31 + .../cart-order-summary-fee-block/block.json | 31 + .../block.json | 34 + .../block.json | 27 + .../block.json | 31 + .../cart-order-summary-taxes-block/block.json | 31 + .../inner-blocks/cart-totals-block/block.json | 35 + .../checkout-actions-block/block.json | 28 + .../checkout-billing-address-block/block.json | 28 + .../block.json | 28 + .../checkout-express-payment-block/block.json | 32 + .../checkout-fields-block/block.json | 32 + .../checkout-order-note-block/block.json | 30 + .../checkout-order-summary-block/block.json | 27 + .../block.json | 31 + .../block.json | 30 + .../block.json | 31 + .../block.json | 31 + .../block.json | 27 + .../block.json | 31 + .../block.json | 31 + .../checkout-payment-block/block.json | 28 + .../checkout-pickup-options-block/block.json | 28 + .../block.json | 28 + .../checkout-shipping-method-block/block.json | 28 + .../block.json | 28 + .../checkout-terms-block/block.json | 31 + .../checkout-totals-block/block.json | 33 + .../inner-blocks/empty-cart-block/block.json | 28 + .../empty-mini-cart-contents-block/block.json | 28 + .../inner-blocks/filled-cart-block/block.json | 28 + .../block.json | 28 + .../mini-cart-cart-button-block/block.json | 42 + .../block.json | 44 + .../mini-cart-footer-block/block.json | 28 + .../mini-cart-items-block/block.json | 28 + .../mini-cart-products-table-block/block.json | 28 + .../block.json | 42 + .../mini-cart-title-block/block.json | 35 + .../block.json | 29 + .../mini-cart-title-label-block/block.json | 34 + .../proceed-to-checkout-block/block.json | 27 + .../client/blocks/legacy-template-rtl.css | 1 + .../blocks/legacy-template-style.asset.php | 1 + .../legacy-template-style.js.LICENSE.txt | 5 + .../client/blocks/legacy-template.asset.php | 1 + .../assets/client/blocks/legacy-template.css | 1 + .../assets/client/blocks/legacy-template.js | 7 + .../mini-cart-component-frontend.asset.php | 1 + .../blocks/mini-cart-component-frontend.js | 4 + .../cart-button-frontend.js | 1 + .../cart-button-style.js | 1 + .../checkout-button-frontend.js | 1 + .../checkout-button-style.js | 1 + .../empty-cart-frontend.js | 1 + .../empty-cart-style.js | 1 + .../filled-cart-frontend.js | 1 + .../filled-cart-style.js | 1 + .../footer-frontend.js | 1 + .../mini-cart-contents-block/footer-style.js | 1 + .../items-frontend.js | 1 + .../mini-cart-contents-block/items-style.js | 1 + .../products-table-frontend.js | 11 + .../shopping-button-frontend.js | 1 + .../shopping-button-style.js | 1 + .../title-frontend.js | 2 + .../title-items-counter-frontend.js | 2 + .../title-items-counter-style.js | 1 + .../title-label-frontend.js | 1 + .../title-label-style.js | 1 + .../mini-cart-contents-block/title-style.js | 1 + .../client/blocks/mini-cart-contents-rtl.css | 11 + .../blocks/mini-cart-contents-style.asset.php | 1 + .../mini-cart-contents-style.js.LICENSE.txt | 11 + .../blocks/mini-cart-contents.asset.php | 1 + .../client/blocks/mini-cart-contents.css | 11 + .../client/blocks/mini-cart-contents.js | 13 + .../blocks/mini-cart-frontend.asset.php | 1 + .../client/blocks/mini-cart-frontend.js | 3 + .../assets/client/blocks/mini-cart-rtl.css | 5 + .../client/blocks/mini-cart-style.asset.php | 1 + .../blocks/mini-cart-style.js.LICENSE.txt | 11 + .../assets/client/blocks/mini-cart.asset.php | 1 + .../assets/client/blocks/mini-cart.css | 5 + .../assets/client/blocks/mini-cart.js | 1 + .../assets/client/blocks/mini-cart/block.json | 65 + ...onfirmation-additional-information-rtl.css | 2 + ...ion-additional-information-style.asset.php | 1 + ...firmation-additional-information.asset.php | 1 + ...er-confirmation-additional-information.css | 2 + ...der-confirmation-additional-information.js | 1 + .../block.json | 44 + ...order-confirmation-billing-address-rtl.css | 1 + ...nfirmation-billing-address-style.asset.php | 1 + ...der-confirmation-billing-address.asset.php | 1 + .../order-confirmation-billing-address.css | 1 + .../order-confirmation-billing-address.js | 1 + .../block.json | 62 + ...nfirmation-billing-wrapper-style.asset.php | 1 + ...der-confirmation-billing-wrapper.asset.php | 1 + .../order-confirmation-billing-wrapper.js | 1 + .../block.json | 29 + .../order-confirmation-downloads-rtl.css | 1 + ...der-confirmation-downloads-style.asset.php | 1 + ...irmation-downloads-wrapper-style.asset.php | 1 + ...ion-downloads-wrapper-style.js.LICENSE.txt | 5 + ...r-confirmation-downloads-wrapper.asset.php | 1 + .../order-confirmation-downloads-wrapper.js | 1 + .../block.json | 29 + .../order-confirmation-downloads.asset.php | 1 + .../blocks/order-confirmation-downloads.css | 1 + .../blocks/order-confirmation-downloads.js | 1 + .../order-confirmation-downloads/block.json | 68 + ...rder-confirmation-shipping-address-rtl.css | 1 + ...firmation-shipping-address-style.asset.php | 1 + ...er-confirmation-shipping-address.asset.php | 1 + .../order-confirmation-shipping-address.css | 1 + .../order-confirmation-shipping-address.js | 1 + .../block.json | 62 + ...firmation-shipping-wrapper-style.asset.php | 1 + ...er-confirmation-shipping-wrapper.asset.php | 1 + .../order-confirmation-shipping-wrapper.js | 1 + .../block.json | 30 + .../blocks/order-confirmation-status-rtl.css | 1 + .../order-confirmation-status-style.asset.php | 1 + .../order-confirmation-status.asset.php | 1 + .../blocks/order-confirmation-status.css | 1 + .../blocks/order-confirmation-status.js | 1 + .../order-confirmation-status/block.json | 56 + .../blocks/order-confirmation-summary-rtl.css | 1 + ...order-confirmation-summary-style.asset.php | 1 + .../order-confirmation-summary.asset.php | 1 + .../blocks/order-confirmation-summary.css | 1 + .../blocks/order-confirmation-summary.js | 1 + .../order-confirmation-summary/block.json | 65 + .../blocks/order-confirmation-totals-rtl.css | 1 + .../order-confirmation-totals-style.asset.php | 1 + ...onfirmation-totals-wrapper-style.asset.php | 1 + ...rder-confirmation-totals-wrapper.asset.php | 1 + .../order-confirmation-totals-wrapper.js | 1 + .../block.json | 29 + .../order-confirmation-totals.asset.php | 1 + .../blocks/order-confirmation-totals.css | 1 + .../blocks/order-confirmation-totals.js | 1 + .../order-confirmation-totals/block.json | 68 + .../client/blocks/packages-style-rtl.css | 21 + .../blocks/packages-style-style.asset.php | 1 + .../packages-style-style.js.LICENSE.txt | 38 + .../assets/client/blocks/packages-style.css | 21 + .../page-content-wrapper-style.asset.php | 1 + .../blocks/page-content-wrapper.asset.php | 1 + .../client/blocks/page-content-wrapper.js | 1 + .../blocks/page-content-wrapper/block.json | 26 + .../blocks/price-filter-frontend.asset.php | 1 + .../client/blocks/price-filter-frontend.js | 5 + .../assets/client/blocks/price-filter-rtl.css | 6 + .../blocks/price-filter-style.asset.php | 1 + .../blocks/price-filter-style.js.LICENSE.txt | 5 + .../blocks/price-filter-wrapper-frontend.js | 5 + .../blocks/price-filter-wrapper-rtl.css | 5 + .../client/blocks/price-filter-wrapper.css | 5 + .../client/blocks/price-filter.asset.php | 1 + .../assets/client/blocks/price-filter.css | 6 + .../assets/client/blocks/price-filter.js | 5 + .../client/blocks/price-filter/block.json | 43 + .../client/blocks/price-format.asset.php | 1 + .../assets/client/blocks/price-format.js | 1 + .../blocks/product-add-to-cart-frontend.js | 3 + .../client/blocks/product-add-to-cart-rtl.css | 4 + .../client/blocks/product-add-to-cart.css | 4 + .../client/blocks/product-add-to-cart.js | 3 + .../blocks/product-average-rating-frontend.js | 1 + .../client/blocks/product-average-rating.js | 1 + .../blocks/product-average-rating/block.json | 17 + .../product-best-sellers-style.asset.php | 1 + .../product-best-sellers-style.js.LICENSE.txt | 5 + .../blocks/product-best-sellers.asset.php | 1 + .../client/blocks/product-best-sellers.js | 12 + .../blocks/product-best-sellers/block.json | 92 + .../client/blocks/product-button-frontend.js | 3 + ...ct-button-interactivity-frontend.asset.php | 1 + .../product-button-interactivity-frontend.js | 1 + .../client/blocks/product-button-rtl.css | 1 + .../assets/client/blocks/product-button.css | 1 + .../assets/client/blocks/product-button.js | 3 + .../client/blocks/product-button/block.json | 66 + .../client/blocks/product-categories-rtl.css | 1 + .../blocks/product-categories-style.asset.php | 1 + .../blocks/product-categories.asset.php | 1 + .../client/blocks/product-categories.css | 1 + .../client/blocks/product-categories.js | 1 + .../blocks/product-categories/block.json | 57 + .../blocks/product-category-style.asset.php | 1 + .../product-category-style.js.LICENSE.txt | 5 + .../client/blocks/product-category.asset.php | 1 + .../assets/client/blocks/product-category.js | 12 + .../client/blocks/product-category/block.json | 92 + ...duct-collection-no-results-style.asset.php | 1 + .../product-collection-no-results.asset.php | 1 + .../blocks/product-collection-no-results.js | 1 + .../product-collection-no-results/block.json | 35 + .../blocks/product-collection-style.asset.php | 1 + .../product-collection-style.js.LICENSE.txt | 5 + .../blocks/product-collection.asset.php | 1 + .../client/blocks/product-collection.js | 12 + .../blocks/product-collection/block.json | 40 + .../client/blocks/product-details-rtl.css | 1 + .../blocks/product-details-style.asset.php | 1 + .../product-details-style.js.LICENSE.txt | 5 + .../assets/client/blocks/product-details.css | 1 + .../client/blocks/product-details/block.json | 18 + .../blocks/product-gallery-frontend.asset.php | 1 + .../client/blocks/product-gallery-frontend.js | 1 + ...uct-gallery-large-image-frontend.asset.php | 1 + .../product-gallery-large-image-frontend.js | 1 + ...-large-image-next-previous-style.asset.php | 1 + ...e-image-next-previous-style.js.LICENSE.txt | 5 + ...allery-large-image-next-previous.asset.php | 1 + ...oduct-gallery-large-image-next-previous.js | 1 + .../block.json | 25 + ...roduct-gallery-large-image-style.asset.php | 1 + ...t-gallery-large-image-style.js.LICENSE.txt | 5 + .../product-gallery-large-image.asset.php | 1 + .../blocks/product-gallery-large-image.js | 1 + .../product-gallery-large-image/block.json | 16 + .../product-gallery-pager-style.asset.php | 1 + ...product-gallery-pager-style.js.LICENSE.txt | 5 + .../blocks/product-gallery-pager.asset.php | 1 + .../client/blocks/product-gallery-pager.js | 1 + .../blocks/product-gallery-pager/block.json | 13 + .../client/blocks/product-gallery-rtl.css | 1 + .../blocks/product-gallery-style.asset.php | 1 + .../product-gallery-style.js.LICENSE.txt | 5 + ...product-gallery-thumbnails-style.asset.php | 1 + ...ct-gallery-thumbnails-style.js.LICENSE.txt | 5 + .../product-gallery-thumbnails.asset.php | 1 + .../blocks/product-gallery-thumbnails.js | 1 + .../product-gallery-thumbnails/block.json | 21 + .../client/blocks/product-gallery.asset.php | 1 + .../assets/client/blocks/product-gallery.css | 1 + .../assets/client/blocks/product-gallery.js | 1 + .../client/blocks/product-gallery/block.json | 68 + .../client/blocks/product-image-frontend.js | 2 + .../blocks/product-image-gallery-rtl.css | 1 + .../product-image-gallery-style.asset.php | 1 + .../client/blocks/product-image-gallery.css | 1 + .../blocks/product-image-gallery/block.json | 17 + .../client/blocks/product-image-rtl.css | 2 + .../assets/client/blocks/product-image.css | 2 + .../assets/client/blocks/product-image.js | 2 + .../client/blocks/product-meta/block.json | 17 + .../client/blocks/product-new-style.asset.php | 1 + .../blocks/product-new-style.js.LICENSE.txt | 5 + .../client/blocks/product-new.asset.php | 1 + .../assets/client/blocks/product-new.js | 12 + .../client/blocks/product-new/block.json | 92 + .../blocks/product-on-sale-style.asset.php | 1 + .../product-on-sale-style.js.LICENSE.txt | 5 + .../client/blocks/product-on-sale.asset.php | 1 + .../assets/client/blocks/product-on-sale.js | 12 + .../client/blocks/product-price-frontend.js | 2 + .../client/blocks/product-price-rtl.css | 1 + .../assets/client/blocks/product-price.css | 1 + .../assets/client/blocks/product-price.js | 2 + .../client/blocks/product-query-rtl.css | 1 + .../blocks/product-query-style.asset.php | 1 + .../blocks/product-query-style.js.LICENSE.txt | 5 + .../client/blocks/product-query.asset.php | 1 + .../assets/client/blocks/product-query.css | 1 + .../assets/client/blocks/product-query.js | 14 + .../blocks/product-rating-counter-frontend.js | 2 + .../client/blocks/product-rating-counter.js | 2 + .../blocks/product-rating-counter/block.json | 38 + .../client/blocks/product-rating-frontend.js | 4 + .../client/blocks/product-rating-rtl.css | 1 + .../blocks/product-rating-stars-frontend.js | 3 + .../blocks/product-rating-stars-rtl.css | 1 + .../client/blocks/product-rating-stars.css | 1 + .../client/blocks/product-rating-stars.js | 3 + .../blocks/product-rating-stars/block.json | 38 + .../assets/client/blocks/product-rating.css | 1 + .../assets/client/blocks/product-rating.js | 4 + .../client/blocks/product-rating/block.json | 38 + .../blocks/product-results-count-rtl.css | 1 + .../product-results-count-style.asset.php | 1 + .../blocks/product-results-count.asset.php | 1 + .../client/blocks/product-results-count.css | 1 + .../client/blocks/product-results-count.js | 1 + .../blocks/product-results-count/block.json | 21 + .../client/blocks/product-reviews-rtl.css | 1 + .../blocks/product-reviews-style.asset.php | 1 + .../assets/client/blocks/product-reviews.css | 1 + .../client/blocks/product-reviews/block.json | 15 + .../blocks/product-sale-badge-frontend.js | 1 + .../client/blocks/product-sale-badge-rtl.css | 1 + .../client/blocks/product-sale-badge.css | 1 + .../client/blocks/product-sale-badge.js | 1 + .../client/blocks/product-search-rtl.css | 1 + .../blocks/product-search-style.asset.php | 1 + .../product-search-style.js.LICENSE.txt | 5 + .../client/blocks/product-search.asset.php | 1 + .../assets/client/blocks/product-search.css | 1 + .../assets/client/blocks/product-search.js | 1 + .../client/blocks/product-sku-frontend.js | 1 + .../assets/client/blocks/product-sku-rtl.css | 1 + .../assets/client/blocks/product-sku.css | 1 + .../assets/client/blocks/product-sku.js | 1 + .../product-stock-indicator-frontend.js | 2 + .../blocks/product-stock-indicator-rtl.css | 1 + .../client/blocks/product-stock-indicator.css | 1 + .../client/blocks/product-stock-indicator.js | 2 + .../client/blocks/product-summary-frontend.js | 1 + .../client/blocks/product-summary-rtl.css | 1 + .../assets/client/blocks/product-summary.css | 1 + .../assets/client/blocks/product-summary.js | 1 + .../client/blocks/product-tag-style.asset.php | 1 + .../blocks/product-tag-style.js.LICENSE.txt | 5 + .../client/blocks/product-tag.asset.php | 1 + .../assets/client/blocks/product-tag.js | 9 + .../client/blocks/product-tag/block.json | 79 + .../client/blocks/product-template-rtl.css | 1 + .../blocks/product-template-style.asset.php | 1 + .../product-template-style.js.LICENSE.txt | 5 + .../client/blocks/product-template.asset.php | 1 + .../assets/client/blocks/product-template.css | 1 + .../assets/client/blocks/product-template.js | 1 + .../client/blocks/product-template/block.json | 48 + .../client/blocks/product-title-frontend.js | 1 + .../client/blocks/product-title-rtl.css | 2 + .../assets/client/blocks/product-title.css | 2 + .../assets/client/blocks/product-title.js | 1 + .../blocks/product-top-rated-style.asset.php | 1 + .../product-top-rated-style.js.LICENSE.txt | 5 + .../client/blocks/product-top-rated.asset.php | 1 + .../assets/client/blocks/product-top-rated.js | 12 + .../blocks/product-top-rated/block.json | 92 + .../products-by-attribute-style.asset.php | 1 + ...products-by-attribute-style.js.LICENSE.txt | 5 + .../blocks/products-by-attribute.asset.php | 1 + .../client/blocks/products-by-attribute.js | 12 + .../blocks/products-by-attribute/block.json | 89 + .../blocks/rating-filter-frontend.asset.php | 1 + .../client/blocks/rating-filter-frontend.js | 15 + .../client/blocks/rating-filter-rtl.css | 6 + .../blocks/rating-filter-style.asset.php | 1 + .../blocks/rating-filter-style.js.LICENSE.txt | 11 + .../blocks/rating-filter-wrapper-frontend.js | 15 + .../blocks/rating-filter-wrapper-rtl.css | 5 + .../client/blocks/rating-filter-wrapper.css | 5 + .../client/blocks/rating-filter.asset.php | 1 + .../assets/client/blocks/rating-filter.css | 6 + .../assets/client/blocks/rating-filter.js | 9 + .../client/blocks/rating-filter/block.json | 44 + .../client/blocks/related-products/block.json | 17 + .../client/blocks/reviews-by-category-rtl.css | 4 + .../reviews-by-category-style.asset.php | 1 + .../reviews-by-category-style.js.LICENSE.txt | 5 + .../blocks/reviews-by-category.asset.php | 1 + .../client/blocks/reviews-by-category.css | 4 + .../client/blocks/reviews-by-category.js | 18 + .../client/blocks/reviews-by-product-rtl.css | 4 + .../blocks/reviews-by-product-style.asset.php | 1 + .../reviews-by-product-style.js.LICENSE.txt | 5 + .../blocks/reviews-by-product.asset.php | 1 + .../client/blocks/reviews-by-product.css | 4 + .../client/blocks/reviews-by-product.js | 18 + .../client/blocks/reviews-frontend.asset.php | 1 + .../assets/client/blocks/reviews-frontend.js | 4 + .../client/blocks/single-product-rtl.css | 1 + .../blocks/single-product-style.asset.php | 1 + .../single-product-style.js.LICENSE.txt | 5 + .../client/blocks/single-product.asset.php | 1 + .../assets/client/blocks/single-product.css | 1 + .../assets/client/blocks/single-product.js | 9 + .../client/blocks/single-product/block.json | 30 + .../blocks/stock-filter-frontend.asset.php | 1 + .../client/blocks/stock-filter-frontend.js | 14 + .../assets/client/blocks/stock-filter-rtl.css | 7 + .../blocks/stock-filter-style.asset.php | 1 + .../blocks/stock-filter-style.js.LICENSE.txt | 11 + .../blocks/stock-filter-wrapper-frontend.js | 14 + .../blocks/stock-filter-wrapper-rtl.css | 6 + .../client/blocks/stock-filter-wrapper.css | 6 + .../client/blocks/stock-filter.asset.php | 1 + .../assets/client/blocks/stock-filter.css | 7 + .../assets/client/blocks/stock-filter.js | 8 + .../client/blocks/stock-filter/block.json | 48 + .../client/blocks/store-notices-rtl.css | 3 + .../blocks/store-notices-style.asset.php | 1 + .../blocks/store-notices-style.js.LICENSE.txt | 11 + .../client/blocks/store-notices.asset.php | 1 + .../assets/client/blocks/store-notices.css | 3 + .../assets/client/blocks/store-notices.js | 1 + .../client/blocks/store-notices/block.json | 21 + ...assic-template-revert-button-style-rtl.css | 1 + ...mplate-revert-button-style-style.asset.php | 1 + ...s-classic-template-revert-button-style.css | 1 + ...s-classic-template-revert-button.asset.php | 1 + ...c-blocks-classic-template-revert-button.js | 1 + .../client/blocks/wc-blocks-data.asset.php | 1 + .../assets/client/blocks/wc-blocks-data.js | 8 + .../blocks/wc-blocks-editor-style-rtl.css | 69 + .../client/blocks/wc-blocks-editor-style.css | 69 + .../wc-blocks-google-analytics.asset.php | 1 + .../blocks/wc-blocks-google-analytics.js | 1 + .../blocks/wc-blocks-middleware.asset.php | 1 + .../client/blocks/wc-blocks-middleware.js | 1 + .../blocks/wc-blocks-registry.asset.php | 1 + .../client/blocks/wc-blocks-registry.js | 1 + .../assets/client/blocks/wc-blocks-rtl.css | 2 + .../blocks/wc-blocks-shared-context.asset.php | 1 + .../client/blocks/wc-blocks-shared-context.js | 1 + .../blocks/wc-blocks-shared-hocs.asset.php | 1 + .../client/blocks/wc-blocks-shared-hocs.js | 1 + .../client/blocks/wc-blocks-style.asset.php | 1 + .../blocks/wc-blocks-style.js.LICENSE.txt | 5 + .../client/blocks/wc-blocks-vendors.asset.php | 1 + .../assets/client/blocks/wc-blocks-vendors.js | 10 + .../assets/client/blocks/wc-blocks.asset.php | 1 + .../assets/client/blocks/wc-blocks.css | 2 + .../assets/client/blocks/wc-blocks.js | 1 + .../wc-interactivity-checkbox-list-rtl.css | 1 + ...nteractivity-checkbox-list-style.asset.php | 1 + .../wc-interactivity-checkbox-list.asset.php | 1 + .../blocks/wc-interactivity-checkbox-list.css | 1 + .../blocks/wc-interactivity-checkbox-list.js | 1 + .../blocks/wc-interactivity-dropdown-rtl.css | 1 + .../wc-interactivity-dropdown-style.asset.php | 1 + .../wc-interactivity-dropdown.asset.php | 1 + .../blocks/wc-interactivity-dropdown.css | 1 + .../blocks/wc-interactivity-dropdown.js | 1 + .../client/blocks/wc-interactivity.asset.php | 1 + .../assets/client/blocks/wc-interactivity.js | 1 + .../blocks/wc-payment-method-bacs.asset.php | 1 + .../client/blocks/wc-payment-method-bacs.js | 1 + .../blocks/wc-payment-method-cheque.asset.php | 1 + .../client/blocks/wc-payment-method-cheque.js | 1 + .../blocks/wc-payment-method-cod.asset.php | 1 + .../client/blocks/wc-payment-method-cod.js | 1 + .../blocks/wc-payment-method-paypal.asset.php | 1 + .../client/blocks/wc-payment-method-paypal.js | 1 + .../client/blocks/wc-settings.asset.php | 1 + .../assets/client/blocks/wc-settings.js | 1 + ...-shipping-method-pickup-location.asset.php | 1 + .../wc-shipping-method-pickup-location.js | 250 + .../woocommerce/assets/css/activation-rtl.css | 2 +- .../woocommerce/assets/css/activation.css | 2 +- .../woocommerce/assets/css/activation.scss | 2 +- .../woocommerce/assets/css/admin-rtl.css | 2 +- .../plugins/woocommerce/assets/css/admin.css | 2 +- .../plugins/woocommerce/assets/css/admin.scss | 336 +- .../assets/css/twenty-twenty-one-rtl.css | 2 +- .../assets/css/twenty-twenty-one.css | 2 +- .../woocommerce/assets/css/wc-setup-rtl.css | 2 +- .../woocommerce/assets/css/wc-setup.css | 2 +- .../assets/css/woocommerce-blocktheme-rtl.css | 2 +- .../assets/css/woocommerce-blocktheme.css | 2 +- .../assets/css/woocommerce-blocktheme.scss | 13 +- .../woocommerce/assets/images/block-error.svg | 1 + .../product-image-gallery.svg | 1 + .../block-placeholders/product-reviews.svg | 27 + .../blocks/mini-cart/cart-drawer-rtl.svg | 35 + .../images/blocks/mini-cart/cart-drawer.svg | 33 + .../assets/images/onboarding/bacs.svg | 6 +- .../assets/images/onboarding/cod.svg | 6 +- ...each-landscape-sea-coast-nature-person.jpg | Bin 0 -> 111873 bytes ...esk-table-wood-chair-floor-home-square.png | Bin 0 -> 27511 bytes ...liquid-tableware-dishware-bottle-fluid.jpg | Bin 0 -> 438501 bytes .../fresh-lettuce-washed.png | Bin 0 -> 76694 bytes .../fresh-organic-tomatoes.png | Bin 0 -> 68487 bytes ...ther-guitar-typewriter-red-gadget-sofa.png | Bin 0 -> 208047 bytes ...usic-black-and-white-white-photography.jpg | Bin 0 -> 543686 bytes ...-person-winter-photography-statue-coat.png | Bin 0 -> 217586 bytes ...able-black-and-white-white-photography.jpg | Bin 0 -> 213467 bytes ...echnology-play-equipment-studio-gadget.png | Bin 0 -> 156300 bytes ...-fashion-clothing-outerwear-wool-scarf.png | Bin 0 -> 297113 bytes .../plant-white-leaf-flower-vase-green.jpg | Bin 0 -> 2424627 bytes .../images/pattern-placeholders/portrait.png | Bin 0 -> 52257 bytes .../road-sport-vintage-wheel-retro-old.jpg | Bin 0 -> 1024660 bytes .../russet-organic-potatoes.png | Bin 0 -> 104650 bytes .../sweet-organic-lemons.png | Bin 0 -> 86560 bytes ...home-living-room-furniture-room-square.png | Bin 0 -> 24798 bytes ...-floor-home-living-room-furniture-room.png | Bin 0 -> 150389 bytes ...sphere-living-room-furniture-square-lg.png | Bin 0 -> 52414 bytes ...tmosphere-living-room-furniture-square.png | Bin 0 -> 28405 bytes ...white-chair-floor-shelf-lamp-square-lg.png | Bin 0 -> 51585 bytes ...r-floor-living-room-furniture-vertical.png | Bin 0 -> 141842 bytes .../table-wood-house-chair-floor-window.jpg | Bin 0 -> 466036 bytes .../tea-leaf-meal-food-herb-produce.jpg | Bin 0 -> 506631 bytes ...stick-gadget-console-games-playstation.png | Bin 0 -> 164041 bytes ...amera-photography-vintage-photographer.png | Bin 0 -> 99614 bytes .../tree-branch-plant-wood-leaf-flower.jpg | Bin 0 -> 542385 bytes ...ch-hand-brand-jewellery-strap-platinum.jpg | Bin 0 -> 154559 bytes ...hite-photograph-monochrome-photography.jpg | Bin 0 -> 60580 bytes ...e-vase-decoration-pattern-ceramic-lamp.jpg | Bin 0 -> 574990 bytes ...ping-keyboard-technology-white-vintage.jpg | Bin 0 -> 77696 bytes .../assets/images/payment-methods/alipay.svg | 10 + .../assets/images/payment-methods/amex.svg | 6 + .../images/payment-methods/bancontact.svg | 8 + .../assets/images/payment-methods/diners.svg | 8 + .../images/payment-methods/discover.svg | 7 + .../assets/images/payment-methods/eps.svg | 27 + .../assets/images/payment-methods/giropay.svg | 5 + .../assets/images/payment-methods/ideal.svg | 7 + .../assets/images/payment-methods/jcb.svg | 23 + .../assets/images/payment-methods/laser.svg | 33 + .../assets/images/payment-methods/maestro.svg | 9 + .../images/payment-methods/mastercard.svg | 9 + .../images/payment-methods/multibanco.svg | 44 + .../assets/images/payment-methods/p24.svg | 5 + .../assets/images/payment-methods/sepa.svg | 7 + .../assets/images/payment-methods/sofort.svg | 4 + .../images/payment-methods/unionpay.svg | 5 + .../assets/images/payment-methods/visa.svg | 7 + .../assets/images/payment-methods/wechat.svg | 14 + .../assets/images/previews/beanie.jpg | Bin 0 -> 36039 bytes .../assets/images/previews/cap.jpg | Bin 0 -> 37675 bytes .../assets/images/previews/collection.jpg | Bin 0 -> 122346 bytes .../images/previews/hoodie-with-logo.jpg | Bin 0 -> 46969 bytes .../images/previews/hoodie-with-pocket.jpg | Bin 0 -> 43268 bytes .../images/previews/hoodie-with-zipper.jpg | Bin 0 -> 56609 bytes .../images/previews/long-sleeve-tee.jpg | Bin 0 -> 51118 bytes .../assets/images/previews/pennant.jpg | Bin 0 -> 43014 bytes .../assets/images/previews/polo.jpg | Bin 0 -> 44409 bytes .../assets/images/previews/tshirt.jpg | Bin 0 -> 41155 bytes .../shipping_partners/easyship-column.svg | 68 + .../images/shipping_partners/easyship-row.svg | 1 + .../template-placeholders/archive-product.svg | 1 + .../images/template-placeholders/fallback.svg | 3 + .../template-placeholders/single-product.svg | 1 + .../assets/js/admin/backbone-modal.js | 5 + .../assets/js/admin/backbone-modal.min.js | 2 +- .../assets/js/admin/meta-boxes-order.js | 4 +- .../assets/js/admin/meta-boxes-order.min.js | 2 +- .../assets/js/admin/meta-boxes-product.js | 5 +- .../assets/js/admin/meta-boxes-product.min.js | 2 +- .../js/admin/order-attribution-admin.js | 35 + .../js/admin/order-attribution-admin.min.js | 1 + .../js/admin/wc-shipping-zone-methods.js | 38 +- .../js/admin/wc-shipping-zone-methods.min.js | 2 +- .../assets/js/admin/wc-shipping-zones.js | 9 +- .../assets/js/admin/wc-shipping-zones.min.js | 2 +- .../assets/js/flexslider/jquery.flexslider.js | 21 +- .../js/flexslider/jquery.flexslider.min.js | 2 +- .../woocommerce/assets/js/frontend/cart.js | 351 +- .../assets/js/frontend/cart.min.js | 2 +- .../js/frontend/order-attribution-blocks.js | 5 + .../frontend/order-attribution-blocks.min.js | 1 + .../assets/js/frontend/order-attribution.js | 123 + .../js/frontend/order-attribution.min.js | 1 + .../js/frontend/password-strength-meter.js | 4 +- .../frontend/password-strength-meter.min.js | 2 +- .../js/frontend/wp-consent-api-integration.js | 24 + .../wp-consent-api-integration.min.js | 1 + .../assets/js/sourcebuster/LICENSE | 21 + .../assets/js/sourcebuster/sourcebuster.js | 878 + .../js/sourcebuster/sourcebuster.min.js | 1 + .../woocommerce/client/admin/config/core.json | 4 +- .../client/admin/config/development.json | 2 + .../i18n/languages/woocommerce.pot | 18898 ++++++++-------- .../abstracts/abstract-wc-log-handler.php | 43 +- .../abstracts/abstract-wc-product.php | 2 +- .../abstracts/abstract-wc-shipping-method.php | 2 +- .../includes/admin/class-wc-admin-assets.php | 69 + .../admin/class-wc-admin-log-table-list.php | 103 +- .../includes/admin/class-wc-admin-menus.php | 6 +- .../includes/admin/class-wc-admin-notices.php | 13 + .../admin/class-wc-admin-post-types.php | 99 +- .../includes/admin/class-wc-admin-profile.php | 21 +- .../includes/admin/class-wc-admin-status.php | 57 +- ...s-wc-admin-upload-downloadable-product.php | 123 + .../helper/class-wc-helper-plugin-info.php | 5 - .../class-wc-helper-subscriptions-api.php | 60 + .../includes/admin/helper/class-wc-helper.php | 103 +- .../settings/class-wc-settings-advanced.php | 5 +- .../html-admin-page-shipping-classes.php | 2 +- .../html-admin-page-shipping-zone-methods.php | 28 +- .../views/html-admin-page-shipping-zones.php | 6 +- .../views/html-admin-page-status-logs-db.php | 63 +- .../woocommerce/includes/class-wc-ajax.php | 6 +- .../includes/class-wc-cart-session.php | 92 +- .../woocommerce/includes/class-wc-cart.php | 2 +- .../woocommerce/includes/class-wc-logger.php | 5 + .../includes/class-wc-order-item-product.php | 6 +- .../includes/class-wc-payment-gateways.php | 170 + .../includes/class-woocommerce.php | 17 +- .../class-wc-product-data-store-cpt.php | 10 +- .../import/abstract-wc-product-importer.php | 4 +- .../includes/legacy/class-wc-legacy-api.php | 210 +- .../log-handlers/class-wc-log-handler-db.php | 9 +- .../includes/react-admin/feature-config.php | 4 +- .../class-wc-rest-crud-controller.php | 2 +- .../class-wc-rest-posts-controller.php | 2 +- .../class-wc-rest-products-controller.php | 1 + .../flat-rate/class-wc-shipping-flat-rate.php | 2 +- .../class-wc-shipping-free-shipping.php | 7 +- .../class-wc-shipping-local-pickup.php | 7 +- .../shortcodes/class-wc-shortcode-cart.php | 6 +- .../includes/wc-core-functions.php | 4 +- .../includes/wc-product-functions.php | 44 + .../includes/wc-template-functions.php | 25 +- .../lib/packages/Detection/MobileDetect.php | 1419 ++ .../action-scheduler/action-scheduler.php | 18 +- .../packages/action-scheduler/changelog.txt | 6 + .../packages/action-scheduler/readme.txt | 10 +- .../plugins/woocommerce/patterns/banner.php | 56 + .../patterns/discount-banner-with-image.php | 53 + .../woocommerce/patterns/discount-banner.php | 41 + .../featured-category-cover-image.php | 43 + .../patterns/featured-category-focus.php | 37 + .../patterns/featured-category-triple.php | 84 + .../featured-products-fresh-and-tasty.php | 148 + .../plugins/woocommerce/patterns/filters.php | 67 + .../patterns/footer-large-dark.php | 92 + .../woocommerce/patterns/footer-large.php | 81 + .../patterns/footer-simple-dark.php | 66 + .../patterns/footer-simple-menu.php | 47 + .../woocommerce/patterns/footer-simple.php | 66 + .../patterns/footer-with-2-menus-dark.php | 83 + .../patterns/footer-with-2-menus.php | 82 + .../patterns/footer-with-3-menus.php | 65 + .../patterns/header-centered-pattern.php | 52 + .../patterns/header-essential-dark.php | 26 + .../woocommerce/patterns/header-essential.php | 31 + .../patterns/header-large-dark.php | 32 + .../woocommerce/patterns/header-large.php | 56 + .../woocommerce/patterns/header-minimal.php | 26 + .../patterns/hero-product-3-split.php | 111 + .../patterns/hero-product-chessboard.php | 122 + .../patterns/hero-product-split.php | 35 + .../patterns/just-arrived-full-hero.php | 44 + .../patterns/no-products-found.php | 13 + .../patterns/product-collection-3-columns.php | 25 + .../patterns/product-collection-4-columns.php | 32 + .../patterns/product-collection-5-columns.php | 28 + .../patterns/product-collection-banner.php | 56 + ...collection-featured-products-5-columns.php | 45 + .../patterns/product-collection-full-grid.php | 34 + .../patterns/product-collection-grid.php | 32 + .../patterns/product-collection-rows.php | 42 + .../product-collection-simple-grid.php | 30 + ...roduct-collections-featured-collection.php | 55 + ...oduct-collections-featured-collections.php | 91 + .../product-collections-newest-arrivals.php | 59 + .../patterns/product-details-listing.php | 33 + .../patterns/product-details-pattern.php | 147 + .../patterns/product-featured-2-columns.php | 63 + .../patterns/product-hero-2-col-2-row.php | 140 + .../woocommerce/patterns/product-hero.php | 36 + ...t-listing-with-gallery-and-description.php | 121 + .../product-query-4-column-product-row.php | 37 + ...duct-query-large-image-product-gallery.php | 23 + .../product-query-minimal-product-list.php | 39 + .../product-query-product-gallery.php | 24 + ...uct-query-product-list-with-1-1-images.php | 43 + ...uct-list-with-full-product-description.php | 65 + .../patterns/product-search-form.php | 9 + .../woocommerce/patterns/related-products.php | 37 + .../woocommerce/patterns/shop-by-price.php | 139 + .../small-discount-banner-with-image.php | 45 + .../social-follow-us-in-social-media.php | 84 + .../store-info-alt-image-and-text.php | 121 + .../patterns/testimonials-3-columns.php | 78 + .../patterns/testimonials-single.php | 42 + wp/wp-content/plugins/woocommerce/readme.txt | 159 +- .../woocommerce/src/Admin/API/Init.php | 3 + .../Admin/API/Reports/Stock/Controller.php | 2 +- .../src/Admin/Features/Navigation/Menu.php | 7 +- .../OnboardingTasks/Tasks/Shipping.php | 2 +- .../ProductBlockEditor/BlockRegistry.php | 90 +- .../Features/ProductBlockEditor/Init.php | 10 +- .../DefaultShippingPartners.php | 51 +- .../src/Blocks/AI/Configuration.php | 117 + .../woocommerce/src/Blocks/AI/Connection.php | 161 + .../plugins/woocommerce/src/Blocks/Assets.php | 95 + .../woocommerce/src/Blocks/Assets/Api.php | 327 + .../src/Blocks/Assets/AssetDataRegistry.php | 452 + .../src/Blocks/AssetsController.php | 366 + .../woocommerce/src/Blocks/BlockPatterns.php | 401 + .../src/Blocks/BlockTemplatesController.php | 782 + .../src/Blocks/BlockTypes/AbstractBlock.php | 484 + .../BlockTypes/AbstractDynamicBlock.php | 92 + .../Blocks/BlockTypes/AbstractInnerBlock.php | 65 + .../Blocks/BlockTypes/AbstractProductGrid.php | 699 + .../src/Blocks/BlockTypes/ActiveFilters.php | 14 + .../src/Blocks/BlockTypes/AddToCartForm.php | 200 + .../src/Blocks/BlockTypes/AllProducts.php | 46 + .../src/Blocks/BlockTypes/AllReviews.php | 43 + .../src/Blocks/BlockTypes/AtomicBlock.php | 47 + .../src/Blocks/BlockTypes/AttributeFilter.php | 37 + .../src/Blocks/BlockTypes/Breadcrumbs.php | 57 + .../src/Blocks/BlockTypes/Cart.php | 305 + .../CartAcceptedPaymentMethodsBlock.php | 14 + .../Blocks/BlockTypes/CartCrossSellsBlock.php | 14 + .../CartCrossSellsProductsBlock.php | 14 + .../BlockTypes/CartExpressPaymentBlock.php | 14 + .../src/Blocks/BlockTypes/CartItemsBlock.php | 14 + .../Blocks/BlockTypes/CartLineItemsBlock.php | 14 + .../BlockTypes/CartOrderSummaryBlock.php | 14 + .../CartOrderSummaryCouponFormBlock.php | 14 + .../CartOrderSummaryDiscountBlock.php | 14 + .../BlockTypes/CartOrderSummaryFeeBlock.php | 14 + .../CartOrderSummaryHeadingBlock.php | 14 + .../CartOrderSummaryShippingBlock.php | 14 + .../CartOrderSummarySubtotalBlock.php | 14 + .../BlockTypes/CartOrderSummaryTaxesBlock.php | 14 + .../src/Blocks/BlockTypes/CartTotalsBlock.php | 14 + .../src/Blocks/BlockTypes/CatalogSorting.php | 57 + .../src/Blocks/BlockTypes/Checkout.php | 505 + .../BlockTypes/CheckoutActionsBlock.php | 14 + .../CheckoutBillingAddressBlock.php | 14 + .../CheckoutContactInformationBlock.php | 14 + .../CheckoutExpressPaymentBlock.php | 14 + .../Blocks/BlockTypes/CheckoutFieldsBlock.php | 14 + .../BlockTypes/CheckoutOrderNoteBlock.php | 14 + .../BlockTypes/CheckoutOrderSummaryBlock.php | 14 + .../CheckoutOrderSummaryCartItemsBlock.php | 14 + .../CheckoutOrderSummaryCouponFormBlock.php | 14 + .../CheckoutOrderSummaryDiscountBlock.php | 14 + .../CheckoutOrderSummaryFeeBlock.php | 14 + .../CheckoutOrderSummaryShippingBlock.php | 14 + .../CheckoutOrderSummarySubtotalBlock.php | 14 + .../CheckoutOrderSummaryTaxesBlock.php | 14 + .../BlockTypes/CheckoutPaymentBlock.php | 14 + .../BlockTypes/CheckoutPickupOptionsBlock.php | 14 + .../CheckoutShippingAddressBlock.php | 14 + .../CheckoutShippingMethodBlock.php | 14 + .../CheckoutShippingMethodsBlock.php | 14 + .../Blocks/BlockTypes/CheckoutTermsBlock.php | 14 + .../Blocks/BlockTypes/CheckoutTotalsBlock.php | 14 + .../Blocks/BlockTypes/ClassicShortcode.php | 127 + .../src/Blocks/BlockTypes/ClassicTemplate.php | 429 + .../BlockTypes/CollectionActiveFilters.php | 233 + .../BlockTypes/CollectionAttributeFilter.php | 287 + .../Blocks/BlockTypes/CollectionFilters.php | 301 + .../BlockTypes/CollectionPriceFilter.php | 245 + .../BlockTypes/CollectionRatingFilter.php | 252 + .../BlockTypes/CollectionStockFilter.php | 248 + .../src/Blocks/BlockTypes/CustomerAccount.php | 120 + .../src/Blocks/BlockTypes/EmptyCartBlock.php | 14 + .../BlockTypes/EmptyMiniCartContentsBlock.php | 14 + .../Blocks/BlockTypes/FeaturedCategory.php | 102 + .../src/Blocks/BlockTypes/FeaturedItem.php | 327 + .../src/Blocks/BlockTypes/FeaturedProduct.php | 103 + .../src/Blocks/BlockTypes/FilledCartBlock.php | 14 + .../FilledMiniCartContentsBlock.php | 14 + .../src/Blocks/BlockTypes/FilterWrapper.php | 23 + .../Blocks/BlockTypes/HandpickedProducts.php | 61 + .../src/Blocks/BlockTypes/MiniCart.php | 696 + .../BlockTypes/MiniCartCartButtonBlock.php | 14 + .../MiniCartCheckoutButtonBlock.php | 14 + .../Blocks/BlockTypes/MiniCartContents.php | 169 + .../Blocks/BlockTypes/MiniCartFooterBlock.php | 14 + .../Blocks/BlockTypes/MiniCartItemsBlock.php | 14 + .../BlockTypes/MiniCartProductsTableBlock.php | 14 + .../MiniCartShoppingButtonBlock.php | 14 + .../Blocks/BlockTypes/MiniCartTitleBlock.php | 14 + .../MiniCartTitleItemsCounterBlock.php | 14 + .../BlockTypes/MiniCartTitleLabelBlock.php | 14 + .../AbstractOrderConfirmationBlock.php | 302 + .../AdditionalInformation.php | 52 + .../OrderConfirmation/BillingAddress.php | 36 + .../OrderConfirmation/BillingWrapper.php | 40 + .../OrderConfirmation/Downloads.php | 161 + .../OrderConfirmation/DownloadsWrapper.php | 88 + .../OrderConfirmation/ShippingAddress.php | 36 + .../OrderConfirmation/ShippingWrapper.php | 40 + .../BlockTypes/OrderConfirmation/Status.php | 232 + .../BlockTypes/OrderConfirmation/Summary.php | 52 + .../BlockTypes/OrderConfirmation/Totals.php | 231 + .../OrderConfirmation/TotalsWrapper.php | 40 + .../Blocks/BlockTypes/PageContentWrapper.php | 35 + .../src/Blocks/BlockTypes/PriceFilter.php | 17 + .../BlockTypes/ProceedToCheckoutBlock.php | 25 + .../Blocks/BlockTypes/ProductAddToCart.php | 32 + .../BlockTypes/ProductAverageRating.php | 103 + .../Blocks/BlockTypes/ProductBestSellers.php | 24 + .../src/Blocks/BlockTypes/ProductButton.php | 281 + .../Blocks/BlockTypes/ProductCategories.php | 406 + .../src/Blocks/BlockTypes/ProductCategory.php | 37 + .../Blocks/BlockTypes/ProductCollection.php | 1036 + .../BlockTypes/ProductCollectionNoResults.php | 150 + .../src/Blocks/BlockTypes/ProductDetails.php | 70 + .../src/Blocks/BlockTypes/ProductGallery.php | 164 + .../BlockTypes/ProductGalleryLargeImage.php | 211 + .../ProductGalleryLargeImageNextPrevious.php | 226 + .../Blocks/BlockTypes/ProductGalleryPager.php | 166 + .../BlockTypes/ProductGalleryThumbnails.php | 185 + .../src/Blocks/BlockTypes/ProductImage.php | 225 + .../Blocks/BlockTypes/ProductImageGallery.php | 78 + .../src/Blocks/BlockTypes/ProductNew.php | 25 + .../src/Blocks/BlockTypes/ProductOnSale.php | 38 + .../src/Blocks/BlockTypes/ProductPrice.php | 108 + .../src/Blocks/BlockTypes/ProductQuery.php | 972 + .../src/Blocks/BlockTypes/ProductRating.php | 215 + .../BlockTypes/ProductRatingCounter.php | 209 + .../Blocks/BlockTypes/ProductRatingStars.php | 163 + .../Blocks/BlockTypes/ProductResultsCount.php | 53 + .../src/Blocks/BlockTypes/ProductReviews.php | 53 + .../src/Blocks/BlockTypes/ProductSKU.php | 82 + .../Blocks/BlockTypes/ProductSaleBadge.php | 123 + .../src/Blocks/BlockTypes/ProductSearch.php | 160 + .../BlockTypes/ProductStockIndicator.php | 115 + .../src/Blocks/BlockTypes/ProductSummary.php | 54 + .../src/Blocks/BlockTypes/ProductTag.php | 70 + .../src/Blocks/BlockTypes/ProductTemplate.php | 134 + .../src/Blocks/BlockTypes/ProductTitle.php | 65 + .../src/Blocks/BlockTypes/ProductTopRated.php | 24 + .../Blocks/BlockTypes/ProductsByAttribute.php | 75 + .../src/Blocks/BlockTypes/RatingFilter.php | 34 + .../src/Blocks/BlockTypes/RelatedProducts.php | 176 + .../Blocks/BlockTypes/ReviewsByCategory.php | 43 + .../Blocks/BlockTypes/ReviewsByProduct.php | 43 + .../src/Blocks/BlockTypes/SingleProduct.php | 164 + .../src/Blocks/BlockTypes/StockFilter.php | 45 + .../src/Blocks/BlockTypes/StoreNotices.php | 80 + .../src/Blocks/BlockTypesController.php | 352 + .../src/Blocks/Domain/Bootstrap.php | 514 + .../woocommerce/src/Blocks/Domain/Package.php | 140 + .../Blocks/Domain/Services/CheckoutFields.php | 794 + .../Blocks/Domain/Services/CreateAccount.php | 71 + .../Blocks/Domain/Services/DraftOrders.php | 236 + .../Services/Email/CustomerNewAccount.php | 174 + .../Blocks/Domain/Services/FeatureGating.php | 181 + .../Domain/Services/GoogleAnalytics.php | 119 + .../src/Blocks/Domain/Services/Hydration.php | 97 + .../src/Blocks/Domain/Services/Notices.php | 79 + .../OnboardingTasks/ReviewCheckoutTask.php | 119 + .../OnboardingTasks/TasksController.php | 29 + .../src/Blocks/Domain/Services/functions.php | 33 + .../woocommerce/src/Blocks/Images/Pexels.php | 243 + .../src/Blocks/InboxNotifications.php | 23 + .../woocommerce/src/Blocks/Installer.php | 132 + .../Integrations/IntegrationInterface.php | 42 + .../Integrations/IntegrationRegistry.php | 181 + .../class-wc-interactivity-initial-state.php | 63 + .../Interactivity/client-side-navigation.php | 9 + .../Blocks/Interactivity/initial-state.php | 20 + .../src/Blocks/Interactivity/load.php | 4 + .../src/Blocks/Interactivity/scripts.php | 50 + .../InteractivityComponents/CheckboxList.php | 76 + .../InteractivityComponents/Dropdown.php | 89 + .../woocommerce/src/Blocks/Library.php | 44 + .../woocommerce/src/Blocks/Migration.php | 108 + .../woocommerce/src/Blocks/Options.php | 11 + .../woocommerce/src/Blocks/Package.php | 139 + .../src/Blocks/Patterns/PatternUpdater.php | 493 + .../src/Blocks/Patterns/PatternsHelper.php | 151 + .../src/Blocks/Patterns/ProductUpdater.php | 560 + .../src/Blocks/Patterns/dictionary.json | 644 + .../woocommerce/src/Blocks/Payments/Api.php | 181 + .../AbstractPaymentMethodType.php | 124 + .../Payments/Integrations/BankTransfer.php | 76 + .../Payments/Integrations/CashOnDelivery.php | 101 + .../Blocks/Payments/Integrations/Cheque.php | 77 + .../Blocks/Payments/Integrations/PayPal.php | 100 + .../Blocks/Payments/PaymentMethodRegistry.php | 67 + .../Payments/PaymentMethodTypeInterface.php | 44 + .../Registry/AbstractDependencyType.php | 54 + .../src/Blocks/Registry/Container.php | 98 + .../src/Blocks/Registry/FactoryType.php | 21 + .../src/Blocks/Registry/SharedType.php | 32 + .../src/Blocks/Shipping/PickupLocation.php | 165 + .../Blocks/Shipping/ShippingController.php | 515 + .../Blocks/Templates/AbstractPageTemplate.php | 87 + .../AbstractTemplateCompatibility.php | 201 + .../ArchiveProductTemplatesCompatibility.php | 423 + .../src/Blocks/Templates/CartTemplate.php | 63 + .../Templates/CheckoutHeaderTemplate.php | 13 + .../src/Blocks/Templates/CheckoutTemplate.php | 63 + .../ClassicTemplatesCompatibility.php | 81 + .../src/Blocks/Templates/MiniCartTemplate.php | 13 + .../Templates/OrderConfirmationTemplate.php | 63 + .../Templates/ProductAttributeTemplate.php | 40 + .../ProductSearchResultsTemplate.php | 38 + .../Templates/SingleProductTemplate.php | 120 + .../SingleProductTemplateCompatibility.php | 492 + .../Utils/BlockTemplateMigrationUtils.php | 129 + .../src/Blocks/Utils/BlockTemplateUtils.php | 796 + .../src/Blocks/Utils/BlocksWpQuery.php | 71 + .../src/Blocks/Utils/CartCheckoutUtils.php | 108 + .../src/Blocks/Utils/MiniCartUtils.php | 38 + .../Blocks/Utils/ProductCollectionUtils.php | 34 + .../src/Blocks/Utils/ProductGalleryUtils.php | 181 + .../src/Blocks/Utils/StyleAttributesUtils.php | 766 + .../woocommerce/src/Blocks/Utils/Utils.php | 31 + .../plugins/woocommerce/src/Container.php | 6 +- .../Migrations/CustomOrderTable/CLIRunner.php | 97 + .../src/Internal/Admin/Homescreen.php | 2 +- .../woocommerce/src/Internal/Admin/Loader.php | 27 - .../Internal/Admin/Logging/FileV2/File.php | 345 +- .../Admin/Logging/FileV2/FileController.php | 410 +- .../Admin/Logging/FileV2/FileExporter.php | 136 + .../Admin/Logging/FileV2/FileListTable.php | 334 + .../Admin/Logging/FileV2/SearchListTable.php | 229 + .../Admin/Logging/LogHandlerFileV2.php | 224 +- .../Internal/Admin/Logging/PageController.php | 291 +- .../src/Internal/Admin/Marketplace.php | 20 +- .../src/Internal/Admin/Orders/Edit.php | 70 + .../Orders/MetaBoxes/CustomerHistory.php | 55 + .../Orders/MetaBoxes/OrderAttribution.php | 84 + .../src/Internal/Admin/WCAdminAssets.php | 27 +- .../DataStores/Orders/DataSynchronizer.php | 44 + .../DataStores/Orders/LegacyDataHandler.php | 200 + .../Orders/OrdersTableDataStore.php | 54 +- .../AbstractServiceProvider.php | 3 + .../AbstractInterfaceServiceProvider.php | 79 + .../OrderAttributionServiceProvider.php | 53 + .../OrderMetaBoxServiceProvider.php | 7 +- .../OrdersDataStoreServiceProvider.php | 4 + .../ProductImageBySKUServiceProvider.php | 31 + .../Internal/Features/FeaturesController.php | 24 +- .../ProductVariationTemplate.php | 55 +- .../SimpleProductTemplate.php | 237 +- .../Internal/Integrations/WPConsentAPI.php | 93 + .../OrderAttributionBlocksController.php | 208 + .../Orders/OrderAttributionController.php | 459 + .../Internal/ProductImage/MatchImageBySKU.php | 80 + .../src/Internal/RegisterHooksInterface.php | 19 + .../Internal/Traits/OrderAttributionMeta.php | 428 + .../src/Internal/Traits/ScriptDebug.php | 32 + .../plugins/woocommerce/src/Packages.php | 79 +- .../src/StoreApi/Authentication.php | 292 + .../Exceptions/InvalidCartException.php | 74 + .../InvalidStockLevelsInCartException.php | 73 + .../Exceptions/NotPurchasableException.php | 9 + .../Exceptions/OutOfStockException.php | 9 + .../Exceptions/PartialOutOfStockException.php | 9 + .../StoreApi/Exceptions/RouteException.php | 53 + .../Exceptions/StockAvailabilityException.php | 72 + .../Exceptions/TooManyInCartException.php | 9 + .../woocommerce/src/StoreApi/Formatters.php | 47 + .../StoreApi/Formatters/CurrencyFormatter.php | 51 + .../StoreApi/Formatters/DefaultFormatter.php | 18 + .../Formatters/FormatterInterface.php | 16 + .../src/StoreApi/Formatters/HtmlFormatter.php | 28 + .../StoreApi/Formatters/MoneyFormatter.php | 34 + .../woocommerce/src/StoreApi/Legacy.php | 70 + .../src/StoreApi/Payments/PaymentContext.php | 84 + .../src/StoreApi/Payments/PaymentResult.php | 94 + .../src/StoreApi/Routes/RouteInterface.php | 21 + .../Routes/V1/AI/BusinessDescription.php | 88 + .../src/StoreApi/Routes/V1/AI/Images.php | 118 + .../src/StoreApi/Routes/V1/AI/Middleware.php | 50 + .../src/StoreApi/Routes/V1/AI/Patterns.php | 112 + .../src/StoreApi/Routes/V1/AI/Product.php | 98 + .../src/StoreApi/Routes/V1/AI/Products.php | 144 + .../src/StoreApi/Routes/V1/AI/StoreInfo.php | 85 + .../src/StoreApi/Routes/V1/AI/StoreTitle.php | 146 + .../StoreApi/Routes/V1/AbstractCartRoute.php | 355 + .../src/StoreApi/Routes/V1/AbstractRoute.php | 332 + .../StoreApi/Routes/V1/AbstractTermsRoute.php | 157 + .../src/StoreApi/Routes/V1/Batch.php | 128 + .../src/StoreApi/Routes/V1/Cart.php | 52 + .../src/StoreApi/Routes/V1/CartAddItem.php | 126 + .../StoreApi/Routes/V1/CartApplyCoupon.php | 72 + .../src/StoreApi/Routes/V1/CartCoupons.php | 147 + .../StoreApi/Routes/V1/CartCouponsByCode.php | 98 + .../src/StoreApi/Routes/V1/CartExtensions.php | 74 + .../src/StoreApi/Routes/V1/CartItems.php | 142 + .../src/StoreApi/Routes/V1/CartItemsByKey.php | 146 + .../StoreApi/Routes/V1/CartRemoveCoupon.php | 79 + .../src/StoreApi/Routes/V1/CartRemoveItem.php | 87 + .../Routes/V1/CartSelectShippingRate.php | 106 + .../StoreApi/Routes/V1/CartUpdateCustomer.php | 317 + .../src/StoreApi/Routes/V1/CartUpdateItem.php | 67 + .../src/StoreApi/Routes/V1/Checkout.php | 724 + .../src/StoreApi/Routes/V1/CheckoutOrder.php | 266 + .../src/StoreApi/Routes/V1/Order.php | 86 + .../Routes/V1/ProductAttributeTerms.php | 76 + .../StoreApi/Routes/V1/ProductAttributes.php | 66 + .../Routes/V1/ProductAttributesById.php | 81 + .../StoreApi/Routes/V1/ProductCategories.php | 57 + .../Routes/V1/ProductCategoriesById.php | 79 + .../Routes/V1/ProductCollectionData.php | 178 + .../src/StoreApi/Routes/V1/ProductReviews.php | 231 + .../src/StoreApi/Routes/V1/ProductTags.php | 50 + .../src/StoreApi/Routes/V1/Products.php | 429 + .../src/StoreApi/Routes/V1/ProductsById.php | 78 + .../src/StoreApi/Routes/V1/ProductsBySlug.php | 117 + .../src/StoreApi/RoutesController.php | 129 + .../src/StoreApi/SchemaController.php | 86 + .../src/StoreApi/Schemas/ExtendSchema.php | 349 + .../V1/AI/BusinessDescriptionSchema.php | 47 + .../StoreApi/Schemas/V1/AI/ImagesSchema.php | 45 + .../StoreApi/Schemas/V1/AI/PatternsSchema.php | 47 + .../StoreApi/Schemas/V1/AI/ProductSchema.php | 47 + .../StoreApi/Schemas/V1/AI/ProductsSchema.php | 48 + .../Schemas/V1/AI/StoreInfoSchema.php | 34 + .../Schemas/V1/AI/StoreTitleSchema.php | 47 + .../Schemas/V1/AbstractAddressSchema.php | 265 + .../StoreApi/Schemas/V1/AbstractSchema.php | 412 + .../src/StoreApi/Schemas/V1/BatchSchema.php | 30 + .../Schemas/V1/BillingAddressSchema.php | 169 + .../StoreApi/Schemas/V1/CartCouponSchema.php | 108 + .../Schemas/V1/CartExtensionsSchema.php | 85 + .../src/StoreApi/Schemas/V1/CartFeeSchema.php | 85 + .../StoreApi/Schemas/V1/CartItemSchema.php | 130 + .../src/StoreApi/Schemas/V1/CartSchema.php | 448 + .../Schemas/V1/CartShippingRateSchema.php | 354 + .../Schemas/V1/CheckoutOrderSchema.php | 37 + .../StoreApi/Schemas/V1/CheckoutSchema.php | 299 + .../src/StoreApi/Schemas/V1/ErrorSchema.php | 57 + .../Schemas/V1/ImageAttachmentSchema.php | 99 + .../src/StoreApi/Schemas/V1/ItemSchema.php | 316 + .../StoreApi/Schemas/V1/OrderCouponSchema.php | 86 + .../StoreApi/Schemas/V1/OrderFeeSchema.php | 88 + .../StoreApi/Schemas/V1/OrderItemSchema.php | 78 + .../src/StoreApi/Schemas/V1/OrderSchema.php | 391 + .../Schemas/V1/ProductAttributeSchema.php | 91 + .../Schemas/V1/ProductCategorySchema.php | 124 + .../V1/ProductCollectionDataSchema.php | 143 + .../Schemas/V1/ProductReviewSchema.php | 179 + .../src/StoreApi/Schemas/V1/ProductSchema.php | 863 + .../Schemas/V1/ShippingAddressSchema.php | 111 + .../src/StoreApi/Schemas/V1/TermSchema.php | 84 + .../src/StoreApi/SessionHandler.php | 113 + .../woocommerce/src/StoreApi/StoreApi.php | 109 + .../src/StoreApi/Utilities/ArrayUtils.php | 36 + .../src/StoreApi/Utilities/CartController.php | 1365 ++ .../src/StoreApi/Utilities/CheckoutTrait.php | 210 + .../StoreApi/Utilities/DraftOrderTrait.php | 70 + .../src/StoreApi/Utilities/JsonWebToken.php | 196 + .../StoreApi/Utilities/LocalPickupUtils.php | 44 + .../src/StoreApi/Utilities/NoticeHandler.php | 72 + .../Utilities/OrderAuthorizationTrait.php | 62 + .../StoreApi/Utilities/OrderController.php | 744 + .../src/StoreApi/Utilities/Pagination.php | 71 + .../StoreApi/Utilities/ProductItemTrait.php | 85 + .../src/StoreApi/Utilities/ProductQuery.php | 512 + .../Utilities/ProductQueryFilters.php | 485 + .../src/StoreApi/Utilities/QuantityLimits.php | 212 + .../src/StoreApi/Utilities/RateLimits.php | 247 + .../StoreApi/Utilities/ValidationUtils.php | 61 + .../woocommerce/src/StoreApi/deprecated.php | 77 + .../woocommerce/src/StoreApi/functions.php | 87 + .../emails/customer-new-account-blocks.php | 44 + .../plain/customer-new-account-blocks.php | 45 + .../templates/myaccount/orders.php | 4 +- .../woocommerce/templates/notices/error.php | 37 +- .../woocommerce/templates/notices/notice.php | 17 +- .../woocommerce/templates/notices/success.php | 15 +- .../order/attribution-data-fields.php | 105 + .../templates/order/customer-history.php | 59 + .../templates/order/order-details.php | 5 +- .../templates/parts/checkout-header.html | 9 + .../templates/parts/mini-cart.html | 49 + .../templates/parts/product-gallery.html | 21 + .../templates/templates/archive-product.html | 5 + .../templates/blockified/archive-product.html | 42 + .../blockified/order-confirmation.html | 41 + .../templates/blockified/page-cart.html | 10 + .../templates/blockified/page-checkout.html | 9 + .../blockified/product-search-results.html | 41 + .../templates/blockified/single-product.html | 52 + .../taxonomy-product_attribute.html | 49 + .../blockified/taxonomy-product_cat.html | 49 + .../blockified/taxonomy-product_tag.html | 46 + .../templates/order-confirmation.html | 41 + .../templates/templates/page-cart.html | 10 + .../templates/templates/page-checkout.html | 9 + .../templates/product-search-results.html | 7 + .../templates/templates/single-product.html | 5 + .../templates/taxonomy-product_attribute.html | 5 + .../templates/taxonomy-product_cat.html | 5 + .../templates/taxonomy-product_tag.html | 5 + .../plugins/woocommerce/vendor/autoload.php | 2 +- .../woocommerce/vendor/autoload_packages.php | 2 +- .../src/class-a8c-mc-stats.php | 1 - .../jetpack-admin-ui/src/class-admin-menu.php | 17 +- .../legacy/class-jetpack-xmlrpc-server.php | 1 - .../src/class-connection-notice.php | 1 - .../src/class-error-handler.php | 1 - .../src/class-heartbeat.php | 1 - .../src/class-initial-state.php | 18 +- .../jetpack-connection/src/class-manager.php | 36 +- .../src/class-nonce-handler.php | 1 - .../src/class-package-version-tracker.php | 1 - .../src/class-package-version.php | 2 +- .../src/class-terms-of-service.php | 1 - .../src/class-tokens-locks.php | 1 - .../jetpack-connection/src/class-urls.php | 9 +- .../src/class-xmlrpc-async-call.php | 2 +- .../jetpack-status/src/class-cache.php | 1 - .../jetpack-status/src/class-files.php | 2 +- .../jetpack-status/src/class-host.php | 15 + .../jetpack-status/src/class-modules.php | 9 +- .../jetpack-status/src/class-status.php | 39 +- .../jetpack-status/src/class-visitor.php | 1 - .../vendor/composer/autoload_classmap.php | 647 +- .../vendor/composer/autoload_files.php | 5 +- .../vendor/composer/autoload_psr4.php | 2 - .../vendor/composer/autoload_real.php | 10 +- .../vendor/composer/autoload_static.php | 672 +- .../vendor/composer/installed.json | 274 +- .../woocommerce/vendor/composer/installed.php | 77 +- .../composer/jetpack_autoload_classmap.php | 3132 +-- .../composer/jetpack_autoload_filemap.php | 18 +- .../class-autoloader-handler.php | 2 +- .../class-autoloader-locator.php | 2 +- .../jetpack-autoloader/class-autoloader.php | 2 +- .../jetpack-autoloader/class-container.php | 2 +- .../jetpack-autoloader/class-hook-manager.php | 2 +- .../class-latest-autoloader-guard.php | 2 +- .../class-manifest-reader.php | 2 +- .../class-path-processor.php | 2 +- .../class-php-autoloader.php | 2 +- .../class-plugin-locator.php | 2 +- .../class-plugins-handler.php | 2 +- .../class-shutdown-handler.php | 2 +- .../class-version-loader.php | 2 +- .../class-version-selector.php | 2 +- .../vendor/maxmind-db/reader/autoload.php | 2 +- .../vendor/maxmind-db/reader/ext/config.m4 | 2 +- .../vendor/maxmind-db/reader/ext/maxminddb.c | 8 +- .../maxmind-db/reader/ext/php_maxminddb.h | 2 +- .../vendor/maxmind-db/reader/package.xml | 12 +- .../reader/src/MaxMind/Db/Reader.php | 102 +- .../reader/src/MaxMind/Db/Reader/Decoder.php | 119 +- .../Db/Reader/InvalidDatabaseException.php | 7 +- .../reader/src/MaxMind/Db/Reader/Metadata.php | 14 +- .../reader/src/MaxMind/Db/Reader/Util.php | 3 +- .../vendor/symfony/polyfill-php80/LICENSE | 2 +- .../plugins/woocommerce/woocommerce.php | 8 +- .../plugins/wordpress-importer/readme.txt | 10 +- .../wordpress-importer/wordpress-importer.php | 2 +- .../css/dist/academy-2181-rtl.css | 1 + .../wordpress-seo/css/dist/academy-2181.css | 1 + .../css/dist/admin-global-2181-rtl.css | 1 + .../css/dist/admin-global-2181.css | 1 + .../css/dist/adminbar-2181-rtl.css | 1 + .../wordpress-seo/css/dist/adminbar-2181.css | 1 + .../css/dist/ai-generator-2181-rtl.css | 1 + .../css/dist/ai-generator-2181.css | 1 + .../css/dist/alerts-2181-rtl.css | 1 + .../wordpress-seo/css/dist/alerts-2181.css | 1 + .../css/dist/black-friday-banner-2181-rtl.css | 1 + .../css/dist/black-friday-banner-2181.css | 1 + .../css/dist/dashboard-2181-rtl.css | 1 + .../wordpress-seo/css/dist/dashboard-2181.css | 1 + .../css/dist/edit-page-2181-rtl.css | 1 + .../wordpress-seo/css/dist/edit-page-2181.css | 1 + .../css/dist/elementor-2181-rtl.css | 1 + .../wordpress-seo/css/dist/elementor-2181.css | 1 + .../css/dist/featured-image-2181-rtl.css | 1 + .../css/dist/featured-image-2181.css | 1 + .../css/dist/filter-explanation-2181-rtl.css | 1 + .../css/dist/filter-explanation-2181.css | 1 + .../first-time-configuration-2181-rtl.css | 1 + .../dist/first-time-configuration-2181.css | 1 + .../wordpress-seo/css/dist/icons-2181-rtl.css | 1 + .../wordpress-seo/css/dist/icons-2181.css | 1 + .../css/dist/inside-editor-2181-rtl.css | 1 + .../css/dist/inside-editor-2181.css | 1 + .../css/dist/introductions-2181-rtl.css | 1 + .../css/dist/introductions-2181.css | 1 + .../css/dist/metabox-2181-rtl.css | 1 + .../wordpress-seo/css/dist/metabox-2181.css | 3 + .../metabox-primary-category-2181-rtl.css | 1 + .../dist/metabox-primary-category-2181.css | 1 + .../wordpress-seo/css/dist/modal-2181-rtl.css | 1 + .../wordpress-seo/css/dist/modal-2181.css | 1 + .../css/dist/monorepo-2181-rtl.css | 1 + .../wordpress-seo/css/dist/monorepo-2181.css | 1 + .../css/dist/new-settings-2181-rtl.css | 1 + .../css/dist/new-settings-2181.css | 1 + .../css/dist/notifications-2181-rtl.css | 1 + .../css/dist/notifications-2181.css | 1 + .../css/dist/score_icon-2181-rtl.css | 1 + .../css/dist/score_icon-2181.css | 1 + .../dist/structured-data-blocks-2181-rtl.css | 1 + .../css/dist/structured-data-blocks-2181.css | 1 + .../css/dist/support-2181-rtl.css | 1 + .../wordpress-seo/css/dist/support-2181.css | 1 + .../css/dist/tailwind-2181-rtl.css | 1 + .../wordpress-seo/css/dist/tailwind-2181.css | 1 + .../css/dist/toggle-switch-2181-rtl.css | 1 + .../css/dist/toggle-switch-2181.css | 1 + .../css/dist/tooltips-2181-rtl.css | 1 + .../wordpress-seo/css/dist/tooltips-2181.css | 1 + .../css/dist/workouts-2181-rtl.css | 1 + .../wordpress-seo/css/dist/workouts-2181.css | 1 + .../css/dist/wpseo-dismissible-2181-rtl.css | 1 + .../css/dist/wpseo-dismissible-2181.css | 1 + .../css/dist/yoast-extensions-2181-rtl.css | 1 + .../css/dist/yoast-extensions-2181.css | 1 + .../css/dist/yst_plugin_tools-2181-rtl.css | 1 + .../css/dist/yst_plugin_tools-2181.css | 1 + .../css/dist/yst_seo_score-2181-rtl.css | 1 + .../css/dist/yst_seo_score-2181.css | 1 + .../wordpress-seo/js/dist/block-editor.js | 2 +- .../plugins/wordpress-seo/readme.txt | 11 +- .../src/generated/assets/plugin.php | 2 +- .../plugins/wordpress-seo/vendor/autoload.php | 2 +- .../vendor/composer/autoload_real.php | 8 +- .../vendor/composer/autoload_static.php | 8 +- .../vendor/composer/installed.php | 4 +- .../plugins/wordpress-seo/wp-seo-main.php | 2 +- .../plugins/wordpress-seo/wp-seo.php | 4 +- .../themes/child-theme/functions.php | 36 - wp/wp-content/themes/child-theme/style.css | 56 - wp/wp-content/themes/thbusiness/archive.php | 70 +- wp/wp-content/themes/thbusiness/content.php | 39 +- wp/wp-content/themes/thbusiness/functions.php | 8 - .../layouts/landing-page-bloghome.php | 24 +- wp/wp-content/themes/thbusiness/search.php | 2 +- wp/wp-content/themes/thbusiness/single.php | 4 +- wp/wp-content/themes/thbusiness/style.css | 21 +- 2125 files changed, 179300 insertions(+), 35639 deletions(-) create mode 100644 wp/.lando.yml create mode 100644 wp/pantheon.upstream.yml create mode 100644 wp/pantheon.yml create mode 100644 wp/wp-config.php_local create mode 100644 wp/wp-content/ip-geo-api/drop-in-admin-sample.php create mode 100644 wp/wp-content/ip-geo-api/drop-in-sample.php create mode 100644 wp/wp-content/ip-geo-api/index.php create mode 100644 wp/wp-content/ip-geo-api/ip2location/IP2Location.php create mode 100644 wp/wp-content/ip-geo-api/ip2location/bcmath.php create mode 100644 wp/wp-content/ip-geo-api/ip2location/class-ip2location.php create mode 100644 wp/wp-content/ip-geo-api/ip2location/index.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/GeoLite2/index.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/LICENSE create mode 100644 wp/wp-content/ip-geo-api/maxmind/class-maxmind-geolite2.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/class-maxmind.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/geoip.inc create mode 100644 wp/wp-content/ip-geo-api/maxmind/geoipcity.inc create mode 100644 wp/wp-content/ip-geo-api/maxmind/index.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/LICENSE create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/autoload.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/composer/ClassLoader.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/composer/LICENSE create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/composer/autoload_classmap.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/composer/autoload_namespaces.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/composer/autoload_psr4.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/composer/autoload_real.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/composer/autoload_static.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/LICENSE create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/README.md create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/composer.json create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/res/cacert.pem create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/src/CaBundle.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/composer/installed.json create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/.gitmodules create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/.php_cs create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/CHANGELOG.md create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/LICENSE create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/README.md create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/composer.json create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/maxmind-db/index.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Database/Reader.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/AddressNotFoundException.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/AuthenticationException.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/GeoIp2Exception.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/HttpException.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/InvalidRequestException.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/OutOfQueriesException.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/AbstractModel.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/AnonymousIp.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Asn.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/City.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/ConnectionType.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Country.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Domain.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Enterprise.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Insights.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Isp.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/ProviderInterface.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/AbstractPlaceRecord.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/AbstractRecord.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/City.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/Continent.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/Country.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/Location.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/MaxMind.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/Postal.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/RepresentedCountry.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/Subdivision.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/Traits.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/WebService/Client.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/CHANGELOG.md create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/LICENSE create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/README.md create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/composer.json create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/config.m4 create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/maxminddb.c create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/php_maxminddb.h create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/tests/001-load.phpt create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/tests/002-final.phpt create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Decoder.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/InvalidDatabaseException.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Metadata.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Util.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/CHANGELOG.md create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/LICENSE create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/README.md create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/composer.json create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/AuthenticationException.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/HttpException.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/InsufficientFundsException.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/InvalidInputException.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/InvalidRequestException.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/IpAddressNotFoundException.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/PermissionRequiredException.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/WebServiceException.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/WebService/Client.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/WebService/Http/CurlRequest.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/WebService/Http/Request.php create mode 100644 wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/WebService/Http/RequestFactory.php create mode 100644 wp/wp-content/plugins/ip-geo-block/LICENSE.txt create mode 100644 wp/wp-content/plugins/ip-geo-block/README.txt create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/class-ip-geo-block-admin.php create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/css/admin-icons.css create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/css/admin-icons.min.css create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/css/admin.css create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/css/admin.min.css create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/css/cidr.min.css create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/css/fonts/icomoon.eot create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/css/fonts/icomoon.svg create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/css/fonts/icomoon.ttf create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/css/fonts/icomoon.woff create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/css/datatables-all.css create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/css/datatables-all.min.css create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/css/datatables.mark.css create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/css/datatables.mark.min.css create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/css/jquery.dataTables.css create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/css/jquery.dataTables.min.css create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/css/responsive.dataTables.css create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/css/responsive.dataTables.min.css create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/images/Sorting icons.psd create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/images/favicon.ico create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/images/sort_asc.png create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/images/sort_asc_disabled.png create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/images/sort_both.png create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/images/sort_desc.png create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/images/sort_desc_disabled.png create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/js/LICENSE create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/js/dataTables.responsive.js create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/js/dataTables.responsive.min.js create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/js/datatables-all.js create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/js/datatables-all.min.js create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/js/datatables.mark.js create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/js/datatables.mark.min.js create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/js/jquery.dataTables.js create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/js/jquery.dataTables.min.js create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/js/jquery.mark.js create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/js/jquery.mark.min.js create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/datatables/license.txt create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/images/ajax-loader-snake.gif create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/images/alert.png create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/images/find.png create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/images/icon-72x72.png create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/images/lock.png create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/images/unlock.png create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/includes/class-admin-ajax.php create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/includes/class-admin-rewrite.php create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/includes/tab-accesslog.php create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/includes/tab-attribution.php create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/includes/tab-geolocation.php create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/includes/tab-network.php create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/includes/tab-settings.php create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/includes/tab-statistics.php create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/js/admin.js create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/js/admin.min.js create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/js/authenticate.js create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/js/authenticate.min.js create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/js/cidr.min.js create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/js/gmap.js create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/js/gmap.min.js create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/js/whois.js create mode 100644 wp/wp-content/plugins/ip-geo-block/admin/js/whois.min.js create mode 100644 wp/wp-content/plugins/ip-geo-block/classes/class-ip-geo-block-actv.php create mode 100644 wp/wp-content/plugins/ip-geo-block/classes/class-ip-geo-block-apis.php create mode 100644 wp/wp-content/plugins/ip-geo-block/classes/class-ip-geo-block-cron.php create mode 100644 wp/wp-content/plugins/ip-geo-block/classes/class-ip-geo-block-file.php create mode 100644 wp/wp-content/plugins/ip-geo-block/classes/class-ip-geo-block-lkup.php create mode 100644 wp/wp-content/plugins/ip-geo-block/classes/class-ip-geo-block-load.php create mode 100644 wp/wp-content/plugins/ip-geo-block/classes/class-ip-geo-block-logs.php create mode 100644 wp/wp-content/plugins/ip-geo-block/classes/class-ip-geo-block-opts.php create mode 100644 wp/wp-content/plugins/ip-geo-block/classes/class-ip-geo-block-util.php create mode 100644 wp/wp-content/plugins/ip-geo-block/classes/class-ip-geo-block.php create mode 100644 wp/wp-content/plugins/ip-geo-block/database/index.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/DNS2.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/DNS2/Exception.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/DNS2/Header.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/DNS2/Lookups.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/DNS2/Packet.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/DNS2/Packet/Request.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/DNS2/Packet/Response.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/DNS2/Question.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/DNS2/RR.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/DNS2/RR/CNAME.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/DNS2/RR/OPT.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/DNS2/RR/PTR.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/DNS2/RR/SIG.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/DNS2/RR/SOA.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/DNS2/RR/TSIG.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/DNS2/Resolver.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/DNS2/Socket.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/DNS2/Socket/Sockets.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/DNS2/Socket/Streams.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/IPv4.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/IPv6.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/Net/LICENSE create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/random_compat/LICENSE create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/random_compat/byte_safe_strings.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/random_compat/cast_to_int.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/random_compat/error_polyfill.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/random_compat/random.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/random_compat/random_bytes_com_dotnet.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/random_compat/random_bytes_dev_urandom.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/random_compat/random_bytes_libsodium.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/random_compat/random_bytes_libsodium_legacy.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/random_compat/random_bytes_mcrypt.php create mode 100644 wp/wp-content/plugins/ip-geo-block/includes/random_compat/random_int.php create mode 100644 wp/wp-content/plugins/ip-geo-block/index.php create mode 100644 wp/wp-content/plugins/ip-geo-block/ip-geo-block.php create mode 100644 wp/wp-content/plugins/ip-geo-block/languages/ip-geo-block-ja.mo create mode 100644 wp/wp-content/plugins/ip-geo-block/languages/ip-geo-block-ja.po create mode 100644 wp/wp-content/plugins/ip-geo-block/languages/ip-geo-block.mo create mode 100644 wp/wp-content/plugins/ip-geo-block/languages/ip-geo-block.po create mode 100644 wp/wp-content/plugins/ip-geo-block/languages/ip-geo-block.pot create mode 100644 wp/wp-content/plugins/ip-geo-block/rewrite-ini.php create mode 100644 wp/wp-content/plugins/ip-geo-block/rewrite.php create mode 100644 wp/wp-content/plugins/ip-geo-block/samples.php create mode 100644 wp/wp-content/plugins/ip-geo-block/uninstall.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/index.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/drop-in-admin-sample.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/drop-in-sample.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/index.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/ip2location/IP2Location.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/ip2location/bcmath.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/ip2location/class-ip2location.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/ip2location/index.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/GeoLite2/index.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/LICENSE create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/class-maxmind-geolite2.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/class-maxmind.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/geoip.inc create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/geoipcity.inc create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/index.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/LICENSE create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/autoload.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/composer/ClassLoader.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/composer/LICENSE create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/composer/autoload_classmap.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/composer/autoload_namespaces.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/composer/autoload_psr4.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/composer/autoload_real.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/composer/autoload_static.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/LICENSE create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/README.md create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/composer.json create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/res/cacert.pem create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/src/CaBundle.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/composer/installed.json create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/.gitmodules create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/.php_cs create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/CHANGELOG.md create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/LICENSE create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/README.md create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/composer.json create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/maxmind-db/index.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Database/Reader.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/AddressNotFoundException.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/AuthenticationException.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/GeoIp2Exception.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/HttpException.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/InvalidRequestException.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/OutOfQueriesException.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/AbstractModel.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/AnonymousIp.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Asn.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/City.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/ConnectionType.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Country.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Domain.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Enterprise.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Insights.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Isp.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/ProviderInterface.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/AbstractPlaceRecord.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/AbstractRecord.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/City.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/Continent.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/Country.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/Location.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/MaxMind.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/Postal.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/RepresentedCountry.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/Subdivision.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/Traits.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/WebService/Client.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/CHANGELOG.md create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/LICENSE create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/README.md create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/composer.json create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/config.m4 create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/maxminddb.c create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/php_maxminddb.h create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/tests/001-load.phpt create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/tests/002-final.phpt create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Decoder.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/InvalidDatabaseException.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Metadata.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Util.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/CHANGELOG.md create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/LICENSE create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/README.md create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/composer.json create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/AuthenticationException.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/HttpException.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/InsufficientFundsException.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/InvalidInputException.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/InvalidRequestException.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/IpAddressNotFoundException.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/PermissionRequiredException.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/WebServiceException.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/WebService/Client.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/WebService/Http/CurlRequest.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/WebService/Http/Request.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/WebService/Http/RequestFactory.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/mu-plugins/index.php create mode 100644 wp/wp-content/plugins/ip-geo-block/wp-content/mu-plugins/ip-geo-block-mu.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/47c7fb356fcb2d963681.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/1122.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/2089.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/3538.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/3538.style.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/4300.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/4300.style.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/4940.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/4940.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/5031.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/5031.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/5641.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/5641.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/5642.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/5642.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/7202.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/7202.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/7443.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/8558.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/8570.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/8858.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/9693.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/9693.style.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/9850.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/9890.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/chunks/9890.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/product-editor/blocks/generic/product-section-description/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/product-editor/blocks/generic/section-description/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/product-editor/blocks/generic/section-description/edit.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/product-editor/blocks/generic/section-description/index.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/product-editor/blocks/generic/section-description/types.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/product-editor/blocks/product-fields/description/components/full-editor-toolbar-button.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/product-editor/blocks/product-fields/description/components/with-full-editor-toolbar-button.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/product-editor/blocks/product-fields/description/types.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/product-editor/blocks/product-fields/product-list-field/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/product-editor/blocks/product-fields/product-list-field/editor-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/product-editor/blocks/product-fields/product-list-field/editor.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/product-editor/blocks/product-fields/product-list/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/product-editor/blocks/product-fields/product-list/edit.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/product-editor/blocks/product-fields/product-list/images/glasses.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/product-editor/blocks/product-fields/product-list/images/index.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/product-editor/blocks/product-fields/product-list/images/pants.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/product-editor/blocks/product-fields/product-list/images/shirt.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/product-editor/blocks/product-fields/product-list/index.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/product-editor/blocks/product-fields/product-list/types.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/wp-admin-scripts/command-palette-analytics.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/wp-admin-scripts/command-palette-analytics.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/wp-admin-scripts/command-palette.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/admin/wp-admin-scripts/command-palette.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/1092-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/1720-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/3030-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/64-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/9178-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/9782-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/active-filters-frontend.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/active-filters-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/active-filters-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/active-filters-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/active-filters-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/active-filters-wrapper-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/active-filters-wrapper-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/active-filters-wrapper.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/active-filters.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/active-filters.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/active-filters.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/active-filters/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/add-to-cart-form-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/add-to-cart-form-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/add-to-cart-form.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/add-to-cart-form/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/all-products-frontend.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/all-products-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/all-products-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/all-products-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/all-products-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/all-products.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/all-products.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/all-products.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/all-products/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/all-reviews-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/all-reviews-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/all-reviews-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/all-reviews.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/all-reviews.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/all-reviews.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/attribute-filter-frontend.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/attribute-filter-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/attribute-filter-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/attribute-filter-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/attribute-filter-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/attribute-filter-wrapper-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/attribute-filter-wrapper-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/attribute-filter-wrapper.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/attribute-filter.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/attribute-filter.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/attribute-filter.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/attribute-filter/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/blocks-checkout.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/blocks-checkout.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/blocks-components.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/blocks-components.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/breadcrumbs-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/breadcrumbs-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/breadcrumbs.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/breadcrumbs.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/breadcrumbs.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/breadcrumbs/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/cart-accepted-payment-methods-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/cart-accepted-payment-methods-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/cart-cross-sells-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/cart-cross-sells-products-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/cart-cross-sells-products-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/cart-cross-sells-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/cart-express-payment-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/cart-express-payment-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/cart-items-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/cart-items-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/cart-line-items-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/cart-line-items-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/cart-order-summary-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/cart-order-summary-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/cart-totals-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/cart-totals-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/empty-cart-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/empty-cart-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/filled-cart-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/filled-cart-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/order-summary-coupon-form-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/order-summary-coupon-form-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/order-summary-discount-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/order-summary-discount-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/order-summary-fee-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/order-summary-fee-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/order-summary-heading-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/order-summary-heading-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/order-summary-shipping-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/order-summary-shipping-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/order-summary-subtotal-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/order-summary-subtotal-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/order-summary-taxes-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/order-summary-taxes-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/proceed-to-checkout-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-blocks/proceed-to-checkout-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-frontend.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/cart.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/catalog-sorting-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/catalog-sorting-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/catalog-sorting.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/catalog-sorting.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/catalog-sorting.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/catalog-sorting/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/actions-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/actions-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/billing-address-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/billing-address-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/contact-information-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/contact-information-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/express-payment-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/fields-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/fields-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/order-note-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/order-summary-cart-items-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/order-summary-cart-items-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/order-summary-coupon-form-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/order-summary-coupon-form-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/order-summary-discount-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/order-summary-discount-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/order-summary-fee-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/order-summary-fee-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/order-summary-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/order-summary-shipping-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/order-summary-shipping-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/order-summary-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/order-summary-subtotal-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/order-summary-subtotal-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/order-summary-taxes-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/order-summary-taxes-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/payment-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/payment-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/pickup-options-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/pickup-options-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/shipping-address-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/shipping-address-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/shipping-method-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/shipping-method-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/shipping-methods-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/shipping-methods-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/terms-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/terms-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/totals-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-blocks/totals-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-frontend.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/checkout/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/classic-shortcode-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/classic-shortcode-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/classic-shortcode-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/classic-shortcode.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/classic-shortcode.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/classic-shortcode.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/classic-shortcode/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-active-filters-frontend.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-active-filters-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-active-filters-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-active-filters-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-active-filters-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-active-filters.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-active-filters.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-active-filters.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-active-filters/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-attribute-filter-frontend.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-attribute-filter-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-attribute-filter-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-attribute-filter-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-attribute-filter-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-attribute-filter.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-attribute-filter.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-attribute-filter.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-attribute-filter/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-filters-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-filters.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-filters.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-filters/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-price-filter-frontend.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-price-filter-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-price-filter-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-price-filter-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-price-filter-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-price-filter.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-price-filter.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-price-filter.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-price-filter/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-rating-filter-frontend.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-rating-filter-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-rating-filter-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-rating-filter-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-rating-filter-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-rating-filter.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-rating-filter.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-rating-filter.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-rating-filter/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-stock-filter-frontend.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-stock-filter-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-stock-filter-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-stock-filter-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-stock-filter-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-stock-filter.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-stock-filter.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-stock-filter.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/collection-stock-filter/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/customer-account-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/customer-account-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/customer-account-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/customer-account.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/customer-account.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/customer-account.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/customer-account/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/featured-category-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/featured-category-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/featured-category-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/featured-category.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/featured-category.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/featured-category.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/featured-category/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/featured-product-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/featured-product-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/featured-product-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/featured-product.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/featured-product.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/featured-product.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/featured-product/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/filter-wrapper-frontend.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/filter-wrapper-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/filter-wrapper-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/filter-wrapper-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/filter-wrapper.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/filter-wrapper.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/filter-wrapper.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/filter-wrapper/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/handpicked-products-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/handpicked-products-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/handpicked-products.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/handpicked-products.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/handpicked-products/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/cart-accepted-payment-methods-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/cart-cross-sells-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/cart-cross-sells-products-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/cart-express-payment-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/cart-items-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/cart-line-items-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/cart-order-summary-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/cart-order-summary-coupon-form-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/cart-order-summary-discount-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/cart-order-summary-fee-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/cart-order-summary-heading-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/cart-order-summary-shipping-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/cart-order-summary-subtotal-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/cart-order-summary-taxes-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/cart-totals-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-actions-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-billing-address-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-contact-information-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-express-payment-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-fields-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-order-note-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-order-summary-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-order-summary-cart-items-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-order-summary-coupon-form-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-order-summary-discount-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-order-summary-fee-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-order-summary-shipping-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-order-summary-subtotal-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-order-summary-taxes-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-payment-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-pickup-options-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-shipping-address-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-shipping-method-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-shipping-methods-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-terms-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/checkout-totals-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/empty-cart-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/empty-mini-cart-contents-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/filled-cart-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/filled-mini-cart-contents-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/mini-cart-cart-button-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/mini-cart-checkout-button-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/mini-cart-footer-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/mini-cart-items-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/mini-cart-products-table-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/mini-cart-shopping-button-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/mini-cart-title-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/mini-cart-title-items-counter-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/mini-cart-title-label-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/inner-blocks/proceed-to-checkout-block/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/legacy-template-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/legacy-template-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/legacy-template-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/legacy-template.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/legacy-template.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/legacy-template.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-component-frontend.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-component-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/cart-button-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/cart-button-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/checkout-button-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/checkout-button-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/empty-cart-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/empty-cart-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/filled-cart-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/filled-cart-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/footer-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/footer-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/items-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/items-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/products-table-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/shopping-button-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/shopping-button-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/title-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/title-items-counter-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/title-items-counter-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/title-label-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/title-label-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-block/title-style.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-contents.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-frontend.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/mini-cart/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-additional-information-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-additional-information-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-additional-information.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-additional-information.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-additional-information.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-additional-information/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-billing-address-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-billing-address-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-billing-address.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-billing-address.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-billing-address.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-billing-address/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-billing-wrapper-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-billing-wrapper.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-billing-wrapper.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-billing-wrapper/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-downloads-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-downloads-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-downloads-wrapper-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-downloads-wrapper-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-downloads-wrapper.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-downloads-wrapper.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-downloads-wrapper/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-downloads.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-downloads.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-downloads.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-downloads/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-shipping-address-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-shipping-address-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-shipping-address.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-shipping-address.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-shipping-address.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-shipping-address/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-shipping-wrapper-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-shipping-wrapper.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-shipping-wrapper.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-shipping-wrapper/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-status-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-status-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-status.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-status.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-status.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-status/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-summary-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-summary-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-summary.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-summary.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-summary.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-summary/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-totals-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-totals-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-totals-wrapper-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-totals-wrapper.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-totals-wrapper.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-totals-wrapper/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-totals.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-totals.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-totals.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/order-confirmation-totals/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/packages-style-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/packages-style-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/packages-style-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/packages-style.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/page-content-wrapper-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/page-content-wrapper.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/page-content-wrapper.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/page-content-wrapper/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/price-filter-frontend.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/price-filter-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/price-filter-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/price-filter-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/price-filter-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/price-filter-wrapper-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/price-filter-wrapper-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/price-filter-wrapper.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/price-filter.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/price-filter.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/price-filter.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/price-filter/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/price-format.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/price-format.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-add-to-cart-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-add-to-cart-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-add-to-cart.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-add-to-cart.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-average-rating-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-average-rating.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-average-rating/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-best-sellers-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-best-sellers-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-best-sellers.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-best-sellers.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-best-sellers/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-button-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-button-interactivity-frontend.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-button-interactivity-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-button-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-button.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-button.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-button/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-categories-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-categories-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-categories.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-categories.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-categories.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-categories/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-category-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-category-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-category.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-category.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-category/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-collection-no-results-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-collection-no-results.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-collection-no-results.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-collection-no-results/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-collection-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-collection-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-collection.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-collection.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-collection/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-details-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-details-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-details-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-details.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-details/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-frontend.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-large-image-frontend.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-large-image-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-large-image-next-previous-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-large-image-next-previous-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-large-image-next-previous.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-large-image-next-previous.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-large-image-next-previous/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-large-image-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-large-image-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-large-image.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-large-image.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-large-image/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-pager-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-pager-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-pager.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-pager.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-pager/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-thumbnails-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-thumbnails-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-thumbnails.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-thumbnails.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery-thumbnails/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-gallery/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-image-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-image-gallery-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-image-gallery-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-image-gallery.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-image-gallery/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-image-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-image.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-image.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-meta/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-new-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-new-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-new.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-new.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-new/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-on-sale-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-on-sale-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-on-sale.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-on-sale.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-price-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-price-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-price.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-price.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-query-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-query-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-query-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-query.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-query.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-query.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-rating-counter-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-rating-counter.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-rating-counter/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-rating-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-rating-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-rating-stars-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-rating-stars-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-rating-stars.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-rating-stars.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-rating-stars/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-rating.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-rating.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-rating/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-results-count-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-results-count-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-results-count.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-results-count.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-results-count.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-results-count/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-reviews-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-reviews-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-reviews.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-reviews/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-sale-badge-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-sale-badge-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-sale-badge.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-sale-badge.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-search-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-search-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-search-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-search.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-search.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-search.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-sku-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-sku-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-sku.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-sku.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-stock-indicator-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-stock-indicator-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-stock-indicator.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-stock-indicator.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-summary-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-summary-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-summary.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-summary.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-tag-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-tag-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-tag.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-tag.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-tag/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-template-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-template-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-template-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-template.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-template.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-template.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-template/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-title-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-title-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-title.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-title.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-top-rated-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-top-rated-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-top-rated.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-top-rated.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/product-top-rated/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/products-by-attribute-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/products-by-attribute-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/products-by-attribute.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/products-by-attribute.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/products-by-attribute/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/rating-filter-frontend.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/rating-filter-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/rating-filter-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/rating-filter-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/rating-filter-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/rating-filter-wrapper-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/rating-filter-wrapper-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/rating-filter-wrapper.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/rating-filter.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/rating-filter.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/rating-filter.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/rating-filter/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/related-products/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/reviews-by-category-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/reviews-by-category-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/reviews-by-category-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/reviews-by-category.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/reviews-by-category.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/reviews-by-category.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/reviews-by-product-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/reviews-by-product-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/reviews-by-product-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/reviews-by-product.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/reviews-by-product.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/reviews-by-product.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/reviews-frontend.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/reviews-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/single-product-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/single-product-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/single-product-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/single-product.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/single-product.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/single-product.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/single-product/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/stock-filter-frontend.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/stock-filter-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/stock-filter-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/stock-filter-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/stock-filter-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/stock-filter-wrapper-frontend.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/stock-filter-wrapper-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/stock-filter-wrapper.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/stock-filter.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/stock-filter.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/stock-filter.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/stock-filter/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/store-notices-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/store-notices-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/store-notices-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/store-notices.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/store-notices.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/store-notices.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/store-notices/block.json create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-classic-template-revert-button-style-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-classic-template-revert-button-style-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-classic-template-revert-button-style.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-classic-template-revert-button.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-classic-template-revert-button.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-data.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-data.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-editor-style-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-editor-style.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-google-analytics.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-google-analytics.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-middleware.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-middleware.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-registry.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-registry.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-shared-context.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-shared-context.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-shared-hocs.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-shared-hocs.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-style.js.LICENSE.txt create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-vendors.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks-vendors.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-blocks.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-interactivity-checkbox-list-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-interactivity-checkbox-list-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-interactivity-checkbox-list.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-interactivity-checkbox-list.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-interactivity-checkbox-list.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-interactivity-dropdown-rtl.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-interactivity-dropdown-style.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-interactivity-dropdown.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-interactivity-dropdown.css create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-interactivity-dropdown.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-interactivity.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-interactivity.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-payment-method-bacs.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-payment-method-bacs.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-payment-method-cheque.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-payment-method-cheque.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-payment-method-cod.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-payment-method-cod.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-payment-method-paypal.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-payment-method-paypal.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-settings.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-settings.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-shipping-method-pickup-location.asset.php create mode 100644 wp/wp-content/plugins/woocommerce/assets/client/blocks/wc-shipping-method-pickup-location.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/block-error.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/block-placeholders/product-image-gallery.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/block-placeholders/product-reviews.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/blocks/mini-cart/cart-drawer-rtl.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/blocks/mini-cart/cart-drawer.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/beach-landscape-sea-coast-nature-person.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/desk-table-wood-chair-floor-home-square.png create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/drinkware-liquid-tableware-dishware-bottle-fluid.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/fresh-lettuce-washed.png create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/fresh-organic-tomatoes.png create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/leather-guitar-typewriter-red-gadget-sofa.png create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/man-person-music-black-and-white-white-photography.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/man-person-winter-photography-statue-coat.png create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/music-needle-turntable-black-and-white-white-photography.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/music-technology-play-equipment-studio-gadget.png create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/pattern-fashion-clothing-outerwear-wool-scarf.png create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/plant-white-leaf-flower-vase-green.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/portrait.png create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/road-sport-vintage-wheel-retro-old.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/russet-organic-potatoes.png create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/sweet-organic-lemons.png create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/table-floor-home-living-room-furniture-room-square.png create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/table-floor-home-living-room-furniture-room.png create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/table-floor-interior-atmosphere-living-room-furniture-square-lg.png create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/table-floor-interior-atmosphere-living-room-furniture-square.png create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/table-white-chair-floor-shelf-lamp-square-lg.png create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/table-wood-chair-floor-living-room-furniture-vertical.png create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/table-wood-house-chair-floor-window.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/tea-leaf-meal-food-herb-produce.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/technology-joystick-gadget-console-games-playstation.png create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/technology-white-camera-photography-vintage-photographer.png create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/tree-branch-plant-wood-leaf-flower.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/watch-hand-brand-jewellery-strap-platinum.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/white-black-black-and-white-photograph-monochrome-photography.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/white-vase-decoration-pattern-ceramic-lamp.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/pattern-placeholders/writing-typing-keyboard-technology-white-vintage.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/payment-methods/alipay.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/payment-methods/amex.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/payment-methods/bancontact.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/payment-methods/diners.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/payment-methods/discover.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/payment-methods/eps.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/payment-methods/giropay.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/payment-methods/ideal.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/payment-methods/jcb.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/payment-methods/laser.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/payment-methods/maestro.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/payment-methods/mastercard.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/payment-methods/multibanco.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/payment-methods/p24.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/payment-methods/sepa.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/payment-methods/sofort.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/payment-methods/unionpay.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/payment-methods/visa.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/payment-methods/wechat.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/previews/beanie.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/previews/cap.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/previews/collection.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/previews/hoodie-with-logo.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/previews/hoodie-with-pocket.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/previews/hoodie-with-zipper.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/previews/long-sleeve-tee.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/previews/pennant.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/previews/polo.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/previews/tshirt.jpg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/shipping_partners/easyship-column.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/shipping_partners/easyship-row.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/template-placeholders/archive-product.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/template-placeholders/fallback.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/images/template-placeholders/single-product.svg create mode 100644 wp/wp-content/plugins/woocommerce/assets/js/admin/order-attribution-admin.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/js/admin/order-attribution-admin.min.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/js/frontend/order-attribution-blocks.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/js/frontend/order-attribution-blocks.min.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/js/frontend/order-attribution.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/js/frontend/order-attribution.min.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/js/frontend/wp-consent-api-integration.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/js/frontend/wp-consent-api-integration.min.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/js/sourcebuster/LICENSE create mode 100644 wp/wp-content/plugins/woocommerce/assets/js/sourcebuster/sourcebuster.js create mode 100644 wp/wp-content/plugins/woocommerce/assets/js/sourcebuster/sourcebuster.min.js create mode 100644 wp/wp-content/plugins/woocommerce/includes/admin/class-wc-admin-upload-downloadable-product.php create mode 100644 wp/wp-content/plugins/woocommerce/lib/packages/Detection/MobileDetect.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/banner.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/discount-banner-with-image.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/discount-banner.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/featured-category-cover-image.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/featured-category-focus.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/featured-category-triple.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/featured-products-fresh-and-tasty.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/filters.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/footer-large-dark.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/footer-large.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/footer-simple-dark.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/footer-simple-menu.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/footer-simple.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/footer-with-2-menus-dark.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/footer-with-2-menus.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/footer-with-3-menus.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/header-centered-pattern.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/header-essential-dark.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/header-essential.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/header-large-dark.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/header-large.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/header-minimal.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/hero-product-3-split.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/hero-product-chessboard.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/hero-product-split.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/just-arrived-full-hero.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/no-products-found.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-collection-3-columns.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-collection-4-columns.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-collection-5-columns.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-collection-banner.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-collection-featured-products-5-columns.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-collection-full-grid.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-collection-grid.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-collection-rows.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-collection-simple-grid.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-collections-featured-collection.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-collections-featured-collections.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-collections-newest-arrivals.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-details-listing.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-details-pattern.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-featured-2-columns.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-hero-2-col-2-row.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-hero.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-listing-with-gallery-and-description.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-query-4-column-product-row.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-query-large-image-product-gallery.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-query-minimal-product-list.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-query-product-gallery.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-query-product-list-with-1-1-images.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-query-product-list-with-full-product-description.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/product-search-form.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/related-products.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/shop-by-price.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/small-discount-banner-with-image.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/social-follow-us-in-social-media.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/store-info-alt-image-and-text.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/testimonials-3-columns.php create mode 100644 wp/wp-content/plugins/woocommerce/patterns/testimonials-single.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/AI/Configuration.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/AI/Connection.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Assets.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Assets/Api.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Assets/AssetDataRegistry.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/AssetsController.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockPatterns.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTemplatesController.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/AbstractBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/AbstractDynamicBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/AbstractInnerBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/AbstractProductGrid.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ActiveFilters.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/AddToCartForm.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/AllProducts.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/AllReviews.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/AtomicBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/AttributeFilter.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/Breadcrumbs.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/Cart.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CartAcceptedPaymentMethodsBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CartCrossSellsBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CartCrossSellsProductsBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CartExpressPaymentBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CartItemsBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CartLineItemsBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CartOrderSummaryBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CartOrderSummaryCouponFormBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CartOrderSummaryDiscountBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CartOrderSummaryFeeBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CartOrderSummaryHeadingBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CartOrderSummaryShippingBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CartOrderSummarySubtotalBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CartOrderSummaryTaxesBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CartTotalsBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CatalogSorting.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/Checkout.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutActionsBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutBillingAddressBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutContactInformationBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutExpressPaymentBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutFieldsBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutOrderNoteBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutOrderSummaryBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutOrderSummaryCartItemsBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutOrderSummaryCouponFormBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutOrderSummaryDiscountBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutOrderSummaryFeeBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutOrderSummaryShippingBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutOrderSummarySubtotalBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutOrderSummaryTaxesBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutPaymentBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutPickupOptionsBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutShippingAddressBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutShippingMethodBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutShippingMethodsBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutTermsBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CheckoutTotalsBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ClassicShortcode.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ClassicTemplate.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CollectionActiveFilters.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CollectionAttributeFilter.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CollectionFilters.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CollectionPriceFilter.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CollectionRatingFilter.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CollectionStockFilter.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/CustomerAccount.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/EmptyCartBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/EmptyMiniCartContentsBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/FeaturedCategory.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/FeaturedItem.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/FeaturedProduct.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/FilledCartBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/FilledMiniCartContentsBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/FilterWrapper.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/HandpickedProducts.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/MiniCart.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/MiniCartCartButtonBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/MiniCartCheckoutButtonBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/MiniCartContents.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/MiniCartFooterBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/MiniCartItemsBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/MiniCartProductsTableBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/MiniCartShoppingButtonBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/MiniCartTitleBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/MiniCartTitleItemsCounterBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/MiniCartTitleLabelBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/OrderConfirmation/AbstractOrderConfirmationBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/OrderConfirmation/AdditionalInformation.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/OrderConfirmation/BillingAddress.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/OrderConfirmation/BillingWrapper.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/OrderConfirmation/Downloads.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/OrderConfirmation/DownloadsWrapper.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/OrderConfirmation/ShippingAddress.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/OrderConfirmation/ShippingWrapper.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/OrderConfirmation/Status.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/OrderConfirmation/Summary.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/OrderConfirmation/Totals.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/OrderConfirmation/TotalsWrapper.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/PageContentWrapper.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/PriceFilter.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProceedToCheckoutBlock.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductAddToCart.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductAverageRating.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductBestSellers.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductButton.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductCategories.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductCategory.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductCollection.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductCollectionNoResults.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductDetails.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductGallery.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductGalleryLargeImage.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductGalleryLargeImageNextPrevious.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductGalleryPager.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductGalleryThumbnails.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductImage.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductImageGallery.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductNew.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductOnSale.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductPrice.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductQuery.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductRating.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductRatingCounter.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductRatingStars.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductResultsCount.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductReviews.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductSKU.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductSaleBadge.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductSearch.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductStockIndicator.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductSummary.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductTag.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductTemplate.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductTitle.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductTopRated.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ProductsByAttribute.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/RatingFilter.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/RelatedProducts.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ReviewsByCategory.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/ReviewsByProduct.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/SingleProduct.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/StockFilter.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypes/StoreNotices.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/BlockTypesController.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Domain/Bootstrap.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Domain/Package.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Domain/Services/CheckoutFields.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Domain/Services/CreateAccount.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Domain/Services/DraftOrders.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Domain/Services/Email/CustomerNewAccount.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Domain/Services/FeatureGating.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Domain/Services/GoogleAnalytics.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Domain/Services/Hydration.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Domain/Services/Notices.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Domain/Services/OnboardingTasks/ReviewCheckoutTask.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Domain/Services/OnboardingTasks/TasksController.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Domain/Services/functions.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Images/Pexels.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/InboxNotifications.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Installer.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Integrations/IntegrationInterface.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Integrations/IntegrationRegistry.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Interactivity/class-wc-interactivity-initial-state.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Interactivity/client-side-navigation.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Interactivity/initial-state.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Interactivity/load.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Interactivity/scripts.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/InteractivityComponents/CheckboxList.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/InteractivityComponents/Dropdown.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Library.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Migration.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Options.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Package.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Patterns/PatternUpdater.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Patterns/PatternsHelper.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Patterns/ProductUpdater.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Patterns/dictionary.json create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Payments/Api.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Payments/Integrations/AbstractPaymentMethodType.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Payments/Integrations/BankTransfer.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Payments/Integrations/CashOnDelivery.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Payments/Integrations/Cheque.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Payments/Integrations/PayPal.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Payments/PaymentMethodRegistry.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Payments/PaymentMethodTypeInterface.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Registry/AbstractDependencyType.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Registry/Container.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Registry/FactoryType.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Registry/SharedType.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Shipping/PickupLocation.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Shipping/ShippingController.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Templates/AbstractPageTemplate.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Templates/AbstractTemplateCompatibility.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Templates/ArchiveProductTemplatesCompatibility.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Templates/CartTemplate.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Templates/CheckoutHeaderTemplate.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Templates/CheckoutTemplate.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Templates/ClassicTemplatesCompatibility.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Templates/MiniCartTemplate.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Templates/OrderConfirmationTemplate.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Templates/ProductAttributeTemplate.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Templates/ProductSearchResultsTemplate.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Templates/SingleProductTemplate.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Templates/SingleProductTemplateCompatibility.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Utils/BlockTemplateMigrationUtils.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Utils/BlockTemplateUtils.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Utils/BlocksWpQuery.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Utils/CartCheckoutUtils.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Utils/MiniCartUtils.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Utils/ProductCollectionUtils.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Utils/ProductGalleryUtils.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Utils/StyleAttributesUtils.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Blocks/Utils/Utils.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Internal/Admin/Logging/FileV2/FileExporter.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Internal/Admin/Logging/FileV2/FileListTable.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Internal/Admin/Logging/FileV2/SearchListTable.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Internal/Admin/Orders/MetaBoxes/CustomerHistory.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Internal/Admin/Orders/MetaBoxes/OrderAttribution.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Internal/DataStores/Orders/LegacyDataHandler.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Internal/DependencyManagement/ServiceProviders/AbstractInterfaceServiceProvider.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Internal/DependencyManagement/ServiceProviders/OrderAttributionServiceProvider.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Internal/DependencyManagement/ServiceProviders/ProductImageBySKUServiceProvider.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Internal/Integrations/WPConsentAPI.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Internal/Orders/OrderAttributionBlocksController.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Internal/Orders/OrderAttributionController.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Internal/ProductImage/MatchImageBySKU.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Internal/RegisterHooksInterface.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Internal/Traits/OrderAttributionMeta.php create mode 100644 wp/wp-content/plugins/woocommerce/src/Internal/Traits/ScriptDebug.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Authentication.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Exceptions/InvalidCartException.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Exceptions/InvalidStockLevelsInCartException.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Exceptions/NotPurchasableException.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Exceptions/OutOfStockException.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Exceptions/PartialOutOfStockException.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Exceptions/RouteException.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Exceptions/StockAvailabilityException.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Exceptions/TooManyInCartException.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Formatters.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Formatters/CurrencyFormatter.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Formatters/DefaultFormatter.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Formatters/FormatterInterface.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Formatters/HtmlFormatter.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Formatters/MoneyFormatter.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Legacy.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Payments/PaymentContext.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Payments/PaymentResult.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/RouteInterface.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/AI/BusinessDescription.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/AI/Images.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/AI/Middleware.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/AI/Patterns.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/AI/Product.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/AI/Products.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/AI/StoreInfo.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/AI/StoreTitle.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/AbstractCartRoute.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/AbstractRoute.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/AbstractTermsRoute.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/Batch.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/Cart.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/CartAddItem.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/CartApplyCoupon.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/CartCoupons.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/CartCouponsByCode.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/CartExtensions.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/CartItems.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/CartItemsByKey.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/CartRemoveCoupon.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/CartRemoveItem.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/CartSelectShippingRate.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/CartUpdateCustomer.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/CartUpdateItem.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/Checkout.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/CheckoutOrder.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/Order.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/ProductAttributeTerms.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/ProductAttributes.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/ProductAttributesById.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/ProductCategories.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/ProductCategoriesById.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/ProductCollectionData.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/ProductReviews.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/ProductTags.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/Products.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/ProductsById.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/ProductsBySlug.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/RoutesController.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/SchemaController.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/ExtendSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/AI/BusinessDescriptionSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/AI/ImagesSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/AI/PatternsSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/AI/ProductSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/AI/ProductsSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/AI/StoreInfoSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/AI/StoreTitleSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/AbstractAddressSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/AbstractSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/BatchSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/BillingAddressSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/CartCouponSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/CartExtensionsSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/CartFeeSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/CartItemSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/CartSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/CartShippingRateSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/CheckoutOrderSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/CheckoutSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/ErrorSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/ImageAttachmentSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/ItemSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/OrderCouponSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/OrderFeeSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/OrderItemSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/OrderSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/ProductAttributeSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/ProductCategorySchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/ProductCollectionDataSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/ProductReviewSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/ProductSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/ShippingAddressSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Schemas/V1/TermSchema.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/SessionHandler.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/StoreApi.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Utilities/ArrayUtils.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Utilities/CartController.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Utilities/CheckoutTrait.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Utilities/DraftOrderTrait.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Utilities/JsonWebToken.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Utilities/LocalPickupUtils.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Utilities/NoticeHandler.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Utilities/OrderAuthorizationTrait.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Utilities/OrderController.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Utilities/Pagination.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Utilities/ProductItemTrait.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Utilities/ProductQuery.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Utilities/ProductQueryFilters.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Utilities/QuantityLimits.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Utilities/RateLimits.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/Utilities/ValidationUtils.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/deprecated.php create mode 100644 wp/wp-content/plugins/woocommerce/src/StoreApi/functions.php create mode 100644 wp/wp-content/plugins/woocommerce/templates/emails/customer-new-account-blocks.php create mode 100644 wp/wp-content/plugins/woocommerce/templates/emails/plain/customer-new-account-blocks.php create mode 100644 wp/wp-content/plugins/woocommerce/templates/order/attribution-data-fields.php create mode 100644 wp/wp-content/plugins/woocommerce/templates/order/customer-history.php create mode 100644 wp/wp-content/plugins/woocommerce/templates/parts/checkout-header.html create mode 100644 wp/wp-content/plugins/woocommerce/templates/parts/mini-cart.html create mode 100644 wp/wp-content/plugins/woocommerce/templates/parts/product-gallery.html create mode 100644 wp/wp-content/plugins/woocommerce/templates/templates/archive-product.html create mode 100644 wp/wp-content/plugins/woocommerce/templates/templates/blockified/archive-product.html create mode 100644 wp/wp-content/plugins/woocommerce/templates/templates/blockified/order-confirmation.html create mode 100644 wp/wp-content/plugins/woocommerce/templates/templates/blockified/page-cart.html create mode 100644 wp/wp-content/plugins/woocommerce/templates/templates/blockified/page-checkout.html create mode 100644 wp/wp-content/plugins/woocommerce/templates/templates/blockified/product-search-results.html create mode 100644 wp/wp-content/plugins/woocommerce/templates/templates/blockified/single-product.html create mode 100644 wp/wp-content/plugins/woocommerce/templates/templates/blockified/taxonomy-product_attribute.html create mode 100644 wp/wp-content/plugins/woocommerce/templates/templates/blockified/taxonomy-product_cat.html create mode 100644 wp/wp-content/plugins/woocommerce/templates/templates/blockified/taxonomy-product_tag.html create mode 100644 wp/wp-content/plugins/woocommerce/templates/templates/order-confirmation.html create mode 100644 wp/wp-content/plugins/woocommerce/templates/templates/page-cart.html create mode 100644 wp/wp-content/plugins/woocommerce/templates/templates/page-checkout.html create mode 100644 wp/wp-content/plugins/woocommerce/templates/templates/product-search-results.html create mode 100644 wp/wp-content/plugins/woocommerce/templates/templates/single-product.html create mode 100644 wp/wp-content/plugins/woocommerce/templates/templates/taxonomy-product_attribute.html create mode 100644 wp/wp-content/plugins/woocommerce/templates/templates/taxonomy-product_cat.html create mode 100644 wp/wp-content/plugins/woocommerce/templates/templates/taxonomy-product_tag.html create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/academy-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/academy-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/admin-global-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/admin-global-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/adminbar-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/adminbar-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/ai-generator-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/ai-generator-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/alerts-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/alerts-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/black-friday-banner-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/black-friday-banner-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/dashboard-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/dashboard-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/edit-page-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/edit-page-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/elementor-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/elementor-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/featured-image-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/featured-image-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/filter-explanation-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/filter-explanation-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/first-time-configuration-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/first-time-configuration-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/icons-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/icons-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/inside-editor-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/inside-editor-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/introductions-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/introductions-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/metabox-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/metabox-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/metabox-primary-category-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/metabox-primary-category-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/modal-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/modal-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/monorepo-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/monorepo-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/new-settings-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/new-settings-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/notifications-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/notifications-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/score_icon-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/score_icon-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/structured-data-blocks-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/structured-data-blocks-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/support-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/support-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/tailwind-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/tailwind-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/toggle-switch-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/toggle-switch-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/tooltips-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/tooltips-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/workouts-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/workouts-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/wpseo-dismissible-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/wpseo-dismissible-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/yoast-extensions-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/yoast-extensions-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/yst_plugin_tools-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/yst_plugin_tools-2181.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/yst_seo_score-2181-rtl.css create mode 100644 wp/wp-content/plugins/wordpress-seo/css/dist/yst_seo_score-2181.css diff --git a/wp/.lando.yml b/wp/.lando.yml new file mode 100644 index 00000000..e15f3e44 --- /dev/null +++ b/wp/.lando.yml @@ -0,0 +1,14 @@ +name: medicalalert +recipe: pantheon +proxy: + pma: + - pma.wordpress.lndo.site +config: + framework: wordpress + site: medicalalert + id: 5454b5d7-f7b8-4f64-bf8b-bcbcc77582ff +services: + pma: + type: phpmyadmin + host: + - database diff --git a/wp/pantheon.upstream.yml b/wp/pantheon.upstream.yml new file mode 100644 index 00000000..ec2d615f --- /dev/null +++ b/wp/pantheon.upstream.yml @@ -0,0 +1,25 @@ +# IMPORTANT NOTE: +# Do not edit this file unless you are doing so in your custom upstream repository. +# Override the defaults specified here in a site-specific `pantheon.yml` file. +# For more information see: https://pantheon.io/docs/pantheon-upstream-yml +api_version: 1 +php_version: 8.1 + +# See https://pantheon.io/docs/pantheon-yml#specify-a-version-of-mariadb +database: + version: 10.4 + +# See https://pantheon.io/docs/pantheon-yml/#enforce-https--hsts for valid values. +enforce_https: transitional + +# See https://pantheon.io/docs/pantheon-yml#protected-web-paths for usage. +protected_web_paths: + - /private/ + - /wp-content/uploads/private/ + - /xmlrpc.php + +# By default, any 'protected_web_paths' added to the pantheon.yml file +# are combined with the paths from the pantheon.upstream.yml file. If +# 'protected_web_paths_override' is set to true, then the upstream paths +# are disabled. +protected_web_paths_override: false diff --git a/wp/pantheon.yml b/wp/pantheon.yml new file mode 100644 index 00000000..ca64f39e --- /dev/null +++ b/wp/pantheon.yml @@ -0,0 +1,22 @@ +api_version: 1 +enforce_https: full+subdomains +php_version: 7.4 + +protected_web_paths: + - /.user.ini + +workflows: + + # Commits + sync_code: + after: + - type: webphp + description: Post to Slack after each code pushed + script: private/scripts/slack_notification.php + + # Database Clone + clone_database: + after: + - type: webphp + description: Change SFDC environment after database clone + script: private/scripts/sfdc_env.php diff --git a/wp/wp-config.php_local b/wp/wp-config.php_local new file mode 100644 index 00000000..0031c9b1 --- /dev/null +++ b/wp/wp-config.php_local @@ -0,0 +1,71 @@ + + * @license GPL-3.0 + * @link http://www.ipgeoblock.com/ + * @see http://www.ipgeoblock.com/codex/#filter-hooks + * @example Use `IP_Geo_Block::add_filter()` instead of `add_filter()` + */ +class_exists( 'IP_Geo_Block', FALSE ) or die; + +/** + * Analyze entries in "Validation logs" + * + * @param array $logs An array including each entry where: + * Array ( + * [0 DB row number] => 154 + * [1 Target ] => comment + * [2 Time ] => 1534580897 + * [3 IP address ] => 102.177.147.*** + * [4 Country code ] => ZA + * [5 Result ] => blocked + * [6 AS number ] => AS328239 + * [7 Request ] => POST[80]:/wp-comments-post.php + * [8 User agent ] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) ... + * [9 HTTP headers ] => HTTP_ORIGIN=http://localhost,HTTP_X_FORWARDED_FOR=102.177.147.*** + * [10 $_POST data ] => comment=Hello.,author,email,url,comment_post_ID,comment_parent + * ) + * + * And put a mark at "Target" + * ¹¹: Passed in Whitelist + * ¹²: Passed in Blacklist + * ¹³: Passed not in Lists + * ²¹: Blocked in Whitelist + * ²²: Blocked in Blacklist + * ²³: Blocked not in Lists + */ +function ip_geo_block_logs( $logs ) { + // Get settings of IP Geo Block + $settings = IP_Geo_Block::get_option(); + + // White/Black list for back-end + $white_backend = $settings['white_list']; + $black_backend = $settings['black_list']; + + // White/Black list for front-end + if ( $settings['public']['matching_rule'] < 0 ) { + // Follow "Validation rule settings" + $white_frontend = $white_backend; + $black_frontend = $black_backend; + } else { + // Whitelist or Blacklist for "Public facing pages" + $white_frontend = $settings['public']['white_list']; + $black_frontend = $settings['public']['black_list']; + } + + foreach ( $logs as $key => $log ) { + // Passed or Blocked + $mark = IP_Geo_Block::is_passed( $log[5] ) ? '¹' : '²'; + + // Whitelisted, Blacklisted or N/A + if ( 'public' === $log[1] ) { + $mark .= IP_Geo_Block::is_listed( $log[4], $white_frontend ) ? '¹' : ( + IP_Geo_Block::is_listed( $log[4], $black_frontend ) ? '²' : '³' ); + } else { + $mark .= IP_Geo_Block::is_listed( $log[4], $white_backend ) ? '¹' : ( + IP_Geo_Block::is_listed( $log[4], $black_backend ) ? '²' : '³' ); + } + + // Put a mark at "Target" + $logs[ $key ][1] .= $mark; + } + + return $logs; +} + +IP_Geo_Block::add_filter( 'ip-geo-block-logs', 'ip_geo_block_logs' ); + +/** + * Register UI "Preset filters" at "Search in logs" + * + * @param array $filters An empty array by default. + * @return array $filters The array of paired with 'title' and 'value'. + */ +function ip_geo_block_logs_preset( $filters ) { + return array( + array( 'title' => ' ' . __( 'Passed in Whitelist', 'ip-geo-block' ), 'value' => '¹¹' ), + array( 'title' => ' ' . __( 'Passed in Blacklist', 'ip-geo-block' ), 'value' => '¹²' ), + array( 'title' => ' ' . __( 'Passed not in List', 'ip-geo-block' ), 'value' => '¹³' ), + array( 'title' => ' ' . __( 'Blocked in Whitelist', 'ip-geo-block' ), 'value' => '²¹' ), + array( 'title' => ' ' . __( 'Blocked in Blacklist', 'ip-geo-block' ), 'value' => '²²' ), + array( 'title' => ' ' . __( 'Blocked not in List', 'ip-geo-block' ), 'value' => '²³' ), + ); +} + +IP_Geo_Block::add_filter( 'ip-geo-block-logs-preset', 'ip_geo_block_logs_preset' ); diff --git a/wp/wp-content/ip-geo-api/drop-in-sample.php b/wp/wp-content/ip-geo-api/drop-in-sample.php new file mode 100644 index 00000000..8a883943 --- /dev/null +++ b/wp/wp-content/ip-geo-api/drop-in-sample.php @@ -0,0 +1,61 @@ + + * @license GPL-3.0 + * @link https://www.ipgeoblock.com/ + * @see https://www.ipgeoblock.com/codex/#filter-hooks + * @example Use `IP_Geo_Block::add_filter()` instead of `add_filter()` + */ +class_exists( 'IP_Geo_Block', FALSE ) or die; + +/** + * Enables some debug features on dashboard + * + */ +// define( 'IP_GEO_BLOCK_DEBUG', true ); + +/** + * Example: Returns "404 Not found" to hide login page. + * + * @param int $code HTTP status code. + * @return int modified HTTP status code. + */ +/* -- ADD `/` TO THE TOP OR END OF THIS LINE TO ACTIVATE THE FOLLOWINGS -- * +function my_login_status( $code ) { + return 404; +} + +IP_Geo_Block::add_filter( 'ip-geo-block-login-status', 'my_login_status', 10, 1 ); +//*/ + +/** + * Example: Change mode of recording log according to the target. + * + * @param int $mode 1:blocked 2:passed 3:unauth 4:auth 5:all + * @param string $hook 'comment', 'xmlrpc', 'login', 'admin', 'public' + * @param array 'ip', 'auth', 'code', 'result' + * @return int $mode modefied recording mode. + */ +/* -- ADD `/` TO THE TOP OR END OF THIS LINE TO ACTIVATE THE FOLLOWINGS -- * +function my_record_logs( $mode, $hook, $validate ) { + // Countries where you want to supress recording logs. + $whitelist = array( + 'JP', + ); + + // Suppress recording logs in case of whitelisted countries on public facing pages. + if ( 'public' !== $hook || in_array( $validate['code'], $whitelist, TRUE ) ) { + return 1; // Only when blocked + } + else { + return 3; // Unauthenticated user + } +} + +IP_Geo_Block::add_filter( 'ip-geo-block-record-logs', 'my_record_logs', 10, 3 ); +//*/ diff --git a/wp/wp-content/ip-geo-api/index.php b/wp/wp-content/ip-geo-api/index.php new file mode 100644 index 00000000..62200328 --- /dev/null +++ b/wp/wp-content/ip-geo-api/index.php @@ -0,0 +1,2 @@ +. + */ + +class IP2LocationRecord { + public $ipAddress; + public $ipNumber; + public $countryCode; + public $countryName; + public $regionName; + public $cityName; + public $latitude; + public $longitude; + public $isp; + public $domainName; + public $zipCode; + public $timeZone; + public $netSpeed; + public $iddCode; + public $areaCode; + public $weatherStationCode; + public $weatherStationName; + public $mcc; + public $mnc; + public $mobileCarrierName; + public $elevation; + public $usageType; +} + +class IP2Location { + // Current version. + const VERSION = '7.0.0'; + + // Database storage method. + const FILE_IO = 0; + const MEMORY_CACHE = 1; + const SHARED_MEMORY = 2; + + // Unpack method. + const ENDIAN = 0; + const BIG_ENDIAN = 1; + + // Record field. + const ALL = 100; + const COUNTRY_CODE = 1; + const COUNTRY_NAME = 2; + const REGION_NAME = 3; + const CITY_NAME = 4; + const LATITUDE = 5; + const LONGITUDE = 6; + const ISP = 7; + const DOMAIN_NAME = 8; + const ZIP_CODE = 9; + const TIME_ZONE = 10; + const NET_SPEED = 11; + const IDD_CODE = 12; + const AREA_CODE = 13; + const WEATHER_STATION_CODE = 14; + const WEATHER_STATION_NAME = 15; + const MCC = 16; + const MNC = 17; + const MOBILE_CARRIER_NAME = 18; + const ELEVATION = 19; + const USAGE_TYPE = 20; + + // IP version. + const IPV4 = 0; + const IPV6 = 1; + + // SHMOP memory address. + const SHM_KEY = 4194500608; + + // Message. + const FIELD_NOT_SUPPORTED = 'This parameter is unavailable in selected .BIN data file. Please upgrade data file.'; + const INVALID_IP_ADDRESS = 'Invalid IP address.'; + + private $columns = array( + 'COUNTRY_CODE' => array( + 0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + ), + 'COUNTRY_NAME' => array( + 0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + ), + 'REGION_NAME' => array( + 0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + ), + 'CITY_NAME' => array( + 0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + ), + 'LATITUDE' => array( + 0,0,0,0,0,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + ), + 'LONGITUDE' => array( + 0,0,0,0,0,6,6,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + ), + 'ISP' => array( + 0,0,3,0,5,0,7,5,7,0,8,0,9,0,9,0,9,0,9,7,9,0,9,7,9, + ), + 'DOMAIN_NAME' => array( + 0,0,0,0,0,0,0,6,8,0,9,0,10,0,10,0,10,0,10,8,10,0,10,8,10, + ), + 'ZIP_CODE' => array( + 0,0,0,0,0,0,0,0,0,7,7,7,7,0,7,7,7,0,7,0,7,7,7,0,7, + ), + 'TIME_ZONE' => array( + 0,0,0,0,0,0,0,0,0,0,0,8,8,7,8,8,8,7,8,0,8,8,8,0,8, + ), + 'NET_SPEED' => array( + 0,0,0,0,0,0,0,0,0,0,0,0,0,8,11,0,11,8,11,0,11,0,11,0,11, + ), + 'IDD_CODE' => array( + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,12,0,12,0,12,9,12,0,12, + ), + 'AREA_CODE' => array( + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,13,0,13,0,13,10,13,0,13, + ), + 'WEATHER_STATION_CODE' => array( + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,14,0,14,0,14,0,14, + ), + 'WEATHER_STATION_NAME' => array( + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,15,0,15,0,15,0,15, + ), + 'MCC' => array( + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,16,0,16,9,16, + ), + 'MNC' => array( + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,17,0,17,10,17, + ), + 'MOBILE_CARRIER_NAME' => array( + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,18,0,18,11,18, + ), + 'ELEVATION' => array( + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,19,0,19, + ), + 'USAGE_TYPE' => array( + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,20, + ), + ); + + private $shmId = ''; + private $database = array(); + private $unpackMethod; + private $buffer; + private $mode; + private $resource; + private $result; + + /** + * Added for IP Geo Block + */ + public function get_database_type() { + return ( $this->database['ipv4_count'] ? IP_GEO_BLOCK_API_TYPE_IPV4 : 0 ) | + ( $this->database['ipv6_count'] ? IP_GEO_BLOCK_API_TYPE_IPV6 : 0 ); + } + + /** + * Constructor. + */ + public function __construct($file = NULL, $mode = self::FILE_IO) { + if (!file_exists($file)) { + throw new Exception('IP2Location.class.php: Unable to open file "' . $file . '".'); + } + + // Define system unpack method. + list($test) = array_values(unpack('L1L', pack('V', 1))); + + // Use Big Endian Unpack if endian test failed. + $this->unpackMethod = (($test != 1)) ? self::BIG_ENDIAN : self::ENDIAN; + + switch ($mode) { + case self::SHARED_MEMORY: + if (!function_exists('shmop_open')) { + throw new Exception('IP2Location.class.php: Please make sure your PHP setup has "php_shmop" enabled.'); + } + + $this->mode = self::SHARED_MEMORY; + + $this->shmId = @shmop_open(self::SHM_KEY, 'a', 0, 0); + + if ($this->shmId === FALSE) { + // First execution, load database into memory. + if (($fp = fopen($file, 'rb')) === FALSE) { + throw new Exception('IP2Location.class.php: Unable to open file "' . $file . '".'); + } + + flock($fp, LOCK_SH); // @since 1.1.6 + $stats = fstat($fp); + + if ($shm_id = @shmop_open(self::SHM_KEY, 'w', 0, 0)) { + shmop_delete($shm_id); + shmop_close($shm_id); + } + + if ($shm_id = @shmop_open(self::SHM_KEY, 'c', 0644, $stats['size'])) { + $pointer = 0; + while ($pointer < $stats['size']) { + $buf = fread($fp, 524288); + shmop_write($shm_id, $buf, $pointer); + $pointer += 524288; + } + shmop_close($shm_id); + } + flock($fp, LOCK_UN); // @since 1.1.6 + fclose($fp); + + $this->shmId = @shmop_open(self::SHM_KEY, 'a', 0, 0); + + if ($this->shmId === FALSE) { + throw new Exception('IP2Location.class.php: Unable to access shared memory block.'); + } + } + break; + + default: + $this->mode = self::FILE_IO; + $this->resource = fopen($file, 'rb'); + flock($this->resource, LOCK_SH); // @since 1.1.6 + + if ($mode == self::MEMORY_CACHE) { + $this->mode = self::MEMORY_CACHE; + $stats = fstat($this->resource); + $this->buffer = fread($this->resource, $stats['size']); + $this->close(); // @since 1.1.6 + } + } + + $this->database['type'] = $this->readByte(1, '8'); + $this->database['column'] = $this->readByte(2, '8'); + $this->database['year'] = $this->readByte(3, '8'); + $this->database['month'] = $this->readByte(4, '8'); + $this->database['day'] = $this->readByte(5, '8'); + $this->database['ipv4_count'] = $this->readByte(6, '32'); + $this->database['ipv4_base_address'] = $this->readByte(10, '32'); + $this->database['ipv6_count'] = $this->readByte(14, '32'); + $this->database['ipv6_base_address'] = $this->readByte(18, '32'); + + $this->result = new IP2LocationRecord(); + } + + /** + * Close resource. + * + * @since 1.1.6 + */ + public function close() { + if ($this->resource) { + flock($this->resource, LOCK_UN); + fclose($this->resource); + $this->resource = NULL; + } + } + + /** + * Read bytes. + */ + private function readByte($pos, $mode = 'string', $auto_size = FALSE) { + $result = ''; + + switch ($this->mode) { + case self::SHARED_MEMORY: + if ($mode == 'string') { + $data = shmop_read($this->shmId, $pos, ($auto_size) ? shmop_size($this->shmId) - $pos : 100); + } + else { + $data = shmop_read($this->shmId, $pos - 1, 50); + } + break; + + case self::MEMORY_CACHE: + $data = substr($this->buffer, (($mode == 'string') ? $pos : $pos - 1), 100); + break; + + default: + if ($mode == 'string') { + fseek($this->resource, $pos, SEEK_SET); + $data = @fread($this->resource, 1); + } + else { + fseek($this->resource, $pos - 1, SEEK_SET); + $data = @fread($this->resource, 50); + } + } + + switch ($mode) { + case '8': + $out = $this->readBinary('C', $data); + $result = $out[1]; + + break; + + case '32': + $out = $this->readBinary('V', $data); + if ($out[1] < 0) { + $out[1] += 4294967296; + } + + $result = (int) $out[1]; + + break; + + case '128': + $array = preg_split('//', $data, -1, PREG_SPLIT_NO_EMPTY); + + if (count($array) != 16) { + $result = 0; + } + + $ip96_127 = $this->readBinary('V', $array[0] . $array[1] . $array[2] . $array[3]); + $ip64_95 = $this->readBinary('V', $array[4] . $array[5] . $array[6] . $array[7]); + $ip32_63 = $this->readBinary('V', $array[8] . $array[9] . $array[10] . $array[11]); + $ip1_31 = $this->readBinary('V', $array[12] . $array[13] . $array[14] . $array[15]); + + if ($ip96_127[1] < 0) { + $ip96_127[1] += 4294967296; + } + if ($ip64_95[1] < 0) { + $ip64_95[1] += 4294967296; + } + if ($ip32_63[1] < 0) { + $ip32_63[1] += 4294967296; + } + if ($ip1_31[1] < 0) { + $ip1_31[1] += 4294967296; + } + + $result = bcadd(bcadd(bcmul($ip1_31[1], bcpow(4294967296, 3)), bcmul($ip32_63[1], bcpow(4294967296, 2))), bcadd(bcmul($ip64_95[1], 4294967296), $ip96_127[1])); + + break; + + case 'float': + $out = $this->readBinary('f', $data); + + $result = $out[1]; + + break; + + default: + $out = $this->readBinary('C', $data); + $result = (in_array($this->mode, array(self::SHARED_MEMORY, self::MEMORY_CACHE))) ? substr($data, 1, $out[1]) : @fread($this->resource, $out[1]); + } + + return $result; + } + + /** + * Read binary. + */ + private function readBinary($format, $data) { + if ($this->unpackMethod == self::BIG_ENDIAN) { + $ar = unpack($format, $data); + $vals = array_values($ar); + $f = explode('/', $format); + $i = 0; + + foreach ($f as $f_value) { + $repeater = intval(substr($f_value, 1)); + + if ($repeater == 0) { + $repeater = 1; + } + if ($f_value{1} == '*') { + $repeater = count($ar) - $i; + } + if ($f_value{0} != 'd') { + $i += $repeater; + continue; + } + + $j = $i + $repeater; + + for ($a = $i; $a < $j; ++$a) { + $p = pack('d', $vals[$i]); + $p = strrev($p); + list($vals[$i]) = array_values(unpack('d1d', $p)); + ++$i; + } + } + + $a = 0; + foreach ($ar as $ar_key => $ar_value) { + $ar[$ar_key] = $vals[$a]; + ++$a; + } + return $ar; + } + return unpack($format, $data); + } + + /** + * Convert IPv6 into long integer. + */ + private function ipv6Numeric($ipv6) { + +if ( extension_loaded('gmp') ): + + $ip_n = inet_pton($ipv6); + $bits = 15; + + // 16 x 8 bit = 128bit + $ipv6long = 0; + + while ($bits >= 0) { + $bin = sprintf("%08b", (ord($ip_n[$bits]))); + + if ($ipv6long) { + $ipv6long = $bin . $ipv6long; + } + else { + $ipv6long = $bin; + } + $bits--; + } + return gmp_strval(gmp_init($ipv6long, 2), 10); + +else: + + /** + * Added for IP Geo Block (code from ip2location.class.php) + */ + $n = substr_count($ipv6, ':'); + + if($n < 7){ + $expanded = '::'; + + while($n < 7){ + $expanded .= ':'; + $n++; + } + $ipv6 = preg_replace('/::/', $expanded, $ipv6); + } + + $subLoc = 8; + $ipv6No = '0'; + + foreach(preg_split('/:/', $ipv6) as $ipSub){ + $subLoc--; + + if($ipSub == '') continue; + $ipv6No = bcadd( $ipv6No, bcmul(hexdec($ipSub), bcpow('65536', $subLoc))); // hexdec('0x10000') + } + return $ipv6No; + +endif; + } + + /** + * Validate IP address. + */ + private function validate($ip) { + if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { + return 4; + } + + if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { + return 6; + } + + return FALSE; + } + + /** + * Core function to lookup geolocation data. + */ + public function lookup($ip, $fields = self::ALL) { + $this->result->ipAddress = $ip; + + if (($version = $this->validate($ip)) === FALSE) { + foreach ($this->result as &$obj) { + if ($obj) { + continue; + } + + $obj = self::INVALID_IP_ADDRESS; + } + + return $this->result; + } + + if ($version == 4) { + return $this->ipv4Lookup($ip, $fields); + } + + if ($version == 6) { + return $this->ipv6Lookup($ip, $fields); + } + } + + /** + * Lookup for IPv4 records. + */ + private function ipv4Lookup($ip, $fields) { + $keys = array_keys($this->columns); + + $base_address = $this->database['ipv4_base_address']; + $high = $this->database['ipv4_count']; + $ip_number = sprintf('%u', ip2long($ip)); + $ip_number = ($ip_number >= 4294967295) ? ($ip_number - 1) : $ip_number; + $this->result->ipNumber = $ip_number; + + $low = 0; + $mid = 0; + $ip_from = 0; + $ip_to = 0; + + while ($low <= $high) { + $mid = (int) (($low + $high) / 2); + $ip_from = $this->readByte($base_address + $mid * ($this->database['column'] * 4), 32); + $ip_to = $this->readByte($base_address + ($mid + 1) * ($this->database['column'] * 4), 32); + + if ($ip_from < 0) { + $ip_from += pow(2, 32); + } + + if ($ip_to < 0) { + $ip_to += pow(2, 32); + } + + if (($ip_number >= $ip_from) && ($ip_number < $ip_to)) { + $return = self::FIELD_NOT_SUPPORTED; + $pointer = $base_address + ($mid * $this->database['column'] * 4); + + switch ($fields) { + case self::COUNTRY_CODE: + case self::REGION_NAME: + case self::CITY_NAME: + case self::ISP: + case self::DOMAIN_NAME: + case self::ZIP_CODE: + case self::TIME_ZONE: + case self::NET_SPEED: + case self::IDD_CODE: + case self::AREA_CODE: + case self::WEATHER_STATION_CODE: + case self::WEATHER_STATION_NAME: + case self::MCC: + case self::MNC: + case self::MOBILE_CARRIER_NAME: + case self::ELEVATION: + if($this->columns[$keys[$fields - 1]][$this->database['type']] != 0){ + $return = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[$fields - 1]][$this->database['type']] - 1), '32'), 'string', TRUE); + } + + break; + + case self::COUNTRY_NAME: + if($this->columns[$keys[$fields - 1]][$this->database['type']] != 0){ + $return = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[$fields - 1]][$this->database['type']] - 1), '32') + 3, 'string', TRUE); + } + + break; + + case self::LATITUDE: + case self::LONGITUDE: + if($this->columns[$keys[$fields - 1]][$this->database['type']] != 0){ + $return = $this->readByte($pointer + 4 * ($this->columns[$keys[$fields - 1]][$this->database['type']] - 1), 'float', TRUE); + } + + break; + + case self::USAGE_TYPE: + if($this->columns[$keys[$fields - 1]][$this->database['type']] != 0){ + $return = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[$fields - 1]][$this->database['type']] - 1), '32'), 'string', TRUE); + } + + break; + + default: + $this->result->regionName = $this->result->cityName = $this->result->latitude = $this->result->longitude = $this->result->isp = $this->result->domainName = $this->result->zipCode = $this->result->timeZone = $this->result->netSpeed = $this->result->iddCode = $this->result->areaCode = $this->result->weatherStationCode = $this->result->weatherStationName = $this->result->mcc = $this->result->mnc = $this->result->mobileCarrierName = $this->result->elevation = $this->result->usageType = self::FIELD_NOT_SUPPORTED; + + $this->result->countryCode = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::COUNTRY_CODE - 1]][$this->database['type']] - 1), '32'), 'string', TRUE); + + $this->result->countryName = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::COUNTRY_NAME - 1]][$this->database['type']] - 1), '32') + 3, 'string', TRUE); + + if ($this->columns[$keys[self::REGION_NAME - 1]][$this->database['type']] != 0) { + $this->result->regionName = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::REGION_NAME - 1]][$this->database['type']] - 1), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::CITY_NAME - 1]][$this->database['type']] != 0) { + $this->result->cityName = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::CITY_NAME - 1]][$this->database['type']] - 1), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::LATITUDE - 1]][$this->database['type']] != 0) { + $this->result->latitude = $this->readByte($pointer + 4 * ($this->columns[$keys[self::LATITUDE - 1]][$this->database['type']] - 1), 'float', TRUE); + } + + if ($this->columns[$keys[self::LONGITUDE - 1]][$this->database['type']] != 0) { + $this->result->longitude = $this->readByte($pointer + 4 * ($this->columns[$keys[self::LONGITUDE - 1]][$this->database['type']] - 1), 'float', TRUE); + } + + if ($this->columns[$keys[self::ISP - 1]][$this->database['type']] != 0) { + $this->result->isp = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::ISP - 1]][$this->database['type']] - 1), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::DOMAIN_NAME - 1]][$this->database['type']] != 0) { + $this->result->domainName = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::DOMAIN_NAME - 1]][$this->database['type']] - 1), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::ZIP_CODE - 1]][$this->database['type']] != 0) { + $this->result->zipCode = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::ZIP_CODE - 1]][$this->database['type']] - 1), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::TIME_ZONE - 1]][$this->database['type']] != 0) { + $this->result->timeZone = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::TIME_ZONE - 1]][$this->database['type']] - 1), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::NET_SPEED - 1]][$this->database['type']] != 0) { + $this->result->netSpeed = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::NET_SPEED - 1]][$this->database['type']] - 1), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::IDD_CODE - 1]][$this->database['type']] != 0) { + $this->result->iddCode = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::IDD_CODE - 1]][$this->database['type']] - 1), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::AREA_CODE - 1]][$this->database['type']] != 0) { + $this->result->areaCode = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::AREA_CODE - 1]][$this->database['type']] - 1), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::WEATHER_STATION_CODE - 1]][$this->database['type']] != 0) { + $this->result->weatherStationCode = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::WEATHER_STATION_CODE - 1]][$this->database['type']] - 1), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::WEATHER_STATION_NAME - 1]][$this->database['type']] != 0) { + $this->result->weatherStationName = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::WEATHER_STATION_NAME - 1]][$this->database['type']] - 1), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::MCC - 1]][$this->database['type']] != 0) { + $this->result->mcc = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::MCC - 1]][$this->database['type']] - 1), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::MNC - 1]][$this->database['type']] != 0) { + $this->result->mnc = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::MNC - 1]][$this->database['type']] - 1), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::MOBILE_CARRIER_NAME - 1]][$this->database['type']] != 0) { + $this->result->mobileCarrierName = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::MOBILE_CARRIER_NAME - 1]][$this->database['type']] - 1), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::ELEVATION - 1]][$this->database['type']] != 0) { + $this->result->elevation = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::ELEVATION - 1]][$this->database['type']] - 1), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::USAGE_TYPE - 1]][$this->database['type']] != 0) { + $this->result->usageType = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::USAGE_TYPE - 1]][$this->database['type']] - 1), '32'), 'string', TRUE); + } + + return $this->result; + } + return $return; + } + else { + if ($ip_number < $ip_from) { + $high = $mid - 1; + } + else { + $low = $mid + 1; + } + } + } + } + + /** + * Lookup for IPv6 records. + */ + private function ipv6Lookup($ip, $fields) { + $keys = array_keys($this->columns); + + $base_address = $this->database['ipv6_base_address']; + $ip_number = $this->ipv6Numeric($ip); + $this->result->ipNumber = $ip_number; + + $low = 0; + $mid = 0; + $high = $this->database['ipv6_count']; + $ip_from = 0; + $ip_to = 0; + + while ($low <= $high) { + $mid = (int) (($low + $high) / 2); + $ip_from = $this->readByte($base_address + $mid * ($this->database['column'] * 4 + 12), 128); + $ip_to = $this->readByte($base_address + ($mid + 1) * ($this->database['column'] * 4 + 12), 128); + + if ($ip_from < 0) { + $ip_from += pow(2, 32); + } + + if ($ip_to < 0) { + $ip_to += pow(2, 32); + } + + if (($ip_number >= $ip_from) && ($ip_number < $ip_to)) { + $return = ''; + $pointer = $base_address + ($mid * ($this->database['column'] * 4 + 12)) + 8; + + switch ($fields) { + case self::COUNTRY_CODE: + case self::REGION_NAME: + case self::CITY_NAME: + case self::ISP: + case self::DOMAIN_NAME: + case self::ZIP_CODE: + case self::TIME_ZONE: + case self::NET_SPEED: + case self::IDD_CODE: + case self::AREA_CODE: + case self::WEATHER_STATION_CODE: + case self::WEATHER_STATION_NAME: + case self::MCC: + case self::MNC: + case self::MOBILE_CARRIER_NAME: + case self::ELEVATION: + $return = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[$fields - 1]][$this->database['type']]), '32'), 'string', TRUE); + + break; + + case self::COUNTRY_NAME: + $return = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[$fields - 1]][$this->database['type']]), '32') + 3, 'string', TRUE); + + break; + + case self::LATITUDE: + case self::LONGITUDE: + $return = $this->readByte($pointer + 4 * ($this->columns[$keys[$fields - 1]][$this->database['type']]), 'float', TRUE); + + break; + + case self::USAGE_TYPE: + $return = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[$fields - 1]][$this->database['type']]), '32'), 'string', TRUE); + + break; + + default: + $this->result->regionName = $this->result->cityName = $this->result->latitude = $this->result->longitude = $this->result->isp = $this->result->domainName = $this->result->zipCode = $this->result->timeZone = $this->result->netSpeed = $this->result->iddCode = $this->result->areaCode = $this->result->weatherStationCode = $this->result->weatherStationName = $this->result->mcc = $this->result->mnc = $this->result->mobileCarrierName = $this->result->elevation = $this->result->usageType = self::FIELD_NOT_SUPPORTED; + + if ($this->columns[$keys[self::COUNTRY_CODE - 1]][$this->database['type']] != 0) { + $this->result->countryCode = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::COUNTRY_CODE - 1]][$this->database['type']]), '32'), 'string', TRUE); + + $this->result->countryName = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::COUNTRY_CODE - 1]][$this->database['type']]), '32') + 3, 'string', TRUE); + } + + if ($this->columns[$keys[self::REGION_NAME - 1]][$this->database['type']] != 0) { + $this->result->regionName = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::REGION_NAME - 1]][$this->database['type']]), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::CITY_NAME - 1]][$this->database['type']] != 0) { + $this->result->cityName = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::CITY_NAME - 1]][$this->database['type']]), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::LATITUDE - 1]][$this->database['type']] != 0) { + $this->result->latitude = $this->readByte($pointer + 4 * ($this->columns[$keys[self::LATITUDE - 1]][$this->database['type']]), 'float', TRUE); + } + + if ($this->columns[$keys[self::LONGITUDE - 1]][$this->database['type']] != 0) { + $this->result->longitude = $this->readByte($pointer + 4 * ($this->columns[$keys[self::LONGITUDE - 1]][$this->database['type']]), 'float', TRUE); + } + + if ($this->columns[$keys[self::ISP - 1]][$this->database['type']] != 0) { + $this->result->isp = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::ISP - 1]][$this->database['type']]), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::DOMAIN_NAME - 1]][$this->database['type']] != 0) { + $this->result->domainName = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::DOMAIN_NAME - 1]][$this->database['type']]), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::ZIP_CODE - 1]][$this->database['type']] != 0) { + $this->result->zipCode = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::ZIP_CODE - 1]][$this->database['type']]), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::TIME_ZONE - 1]][$this->database['type']] != 0) { + $this->result->timeZone = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::TIME_ZONE - 1]][$this->database['type']]), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::NET_SPEED - 1]][$this->database['type']] != 0) { + $this->result->netSpeed = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::NET_SPEED - 1]][$this->database['type']]), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::IDD_CODE - 1]][$this->database['type']] != 0) { + $this->result->iddCode = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::IDD_CODE - 1]][$this->database['type']]), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::AREA_CODE - 1]][$this->database['type']] != 0) { + $this->result->areaCode = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::AREA_CODE - 1]][$this->database['type']]), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::WEATHER_STATION_CODE - 1]][$this->database['type']] != 0) { + $this->result->weatherStationCode = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::WEATHER_STATION_CODE - 1]][$this->database['type']]), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::WEATHER_STATION_NAME - 1]][$this->database['type']] != 0) { + $this->result->weatherStationName = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::WEATHER_STATION_NAME - 1]][$this->database['type']]), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::MCC - 1]][$this->database['type']] != 0) { + $this->result->mcc = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::MCC - 1]][$this->database['type']]), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::MNC - 1]][$this->database['type']] != 0) { + $this->result->mnc = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::MNC - 1]][$this->database['type']]), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::MOBILE_CARRIER_NAME - 1]][$this->database['type']] != 0) { + $this->result->mobileCarrierName = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::MOBILE_CARRIER_NAME - 1]][$this->database['type']]), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::ELEVATION - 1]][$this->database['type']] != 0) { + $this->result->elevation = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::ELEVATION - 1]][$this->database['type']]), '32'), 'string', TRUE); + } + + if ($this->columns[$keys[self::USAGE_TYPE - 1]][$this->database['type']] != 0) { + $this->result->usageType = $this->readByte($this->readByte($pointer + 4 * ($this->columns[$keys[self::USAGE_TYPE - 1]][$this->database['type']]), '32'), 'string', TRUE); + } + + return $this->result; + } + return $return; + } + else { + if ($ip_number < $ip_from) { + $high = $mid - 1; + } + else { + $low = $mid + 1; + } + } + } + } +} +?> \ No newline at end of file diff --git a/wp/wp-content/ip-geo-api/ip2location/bcmath.php b/wp/wp-content/ip-geo-api/ip2location/bcmath.php new file mode 100644 index 00000000..c70cf757 --- /dev/null +++ b/wp/wp-content/ip-geo-api/ip2location/bcmath.php @@ -0,0 +1,216 @@ +9) $Output[$i+1]=1; + } + + // convert the array to string and reverse it + $Output=strrev(implode($Output)); + + // substring the decimal digits from the result, pad if necessary (if $Scale > amount of actual decimals) + // next, since actual zero values can cause a problem with the substring values, if so, just simply give '0' + // next, append the decimal value, if $Scale is defined, and return result +// $Decimal=str_pad(substr($Output,-$DLen,$Scale),$Scale,'0'); +// $Output=(($MLen-$DLen<1)?'0':substr($Output,0,-$DLen)); +// $Output.=(($Scale>0)?".{$Decimal}":''); +// return($Output); + return( $Output ? $Output : '0' ); +} +endif; // ! function_exists('bcadd') + +if ( ! function_exists('bcsub') ): +/** + * bcsub - Subtract one arbitrary precision number from another. + * @link https://php.net/manual/en/function.bcsub.php + */ +function bcsub($Num1='0',$Num2='0',$Scale=null) { + // check if they're valid positive numbers, extract the whole numbers and decimals + if(!preg_match("/^\+?(\d+)(\.\d+)?$/",$Num1,$Tmp1)|| + !preg_match("/^\+?(\d+)(\.\d+)?$/",$Num2,$Tmp2)) return('0'); + + // this is where the result is stored + $Output=array(); + + // remove ending zeroes from decimals and remove point + $Dec1=isset($Tmp1[2])?rtrim(substr($Tmp1[2],1),'0'):''; + $Dec2=isset($Tmp2[2])?rtrim(substr($Tmp2[2],1),'0'):''; + + // calculate the longest length of decimals + $DLen=max(strlen($Dec1),strlen($Dec2)); + + // if $Scale is null, automatically set it to the amount of decimal places for accuracy + if($Scale==null) $Scale=$DLen; + + // remove leading zeroes and reverse the whole numbers, then append padded decimals on the end + $Num1=strrev(ltrim($Tmp1[1],'0').str_pad($Dec1,$DLen,'0')); + $Num2=strrev(ltrim($Tmp2[1],'0').str_pad($Dec2,$DLen,'0')); + + // calculate the longest length we need to process + $MLen=max(strlen($Num1),strlen($Num2)); + + // pad the two numbers so they are of equal length (both equal to $MLen) + $Num1=str_pad($Num1,$MLen,'0'); + $Num2=str_pad($Num2,$MLen,'0'); + + // process each digit, keep the ones, carry the tens (remainders) + for($i=0;$i<$MLen;$i++) { + $Sum=((int)$Num1{$i}-(int)$Num2{$i}); + if(isset($Output[$i])) $Sum+=$Output[$i]; + $Output[$i]=$Sum%10; + if($Sum>9) $Output[$i+1]=1; + } + + // convert the array to string and reverse it + $Output=strrev(implode($Output)); + + // substring the decimal digits from the result, pad if necessary (if $Scale > amount of actual decimals) + // next, since actual zero values can cause a problem with the substring values, if so, just simply give '0' + // next, append the decimal value, if $Scale is defined, and return result +// $Decimal=str_pad(substr($Output,-$DLen,$Scale),$Scale,'0'); +// $Output=(($MLen-$DLen<1)?'0':substr($Output,0,-$DLen)); +// $Output.=(($Scale>0)?".{$Decimal}":''); +// return($Output); + return( $Output ? $Output : '0' ); +} +endif; // ! function_exists('bcsub') + +if ( ! function_exists('bcmul') ): +/** + * bcmul - Multiply two arbitrary precision numbers. + * @link https://php.net/manual/en/function.bcmul.php + */ +function bcmul($Num1='0',$Num2='0') { + // check if they're both plain numbers + if(!preg_match("/^\d+$/",$Num1)||!preg_match("/^\d+$/",$Num2)) return(0); + + // remove zeroes from beginning of numbers + for($i=0;$i1&&$Rema2{0}=='0') $Rema2=substr($Rema2,1); + + return($Rema2); +} +endif; // ! function_exists('bcmul') + +if ( ! function_exists('bcpow') ): +/** + * bcpow - Raise an arbitrary precision number to another. + * @link https://php.net/manual/en/function.bcmul.php + */ +function bcpow($num, $power) { + $awnser = "1"; + while ($power) { + $awnser = bcmul($awnser, $num, 100); + $power = bcsub($power, "1"); + } + return rtrim($awnser, '0.'); +} +endif; // ! function_exists('bcpow') + +endif; // extension_loaded('gmp') +?> \ No newline at end of file diff --git a/wp/wp-content/ip-geo-api/ip2location/class-ip2location.php b/wp/wp-content/ip-geo-api/ip2location/class-ip2location.php new file mode 100644 index 00000000..09405b3c --- /dev/null +++ b/wp/wp-content/ip-geo-api/ip2location/class-ip2location.php @@ -0,0 +1,226 @@ + + * @license GPL-3.0 + * @link https://www.ipgeoblock.com/ + * @copyright 2013-2018 tokkonopapa + */ + +class_exists( 'IP_Geo_Block_API', FALSE ) or die; + +/** + * URL and Path for IP2Location database + * + */ +define( 'IP_GEO_BLOCK_IP2LOC_IPV4_DAT', 'IP2LOCATION-LITE-DB1.BIN' ); +define( 'IP_GEO_BLOCK_IP2LOC_IPV6_DAT', 'IP2LOCATION-LITE-DB1.IPV6.BIN' ); +define( 'IP_GEO_BLOCK_IP2LOC_IPV4_ZIP', 'https://download.ip2location.com/lite/IP2LOCATION-LITE-DB1.BIN.ZIP' ); +define( 'IP_GEO_BLOCK_IP2LOC_IPV6_ZIP', 'https://download.ip2location.com/lite/IP2LOCATION-LITE-DB1.IPV6.BIN.ZIP' ); +define( 'IP_GEO_BLOCK_IP2LOC_DOWNLOAD', 'https://lite.ip2location.com/database/ip-country' ); + +/** + * Class for IP2Location + * + * URL : https://www.ip2location.com/ + * Term of use : https://www.ip2location.com/terms + * Licence fee : Creative Commons Attribution-ShareAlike 4.0 Unported License + * Input type : IP address (IPv4) + * Output type : array + */ +class IP_Geo_Block_API_IP2Location extends IP_Geo_Block_API { + protected $transform_table = array( + 'countryCode' => 'countryCode', + 'countryName' => 'countryName', + 'regionName' => 'regionName', + 'cityName' => 'cityName', + 'latitude' => 'latitude', + 'longitude' => 'longitude', + ); + + public function get_location( $ip, $args = array() ) { + $settings = IP_Geo_Block::get_option(); + + if ( ! extension_loaded('bcmath') ) + require_once( 'bcmath.php' ); + + if ( ! class_exists( 'IP2Location', FALSE ) ) + require_once( 'IP2Location.php' ); + + // setup database file and function + if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) ) { + $type = IP_GEO_BLOCK_API_TYPE_IPV4; + $file = apply_filters( + IP_Geo_Block::PLUGIN_NAME . '-ip2location-path', + empty( $settings['IP2Location']['ipv4_path'] ) ? + $this->get_db_dir() . IP_GEO_BLOCK_IP2LOC_IPV4_DAT : + $settings['IP2Location']['ipv4_path'] + ); + } + + elseif ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) ) { + $type = IP_GEO_BLOCK_API_TYPE_IPV6; + $file = empty( $settings['IP2Location']['ipv6_path'] ) ? + $this->get_db_dir() . IP_GEO_BLOCK_IP2LOC_IPV6_DAT : + $settings['IP2Location']['ipv6_path']; + } + + else { + return array( 'errorMessage' => 'illegal format' ); + } + + try { + $geo = new IP2Location( $file ); + if ( $geo && ( $geo->get_database_type() & $type ) ) { + $data = $geo->lookup( $ip ); + $geo->close(); // @since 1.1.6 + + $res = array(); + + foreach ( $this->transform_table as $key => $val ) { + if ( isset( $data->$val ) && IP2Location::FIELD_NOT_SUPPORTED !== $data->$val ) + $res[ $key ] = $data->$val; + } + + if ( isset( $res['countryCode'] ) && strlen( $res['countryCode'] ) === 2 ) + return $res; + } + } + + catch (Exception $e) { + return array( 'errorMessage' => $e->getMessage() ); + } + + return array( 'errorMessage' => 'Not supported' ); + } + + private function get_db_dir() { + return IP_Geo_Block_Util::slashit( apply_filters( + IP_Geo_Block::PLUGIN_NAME . '-ip2location-dir', dirname( __FILE__ ) + ) ); + } + + public function download( &$db, $args ) { + $dir = $this->get_db_dir(); + + // IPv4 + if ( $dir !== dirname( $db['ipv4_path'] ) . '/' ) + $db['ipv4_path'] = $dir . IP_GEO_BLOCK_IP2LOC_IPV4_DAT; + + $res['ipv4'] = IP_Geo_Block_Util::download_zip( + apply_filters( + IP_Geo_Block::PLUGIN_NAME . '-ip2location-zip-ipv4', + IP_GEO_BLOCK_IP2LOC_IPV4_ZIP + ), + $args, + $db['ipv4_path'], + $db['ipv4_last'] + ); + + // IPv6 + if ( $dir !== dirname( $db['ipv6_path'] ) . '/' ) + $db['ipv6_path'] = $dir . IP_GEO_BLOCK_IP2LOC_IPV6_DAT; + + $res['ipv6'] = IP_Geo_Block_Util::download_zip( + apply_filters( + IP_Geo_Block::PLUGIN_NAME . '-ip2location-zip-ipv6', + IP_GEO_BLOCK_IP2LOC_IPV6_ZIP + ), + $args, + $db['ipv6_path'], + $db['ipv6_last'] + ); + + ! empty( $res['ipv4']['filename'] ) and $db['ipv4_path'] = $res['ipv4']['filename']; + ! empty( $res['ipv6']['filename'] ) and $db['ipv6_path'] = $res['ipv6']['filename']; + ! empty( $res['ipv4']['modified'] ) and $db['ipv4_last'] = $res['ipv4']['modified']; + ! empty( $res['ipv6']['modified'] ) and $db['ipv6_last'] = $res['ipv6']['modified']; + + return $res; + } + + public function get_attribution() { + return 'This site or product includes IP2Location LITE data available from https://lite.ip2location.com. (CC BY-SA 4.0)'; + } + + public function add_settings_field( $field, $section, $option_slug, $option_name, $options, $callback, $str_path, $str_last ) { + require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php'; + $fs = IP_Geo_Block_FS::init( __FILE__ . '(' . __FUNCTION__ . ')' ); + + $db = $options[ $field ]; + $dir = $this->get_db_dir(); + $msg = __( 'Database file does not exist.', 'ip-geo-block' ); + + // IPv4 + if ( $dir !== dirname( $db['ipv4_path'] ) . '/' ) + $db['ipv4_path'] = $dir . IP_GEO_BLOCK_IP2LOC_IPV4_DAT; + + // filter database file + $db['ipv4_path'] = apply_filters( IP_Geo_Block::PLUGIN_NAME . '-ip2location-path', $db['ipv4_path'] ); + + if ( $fs->exists( $db['ipv4_path'] ) ) + $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['ipv4_last'] ) ); + else + $date = $msg; + + add_settings_field( + $option_name . $field . '_ipv4', + "$field $str_path
(IPv4)", + $callback, + $option_slug, + $section, + array( + 'type' => 'text', + 'option' => $option_name, + 'field' => $field, + 'sub-field' => 'ipv4_path', + 'value' => $db['ipv4_path'], + 'disabled' => TRUE, + 'after' => '

' . $date . '

', + ) + ); + + // IPv6 + if ( $dir !== dirname( $db['ipv6_path'] ) . '/' ) + $db['ipv6_path'] = $dir . IP_GEO_BLOCK_IP2LOC_IPV6_DAT; + + // filter database file + $db['ipv6_path'] = apply_filters( IP_Geo_Block::PLUGIN_NAME . '-ip2location-path-ipv6', $db['ipv6_path'] ); + + if ( $fs->exists( $db['ipv6_path'] ) ) + $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['ipv6_last'] ) ); + else + $date = $msg; + + add_settings_field( + $option_name . $field . '_ipv6', + "$field $str_path
(IPv6)", + $callback, + $option_slug, + $section, + array( + 'type' => 'text', + 'option' => $option_name, + 'field' => $field, + 'sub-field' => 'ipv6_path', + 'value' => $db['ipv6_path'], + 'disabled' => TRUE, + 'after' => '

' . $date . '

', + ) + ); + } +} + +/** + * Register API + * + */ +IP_Geo_Block_Provider::register_addon( array( + 'IP2Location' => array( + 'key' => NULL, + 'type' => 'IPv4, IPv6 / LGPLv3', + 'link' => 'https://lite.ip2location.com/ (IPv4, IPv6 / LGPLv3)', + ), +) ); diff --git a/wp/wp-content/ip-geo-api/ip2location/index.php b/wp/wp-content/ip-geo-api/ip2location/index.php new file mode 100644 index 00000000..62200328 --- /dev/null +++ b/wp/wp-content/ip-geo-api/ip2location/index.php @@ -0,0 +1,2 @@ + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/wp/wp-content/ip-geo-api/maxmind/class-maxmind-geolite2.php b/wp/wp-content/ip-geo-api/maxmind/class-maxmind-geolite2.php new file mode 100644 index 00000000..a44ab400 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/class-maxmind-geolite2.php @@ -0,0 +1,234 @@ + + * @license GPL-3.0 + * @link https://www.ipgeoblock.com/ + * @copyright 2013-2018 tokkonopapa + */ + +class_exists( 'IP_Geo_Block_API', FALSE ) or die; + +/** + * URL and Path for Maxmind GeoLite2 database + * + * https://www.maxmind.com/en/open-source-data-and-api-for-ip-geolocation + * https://stackoverflow.com/questions/9416508/php-untar-gz-without-exec + * https://php.net/manual/phardata.extractto.php + */ +define( 'IP_GEO_BLOCK_GEOLITE2_DB_IP', 'GeoLite2-Country.mmdb' ); +define( 'IP_GEO_BLOCK_GEOLITE2_DB_ASN', 'GeoLite2-ASN.mmdb' ); +define( 'IP_GEO_BLOCK_GEOLITE2_ZIP_IP', 'https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz' ); +define( 'IP_GEO_BLOCK_GEOLITE2_ZIP_ASN', 'https://geolite.maxmind.com/download/geoip/database/GeoLite2-ASN.tar.gz' ); +define( 'IP_GEO_BLOCK_GEOLITE2_DOWNLOAD', 'https://dev.maxmind.com/geoip/geoip2/geolite2/' ); + +/** + * Class for Maxmind + * + * URL : https://dev.maxmind.com/geoip/geoip2/ + * Term of use : https://dev.maxmind.com/geoip/geoip2/geolite2/#License + * Licence fee : Creative Commons Attribution-ShareAlike 4.0 International License + * Input type : IP address (IPv4, IPv6) + * Output type : array + */ +class IP_Geo_Block_API_Geolite2 extends IP_Geo_Block_API { + + private function location_country( $record ) { + return array( 'countryCode' => $record->country->isoCode ); + } + + private function location_city( $record ) { + return array( + 'countryCode' => $record->country->isoCode, + 'countryName' => $record->country->names['en'], + 'cityName' => $record->city->names['en'], + 'latitude' => $record->location->latitude, + 'longitude' => $record->location->longitude, + ); + } + + private function location_asnumber( $record ) { + return array( 'ASN' => 'AS' . $record->autonomousSystemNumber ); + } + + public function get_location( $ip, $args = array() ) { + if ( ! filter_var( $ip, FILTER_VALIDATE_IP ) ) + return array( 'errorMessage' => 'illegal format' ); + + require IP_GEO_BLOCK_PATH . 'wp-content/ip-geo-api/maxmind/vendor/autoload.php'; + + // setup database file and function + $settings = IP_Geo_Block::get_option(); + + if ( empty( $args['ASN'] ) ) { + $file = apply_filters( IP_Geo_Block::PLUGIN_NAME . '-geolite2-path', + ( ! empty( $settings['Geolite2']['ip_path'] ) ? + $settings['Geolite2']['ip_path'] : + $this->get_db_dir() . IP_GEO_BLOCK_GEOLITE2_DB_IP + ) + ); + + try { + $reader = new GeoIp2\Database\Reader( $file ); + if ( 'GeoLite2-Country' === $reader->metadata()->databaseType ) + $res = $this->location_country( $reader->country( $ip ) ); + else + $res = $this->location_city( $reader->city( $ip ) ); + } catch ( Exception $e ) { + $res = array( 'countryCode' => NULL ); + } + } + + else { + $file = ! empty( $settings['Geolite2']['asn_path'] ) ? $settings['Geolite2']['asn_path'] : $this->get_db_dir() . IP_GEO_BLOCK_GEOLITE2_DB_ASN; + try { + $reader = new GeoIp2\Database\Reader( $file ); + $res = $this->location_asnumber( $reader->asn( $ip ) ); + } catch ( Exception $e ) { + $res = array( 'ASN' => NULL ); + } + } + + return $res; + } + + private function get_db_dir() { + return IP_Geo_Block_Util::slashit( apply_filters( + IP_Geo_Block::PLUGIN_NAME . '-geolite2-dir', dirname( __FILE__ ) . '/GeoLite2' + ) ); + } + + public function download( &$db, $args ) { + $dir = $this->get_db_dir(); + + // IPv4 & IPv6 + if ( $dir !== dirname( $db['ip_path'] ) . '/' ) + $db['ip_path'] = $dir . IP_GEO_BLOCK_GEOLITE2_DB_IP; + + // filter database file + $db['ip_path'] = apply_filters( IP_Geo_Block::PLUGIN_NAME . '-geolite2-path', $db['ip_path'] ); + + $res['ip'] = IP_Geo_Block_Util::download_zip( + apply_filters( + IP_Geo_Block::PLUGIN_NAME . '-geolite2-zip-ip', + IP_GEO_BLOCK_GEOLITE2_ZIP_IP + ), + $args + array( 'method' => 'GET' ), + array( $db['ip_path'], 'COPYRIGHT.txt', 'LICENSE.txt' ), // 1st parameter should include absolute path + $db['ip_last'] + ); + + ! empty( $res['ip']['filename'] ) and $db['ip_path'] = $res['ip']['filename']; + ! empty( $res['ip']['modified'] ) and $db['ip_last'] = $res['ip']['modified']; + +if ( ! empty( $db['use_asn'] ) || ! empty( $db['asn_path'] ) ) : + + // ASN for IPv4 and IPv6 + if ( $dir !== dirname( $db['asn_path'] ) . '/' ) + $db['asn_path'] = $dir . IP_GEO_BLOCK_GEOLITE2_DB_ASN; + + $res['asn'] = IP_Geo_Block_Util::download_zip( + apply_filters( + IP_Geo_Block::PLUGIN_NAME . '-geolite2-zip-asn', + IP_GEO_BLOCK_GEOLITE2_ZIP_ASN + ), + $args + array( 'method' => 'GET' ), + array( $db['asn_path'], 'COPYRIGHT.txt', 'LICENSE.txt' ), // 1st parameter should include absolute path + $db['asn_last'] + ); + + ! empty( $res['asn']['filename'] ) and $db['asn_path'] = $res['asn']['filename']; + ! empty( $res['asn']['modified'] ) and $db['asn_last'] = $res['asn']['modified']; + +endif; // ! empty( $db['use_asn'] ) || ! empty( $db['asn_path'] ) + + return $res; + } + + public function get_attribution() { + return 'This product includes GeoLite2 data created by MaxMind, available from https://www.maxmind.com. (CC BY-SA 4.0)'; + } + + public function add_settings_field( $field, $section, $option_slug, $option_name, $options, $callback, $str_path, $str_last ) { + require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php'; + $fs = IP_Geo_Block_FS::init( __FILE__ . '(' . __FUNCTION__ . ')' ); + + $db = $options[ $field ]; + $dir = $this->get_db_dir(); + $msg = __( 'Database file does not exist.', 'ip-geo-block' ); + + // IPv4 & IPv6 + if ( $dir !== dirname( $db['ip_path'] ) . '/' ) + $db['ip_path'] = $dir . IP_GEO_BLOCK_GEOLITE2_DB_IP; + + // filter database file + $db['ip_path'] = apply_filters( IP_Geo_Block::PLUGIN_NAME . '-geolite2-path', $db['ip_path'] ); + + if ( $fs->exists( $db['ip_path'] ) ) + $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['ip_last'] ) ); + else + $date = $msg; + + add_settings_field( + $option_name . $field . '_ip', + "$field $str_path
(IPv4 and IPv6)", + $callback, + $option_slug, + $section, + array( + 'type' => 'text', + 'option' => $option_name, + 'field' => $field, + 'sub-field' => 'ip_path', + 'value' => $db['ip_path'], + 'disabled' => TRUE, + 'after' => '

' . $date . '

', + ) + ); + +if ( ! empty( $db['use_asn'] ) || ! empty( $db['asn_path'] ) ) : + + // ASN for IPv4 and IPv6 + if ( $dir !== dirname( $db['asn_path'] ) . '/' ) + $db['asn_path'] = $dir . IP_GEO_BLOCK_GEOLITE2_DB_ASN; + + if ( $fs->exists( $db['asn_path'] ) ) + $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['asn_last'] ) ); + else + $date = $msg; + + add_settings_field( + $option_name . $field . '_asn', + "$field $str_path
(ASN for IPv4 and IPv6)", + $callback, + $option_slug, + $section, + array( + 'type' => 'text', + 'option' => $option_name, + 'field' => $field, + 'sub-field' => 'asn_path', + 'value' => $db['asn_path'], + 'disabled' => TRUE, + 'after' => '

' . $date . '

', + ) + ); + +endif; // ! empty( $db['use_asn'] ) || ! empty( $db['asn_path'] ) + + } +} + +/** + * Register API + * + */ +IP_Geo_Block_Provider::register_addon( array( + 'Geolite2' => array( + 'key' => NULL, + 'type' => 'IPv4, IPv6 / Apache License, Version 2.0', + 'link' => 'https://dev.maxmind.com/geoip/geoip2/ (IPv4, IPv6 / Apache License, Version 2.0)', + ), +) ); diff --git a/wp/wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php b/wp/wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php new file mode 100644 index 00000000..7c44dd6f --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/class-maxmind-legacy.php @@ -0,0 +1,383 @@ + + * @license GPL-3.0 + * @link https://www.ipgeoblock.com/ + * @copyright 2013-2018 tokkonopapa + */ + +class_exists( 'IP_Geo_Block_API', FALSE ) or die; + +/** + * URL and Path for Maxmind GeoLite database + * + */ +define( 'IP_GEO_BLOCK_MAXMIND_IPV4_DAT', 'GeoIP.dat' ); +define( 'IP_GEO_BLOCK_MAXMIND_IPV6_DAT', 'GeoIPv6.dat' ); +define( 'IP_GEO_BLOCK_MAXMIND_ASN4_DAT', 'GeoIPASNum.dat' ); +define( 'IP_GEO_BLOCK_MAXMIND_ASN6_DAT', 'GeoIPASNumv6.dat' ); + +define( 'IP_GEO_BLOCK_MAXMIND_IPV4_ZIP', 'https://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz' ); +define( 'IP_GEO_BLOCK_MAXMIND_IPV6_ZIP', 'https://geolite.maxmind.com/download/geoip/database/GeoIPv6.dat.gz' ); +define( 'IP_GEO_BLOCK_MAXMIND_ASN4_ZIP', 'https://download.maxmind.com/download/geoip/database/asnum/GeoIPASNum.dat.gz' ); +define( 'IP_GEO_BLOCK_MAXMIND_ASN6_ZIP', 'https://download.maxmind.com/download/geoip/database/asnum/GeoIPASNumv6.dat.gz' ); + +define( 'IP_GEO_BLOCK_MAXMIND_DOWNLOAD', 'https://dev.maxmind.com/geoip/legacy/geolite/' ); + +/** + * Class for Maxmind + * + * URL : https://dev.maxmind.com/geoip/legacy/geolite/ + * Term of use : https://dev.maxmind.com/geoip/legacy/geolite/#License + * Licence fee : Creative Commons Attribution-ShareAlike 3.0 Unported License + * Input type : IP address (IPv4, IPv6) + * Output type : array + */ +class IP_Geo_Block_API_Maxmind extends IP_Geo_Block_API { + + private function location_country( $record ) { + return array( 'countryCode' => $record ); + } + + private function location_city( $record ) { + return array( + 'countryCode' => $record->country_code, + 'cityName' => $record->city, + 'latitude' => $record->latitude, + 'longitude' => $record->longitude, + ); + } + + private function location_asnumber( $record ) { + return array( 'ASN' => $record ); + } + + public function get_location( $ip, $args = array() ) { + $settings = IP_Geo_Block::get_option(); + + if ( ! function_exists( 'geoip_open' ) ) + require_once( 'geoip.inc' ); + + // setup database file and function + if ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) ) { + $file = empty( $args['ASN'] ) ? + ( empty( $settings['Maxmind']['ipv4_path'] ) ? $this->get_db_dir() . IP_GEO_BLOCK_MAXMIND_IPV4_DAT : $settings['Maxmind']['ipv4_path'] ): + ( empty( $settings['Maxmind']['asn4_path'] ) ? $this->get_db_dir() . IP_GEO_BLOCK_MAXMIND_ASN4_DAT : $settings['Maxmind']['asn4_path'] ); + } + + elseif ( filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 ) ) { + $file = empty( $args['ASN'] ) ? + ( empty( $settings['Maxmind']['ipv6_path'] ) ? $this->get_db_dir() . IP_GEO_BLOCK_MAXMIND_IPV6_DAT : $settings['Maxmind']['ipv6_path'] ): + ( empty( $settings['Maxmind']['asn6_path'] ) ? $this->get_db_dir() . IP_GEO_BLOCK_MAXMIND_ASN6_DAT : $settings['Maxmind']['asn6_path'] ); + } + + else { + return array( 'errorMessage' => 'illegal format' ); + } + + // open database and fetch data + if ( ! is_readable( $file ) || ! ( $geo = geoip_open( $file, GEOIP_STANDARD ) ) ) + return FALSE; + + switch ( $geo->databaseType ) { + case GEOIP_COUNTRY_EDITION: + $res = $this->location_country( geoip_country_code_by_addr( $geo, $ip ) ); + break; + + case GEOIP_COUNTRY_EDITION_V6: + $res = $this->location_country( geoip_country_code_by_addr_v6( $geo, $ip ) ); + break; + + case GEOIP_CITY_EDITION_REV1: + if ( ! class_exists( 'geoiprecord', FALSE ) ) + require_once( 'geoipcity.inc' ); + $res = $this->location_city( geoip_record_by_addr( $geo, $ip ) ); + break; + + case GEOIP_CITY_EDITION_REV1_V6: + if ( ! class_exists( 'geoiprecord', FALSE ) ) + require_once( 'geoipcity.inc' ); + $res = $this->location_city( geoip_record_by_addr_v6( $geo, $ip ) ); + break; + + case GEOIP_ASNUM_EDITION: + $res = $this->location_asnumber( geoip_name_by_addr( $geo, $ip ) ); + break; + + case GEOIP_ASNUM_EDITION_V6: + $res = $this->location_asnumber( geoip_name_by_addr_v6( $geo, $ip ) ); + break; + + default: + $res = array( 'errorMessage' => 'unknown database type' ); + } + + geoip_close( $geo ); + return $res; + } + + private function get_db_dir() { + return IP_Geo_Block_Util::slashit( apply_filters( + IP_Geo_Block::PLUGIN_NAME . '-maxmind-dir', dirname( __FILE__ ) + ) ); + } + + private function available( $exists ) { + // GeoLite Legacy databases would be stopped to update and download + return $exists ? + $_SERVER['REQUEST_TIME'] < strtotime( '2018-04-01' ): // Update until April 1, 2018 + $_SERVER['REQUEST_TIME'] < strtotime( '2019-01-02' ); // Available until January 2, 2019 + } + + public function download( &$db, $args ) { + require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php'; + $fs = IP_Geo_Block_FS::init( __FILE__ . '(' . __FUNCTION__ . ')' ); + + $dir = $this->get_db_dir(); + + // IPv4 + if ( $dir !== dirname( $db['ipv4_path'] ) . '/' ) + $db['ipv4_path'] = $dir . IP_GEO_BLOCK_MAXMIND_IPV4_DAT; + + if ( $this->available( $fs->exists( $db['ipv4_path'] ) ) ) { + $res['ipv4'] = IP_Geo_Block_Util::download_zip( + apply_filters( + IP_Geo_Block::PLUGIN_NAME . '-maxmind-zip-ipv4', + IP_GEO_BLOCK_MAXMIND_IPV4_ZIP + ), + $args + array( 'method' => 'GET' ), + $db['ipv4_path'], + $db['ipv4_last'] + ); + } else { + $res['ipv4'] = array( + 'code' => 503, + 'message' => __( 'The download service of this database file had terminated.', 'ip-geo-block' ) + ); + } + + // IPv6 + if ( $dir !== dirname( $db['ipv6_path'] ) . '/' ) + $db['ipv6_path'] = $dir . IP_GEO_BLOCK_MAXMIND_IPV6_DAT; + + if ( $this->available( $fs->exists( $db['ipv6_path'] ) ) ) { + $res['ipv6'] = IP_Geo_Block_Util::download_zip( + apply_filters( + IP_Geo_Block::PLUGIN_NAME . '-maxmind-zip-ipv6', + IP_GEO_BLOCK_MAXMIND_IPV6_ZIP + ), + $args + array( 'method' => 'GET' ), + $db['ipv6_path'], + $db['ipv6_last'] + ); + } else { + $res['ipv6'] = array( + 'code' => 503, + 'message' => __( 'The download service of this database file had terminated.', 'ip-geo-block' ) + ); + } + + ! empty( $res['ipv4']['filename'] ) and $db['ipv4_path'] = $res['ipv4']['filename']; + ! empty( $res['ipv6']['filename'] ) and $db['ipv6_path'] = $res['ipv6']['filename']; + ! empty( $res['ipv4']['modified'] ) and $db['ipv4_last'] = $res['ipv4']['modified']; + ! empty( $res['ipv6']['modified'] ) and $db['ipv6_last'] = $res['ipv6']['modified']; + +if ( ! empty( $db['use_asn'] ) || ! empty( $db['asn4_path'] ) ) : + + // ASN for IPv4 + if ( $dir !== dirname( $db['asn4_path'] ) . '/' ) + $db['asn4_path'] = $dir . IP_GEO_BLOCK_MAXMIND_ASN4_DAT; + + if ( $this->available( $fs->exists( $db['asn4_path'] ) ) ) { + $res['asn4'] = IP_Geo_Block_Util::download_zip( + apply_filters( + IP_Geo_Block::PLUGIN_NAME . '-maxmind-zip-asn4', + IP_GEO_BLOCK_MAXMIND_ASN4_ZIP + ), + $args + array( 'method' => 'GET' ), + $db['asn4_path'], + $db['asn4_last'] + ); + } else { + $res['asn4'] = array( + 'code' => 503, + 'message' => __( 'The download service of this database file had terminated.', 'ip-geo-block' ) + ); + } + + // ASN for IPv6 + if ( $dir !== dirname( $db['asn6_path'] ) . '/' ) + $db['asn6_path'] = $dir . IP_GEO_BLOCK_MAXMIND_ASN6_DAT; + + if ( $this->available( $fs->exists( $db['asn6_path'] ) ) ) { + $res['asn6'] = IP_Geo_Block_Util::download_zip( + apply_filters( + IP_Geo_Block::PLUGIN_NAME . '-maxmind-zip-asn6', + IP_GEO_BLOCK_MAXMIND_ASN6_ZIP + ), + $args + array( 'method' => 'GET' ), + $db['asn6_path'], + $db['asn6_last'] + ); + } else { + $res['asn6'] = array( + 'code' => 503, + 'message' => __( 'The download service of this database file had terminated.', 'ip-geo-block' ) + ); + } + + ! empty( $res['asn4']['filename'] ) and $db['asn4_path'] = $res['asn4']['filename']; + ! empty( $res['asn6']['filename'] ) and $db['asn6_path'] = $res['asn6']['filename']; + ! empty( $res['asn4']['modified'] ) and $db['asn4_last'] = $res['asn4']['modified']; + ! empty( $res['asn6']['modified'] ) and $db['asn6_last'] = $res['asn6']['modified']; + +endif; // ! empty( $db['use_asn'] ) || ! empty( $db['asn4_path'] ) + + return isset( $res ) ? $res : NULL; + } + + public function get_attribution() { + return 'This product includes GeoLite data created by MaxMind, available from https://www.maxmind.com. (CC BY-SA 4.0)'; + } + + public function add_settings_field( $field, $section, $option_slug, $option_name, $options, $callback, $str_path, $str_last ) { + require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php'; + $fs = IP_Geo_Block_FS::init( __FILE__ . '(' . __FUNCTION__ . ')' ); + + $db = $options[ $field ]; + $dir = $this->get_db_dir(); + $msg = __( 'Database file does not exist.', 'ip-geo-block' ); + + // IPv4 + if ( $dir !== dirname( $db['ipv4_path'] ) . '/' ) + $db['ipv4_path'] = $dir . IP_GEO_BLOCK_MAXMIND_IPV4_DAT; + + if ( $exists = $fs->exists( $db['ipv4_path'] ) ) + $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['ipv4_last'] ) ); + else + $date = $msg; + + if ( $exists || $this->available( $exists ) ) { + add_settings_field( + $option_name . $field . '_ipv4', + "$field $str_path
(IPv4)", + $callback, + $option_slug, + $section, + array( + 'type' => 'text', + 'option' => $option_name, + 'field' => $field, + 'sub-field' => 'ipv4_path', + 'value' => $db['ipv4_path'], + 'disabled' => TRUE, + 'after' => '

' . $date . '

', + ) + ); + } + + // IPv6 + if ( $dir !== dirname( $db['ipv6_path'] ) . '/' ) + $db['ipv6_path'] = $dir . IP_GEO_BLOCK_MAXMIND_IPV6_DAT; + + if ( $exists = $fs->exists( $db['ipv6_path'] ) ) + $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['ipv6_last'] ) ); + else + $date = $msg; + + if ( $exists || $this->available( $exists ) ) { + add_settings_field( + $option_name . $field . '_ipv6', + "$field $str_path
(IPv6)", + $callback, + $option_slug, + $section, + array( + 'type' => 'text', + 'option' => $option_name, + 'field' => $field, + 'sub-field' => 'ipv6_path', + 'value' => $db['ipv6_path'], + 'disabled' => TRUE, + 'after' => '

' . $date . '

', + ) + ); + } + +if ( ! empty( $db['use_asn'] ) || ! empty( $db['asn4_path'] ) ) : + + // ASN for IPv4 + if ( $dir !== dirname( $db['asn4_path'] ) . '/' ) + $db['asn4_path'] = $dir . IP_GEO_BLOCK_MAXMIND_ASN4_DAT; + + if ( $exists = $fs->exists( $db['asn4_path'] ) ) + $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['asn4_last'] ) ); + else + $date = $msg; + + if ( $exists || $this->available( $exists ) ) { + add_settings_field( + $option_name . $field . '_asn4', + "$field $str_path
(ASN for IPv4)", + $callback, + $option_slug, + $section, + array( + 'type' => 'text', + 'option' => $option_name, + 'field' => $field, + 'sub-field' => 'asn4_path', + 'value' => $db['asn4_path'], + 'disabled' => TRUE, + 'after' => '

' . $date . '

', + ) + ); + } + + // ASN for IPv6 + if ( $dir !== dirname( $db['asn6_path'] ) . '/' ) + $db['asn6_path'] = $dir . IP_GEO_BLOCK_MAXMIND_ASN6_DAT; + + if ( $exists = $fs->exists( $db['asn6_path'] ) ) + $date = sprintf( $str_last, IP_Geo_Block_Util::localdate( $db['asn6_last'] ) ); + else + $date = $msg; + + if ( $exists || $this->available( $exists ) ) { + add_settings_field( + $option_name . $field . '_asn6', + "$field $str_path
(ASN for IPv6)", + $callback, + $option_slug, + $section, + array( + 'type' => 'text', + 'option' => $option_name, + 'field' => $field, + 'sub-field' => 'asn6_path', + 'value' => $db['asn6_path'], + 'disabled' => TRUE, + 'after' => '

' . $date . '

', + ) + ); + } + +endif; // ! empty( $db['use_asn'] ) || ! empty( $db['asn4_path'] ) + + } +} + +/** + * Register API + * + */ +IP_Geo_Block_Provider::register_addon( array( + 'Maxmind' => array( + 'key' => NULL, + 'type' => 'IPv4, IPv6 / LGPLv2', + 'link' => 'https://dev.maxmind.com/geoip/ (IPv4, IPv6 / LGPLv2)', + ), +) ); diff --git a/wp/wp-content/ip-geo-api/maxmind/class-maxmind.php b/wp/wp-content/ip-geo-api/maxmind/class-maxmind.php new file mode 100644 index 00000000..86989c83 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/class-maxmind.php @@ -0,0 +1,25 @@ + + * @license GPL-3.0 + * @link https://www.ipgeoblock.com/ + * @copyright 2013-2018 tokkonopapa + */ +class_exists( 'IP_Geo_Block_API', FALSE ) or die; + +function ip_geo_block_setup_maxmind() { + $path = dirname( __FILE__ ); + + // GeoLite2 requires PHP 5.4+ (WordPress 3.7 requires PHP 5.2.4) + if ( version_compare( PHP_VERSION, '5.4' ) >= 0 ) + require_once $path . '/class-maxmind-geolite2.php'; + + // GeoLite Legacy + if ( file_exists( $path . '/class-maxmind-legacy.php' ) ) + require_once $path . '/class-maxmind-legacy.php'; +} + +ip_geo_block_setup_maxmind(); diff --git a/wp/wp-content/ip-geo-api/maxmind/geoip.inc b/wp/wp-content/ip-geo-api/maxmind/geoip.inc new file mode 100644 index 00000000..a5311fb5 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/geoip.inc @@ -0,0 +1,478 @@ +databaseType = GEOIP_COUNTRY_EDITION; + $gi->record_length = STANDARD_RECORD_LENGTH; + if ($gi->flags & GEOIP_SHARED_MEMORY) { + $offset = @shmop_size($gi->shmid) - 3; + for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) { + $delim = @shmop_read($gi->shmid, $offset, 3); + $offset += 3; + if ($delim == (chr(255) . chr(255) . chr(255))) { + $gi->databaseType = ord(@shmop_read($gi->shmid, $offset, 1)); + if ($gi->databaseType >= 106) { + $gi->databaseType -= 105; + } + $offset++; + + if ($gi->databaseType == GEOIP_REGION_EDITION_REV0) { + $gi->databaseSegments = GEOIP_STATE_BEGIN_REV0; + } elseif ($gi->databaseType == GEOIP_REGION_EDITION_REV1) { + $gi->databaseSegments = GEOIP_STATE_BEGIN_REV1; + } elseif (($gi->databaseType == GEOIP_CITY_EDITION_REV0) + || ($gi->databaseType == GEOIP_CITY_EDITION_REV1) + || ($gi->databaseType == GEOIP_ORG_EDITION) + || ($gi->databaseType == GEOIP_ORG_EDITION_V6) + || ($gi->databaseType == GEOIP_DOMAIN_EDITION) + || ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6) + || ($gi->databaseType == GEOIP_ISP_EDITION) + || ($gi->databaseType == GEOIP_ISP_EDITION_V6) + || ($gi->databaseType == GEOIP_USERTYPE_EDITION) + || ($gi->databaseType == GEOIP_USERTYPE_EDITION_V6) + || ($gi->databaseType == GEOIP_LOCATIONA_EDITION) + || ($gi->databaseType == GEOIP_ACCURACYRADIUS_EDITION) + || ($gi->databaseType == GEOIP_CITY_EDITION_REV0_V6) + || ($gi->databaseType == GEOIP_CITY_EDITION_REV1_V6) + || ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1) + || ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1_V6) + || ($gi->databaseType == GEOIP_ASNUM_EDITION) + || ($gi->databaseType == GEOIP_ASNUM_EDITION_V6) + ) { + $gi->databaseSegments = 0; + $buf = @shmop_read($gi->shmid, $offset, SEGMENT_RECORD_LENGTH); + for ($j = 0; $j < SEGMENT_RECORD_LENGTH; $j++) { + $gi->databaseSegments += (ord($buf[$j]) << ($j * 8)); + } + if (($gi->databaseType == GEOIP_ORG_EDITION) + || ($gi->databaseType == GEOIP_ORG_EDITION_V6) + || ($gi->databaseType == GEOIP_DOMAIN_EDITION) + || ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6) + || ($gi->databaseType == GEOIP_ISP_EDITION) + || ($gi->databaseType == GEOIP_ISP_EDITION_V6) + ) { + $gi->record_length = ORG_RECORD_LENGTH; + } + } + break; + } else { + $offset -= 4; + } + } + if (($gi->databaseType == GEOIP_COUNTRY_EDITION) || + ($gi->databaseType == GEOIP_COUNTRY_EDITION_V6) || + ($gi->databaseType == GEOIP_PROXY_EDITION) || + ($gi->databaseType == GEOIP_NETSPEED_EDITION) + ) { + $gi->databaseSegments = GEOIP_COUNTRY_BEGIN; + } + } else { + $filepos = ftell($gi->filehandle); + fseek($gi->filehandle, -3, SEEK_END); + for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) { + $delim = fread($gi->filehandle, 3); + if ($delim == (chr(255) . chr(255) . chr(255))) { + $gi->databaseType = ord(fread($gi->filehandle, 1)); + if ($gi->databaseType >= 106) { + $gi->databaseType -= 105; + } + if ($gi->databaseType == GEOIP_REGION_EDITION_REV0) { + $gi->databaseSegments = GEOIP_STATE_BEGIN_REV0; + } elseif ($gi->databaseType == GEOIP_REGION_EDITION_REV1) { + $gi->databaseSegments = GEOIP_STATE_BEGIN_REV1; + } elseif (($gi->databaseType == GEOIP_CITY_EDITION_REV0) + || ($gi->databaseType == GEOIP_CITY_EDITION_REV1) + || ($gi->databaseType == GEOIP_CITY_EDITION_REV0_V6) + || ($gi->databaseType == GEOIP_CITY_EDITION_REV1_V6) + || ($gi->databaseType == GEOIP_ORG_EDITION) + || ($gi->databaseType == GEOIP_DOMAIN_EDITION) + || ($gi->databaseType == GEOIP_ISP_EDITION) + || ($gi->databaseType == GEOIP_ORG_EDITION_V6) + || ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6) + || ($gi->databaseType == GEOIP_ISP_EDITION_V6) + || ($gi->databaseType == GEOIP_LOCATIONA_EDITION) + || ($gi->databaseType == GEOIP_ACCURACYRADIUS_EDITION) + || ($gi->databaseType == GEOIP_CITY_EDITION_REV0_V6) + || ($gi->databaseType == GEOIP_CITY_EDITION_REV1_V6) + || ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1) + || ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1_V6) + || ($gi->databaseType == GEOIP_USERTYPE_EDITION) + || ($gi->databaseType == GEOIP_USERTYPE_EDITION_V6) + || ($gi->databaseType == GEOIP_ASNUM_EDITION) + || ($gi->databaseType == GEOIP_ASNUM_EDITION_V6) + ) { + $gi->databaseSegments = 0; + $buf = fread($gi->filehandle, SEGMENT_RECORD_LENGTH); + for ($j = 0; $j < SEGMENT_RECORD_LENGTH; $j++) { + $gi->databaseSegments += (ord($buf[$j]) << ($j * 8)); + } + if (($gi->databaseType == GEOIP_ORG_EDITION) + || ($gi->databaseType == GEOIP_DOMAIN_EDITION) + || ($gi->databaseType == GEOIP_ISP_EDITION) + || ($gi->databaseType == GEOIP_ORG_EDITION_V6) + || ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6) + || ($gi->databaseType == GEOIP_ISP_EDITION_V6) + ) { + $gi->record_length = ORG_RECORD_LENGTH; + } + } + break; + } else { + fseek($gi->filehandle, -4, SEEK_CUR); + } + } + if (($gi->databaseType == GEOIP_COUNTRY_EDITION) || + ($gi->databaseType == GEOIP_COUNTRY_EDITION_V6) || + ($gi->databaseType == GEOIP_PROXY_EDITION) || + ($gi->databaseType == GEOIP_NETSPEED_EDITION) + ) { + $gi->databaseSegments = GEOIP_COUNTRY_BEGIN; + } + fseek($gi->filehandle, $filepos, SEEK_SET); + } + return $gi; +} + +function geoip_open($filename, $flags) +{ + $gi = new GeoIP; + $gi->flags = $flags; + if ($gi->flags & GEOIP_SHARED_MEMORY) { + $gi->shmid = @shmop_open(GEOIP_SHM_KEY, "a", 0, 0); + } else { + $gi->filehandle = fopen($filename, "rb"); if (!$gi->filehandle) return FALSE; // or die("Can not open $filename\n"); + flock($gi->filehandle, LOCK_SH); // @since 1.1.6 + if ($gi->flags & GEOIP_MEMORY_CACHE) { + $s_array = fstat($gi->filehandle); + $gi->memory_buffer = fread($gi->filehandle, $s_array['size']); + } + } + + $gi = _setup_segments($gi); + return $gi; +} + +function geoip_close($gi) +{ + if ($gi->flags & GEOIP_SHARED_MEMORY) { + return true; + } + + return flock($gi->filehandle, LOCK_UN) and fclose($gi->filehandle); // @since 1.1.6 +} + +function geoip_country_id_by_addr_v6($gi, $addr) +{ + $ipnum = inet_pton($addr); + return _geoip_seek_country_v6($gi, $ipnum) - GEOIP_COUNTRY_BEGIN; +} + +function geoip_country_id_by_addr($gi, $addr) +{ + $ipnum = ip2long($addr); + return _geoip_seek_country($gi, $ipnum) - GEOIP_COUNTRY_BEGIN; +} + +function geoip_country_code_by_addr_v6($gi, $addr) +{ + $country_id = geoip_country_id_by_addr_v6($gi, $addr); + if ($country_id !== false) { + return $gi->GEOIP_COUNTRY_CODES[$country_id]; + } + return false; +} + +function geoip_country_code_by_addr($gi, $addr) +{ + if ($gi->databaseType == GEOIP_CITY_EDITION_REV1) { + $record = geoip_record_by_addr($gi, $addr); + if ($record !== false) { + return $record->country_code; + } + } else { + $country_id = geoip_country_id_by_addr($gi, $addr); + if ($country_id !== false) { + return $gi->GEOIP_COUNTRY_CODES[$country_id]; + } + } + return false; +} + +function _geoip_seek_country_v6($gi, $ipnum) +{ + # arrays from unpack start with offset 1 + # yet another php mystery. array_merge work around + # this broken behaviour + $v6vec = array_merge(unpack("C16", $ipnum)); + + $offset = 0; + for ($depth = 127; $depth >= 0; --$depth) { + if ($gi->flags & GEOIP_MEMORY_CACHE) { + $buf = _safe_substr( + $gi->memory_buffer, + 2 * $gi->record_length * $offset, + 2 * $gi->record_length + ); + } elseif ($gi->flags & GEOIP_SHARED_MEMORY) { + $buf = @shmop_read( + $gi->shmid, + 2 * $gi->record_length * $offset, + 2 * $gi->record_length + ); + } else { + fseek($gi->filehandle, 2 * $gi->record_length * $offset, SEEK_SET) == 0 + or die("fseek failed"); + $buf = fread($gi->filehandle, 2 * $gi->record_length); + } + $x = array(0, 0); + for ($i = 0; $i < 2; ++$i) { + for ($j = 0; $j < $gi->record_length; ++$j) { + $x[$i] += ord($buf[$gi->record_length * $i + $j]) << ($j * 8); + } + } + + $bnum = 127 - $depth; + $idx = $bnum >> 3; + $b_mask = 1 << ($bnum & 7 ^ 7); + if (($v6vec[$idx] & $b_mask) > 0) { + if ($x[1] >= $gi->databaseSegments) { + return $x[1]; + } + $offset = $x[1]; + } else { + if ($x[0] >= $gi->databaseSegments) { + return $x[0]; + } + $offset = $x[0]; + } + } + trigger_error("error traversing database - perhaps it is corrupt?", E_USER_ERROR); + return false; +} + +function _geoip_seek_country($gi, $ipnum) +{ + $offset = 0; + for ($depth = 31; $depth >= 0; --$depth) { + if ($gi->flags & GEOIP_MEMORY_CACHE) { + $buf = _safe_substr( + $gi->memory_buffer, + 2 * $gi->record_length * $offset, + 2 * $gi->record_length + ); + } elseif ($gi->flags & GEOIP_SHARED_MEMORY) { + $buf = @shmop_read( + $gi->shmid, + 2 * $gi->record_length * $offset, + 2 * $gi->record_length + ); + } else { + fseek($gi->filehandle, 2 * $gi->record_length * $offset, SEEK_SET) == 0 + or die("fseek failed"); + $buf = fread($gi->filehandle, 2 * $gi->record_length); + } + $x = array(0, 0); + for ($i = 0; $i < 2; ++$i) { + for ($j = 0; $j < $gi->record_length; ++$j) { + $x[$i] += ord($buf[$gi->record_length * $i + $j]) << ($j * 8); + } + } + if ($ipnum & (1 << $depth)) { + if ($x[1] >= $gi->databaseSegments) { + return $x[1]; + } + $offset = $x[1]; + } else { + if ($x[0] >= $gi->databaseSegments) { + return $x[0]; + } + $offset = $x[0]; + } + } + trigger_error("error traversing database - perhaps it is corrupt?", E_USER_ERROR); + return false; +} +function _common_get_org($gi, $seek_org) +{ + $record_pointer = $seek_org + (2 * $gi->record_length - 1) * $gi->databaseSegments; + if ($gi->flags & GEOIP_SHARED_MEMORY) { + $org_buf = _sharedMemRead($gi, $record_pointer, MAX_ORG_RECORD_LENGTH); + } else { + fseek($gi->filehandle, $record_pointer, SEEK_SET); + $org_buf = fread($gi->filehandle, MAX_ORG_RECORD_LENGTH); + } + $org_buf = _safe_substr($org_buf, 0, strpos($org_buf, "\0")); + return $org_buf; +} + +function _get_org_v6($gi, $ipnum) +{ + $seek_org = _geoip_seek_country_v6($gi, $ipnum); + if ($seek_org == $gi->databaseSegments) { + return null; + } + return _common_get_org($gi, $seek_org); +} + +function _get_org($gi, $ipnum) +{ + $seek_org = _geoip_seek_country($gi, $ipnum); + if ($seek_org == $gi->databaseSegments) { + return null; + } + return _common_get_org($gi, $seek_org); +} + + +function geoip_name_by_addr_v6($gi, $addr) +{ + if ($addr == null) { + return 0; + } + $ipnum = inet_pton($addr); + return _get_org_v6($gi, $ipnum); +} + +function geoip_name_by_addr($gi, $addr) +{ + if ($addr == null) { + return 0; + } + $ipnum = ip2long($addr); + return _get_org($gi, $ipnum); +} + +function _safe_substr($string, $start, $length) +{ + // workaround php's broken substr, strpos, etc handling with + // mbstring.func_overload and mbstring.internal_encoding + $mbExists = extension_loaded('mbstring'); + + if ($mbExists) { + $enc = mb_internal_encoding(); + mb_internal_encoding('ISO-8859-1'); + } + + $buf = substr($string, $start, $length); + + if ($mbExists) { + mb_internal_encoding($enc); + } + + return $buf; +} diff --git a/wp/wp-content/ip-geo-api/maxmind/geoipcity.inc b/wp/wp-content/ip-geo-api/maxmind/geoipcity.inc new file mode 100644 index 00000000..400b9416 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/geoipcity.inc @@ -0,0 +1,171 @@ +databaseSegments) { + return null; + } + return _common_get_record($gi, $seek_country); +} + +function _common_get_record($gi, $seek_country) +{ + // workaround php's broken substr, strpos, etc handling with + // mbstring.func_overload and mbstring.internal_encoding + $mbExists = extension_loaded('mbstring'); + if ($mbExists) { + $enc = mb_internal_encoding(); + mb_internal_encoding('ISO-8859-1'); + } + + $record_pointer = $seek_country + (2 * $gi->record_length - 1) * $gi->databaseSegments; + + if ($gi->flags & GEOIP_MEMORY_CACHE) { + $record_buf = substr($gi->memory_buffer, $record_pointer, FULL_RECORD_LENGTH); + } elseif ($gi->flags & GEOIP_SHARED_MEMORY) { + $record_buf = @shmop_read($gi->shmid, $record_pointer, FULL_RECORD_LENGTH); + } else { + fseek($gi->filehandle, $record_pointer, SEEK_SET); + $record_buf = fread($gi->filehandle, FULL_RECORD_LENGTH); + } + $record = new geoiprecord; + $record_buf_pos = 0; + $char = ord(substr($record_buf, $record_buf_pos, 1)); + $record->country_code = $gi->GEOIP_COUNTRY_CODES[$char]; + $record->country_code3 = isset( $gi->GEOIP_COUNTRY_CODES3[$char] ) ? $gi->GEOIP_COUNTRY_CODES3[$char] : ''; + $record->country_name = isset( $gi->GEOIP_COUNTRY_NAMES[$char] ) ? $gi->GEOIP_COUNTRY_NAMES[$char] : ''; + $record->continent_code = isset( $gi->GEOIP_CONTINENT_CODES[$char] ) ? $gi->GEOIP_CONTINENT_CODES[$char] : ''; + $record_buf_pos++; + $str_length = 0; + + // Get region + $char = ord(substr($record_buf, $record_buf_pos + $str_length, 1)); + while ($char != 0) { + $str_length++; + $char = ord(substr($record_buf, $record_buf_pos + $str_length, 1)); + } + if ($str_length > 0) { + $record->region = substr($record_buf, $record_buf_pos, $str_length); + } + $record_buf_pos += $str_length + 1; + $str_length = 0; + // Get city + $char = ord(substr($record_buf, $record_buf_pos + $str_length, 1)); + while ($char != 0) { + $str_length++; + $char = ord(substr($record_buf, $record_buf_pos + $str_length, 1)); + } + if ($str_length > 0) { + $record->city = substr($record_buf, $record_buf_pos, $str_length); + } + $record_buf_pos += $str_length + 1; + $str_length = 0; + // Get postal code + $char = ord(substr($record_buf, $record_buf_pos + $str_length, 1)); + while ($char != 0) { + $str_length++; + $char = ord(substr($record_buf, $record_buf_pos + $str_length, 1)); + } + if ($str_length > 0) { + $record->postal_code = substr($record_buf, $record_buf_pos, $str_length); + } + $record_buf_pos += $str_length + 1; + $str_length = 0; + // Get latitude and longitude + $latitude = 0; + $longitude = 0; + for ($j = 0; $j < 3; ++$j) { + $char = ord(substr($record_buf, $record_buf_pos++, 1)); + $latitude += ($char << ($j * 8)); + } + $record->latitude = ($latitude / 10000) - 180; + for ($j = 0; $j < 3; ++$j) { + $char = ord(substr($record_buf, $record_buf_pos++, 1)); + $longitude += ($char << ($j * 8)); + } + $record->longitude = ($longitude / 10000) - 180; + if (GEOIP_CITY_EDITION_REV1 == $gi->databaseType) { + $metroarea_combo = 0; + if ($record->country_code == "US") { + for ($j = 0; $j < 3; ++$j) { + $char = ord(substr($record_buf, $record_buf_pos++, 1)); + $metroarea_combo += ($char << ($j * 8)); + } + $record->metro_code = $record->dma_code = floor($metroarea_combo / 1000); + $record->area_code = $metroarea_combo % 1000; + } + } + if ($mbExists) { + mb_internal_encoding($enc); + } + return $record; +} + +function GeoIP_record_by_addr_v6($gi, $addr) +{ + if ($addr == null) { + return 0; + } + $ipnum = inet_pton($addr); + return _get_record_v6($gi, $ipnum); +} + +function _get_record($gi, $ipnum) +{ + $seek_country = _geoip_seek_country($gi, $ipnum); + if ($seek_country == $gi->databaseSegments) { + return null; + } + return _common_get_record($gi, $seek_country); +} + +function GeoIP_record_by_addr($gi, $addr) +{ + if ($addr == null) { + return 0; + } + $ipnum = ip2long($addr); + return _get_record($gi, $ipnum); +} diff --git a/wp/wp-content/ip-geo-api/maxmind/index.php b/wp/wp-content/ip-geo-api/maxmind/index.php new file mode 100644 index 00000000..62200328 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/index.php @@ -0,0 +1,2 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see http://www.php-fig.org/psr/psr-0/ + * @see http://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + // PSR-4 + private $prefixLengthsPsr4 = array(); + private $prefixDirsPsr4 = array(); + private $fallbackDirsPsr4 = array(); + + // PSR-0 + private $prefixesPsr0 = array(); + private $fallbackDirsPsr0 = array(); + + private $useIncludePath = false; + private $classMap = array(); + private $classMapAuthoritative = false; + private $missingClasses = array(); + private $apcuPrefix; + + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', $this->prefixesPsr0); + } + + return array(); + } + + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array $classMap Class to filename map + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 base directories + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + } + + /** + * Unregisters this instance as an autoloader. + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return bool|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + includeFile($file); + + return true; + } + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath.'\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + */ +function includeFile($file) +{ + include $file; +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/composer/LICENSE b/wp/wp-content/ip-geo-api/maxmind/vendor/composer/LICENSE new file mode 100644 index 00000000..f27399a0 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/composer/autoload_classmap.php b/wp/wp-content/ip-geo-api/maxmind/vendor/composer/autoload_classmap.php new file mode 100644 index 00000000..7a91153b --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/composer/autoload_classmap.php @@ -0,0 +1,9 @@ + array($vendorDir . '/maxmind/web-service-common/src/WebService'), + 'MaxMind\\Exception\\' => array($vendorDir . '/maxmind/web-service-common/src/Exception'), + 'MaxMind\\Db\\' => array($vendorDir . '/maxmind-db/reader/src/MaxMind/Db'), + 'GeoIp2\\' => array($vendorDir . '/geoip2/geoip2/src'), + 'Composer\\CaBundle\\' => array($vendorDir . '/composer/ca-bundle/src'), +); diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/composer/autoload_real.php b/wp/wp-content/ip-geo-api/maxmind/vendor/composer/autoload_real.php new file mode 100644 index 00000000..cf5dba1b --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/composer/autoload_real.php @@ -0,0 +1,52 @@ += 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); + if ($useStaticLoader) { + require_once __DIR__ . '/autoload_static.php'; + + call_user_func(\Composer\Autoload\ComposerStaticInit571cd4ca56352f649eb4e63d8e44b81c::getInitializer($loader)); + } else { + $map = require __DIR__ . '/autoload_namespaces.php'; + foreach ($map as $namespace => $path) { + $loader->set($namespace, $path); + } + + $map = require __DIR__ . '/autoload_psr4.php'; + foreach ($map as $namespace => $path) { + $loader->setPsr4($namespace, $path); + } + + $classMap = require __DIR__ . '/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + } + + $loader->register(true); + + return $loader; + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/composer/autoload_static.php b/wp/wp-content/ip-geo-api/maxmind/vendor/composer/autoload_static.php new file mode 100644 index 00000000..d8d09fdd --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/composer/autoload_static.php @@ -0,0 +1,57 @@ + + array ( + 'MaxMind\\WebService\\' => 19, + 'MaxMind\\Exception\\' => 18, + 'MaxMind\\Db\\' => 11, + ), + 'G' => + array ( + 'GeoIp2\\' => 7, + ), + 'C' => + array ( + 'Composer\\CaBundle\\' => 18, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'MaxMind\\WebService\\' => + array ( + 0 => __DIR__ . '/..' . '/maxmind/web-service-common/src/WebService', + ), + 'MaxMind\\Exception\\' => + array ( + 0 => __DIR__ . '/..' . '/maxmind/web-service-common/src/Exception', + ), + 'MaxMind\\Db\\' => + array ( + 0 => __DIR__ . '/..' . '/maxmind-db/reader/src/MaxMind/Db', + ), + 'GeoIp2\\' => + array ( + 0 => __DIR__ . '/..' . '/geoip2/geoip2/src', + ), + 'Composer\\CaBundle\\' => + array ( + 0 => __DIR__ . '/..' . '/composer/ca-bundle/src', + ), + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInit571cd4ca56352f649eb4e63d8e44b81c::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit571cd4ca56352f649eb4e63d8e44b81c::$prefixDirsPsr4; + + }, null, ClassLoader::class); + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/LICENSE b/wp/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/LICENSE new file mode 100644 index 00000000..c5b5220e --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2016 Composer + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/README.md b/wp/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/README.md new file mode 100644 index 00000000..04442f90 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/README.md @@ -0,0 +1,85 @@ +composer/ca-bundle +================== + +Small utility library that lets you find a path to the system CA bundle, +and includes a fallback to the Mozilla CA bundle. + +Originally written as part of [composer/composer](https://github.com/composer/composer), +now extracted and made available as a stand-alone library. + + +Installation +------------ + +Install the latest version with: + +```bash +$ composer require composer/ca-bundle +``` + + +Requirements +------------ + +* PHP 5.3.2 is required but using the latest version of PHP is highly recommended. + + +Basic usage +----------- + +# `Composer\CaBundle\CaBundle` + +- `CaBundle::getSystemCaRootBundlePath()`: Returns the system CA bundle path, or a path to the bundled one as fallback +- `CaBundle::getBundledCaBundlePath()`: Returns the path to the bundled CA file +- `CaBundle::validateCaFile($filename)`: Validates a CA file using opensl_x509_parse only if it is safe to use +- `CaBundle::isOpensslParseSafe()`: Test if it is safe to use the PHP function openssl_x509_parse() +- `CaBundle::reset()`: Resets the static caches + + +## To use with curl + +```php +$curl = curl_init("https://example.org/"); + +$caPathOrFile = \Composer\CaBundle\CaBundle::getSystemCaRootBundlePath(); +if (is_dir($caPathOrFile) || (is_link($caPathOrFile) && is_dir(readlink($caPathOrFile)))) { + curl_setopt($curl, CURLOPT_CAPATH, $caPathOrFile); +} else { + curl_setopt($curl, CURLOPT_CAINFO, $caPathOrFile); +} + +$result = curl_exec($curl); +``` + +## To use with php streams + +```php +$opts = array( + 'http' => array( + 'method' => "GET" + ) +); + +$caPathOrFile = \Composer\CaBundle\CaBundle::getSystemCaRootBundlePath(); +if (is_dir($caPathOrFile) || (is_link($caPathOrFile) && is_dir(readlink($caPathOrFile)))) { + $opts['ssl']['capath'] = $caPathOrFile; +} else { + $opts['ssl']['cafile'] = $caPathOrFile; +} + +$context = stream_context_create($opts); +$result = file_get_contents('https://example.com', false, $context); +``` + +## To use with Guzzle + +```php +$client = new \GuzzleHttp\Client([ + \GuzzleHttp\RequestOptions::VERIFY => \Composer\CaBundle\CaBundle::getSystemCaRootBundlePath() +]); +``` + +License +------- + +composer/ca-bundle is licensed under the MIT License, see the LICENSE file for details. diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/composer.json b/wp/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/composer.json new file mode 100644 index 00000000..b713cc74 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/composer.json @@ -0,0 +1,54 @@ +{ + "name": "composer/ca-bundle", + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "type": "library", + "license": "MIT", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/ca-bundle/issues" + }, + "require": { + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35", + "psr/log": "^1.0", + "symfony/process": "^2.5 || ^3.0 || ^4.0" + }, + "autoload": { + "psr-4": { + "Composer\\CaBundle\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "Composer\\CaBundle\\": "tests" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "config": { + "platform": { + "php": "5.3.9" + } + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/res/cacert.pem b/wp/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/res/cacert.pem new file mode 100644 index 00000000..39ba3368 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/res/cacert.pem @@ -0,0 +1,3646 @@ +## +## Bundle of CA Root Certificates +## +## Certificate data from Mozilla as of: Wed Sep 20 03:12:05 2017 GMT +## +## This is a bundle of X.509 certificates of public Certificate Authorities +## (CA). These were automatically extracted from Mozilla's root certificates +## file (certdata.txt). This file can be found in the mozilla source tree: +## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt +## +## It contains the certificates in PEM format and therefore +## can be directly used with curl / libcurl / php_curl, or with +## an Apache+mod_ssl webserver for SSL client authentication. +## Just configure this file as the SSLCACertificateFile. +## +## Conversion done with mk-ca-bundle.pl version 1.27. +## SHA256: 2b2dbe5244e0047e088c597998883a913f6c5fffd1cb5c0fe5a368c8466cb2ec +## + + +GlobalSign Root CA +================== +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx +GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds +b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD +VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa +DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc +THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb +Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP +c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX +gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF +AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj +Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG +j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH +hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC +X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +GlobalSign Root CA - R2 +======================= +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 +ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp +s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN +S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL +TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C +ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i +YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN +BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp +9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu +01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 +9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- + +Verisign Class 3 Public Primary Certification Authority - G3 +============================================================ +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy +dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 +EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc +cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw +EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj +055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f +j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 +xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa +t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- + +Entrust.net Premium 2048 Secure Server CA +========================================= +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u +ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp +bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV +BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx +NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 +d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl +MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u +ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL +Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr +hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW +nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi +VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ +KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy +T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT +J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e +nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- + +Baltimore CyberTrust Root +========================= +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE +ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li +ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC +SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs +dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME +uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB +UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C +G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 +XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr +l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI +VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB +BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh +cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 +hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa +Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H +RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +AddTrust External Root +====================== +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD +VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw +NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU +cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg +Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 ++iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw +Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo +aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy +2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 +7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL +VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk +VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB +IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl +j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 +e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u +G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- + +Entrust Root Certification Authority +==================================== +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw +b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG +A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 +MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu +MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu +Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v +dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz +A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww +Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 +j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN +rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 +MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH +hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM +Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa +v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS +W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 +tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +GeoTrust Global CA +================== +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw +MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j +LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo +BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet +8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc +T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU +vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk +DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q +zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4 +d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2 +mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p +XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm +Mw== +-----END CERTIFICATE----- + +GeoTrust Universal CA +===================== +-----BEGIN CERTIFICATE----- +MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1 +MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu +Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t +JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e +RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs +7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d +8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V +qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga +Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB +Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu +KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08 +ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0 +XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB +hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc +aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2 +qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL +oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK +xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF +KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2 +DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK +xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU +p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI +P/rmMuGNG2+k5o7Y+SlIis5z/iw= +-----END CERTIFICATE----- + +GeoTrust Universal CA 2 +======================= +-----BEGIN CERTIFICATE----- +MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN +R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0 +MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg +SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0 +DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17 +j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q +JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a +QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2 +WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP +20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn +ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC +SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG +8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2 ++/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E +BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z +dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ +4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ +mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq +A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg +Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP +pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d +FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp +gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm +X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS +-----END CERTIFICATE----- + +Visa eCommerce Root +=================== +-----BEGIN CERTIFICATE----- +MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG +EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug +QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2 +WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm +VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv +bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL +F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b +RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0 +TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI +/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs +GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG +MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc +CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW +YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz +zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu +YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt +398znM/jra6O1I7mT1GvFpLgXPYHDw== +-----END CERTIFICATE----- + +Certum Root CA +============== +-----BEGIN CERTIFICATE----- +MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK +ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla +Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u +by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x +wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL +kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ +89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K +Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P +NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq +hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+ +GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg +GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/ +0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS +qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw== +-----END CERTIFICATE----- + +Comodo AAA Services root +======================== +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw +MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl +c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV +BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG +C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs +i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW +Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH +Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK +Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f +BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl +cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz +LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm +7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z +8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C +12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +QuoVadis Root CA +================ +-----BEGIN CERTIFICATE----- +MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE +ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz +MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp +cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD +EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk +J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL +F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL +YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen +AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w +PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y +ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 +MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj +YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs +ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW +Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu +BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw +FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 +tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo +fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul +LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x +gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi +5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi +5nrQNiOKSnQ2+Q== +-----END CERTIFICATE----- + +QuoVadis Root CA 2 +================== +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT +EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx +ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6 +XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk +lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB +lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy +lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt +66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn +wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh +D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy +BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie +J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud +DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU +a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv +Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3 +UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm +VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK ++JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW +IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1 +WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X +f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II +4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8 +VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- + +QuoVadis Root CA 3 +================== +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT +EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx +OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg +DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij +KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K +DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv +BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp +p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8 +nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX +MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM +Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz +uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT +BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj +YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB +BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD +VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4 +ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE +AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV +qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s +hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z +POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2 +Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp +8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC +bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu +g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p +vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr +qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- + +Security Communication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw +8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM +DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX +5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd +DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 +JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g +0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a +mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ +s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ +6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi +FL39vmwLAw== +-----END CERTIFICATE----- + +Sonera Class 2 Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG +U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw +NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh +IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 +/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT +dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG +f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P +tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH +nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT +XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt +0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI +cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph +Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx +EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH +llpwrN9M +-----END CERTIFICATE----- + +Camerfirma Chambers of Commerce Root +==================================== +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe +QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i +ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx +NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp +cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn +MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC +AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU +xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH +NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW +DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV +d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud +EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v +cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P +AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh +bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD +VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz +aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi +fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD +L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN +UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n +ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1 +erfutGWaIZDgqtCYvDi1czyL+Nw= +-----END CERTIFICATE----- + +Camerfirma Global Chambersign Root +================================== +-----BEGIN CERTIFICATE----- +MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe +QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i +ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx +NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt +YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg +MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw +ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J +1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O +by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl +6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c +8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/ +BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j +aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B +Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj +aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y +ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh +bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA +PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y +gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ +PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4 +IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes +t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== +-----END CERTIFICATE----- + +XRamp Global CA Root +==================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE +BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj +dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx +HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg +U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu +IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx +foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE +zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs +AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry +xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap +oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC +AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc +/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n +nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz +8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +Go Daddy Class 2 CA +=================== +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY +VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG +A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g +RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD +ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv +2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 +qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j +YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY +vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O +BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o +atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu +MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG +A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim +PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt +I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI +Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b +vZ8= +-----END CERTIFICATE----- + +Starfield Class 2 CA +==================== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc +U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo +MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG +A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG +SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY +bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ +JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm +epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN +F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF +MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f +hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo +bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g +QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs +afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM +PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD +KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 +QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +StartCom Certification Authority +================================ +-----BEGIN CERTIFICATE----- +MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu +ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 +NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk +LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg +U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y +o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ +Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d +eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt +2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z +6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ +osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ +untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc +UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT +37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE +FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0 +Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj +YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH +AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw +Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg +U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5 +LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh +cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT +dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC +AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh +3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm +vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk +fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3 +fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ +EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq +yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl +1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/ +lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro +g14= +-----END CERTIFICATE----- + +Taiwan GRCA +=========== +-----BEGIN CERTIFICATE----- +MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG +EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X +DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv +dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN +w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5 +BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O +1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO +htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov +J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7 +Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t +B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB +O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8 +lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV +HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2 +09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ +TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj +Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 +Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU +D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz +DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk +Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk +7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ +CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy ++fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS +-----END CERTIFICATE----- + +DigiCert Assured ID Root CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx +MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO +9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy +UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW +/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy +oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf +GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF +66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq +hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc +EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn +SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i +8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +DigiCert Global Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw +MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn +TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 +BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H +4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y +7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB +o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm +8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF +BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr +EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt +tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 +UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +DigiCert High Assurance EV Root CA +================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw +KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw +MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ +MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu +Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t +Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS +OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 +MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ +NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe +h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB +Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY +JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ +V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp +myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK +mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K +-----END CERTIFICATE----- + +Certplus Class 2 Primary CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE +BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN +OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy +dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR +5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ +Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO +YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e +e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME +CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ +YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t +L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD +P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R +TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+ +7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW +//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 +l7+ijrRU +-----END CERTIFICATE----- + +DST Root CA X3 +============== +-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK +ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X +DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 +cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT +rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 +UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy +xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d +utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ +MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug +dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE +GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw +RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS +fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ +-----END CERTIFICATE----- + +DST ACES CA X6 +============== +-----BEGIN CERTIFICATE----- +MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT +MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha +MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE +CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI +DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa +pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow +GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy +MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu +Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy +dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU +CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2 +5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t +Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq +nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs +vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3 +oKfN5XozNmr6mis= +-----END CERTIFICATE----- + +SwissSign Gold CA - G2 +====================== +-----BEGIN CERTIFICATE----- +MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw +EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN +MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp +c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq +t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C +jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg +vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF +ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR +AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend +jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO +peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR +7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi +GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64 +OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov +L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm +5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr +44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf +Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m +Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp +mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk +vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf +KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br +NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj +viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ +-----END CERTIFICATE----- + +SwissSign Silver CA - G2 +======================== +-----BEGIN CERTIFICATE----- +MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT +BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X +DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3 +aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG +9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644 +N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm ++/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH +6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu +MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h +qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5 +FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs +ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc +celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X +CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB +tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 +cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P +4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F +kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L +3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx +/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa +DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP +e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu +WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ +DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub +DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority +======================================== +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx +CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ +cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN +b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9 +nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge +RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt +tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI +hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K +Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN +NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa +Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG +1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= +-----END CERTIFICATE----- + +thawte Primary Root CA +====================== +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3 +MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg +SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv +KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT +FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs +oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ +1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc +q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K +aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p +afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF +AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE +uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX +xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89 +jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH +z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G5 +============================================================ +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln +biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh +dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt +YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz +j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD +Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/ +Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r +fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/ +BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv +Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG +SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ +X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE +KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC +Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE +ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- + +SecureTrust CA +============== +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy +dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe +BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX +OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t +DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH +GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b +01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH +ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj +aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu +SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf +mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ +nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +Secure Global CA +================ +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH +bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg +MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg +Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx +YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ +bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g +8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV +HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi +0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn +oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA +MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ +OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn +CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 +3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +COMODO Certification Authority +============================== +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb +MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD +T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH ++7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww +xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV +4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA +1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI +rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k +b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC +AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP +OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc +IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN ++8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== +-----END CERTIFICATE----- + +Network Solutions Certificate Authority +======================================= +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG +EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr +IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx +MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx +jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT +aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT +crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc +/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB +AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv +bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA +A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q +4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ +GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD +ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +COMODO ECC Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix +GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X +4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni +wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG +FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA +U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +Security Communication EV RootCA1 +================================= +-----BEGIN CERTIFICATE----- +MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE +BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl +Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO +/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX +WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z +ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4 +bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK +9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG +SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm +iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG +Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW +mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW +T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GA CA +=============================== +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE +BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG +A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH +bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD +VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw +IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5 +IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9 +Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg +Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD +d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ +/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R +LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm +MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4 ++vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa +hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY +okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= +-----END CERTIFICATE----- + +Certigna +======== +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw +EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 +MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI +Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q +XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH +GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p +ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg +DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf +Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ +tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ +BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J +SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA +hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ +ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu +PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY +1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +Deutsche Telekom Root CA 2 +========================== +-----BEGIN CERTIFICATE----- +MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT +RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG +A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5 +MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G +A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS +b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5 +bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI +KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY +AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK +Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV +jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV +HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr +E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy +zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8 +rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G +dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU +Cm26OWMohpLzGITY+9HPBVZkVw== +-----END CERTIFICATE----- + +Cybertrust Global Root +====================== +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li +ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 +MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD +ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA ++Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW +0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL +AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin +89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT +8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 +MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G +A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO +lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi +5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 +hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T +X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----END CERTIFICATE----- + +ePKI Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG +EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx +MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq +MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs +IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi +lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv +qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX +12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O +WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ +ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao +lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ +vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi +Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi +MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 +1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq +KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV +xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP +NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r +GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE +xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx +gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy +sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD +BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3 +============================================================================================================================= +-----BEGIN CERTIFICATE----- +MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH +DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q +aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry +b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV +BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg +S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4 +MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl +IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF +n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl +IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft +dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl +cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO +Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1 +xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR +6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL +hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd +BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4 +N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT +y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh +LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M +dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI= +-----END CERTIFICATE----- + +certSIGN ROOT CA +================ +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD +VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa +Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE +CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I +JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH +rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 +ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD +0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 +AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B +Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB +AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 +SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 +x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt +vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz +TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G3 +============================================= +-----BEGIN CERTIFICATE----- +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE +BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0 +IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy +eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz +NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo +YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT +LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j +K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE +c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C +IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu +dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr +2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9 +cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE +Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s +t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt +-----END CERTIFICATE----- + +thawte Primary Root CA - G2 +=========================== +-----BEGIN CERTIFICATE----- +MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC +VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu +IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg +Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV +MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG +b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt +IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS +LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5 +8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU +mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN +G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K +rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== +-----END CERTIFICATE----- + +thawte Primary Root CA - G3 +=========================== +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE +BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 +aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w +ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh +d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD +VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG +A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At +P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC ++BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY +7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW +vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ +KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK +A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu +t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC +8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm +er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A= +-----END CERTIFICATE----- + +GeoTrust Primary Certification Authority - G2 +============================================= +-----BEGIN CERTIFICATE----- +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu +Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1 +OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg +MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl +b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG +BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc +KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+ +EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m +ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2 +npaqBA+K +-----END CERTIFICATE----- + +VeriSign Universal Root Certification Authority +=============================================== +-----BEGIN CERTIFICATE----- +MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE +BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO +ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk +IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u +IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV +UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv +cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj +1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP +MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72 +9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I +AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR +tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G +CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O +a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud +DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3 +Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx +Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx +P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P +wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4 +mJO37M2CYfE45k+XmCpajQ== +-----END CERTIFICATE----- + +VeriSign Class 3 Public Primary Certification Authority - G4 +============================================================ +-----BEGIN CERTIFICATE----- +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC +VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 +b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz +ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU +cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo +b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5 +IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8 +Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz +rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw +HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u +Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD +A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx +AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== +-----END CERTIFICATE----- + +NetLock Arany (Class Gold) Főtanúsítvány +======================================== +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G +A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 +dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB +cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx +MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO +ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 +c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu +0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw +/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk +H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw +fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 +neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW +qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta +YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna +NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu +dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA - G2 +================================== +-----BEGIN CERTIFICATE----- +MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC +TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l +ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ +5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn +vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj +CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil +e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR +OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI +CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65 +48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi +trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737 +qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB +AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC +ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA +A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz ++51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj +f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN +kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk +CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF +URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb +CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h +oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV +IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm +66+KAQ== +-----END CERTIFICATE----- + +Hongkong Post Root CA 1 +======================= +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT +DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx +NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n +IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 +ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr +auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh +qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY +V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV +HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i +h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio +l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei +IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps +T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT +c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== +-----END CERTIFICATE----- + +SecureSign RootCA11 +=================== +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi +SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS +b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw +KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 +cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL +TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO +wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq +g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP +O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA +bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX +t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh +OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r +bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ +Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 +y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 +lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +ACEDICOM Root +============= +-----BEGIN CERTIFICATE----- +MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UEAwwNQUNFRElD +T00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMB4XDTA4 +MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEWMBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoG +A1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHk +WLn709gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7XBZXehuD +YAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5PGrjm6gSSrj0RuVFCPYew +MYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAKt0SdE3QrwqXrIhWYENiLxQSfHY9g5QYb +m8+5eaA9oiM/Qj9r+hwDezCNzmzAv+YbX79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbk +HQl/Sog4P75n/TSW9R28MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTT +xKJxqvQUfecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI2Sf2 +3EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyHK9caUPgn6C9D4zq9 +2Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEaeZAwUswdbxcJzbPEHXEUkFDWug/Fq +TYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz +4SsrSbbXc6GqlPUB53NlTKxQMA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU +9QHnc2VMrFAwRAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv +bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWImfQwng4/F9tqg +aHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3gvoFNTPhNahXwOf9jU8/kzJP +eGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKeI6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1Pwk +zQSulgUV1qzOMPPKC8W64iLgpq0i5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1 +ThCojz2GuHURwCRiipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oI +KiMnMCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZo5NjEFIq +nxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6zqylfDJKZ0DcMDQj3dcE +I2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacNGHk0vFQYXlPKNFHtRQrmjseCNj6nOGOp +MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o +tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA== +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER +MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv +c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE +BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt +U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA +fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG +0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA +pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm +1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC +AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf +QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE +FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o +lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX +I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 +yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi +LXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +GlobalSign Root CA - R3 +======================= +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt +iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ +0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 +rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl +OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 +xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 +lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 +EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E +bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 +YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r +kpeDMdmztcpHWD9f +-----END CERTIFICATE----- + +Autoridad de Certificacion Firmaprofesional CIF A62634068 +========================================================= +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA +BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 +MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw +QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB +NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD +Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P +B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY +7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH +ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI +plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX +MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX +LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK +bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU +vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud +EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH +DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA +bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx +ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx +51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk +R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP +T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f +Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl +osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR +crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR +saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD +KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi +6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +Izenpe.com +========== +-----BEGIN CERTIFICATE----- +MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG +EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz +MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu +QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ +03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK +ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU ++zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC +PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT +OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK +F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK +0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+ +0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB +leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID +AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+ +SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG +NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx +MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O +BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l +Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga +kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q +hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs +g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5 +aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5 +nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC +ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo +Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z +WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== +-----END CERTIFICATE----- + +Chambers of Commerce Root - 2008 +================================ +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy +Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl +ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF +EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl +cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA +XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj +h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/ +ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk +NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g +D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331 +lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ +0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2 +EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI +G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ +BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh +bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh +bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC +CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH +AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1 +wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH +3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU +RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6 +M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1 +YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF +9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK +zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG +nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ +-----END CERTIFICATE----- + +Global Chambersign Root - 2008 +============================== +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD +MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv +bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu +QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx +NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg +Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ +QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf +VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf +XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0 +ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB +/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA +TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M +H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe +Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF +HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB +AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT +BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE +BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm +aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm +aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp +1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0 +dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG +/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6 +ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s +dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg +9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH +foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du +qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr +P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq +c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----END CERTIFICATE----- + +Go Daddy Root Certificate Authority - G2 +======================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu +MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G +A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq +9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD ++qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd +fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl +NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 +BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac +vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r +5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV +N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 +-----END CERTIFICATE----- + +Starfield Root Certificate Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 +eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw +DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg +VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB +dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv +W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs +bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk +N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf +ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU +JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol +TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx +4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw +F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ +c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +Starfield Services Root Certificate Authority - G2 +================================================== +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl +IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT +dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 +h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa +hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP +LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB +rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG +SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP +E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy +xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza +YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 +-----END CERTIFICATE----- + +AffirmTrust Commercial +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw +MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb +DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV +C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 +BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww +MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV +HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG +hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi +qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv +0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh +sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +AffirmTrust Networking +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw +MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE +Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI +dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 +/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb +h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV +HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu +UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 +12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 +WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 +/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +AffirmTrust Premium +=================== +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy +OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy +dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn +BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV +5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs ++7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd +GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R +p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI +S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 +6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 +/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo ++Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv +MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC +6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S +L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK ++4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV +BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg +IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 +g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb +zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== +-----END CERTIFICATE----- + +AffirmTrust Premium ECC +======================= +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV +BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx +MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U +cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ +N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW +BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK +BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X +57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM +eQ== +-----END CERTIFICATE----- + +Certum Trusted Network CA +========================= +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK +ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy +MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU +ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC +l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J +J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 +fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 +cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB +Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw +DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj +jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 +mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj +Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +Certinomis - Autorité Racine +============================ +-----BEGIN CERTIFICATE----- +MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK +Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg +LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG +A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw +JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa +wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly +Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw +2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N +jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q +c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC +lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb +xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g +530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna +4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ +KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x +WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva +R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40 +nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B +CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv +JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE +qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b +WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE +wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/ +vgt2Fl43N+bYdJeimUV5 +-----END CERTIFICATE----- + +TWCA Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ +VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG +EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB +IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx +QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC +oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP +4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r +y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG +9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC +mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW +QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY +T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny +Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +Security Communication RootCA2 +============================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC +SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy +aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ ++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R +3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV +spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K +EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 +QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB +CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj +u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk +3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q +tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 +mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +EC-ACC +====== +-----BEGIN CERTIFICATE----- +MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE +BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w +ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD +VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE +CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT +BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 +MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt +SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl +Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh +cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK +w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT +ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 +HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a +E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw +0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD +VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 +Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l +dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ +lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa +Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe +l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 +E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D +5EI= +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2011 +======================================================= +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT +O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y +aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT +AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo +IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI +1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa +71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u +8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH +3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ +MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 +MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu +b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt +XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD +/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N +7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +Actalis Authentication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM +BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE +AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky +MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz +IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ +wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa +by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 +zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f +YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 +oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l +EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 +hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 +EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 +jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY +iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI +WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 +JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx +K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ +Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC +4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo +2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz +lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem +OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 +vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- + +Trustis FPS Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG +EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290 +IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV +BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ +RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk +H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa +cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt +o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA +AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd +BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c +GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC +yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P +8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV +l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl +iB6XzCGcKQENZetX2fNXlrtIzYE= +-----END CERTIFICATE----- + +StartCom Certification Authority +================================ +-----BEGIN CERTIFICATE----- +MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu +ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 +NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk +LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg +U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw +ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y +o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ +Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d +eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt +2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z +6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ +osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ +untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc +UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT +37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ +Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0 +dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu +c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv +bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0 +aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t +L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG +cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5 +fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm +N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN +Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T +tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX +e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA +2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs +HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE +JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib +D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8= +-----END CERTIFICATE----- + +StartCom Certification Authority G2 +=================================== +-----BEGIN CERTIFICATE----- +MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN +U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE +ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O +o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG +4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi +Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul +Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs +O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H +vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L +nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS +FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa +z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ +KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K +2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk +J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+ +JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG +/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc +nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld +blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc +l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm +7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm +obp573PYtlNXLfbQ4ddI +-----END CERTIFICATE----- + +Buypass Class 2 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X +DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 +g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn +9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b +/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU +CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff +awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI +zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn +Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX +Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs +M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI +osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S +aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd +DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD +LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 +oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC +wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS +CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN +rJgWVqA= +-----END CERTIFICATE----- + +Buypass Class 3 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X +DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH +sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR +5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh +7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ +ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH +2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV +/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ +RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA +Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq +j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G +uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG +Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 +ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 +KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz +6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug +UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe +eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi +Cp/HuZc= +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 3 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx +MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK +9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU +NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF +iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W +0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr +AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb +fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT +ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h +P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== +-----END CERTIFICATE----- + +EE Certification Centre Root CA +=============================== +-----BEGIN CERTIFICATE----- +MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG +EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy +dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw +MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB +UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy +ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM +TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2 +rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw +93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN +P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ +MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF +BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj +xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM +lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u +uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU +3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM +dcGWxZ0= +-----END CERTIFICATE----- + +TURKTRUST Certificate Services Provider Root 2007 +================================================= +-----BEGIN CERTIFICATE----- +MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP +MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg +QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X +DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl +a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN +BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp +bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N +YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv +KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya +KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT +rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC +AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s +Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I +aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO +Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb +BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK +poRq0Tl9 +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe +Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE +LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD +ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA +BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv +KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z +p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC +AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ +4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y +eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw +MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G +PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw +OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm +2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV +dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph +X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 EV 2009 +================================= +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS +egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh +zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T +7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60 +sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35 +11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv +cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v +ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El +MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp +b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh +c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+ +PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX +ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA +NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv +w9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +PSCProcert +========== +-----BEGIN CERTIFICATE----- +MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk +ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ +MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz +dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl +cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw +IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw +MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w +DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD +ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp +Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC +wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA +3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh +RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO +EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2 +0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH +0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU +td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw +Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp +r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/ +AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz +Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId +xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp +ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH +EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h +Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k +ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG +9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG +MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG +LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52 +ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy +YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v +Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o +dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq +T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN +g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q +uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1 +n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn +FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo +5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq +3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5 +poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y +eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km +-----END CERTIFICATE----- + +CA Disig Root R1 +================ +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw +EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp +ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx +EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp +c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy +3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8 +u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2 +m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk +CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa +YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6 +vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL +LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX +ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is +XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ +04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR +xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B +LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM +CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb +VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85 +YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS +ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix +lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N +UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ +a7+h89n07eLw4+1knj0vllJPgFOL +-----END CERTIFICATE----- + +CA Disig Root R2 +================ +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw +EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp +ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx +EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp +c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC +w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia +xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7 +A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S +GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV +g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa +5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE +koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A +Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i +Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u +Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV +sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je +dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8 +1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx +mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01 +utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0 +sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg +UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV +7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +ACCVRAIZ1 +========= +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB +SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1 +MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH +UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM +jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0 +RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD +aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ +0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG +WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7 +8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR +5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J +9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK +Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw +Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu +Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM +Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA +QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh +AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA +YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj +AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA +IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk +aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0 +dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2 +MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI +hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E +R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN +YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49 +nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ +TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3 +sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg +Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd +3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p +EfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +TWCA Global Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT +CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD +QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK +EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg +Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C +nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV +r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR +Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV +tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W +KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99 +sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p +yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn +kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI +zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g +cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M +8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg +/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg +lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP +A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m +i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8 +EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3 +zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= +-----END CERTIFICATE----- + +TeliaSonera Root CA v1 +====================== +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE +CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4 +MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW +VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+ +6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA +3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k +B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn +Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH +oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3 +F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ +oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7 +gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc +TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB +AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW +DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm +zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW +pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV +G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc +c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT +JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2 +qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6 +Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems +WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +E-Tugra Certification Authority +=============================== +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w +DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls +ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN +ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw +NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx +QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl +cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD +DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd +hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K +CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g +ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ +BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 +E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz +rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq +jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn +rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 +dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB +/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG +MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK +kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO +XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 +VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo +a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc +dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV +KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT +Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 +8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G +C7TbO6Orb1wdtn7os4I07QZcJA== +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 2 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx +MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ +SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F +vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970 +2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV +WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy +YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4 +r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf +vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR +3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== +-----END CERTIFICATE----- + +Atos TrustedRoot 2011 +===================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU +cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4 +MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG +A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV +hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr +54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+ +DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320 +HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR +z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R +l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ +bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h +k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh +TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9 +61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G +3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +QuoVadis Root CA 1 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE +PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm +PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6 +Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN +ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l +g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV +7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX +9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f +iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg +t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI +hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3 +GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct +Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP ++V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh +3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa +wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6 +O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0 +FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV +hMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +QuoVadis Root CA 2 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh +ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY +NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t +oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o +MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l +V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo +L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ +sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD +6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh +lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI +hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K +pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9 +x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz +dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X +U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw +mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD +zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN +JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr +O3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +QuoVadis Root CA 3 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286 +IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL +Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe +6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3 +I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U +VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7 +5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi +Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM +dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt +rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI +hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS +t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ +TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du +DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib +Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD +hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX +0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW +dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2 +PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +DigiCert Assured ID Root G2 +=========================== +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw +MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH +35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq +bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw +VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP +YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn +lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO +w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv +0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz +d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW +hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M +jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +DigiCert Assured ID Root G3 +=========================== +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD +VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ +BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb +RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs +KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF +UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy +YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy +1vUhZscv6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +DigiCert Global Root G2 +======================= +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx +MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ +kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO +3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV +BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM +UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB +o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu +5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr +F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U +WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH +QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/ +iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +DigiCert Global Root G3 +======================= +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD +VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw +MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k +aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C +AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O +YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp +Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y +3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34 +VOKa5Vt8sycX +-----END CERTIFICATE----- + +DigiCert Trusted Root G4 +======================== +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o +k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa +vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY +QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6 +MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm +mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7 +f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH +dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8 +oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY +ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr +yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy +7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah +ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN +5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb +/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa +5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK +G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP +82Z+ +-----END CERTIFICATE----- + +WoSign +====== +-----BEGIN CERTIFICATE----- +MIIFdjCCA16gAwIBAgIQXmjWEXGUY1BWAGjzPsnFkTANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQG +EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxKjAoBgNVBAMTIUNlcnRpZmljYXRpb24g +QXV0aG9yaXR5IG9mIFdvU2lnbjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMFUxCzAJ +BgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEqMCgGA1UEAxMhQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgb2YgV29TaWduMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA +vcqNrLiRFVaXe2tcesLea9mhsMMQI/qnobLMMfo+2aYpbxY94Gv4uEBf2zmoAHqLoE1UfcIiePyO +CbiohdfMlZdLdNiefvAA5A6JrkkoRBoQmTIPJYhTpA2zDxIIFgsDcSccf+Hb0v1naMQFXQoOXXDX +2JegvFNBmpGN9J42Znp+VsGQX+axaCA2pIwkLCxHC1l2ZjC1vt7tj/id07sBMOby8w7gLJKA84X5 +KIq0VC6a7fd2/BVoFutKbOsuEo/Uz/4Mx1wdC34FMr5esAkqQtXJTpCzWQ27en7N1QhatH/YHGkR ++ScPewavVIMYe+HdVHpRaG53/Ma/UkpmRqGyZxq7o093oL5d//xWC0Nyd5DKnvnyOfUNqfTq1+ez +EC8wQjchzDBwyYaYD8xYTYO7feUapTeNtqwylwA6Y3EkHp43xP901DfA4v6IRmAR3Qg/UDaruHqk +lWJqbrDKaiFaafPz+x1wOZXzp26mgYmhiMU7ccqjUu6Du/2gd/Tkb+dC221KmYo0SLwX3OSACCK2 +8jHAPwQ+658geda4BmRkAjHXqc1S+4RFaQkAKtxVi8QGRkvASh0JWzko/amrzgD5LkhLJuYwTKVY +yrREgk/nkR4zw7CT/xH8gdLKH3Ep3XZPkiWvHYG3Dy+MwwbMLyejSuQOmbp8HkUff6oZRZb9/D0C +AwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOFmzw7R +8bNLtwYgFP6HEtX2/vs+MA0GCSqGSIb3DQEBBQUAA4ICAQCoy3JAsnbBfnv8rWTjMnvMPLZdRtP1 +LOJwXcgu2AZ9mNELIaCJWSQBnfmvCX0KI4I01fx8cpm5o9dU9OpScA7F9dY74ToJMuYhOZO9sxXq +T2r09Ys/L3yNWC7F4TmgPsc9SnOeQHrAK2GpZ8nzJLmzbVUsWh2eJXLOC62qx1ViC777Y7NhRCOj +y+EaDveaBk3e1CNOIZZbOVtXHS9dCF4Jef98l7VNg64N1uajeeAz0JmWAjCnPv/So0M/BVoG6kQC +2nz4SNAzqfkHx5Xh9T71XXG68pWpdIhhWeO/yloTunK0jF02h+mmxTwTv97QRCbut+wucPrXnbes +5cVAWubXbHssw1abR80LzvobtCHXt2a49CUwi1wNuepnsvRtrtWhnk/Yn+knArAdBtaP4/tIEp9/ +EaEQPkxROpaw0RPxx9gmrjrKkcRpnd8BKWRRb2jaFOwIQZeQjdCygPLPwj2/kWjFgGcexGATVdVh +mVd8upUPYUk6ynW8yQqTP2cOEvIo4jEbwFcW3wh8GcF+Dx+FHgo2fFt+J7x6v+Db9NpSvd4MVHAx +kUOVyLzwPt0JfjBkUO1/AaQzZ01oT74V77D2AhGiGxMlOtzCWfHjXEa7ZywCRuoeSKbmW9m1vFGi +kpbbqsY3Iqb+zCB0oy2pLmvLwIIRIbWTee5Ehr7XHuQe+w== +-----END CERTIFICATE----- + +WoSign China +============ +-----BEGIN CERTIFICATE----- +MIIFWDCCA0CgAwIBAgIQUHBrzdgT/BtOOzNy0hFIjTANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQG +EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMMEkNBIOayg+mAmuagueiv +geS5pjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMEYxCzAJBgNVBAYTAkNOMRowGAYD +VQQKExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAwwSQ0Eg5rKD6YCa5qC56K+B5LmmMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EkhHiX8h8EqwqzbdoYGTufQdDTc7WU1/FDWiD+k +8H/rD195L4mx/bxjWDeTmzj4t1up+thxx7S8gJeNbEvxUNUqKaqoGXqW5pWOdO2XCld19AXbbQs5 +uQF/qvbW2mzmBeCkTVL829B0txGMe41P/4eDrv8FAxNXUDf+jJZSEExfv5RxadmWPgxDT74wwJ85 +dE8GRV2j1lY5aAfMh09Qd5Nx2UQIsYo06Yms25tO4dnkUkWMLhQfkWsZHWgpLFbE4h4TV2TwYeO5 +Ed+w4VegG63XX9Gv2ystP9Bojg/qnw+LNVgbExz03jWhCl3W6t8Sb8D7aQdGctyB9gQjF+BNdeFy +b7Ao65vh4YOhn0pdr8yb+gIgthhid5E7o9Vlrdx8kHccREGkSovrlXLp9glk3Kgtn3R46MGiCWOc +76DbT52VqyBPt7D3h1ymoOQ3OMdc4zUPLK2jgKLsLl3Az+2LBcLmc272idX10kaO6m1jGx6KyX2m ++Jzr5dVjhU1zZmkR/sgO9MHHZklTfuQZa/HpelmjbX7FF+Ynxu8b22/8DU0GAbQOXDBGVWCvOGU6 +yke6rCzMRh+yRpY/8+0mBe53oWprfi1tWFxK1I5nuPHa1UaKJ/kR8slC/k7e3x9cxKSGhxYzoacX +GKUN5AXlK8IrC6KVkLn9YDxOiT7nnO4fuwECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFOBNv9ybQV0T6GTwp+kVpOGBwboxMA0GCSqGSIb3DQEBCwUA +A4ICAQBqinA4WbbaixjIvirTthnVZil6Xc1bL3McJk6jfW+rtylNpumlEYOnOXOvEESS5iVdT2H6 +yAa+Tkvv/vMx/sZ8cApBWNromUuWyXi8mHwCKe0JgOYKOoICKuLJL8hWGSbueBwj/feTZU7n85iY +r83d2Z5AiDEoOqsuC7CsDCT6eiaY8xJhEPRdF/d+4niXVOKM6Cm6jBAyvd0zaziGfjk9DgNyp115 +j0WKWa5bIW4xRtVZjc8VX90xJc/bYNaBRHIpAlf2ltTW/+op2znFuCyKGo3Oy+dCMYYFaA6eFN0A +kLppRQjbbpCBhqcqBT/mhDn4t/lXX0ykeVoQDF7Va/81XwVRHmyjdanPUIPTfPRm94KNPQx96N97 +qA4bLJyuQHCH2u2nFoJavjVsIE4iYdm8UXrNemHcSxH5/mc0zy4EZmFcV5cjjPOGG0jfKq+nwf/Y +jj4Du9gqsPoUJbJRa4ZDhS4HIxaAjUz7tGM7zMN07RujHv41D198HRaG9Q7DlfEvr10lO1Hm13ZB +ONFLAzkopR6RctR9q5czxNM+4Gm2KHmgCY0c0f9BckgG/Jou5yD5m6Leie2uPAmvylezkolwQOQv +T8Jwg0DXJCxr5wkf09XHwQj02w47HAcLQxGEIYbpgNR12KvxAmLBsX5VYc8T1yaw15zLKYs4SgsO +kI26oQ== +-----END CERTIFICATE----- + +COMODO RSA Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCBhTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwHhcNMTAwMTE5MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR6FSS0gpWsawNJN3Fz0Rn +dJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8Xpz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZ +FGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+ +5eNu/Nio5JIk2kNrYrhV/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pG +x8cgoLEfZd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z+pUX +2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7wqP/0uK3pN/u6uPQL +OvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZahSL0896+1DSJMwBGB7FY79tOi4lu3 +sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVICu9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+C +GCe01a60y1Dma/RMhnEw6abfFobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5 +WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E +FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w +DQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvlwFTPoCWOAvn9sKIN9SCYPBMt +rFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+ +nq6PK7o9mfjYcwlYRm6mnPTXJ9OV2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSg +tZx8jb8uk2IntznaFxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwW +sRqZCuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiKboHGhfKp +pC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmckejkk9u+UJueBPSZI9FoJA +zMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yLS0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHq +ZJx64SIDqZxubw5lT2yHh17zbqD5daWbQOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk52 +7RH89elWsn2/x20Kk4yl0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7I +LaZRfyHBNVOFBkpdn627G190 +-----END CERTIFICATE----- + +USERTrust RSA Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK +ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK +ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCAEmUXNg7D2wiz +0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2j +Y0K2dvKpOyuR+OJv0OwWIJAJPuLodMkYtJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFn +RghRy4YUVD+8M/5+bJz/Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O ++T23LLb2VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT79uq +/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6c0Plfg6lZrEpfDKE +Y1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmTYo61Zs8liM2EuLE/pDkP2QKe6xJM +lXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97lc6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8 +yexDJtC/QV9AqURE9JnnV4eeUB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+ +eLf8ZxXhyVeEHg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd +BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPFUp/L+M+ZBn8b2kMVn54CVVeW +FPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KOVWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ +7l8wXEskEVX/JJpuXior7gtNn3/3ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQ +Eg9zKC7F4iRO/Fjs8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM +8WcRiQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYzeSf7dNXGi +FSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZXHlKYC6SQK5MNyosycdi +yA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9c +J2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRBVXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGw +sAvgnEzDHNb842m1R0aBL6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gx +Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +USERTrust ECC Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2 +0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez +nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV +HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB +HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu +9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R4 +=========================== +-----BEGIN CERTIFICATE----- +MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl +OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P +AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV +MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF +JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q= +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R5 +=========================== +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6 +SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS +h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd +BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx +uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7 +yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA - G3 +================================== +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloXDTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMC +TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l +ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4y +olQPcPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WWIkYFsO2t +x1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqXxz8ecAgwoNzFs21v0IJy +EavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFyKJLZWyNtZrVtB0LrpjPOktvA9mxjeM3K +Tj215VKb8b475lRgsGYeCasH/lSJEULR9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUur +mkVLoR9BvUhTFXFkC4az5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU5 +1nus6+N86U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7Ngzp +07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHPbMk7ccHViLVlvMDo +FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE +41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTtXUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleu +yjWcLhL75LpdINyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD +U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwpLiniyMMB8jPq +KqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8Ipf3YF3qKS9Ysr1YvY2WTxB1 +v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixpgZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA +8KCWAg8zxXHzniN9lLf9OtMJgwYh/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b +8KKaa8MFSu1BYBQw0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0r +mj1AfsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq4BZ+Extq +1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR1VmiiXTTn74eS9fGbbeI +JG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/QFH1T/U67cjF68IeHRaVesd+QnGTbksV +tzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM94B7IWcnMFk= +-----END CERTIFICATE----- + +Staat der Nederlanden EV Root CA +================================ +-----BEGIN CERTIFICATE----- +MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M +MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl +cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk +SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW +O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r +0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8 +Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV +XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr +08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV +0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd +74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx +fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa +ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI +eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu +c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq +5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN +b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN +f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi +5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4 +WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK +DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy +eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg== +-----END CERTIFICATE----- + +IdenTrust Commercial Root CA 1 +============================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS +b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES +MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB +IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld +hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/ +mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi +1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C +XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl +3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy +NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV +WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg +xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix +uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI +hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg +ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt +ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV +YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX +feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro +kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe +2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz +Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R +cGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +IdenTrust Public Sector Root CA 1 +================================= +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv +ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV +UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS +b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy +P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6 +Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI +rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf +qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS +mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn +ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh +LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v +iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL +4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B +Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw +DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A +mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt +GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt +m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx +NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4 +Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI +ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC +ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ +3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +Entrust Root Certification Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy +bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug +b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw +HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT +DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx +OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP +/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz +HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU +s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y +TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx +AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6 +0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z +iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi +nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+ +vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO +e4pIb4tF9g== +-----END CERTIFICATE----- + +Entrust Root Certification Authority - EC1 +========================================== +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx +FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn +YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl +ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw +FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs +LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg +dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy +AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef +9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h +vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8 +kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- + +CFCA EV ROOT +============ +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE +CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB +IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw +MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD +DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV +BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD +7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN +uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW +ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7 +xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f +py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K +gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol +hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ +tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf +BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB +/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q +ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua +4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG +E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX +BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn +aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy +PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX +kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C +ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5 +==================================================== +-----BEGIN CERTIFICATE----- +MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN +BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp +bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg +RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw +ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w +SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE +n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp +ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537 +jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m +ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP +9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV +4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH +HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI +hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo +BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq +URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl +lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8 +B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU= +-----END CERTIFICATE----- + +Certinomis - Root CA +==================== +-----BEGIN CERTIFICATE----- +MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjETMBEGA1UEChMK +Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAbBgNVBAMTFENlcnRpbm9taXMg +LSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMzMTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIx +EzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRD +ZXJ0aW5vbWlzIC0gUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQos +P5L2fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJflLieY6pOo +d5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQVWZUKxkd8aRi5pwP5ynap +z8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDFTKWrteoB4owuZH9kb/2jJZOLyKIOSY00 +8B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09x +RLWtwHkziOC/7aOgFLScCbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE +6OXWk6RiwsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJwx3t +FvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SGm/lg0h9tkQPTYKbV +PZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4F2iw4lNVYC2vPsKD2NkJK/DAZNuH +i5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZngWVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGj +YzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I +6tNxIqSSaHh02TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF +AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/0KGRHCwPT5iV +WVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWwF6YSjNRieOpWauwK0kDDPAUw +Pk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZSg081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAX +lCOotQqSD7J6wWAsOMwaplv/8gzjqh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJ +y29SWwNyhlCVCNSNh4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9 +Iff/ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8Vbtaw5Bng +DwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwjY/M50n92Uaf0yKHxDHYi +I0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nM +cyrDflOR1m749fPH0FFNjkulW+YZFzvWgQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVr +hkIGuUE= +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GB CA +=============================== +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG +EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw +MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds +b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX +scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP +rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk +9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o +Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg +GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI +hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD +dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0 +VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui +HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +Certification Authority of WoSign G2 +==================================== +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQG +EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNVBAMTJENlcnRpZmljYXRpb24g +QXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgx +CzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPXJYY1kBai +XW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgOgHzKtB0TiGsOqCR3A9Du +W/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg9 +5k4ot+vElbGs/V6r+kHLXZ1L3PR8du9nfwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BK +v0mUYQs4kI9dJGwlezt52eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJKoZI +hvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8fHulwqZm46qwtyeY +P0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G3CE4Q3RM+zD4F3LBMvzIkRfEzFg3 +TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yySrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu ++sif/a+RZQp4OBXllxcU3fngLDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+ +7Q9LGOHSJDy7XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg= +-----END CERTIFICATE----- + +CA WoSign ECC Root +================== +-----BEGIN CERTIFICATE----- +MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQswCQYDVQQGEwJD +TjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMTEkNBIFdvU2lnbiBFQ0MgUm9v +dDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQK +ExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZI +zj0CAQYFK4EEACIDYgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiU +t5v8KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES1ns2o0Iw +QDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqv3VWqP2h4syhf3R +MluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0 +Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu +a/GRspBl9JrmkO5K +-----END CERTIFICATE----- + +SZAFIR ROOT CA2 +=============== +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG +A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV +BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ +BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD +VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q +qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK +DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE +2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ +ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi +ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P +AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC +AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5 +O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67 +oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul +4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6 ++/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw== +-----END CERTIFICATE----- + +Certum Trusted Network CA 2 +=========================== +-----BEGIN CERTIFICATE----- +MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE +BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1 +bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y +ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ +TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB +IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9 +7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o +CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b +Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p +uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130 +GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ +9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB +Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye +hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM +BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI +hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW +Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA +L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo +clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM +pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb +w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo +J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm +ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX +is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7 +zAYspsbiDrW5viSP +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2015 +======================================================= +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT +BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0 +aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl +YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx +MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg +QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV +BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw +MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv +bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh +iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+ +6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd +FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr +i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F +GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2 +fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu +iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI +hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+ +D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM +d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y +d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn +82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb +davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F +Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt +J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa +JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q +p/UsQu0yrbYhnr68 +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions ECC RootCA 2015 +=========================================================== +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0 +aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u +cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj +aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw +MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj +IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD +VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290 +Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP +dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK +Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O +BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA +GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn +dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE----- + +Certplus Root CA G1 +=================== +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgISESBVg+QtPlRWhS2DN7cs3EYRMA0GCSqGSIb3DQEBDQUAMD4xCzAJBgNV +BAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTAe +Fw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhD +ZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBANpQh7bauKk+nWT6VjOaVj0W5QOVsjQcmm1iBdTYj+eJZJ+622SLZOZ5KmHN +r49aiZFluVj8tANfkT8tEBXgfs+8/H9DZ6itXjYj2JizTfNDnjl8KvzsiNWI7nC9hRYt6kuJPKNx +Qv4c/dMcLRC4hlTqQ7jbxofaqK6AJc96Jh2qkbBIb6613p7Y1/oA/caP0FG7Yn2ksYyy/yARujVj +BYZHYEMzkPZHogNPlk2dT8Hq6pyi/jQu3rfKG3akt62f6ajUeD94/vI4CTYd0hYCyOwqaK/1jpTv +LRN6HkJKHRUxrgwEV/xhc/MxVoYxgKDEEW4wduOU8F8ExKyHcomYxZ3MVwia9Az8fXoFOvpHgDm2 +z4QTd28n6v+WZxcIbekN1iNQMLAVdBM+5S//Ds3EC0pd8NgAM0lm66EYfFkuPSi5YXHLtaW6uOrc +4nBvCGrch2c0798wct3zyT8j/zXhviEpIDCB5BmlIOklynMxdCm+4kLV87ImZsdo/Rmz5yCTmehd +4F6H50boJZwKKSTUzViGUkAksnsPmBIgJPaQbEfIDbsYIC7Z/fyL8inqh3SV4EJQeIQEQWGw9CEj +jy3LKCHyamz0GqbFFLQ3ZU+V/YDI+HLlJWvEYLF7bY5KinPOWftwenMGE9nTdDckQQoRb5fc5+R+ +ob0V8rqHDz1oihYHAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0G +A1UdDgQWBBSowcCbkahDFXxdBie0KlHYlwuBsTAfBgNVHSMEGDAWgBSowcCbkahDFXxdBie0KlHY +lwuBsTANBgkqhkiG9w0BAQ0FAAOCAgEAnFZvAX7RvUz1isbwJh/k4DgYzDLDKTudQSk0YcbX8ACh +66Ryj5QXvBMsdbRX7gp8CXrc1cqh0DQT+Hern+X+2B50ioUHj3/MeXrKls3N/U/7/SMNkPX0XtPG +YX2eEeAC7gkE2Qfdpoq3DIMku4NQkv5gdRE+2J2winq14J2by5BSS7CTKtQ+FjPlnsZlFT5kOwQ/ +2wyPX1wdaR+v8+khjPPvl/aatxm2hHSco1S1cE5j2FddUyGbQJJD+tZ3VTNPZNX70Cxqjm0lpu+F +6ALEUz65noe8zDUa3qHpimOHZR4RKttjd5cUvpoUmRGywO6wT/gUITJDT5+rosuoD6o7BlXGEilX +CNQ314cnrUlZp5GrRHpejXDbl85IULFzk/bwg2D5zfHhMf1bfHEhYxQUqq/F3pN+aLHsIqKqkHWe +tUNy6mSjhEv9DKgma3GX7lZjZuhCVPnHHd/Qj1vfyDBviP4NxDMcU6ij/UgQ8uQKTuEVV/xuZDDC +VRHc6qnNSlSsKWNEz0pAoNZoWRsz+e86i9sgktxChL8Bq4fA1SCC28a5g4VCXA9DO2pJNdWY9BW/ ++mGBDAkgGNLQFwzLSABQ6XaCjGTXOqAHVcweMcDvOrRl++O/QmueD6i9a5jc2NvLi6Td11n0bt3+ +qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo= +-----END CERTIFICATE----- + +Certplus Root CA G2 +=================== +-----BEGIN CERTIFICATE----- +MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4xCzAJBgNVBAYT +AkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjAeFw0x +NDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0 +cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IA +BM0PW1aC3/BFGtat93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uN +Am8xIk0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMB8GA1Ud +IwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqGSM49BAMDA2gAMGUCMHD+sAvZ94OX7PNV +HdTcswYO/jOYnYs5kGuUIe22113WTNchp+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjl +vPl5adytRSv3tjFzzAalU5ORGpOucGpnutee5WEaXw== +-----END CERTIFICATE----- + +OpenTrust Root CA G1 +==================== +-----BEGIN CERTIFICATE----- +MIIFbzCCA1egAwIBAgISESCzkFU5fX82bWTCp59rY45nMA0GCSqGSIb3DQEBCwUAMEAxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcx +MB4XDTE0MDUyNjA4NDU1MFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM +CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzEwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQD4eUbalsUwXopxAy1wpLuwxQjczeY1wICkES3d5oeuXT2R0odsN7fa +Yp6bwiTXj/HbpqbfRm9RpnHLPhsxZ2L3EVs0J9V5ToybWL0iEA1cJwzdMOWo010hOHQX/uMftk87 +ay3bfWAfjH1MBcLrARYVmBSO0ZB3Ij/swjm4eTrwSSTilZHcYTSSjFR077F9jAHiOH3BX2pfJLKO +YheteSCtqx234LSWSE9mQxAGFiQD4eCcjsZGT44ameGPuY4zbGneWK2gDqdkVBFpRGZPTBKnjix9 +xNRbxQA0MMHZmf4yzgeEtE7NCv82TWLxp2NX5Ntqp66/K7nJ5rInieV+mhxNaMbBGN4zK1FGSxyO +9z0M+Yo0FMT7MzUj8czxKselu7Cizv5Ta01BG2Yospb6p64KTrk5M0ScdMGTHPjgniQlQ/GbI4Kq +3ywgsNw2TgOzfALU5nsaqocTvz6hdLubDuHAk5/XpGbKuxs74zD0M1mKB3IDVedzagMxbm+WG+Oi +n6+Sx+31QrclTDsTBM8clq8cIqPQqwWyTBIjUtz9GVsnnB47ev1CI9sjgBPwvFEVVJSmdz7QdFG9 +URQIOTfLHzSpMJ1ShC5VkLG631UAC9hWLbFJSXKAqWLXwPYYEQRVzXR7z2FwefR7LFxckvzluFqr +TJOVoSfupb7PcSNCupt2LQIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUl0YhVyE12jZVx/PxN3DlCPaTKbYwHwYDVR0jBBgwFoAUl0YhVyE12jZVx/Px +N3DlCPaTKbYwDQYJKoZIhvcNAQELBQADggIBAB3dAmB84DWn5ph76kTOZ0BP8pNuZtQ5iSas000E +PLuHIT839HEl2ku6q5aCgZG27dmxpGWX4m9kWaSW7mDKHyP7Rbr/jyTwyqkxf3kfgLMtMrpkZ2Cv +uVnN35pJ06iCsfmYlIrM4LvgBBuZYLFGZdwIorJGnkSI6pN+VxbSFXJfLkur1J1juONI5f6ELlgK +n0Md/rcYkoZDSw6cMoYsYPXpSOqV7XAp8dUv/TW0V8/bhUiZucJvbI/NeJWsZCj9VrDDb8O+WVLh +X4SPgPL0DTatdrOjteFkdjpY3H1PXlZs5VVZV6Xf8YpmMIzUUmI4d7S+KNfKNsSbBfD4Fdvb8e80 +nR14SohWZ25g/4/Ii+GOvUKpMwpZQhISKvqxnUOOBZuZ2mKtVzazHbYNeS2WuOvyDEsMpZTGMKcm +GS3tTAZQMPH9WD25SxdfGbRqhFS0OE85og2WaMMolP3tLR9Ka0OWLpABEPs4poEL0L9109S5zvE/ +bw4cHjdx5RiHdRk/ULlepEU0rbDK5uUTdg8xFKmOLZTW1YVNcxVPS/KyPu1svf0OnWZzsD2097+o +4BGkxK51CUpjAEggpsadCwmKtODmzj7HPiY46SvepghJAwSQiumPv+i2tCqjI40cHLI5kqiPAlxA +OXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj1oxx +-----END CERTIFICATE----- + +OpenTrust Root CA G2 +==================== +-----BEGIN CERTIFICATE----- +MIIFbzCCA1egAwIBAgISESChaRu/vbm9UpaPI+hIvyYRMA0GCSqGSIb3DQEBDQUAMEAxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcy +MB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM +CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzIwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQDMtlelM5QQgTJT32F+D3Y5z1zCU3UdSXqWON2ic2rxb95eolq5cSG+ +Ntmh/LzubKh8NBpxGuga2F8ORAbtp+Dz0mEL4DKiltE48MLaARf85KxP6O6JHnSrT78eCbY2albz +4e6WiWYkBuTNQjpK3eCasMSCRbP+yatcfD7J6xcvDH1urqWPyKwlCm/61UWY0jUJ9gNDlP7ZvyCV +eYCYitmJNbtRG6Q3ffyZO6v/v6wNj0OxmXsWEH4db0fEFY8ElggGQgT4hNYdvJGmQr5J1WqIP7wt +UdGejeBSzFfdNTVY27SPJIjki9/ca1TSgSuyzpJLHB9G+h3Ykst2Z7UJmQnlrBcUVXDGPKBWCgOz +3GIZ38i1MH/1PCZ1Eb3XG7OHngevZXHloM8apwkQHZOJZlvoPGIytbU6bumFAYueQ4xncyhZW+vj +3CzMpSZyYhK05pyDRPZRpOLAeiRXyg6lPzq1O4vldu5w5pLeFlwoW5cZJ5L+epJUzpM5ChaHvGOz +9bGTXOBut9Dq+WIyiET7vycotjCVXRIouZW+j1MY5aIYFuJWpLIsEPUdN6b4t/bQWVyJ98LVtZR0 +0dX+G7bw5tYee9I8y6jj9RjzIR9u701oBnstXW5DiabA+aC/gh7PU3+06yzbXfZqfUAkBXKJOAGT +y3HCOV0GEfZvePg3DTmEJwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUajn6QiL35okATV59M4PLuG53hq8wHwYDVR0jBBgwFoAUajn6QiL35okATV59 +M4PLuG53hq8wDQYJKoZIhvcNAQENBQADggIBAJjLq0A85TMCl38th6aP1F5Kr7ge57tx+4BkJamz +Gj5oXScmp7oq4fBXgwpkTx4idBvpkF/wrM//T2h6OKQQbA2xx6R3gBi2oihEdqc0nXGEL8pZ0keI +mUEiyTCYYW49qKgFbdEfwFFEVn8nNQLdXpgKQuswv42hm1GqO+qTRmTFAHneIWv2V6CG1wZy7HBG +S4tz3aAhdT7cHcCP009zHIXZ/n9iyJVvttN7jLpTwm+bREx50B1ws9efAvSyB7DH5fitIw6mVskp +EndI2S9G/Tvw/HRwkqWOOAgfZDC2t0v7NqwQjqBSM2OdAzVWxWm9xiNaJ5T2pBL4LTM8oValX9YZ +6e18CL13zSdkzJTaTkZQh+D5wVOAHrut+0dSixv9ovneDiK3PTNZbNTe9ZUGMg1RGUFcPk8G97kr +gCf2o6p6fAbhQ8MTOWIaNr3gKC6UAuQpLmBVrkA9sHSSXvAgZJY/X0VdiLWK2gKgW0VU3jg9CcCo +SmVGFvyqv1ROTVu+OEO3KMqLM6oaJbolXCkvW0pujOotnCr2BXbgd5eAiN1nE28daCSLT7d0geX0 +YJ96Vdc+N9oWaz53rK4YcJUIeSkDiv7BO7M/Gg+kO14fWKGVyasvc0rQLW6aWQ9VGHgtPFGml4vm +u7JwqkwR3v98KzfUetF3NI/n+UL3PIEMS1IK +-----END CERTIFICATE----- + +OpenTrust Root CA G3 +==================== +-----BEGIN CERTIFICATE----- +MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAxCzAJBgNVBAYT +AkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEczMB4X +DTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9w +ZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAARK7liuTcpm3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5B +ta1doYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4GA1UdDwEB +/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAf +BgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAKBggqhkjOPQQDAwNpADBmAjEAj6jcnboM +BBf6Fek9LykBl7+BFjNAk2z8+e2AcG+qj9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta +3U1fJAuwACEl74+nBCZx4nxp5V2a+EEfOzmTk51V6s2N8fvB +-----END CERTIFICATE----- + +ISRG Root X1 +============ +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE +BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD +EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG +EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT +DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r +Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1 +3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K +b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN +Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ +4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf +1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu +hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH +usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r +OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G +A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY +9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV +0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt +hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw +TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx +e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA +JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD +YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n +JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ +m+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- + +AC RAIZ FNMT-RCM +================ +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT +AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw +MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD +TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf +qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr +btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL +j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou +08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw +WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT +tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ +47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC +ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa +i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o +dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s +D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ +j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT +Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW ++YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 +Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d +8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm +5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG +rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- + +Amazon Root CA 1 +================ +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD +VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1 +MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv +bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH +FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ +gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t +dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce +VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3 +DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM +CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy +8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa +2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2 +xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- + +Amazon Root CA 2 +================ +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD +VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1 +MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv +bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4 +kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp +N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9 +AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd +fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx +kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS +btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0 +Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN +c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+ +3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw +DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA +A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY ++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE +YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW +xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ +gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW +aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV +Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3 +KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi +JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw= +-----END CERTIFICATE----- + +Amazon Root CA 3 +================ +-----BEGIN CERTIFICATE----- +MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG +EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy +NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ +MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB +f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr +Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43 +rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc +eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw== +-----END CERTIFICATE----- + +Amazon Root CA 4 +================ +-----BEGIN CERTIFICATE----- +MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG +EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy +NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ +MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN +/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri +83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA +MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1 +AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA== +-----END CERTIFICATE----- + +LuxTrust Global Root 2 +====================== +-----BEGIN CERTIFICATE----- +MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQELBQAwRjELMAkG +A1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNVBAMMFkx1eFRydXN0IEdsb2Jh +bCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUwMzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEW +MBQGA1UECgwNTHV4VHJ1c3QgUy5BLjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCC +AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wm +Kb3FibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTemhfY7RBi2 +xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1EMShduxq3sVs35a0VkBC +wGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsnXpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm +1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkm +FRseTJIpgp7VkoGSQXAZ96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niF +wpN6cj5mj5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4gDEa/ +a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+8kPREd8vZS9kzl8U +ubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2jX5t/Lax5Gw5CMZdjpPuKadUiDTSQ +MC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmHhFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB +/zBCBgNVHSAEOzA5MDcGByuBKwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5 +Lmx1eHRydXN0Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT ++Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQELBQADggIBAGoZ +FO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9BzZAcg4atmpZ1gDlaCDdLnIN +H2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTOjFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW +7MM3LGVYvlcAGvI1+ut7MV3CwRI9loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIu +ZY+kt9J/Z93I055cqqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWA +VWe+2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/JEAdemrR +TxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKrezrnK+T+Tb/mjuuqlPpmt +/f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQfLSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc +7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31I +iyBMz2TWuJdGsE7RKlY6oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr +-----END CERTIFICATE----- + +TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 +============================================= +-----BEGIN CERTIFICATE----- +MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT +D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr +IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g +TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp +ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD +VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt +c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth +bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11 +IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8 +6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc +wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0 +3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9 +WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU +ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ +KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh +AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc +lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R +e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j +q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= +-----END CERTIFICATE----- diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/src/CaBundle.php b/wp/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/src/CaBundle.php new file mode 100644 index 00000000..10bb87c8 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/composer/ca-bundle/src/CaBundle.php @@ -0,0 +1,308 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +namespace Composer\CaBundle; + +use Psr\Log\LoggerInterface; +use Symfony\Component\Process\PhpProcess; + +/** + * @author Chris Smith + * @author Jordi Boggiano + */ +class CaBundle +{ + private static $caPath; + private static $caFileValidity = array(); + private static $useOpensslParse; + + /** + * Returns the system CA bundle path, or a path to the bundled one + * + * This method was adapted from Sslurp. + * https://github.com/EvanDotPro/Sslurp + * + * (c) Evan Coury + * + * For the full copyright and license information, please see below: + * + * Copyright (c) 2013, Evan Coury + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * @param LoggerInterface $logger optional logger for information about which CA files were loaded + * @return string path to a CA bundle file or directory + */ + public static function getSystemCaRootBundlePath(LoggerInterface $logger = null) + { + if (self::$caPath !== null) { + return self::$caPath; + } + + // If SSL_CERT_FILE env variable points to a valid certificate/bundle, use that. + // This mimics how OpenSSL uses the SSL_CERT_FILE env variable. + $envCertFile = getenv('SSL_CERT_FILE'); + if ($envCertFile && is_readable($envCertFile) && static::validateCaFile($envCertFile, $logger)) { + return self::$caPath = $envCertFile; + } + + // If SSL_CERT_DIR env variable points to a valid certificate/bundle, use that. + // This mimics how OpenSSL uses the SSL_CERT_FILE env variable. + $envCertDir = getenv('SSL_CERT_DIR'); + if ($envCertDir && is_dir($envCertDir) && is_readable($envCertDir)) { + return self::$caPath = $envCertDir; + } + + $configured = ini_get('openssl.cafile'); + if ($configured && strlen($configured) > 0 && is_readable($configured) && static::validateCaFile($configured, $logger)) { + return self::$caPath = $configured; + } + + $configured = ini_get('openssl.capath'); + if ($configured && is_dir($configured) && is_readable($configured)) { + return self::$caPath = $configured; + } + + $caBundlePaths = array( + '/etc/pki/tls/certs/ca-bundle.crt', // Fedora, RHEL, CentOS (ca-certificates package) + '/etc/ssl/certs/ca-certificates.crt', // Debian, Ubuntu, Gentoo, Arch Linux (ca-certificates package) + '/etc/ssl/ca-bundle.pem', // SUSE, openSUSE (ca-certificates package) + '/usr/local/share/certs/ca-root-nss.crt', // FreeBSD (ca_root_nss_package) + '/usr/ssl/certs/ca-bundle.crt', // Cygwin + '/opt/local/share/curl/curl-ca-bundle.crt', // OS X macports, curl-ca-bundle package + '/usr/local/share/curl/curl-ca-bundle.crt', // Default cURL CA bunde path (without --with-ca-bundle option) + '/usr/share/ssl/certs/ca-bundle.crt', // Really old RedHat? + '/etc/ssl/cert.pem', // OpenBSD + '/usr/local/etc/ssl/cert.pem', // FreeBSD 10.x + '/usr/local/etc/openssl/cert.pem', // OS X homebrew, openssl package + ); + + foreach ($caBundlePaths as $caBundle) { + if (@is_readable($caBundle) && static::validateCaFile($caBundle, $logger)) { + return self::$caPath = $caBundle; + } + } + + foreach ($caBundlePaths as $caBundle) { + $caBundle = dirname($caBundle); + if (@is_dir($caBundle) && glob($caBundle.'/*')) { + return self::$caPath = $caBundle; + } + } + + return self::$caPath = static::getBundledCaBundlePath(); // Bundled CA file, last resort + } + + /** + * Returns the path to the bundled CA file + * + * In case you don't want to trust the user or the system, you can use this directly + * + * @return string path to a CA bundle file + */ + public static function getBundledCaBundlePath() + { + $caBundleFile = __DIR__.'/../res/cacert.pem'; + + // cURL does not understand 'phar://' paths + // see https://github.com/composer/ca-bundle/issues/10 + if (0 === strpos($caBundleFile, 'phar://')) { + file_put_contents( + $tempCaBundleFile = tempnam(sys_get_temp_dir(), 'openssl-ca-bundle-'), + file_get_contents($caBundleFile) + ); + + register_shutdown_function(function() use ($tempCaBundleFile) { + @unlink($tempCaBundleFile); + }); + + $caBundleFile = $tempCaBundleFile; + } + + return $caBundleFile; + } + + /** + * Validates a CA file using opensl_x509_parse only if it is safe to use + * + * @param string $filename + * @param LoggerInterface $logger optional logger for information about which CA files were loaded + * + * @return bool + */ + public static function validateCaFile($filename, LoggerInterface $logger = null) + { + static $warned = false; + + if (isset(self::$caFileValidity[$filename])) { + return self::$caFileValidity[$filename]; + } + + $contents = file_get_contents($filename); + + // assume the CA is valid if php is vulnerable to + // https://www.sektioneins.de/advisories/advisory-012013-php-openssl_x509_parse-memory-corruption-vulnerability.html + if (!static::isOpensslParseSafe()) { + if (!$warned && $logger) { + $logger->warning(sprintf( + 'Your version of PHP, %s, is affected by CVE-2013-6420 and cannot safely perform certificate validation, we strongly suggest you upgrade.', + PHP_VERSION + )); + $warned = true; + } + + $isValid = !empty($contents); + } else { + $isValid = (bool) openssl_x509_parse($contents); + } + + if ($logger) { + $logger->debug('Checked CA file '.realpath($filename).': '.($isValid ? 'valid' : 'invalid')); + } + + return self::$caFileValidity[$filename] = $isValid; + } + + /** + * Test if it is safe to use the PHP function openssl_x509_parse(). + * + * This checks if OpenSSL extensions is vulnerable to remote code execution + * via the exploit documented as CVE-2013-6420. + * + * @return bool + */ + public static function isOpensslParseSafe() + { + if (null !== self::$useOpensslParse) { + return self::$useOpensslParse; + } + + if (PHP_VERSION_ID >= 50600) { + return self::$useOpensslParse = true; + } + + // Vulnerable: + // PHP 5.3.0 - PHP 5.3.27 + // PHP 5.4.0 - PHP 5.4.22 + // PHP 5.5.0 - PHP 5.5.6 + if ( + (PHP_VERSION_ID < 50400 && PHP_VERSION_ID >= 50328) + || (PHP_VERSION_ID < 50500 && PHP_VERSION_ID >= 50423) + || (PHP_VERSION_ID < 50600 && PHP_VERSION_ID >= 50507) + ) { + // This version of PHP has the fix for CVE-2013-6420 applied. + return self::$useOpensslParse = true; + } + + if (defined('PHP_WINDOWS_VERSION_BUILD')) { + // Windows is probably insecure in this case. + return self::$useOpensslParse = false; + } + + $compareDistroVersionPrefix = function ($prefix, $fixedVersion) { + $regex = '{^'.preg_quote($prefix).'([0-9]+)$}'; + + if (preg_match($regex, PHP_VERSION, $m)) { + return ((int) $m[1]) >= $fixedVersion; + } + + return false; + }; + + // Hard coded list of PHP distributions with the fix backported. + if ( + $compareDistroVersionPrefix('5.3.3-7+squeeze', 18) // Debian 6 (Squeeze) + || $compareDistroVersionPrefix('5.4.4-14+deb7u', 7) // Debian 7 (Wheezy) + || $compareDistroVersionPrefix('5.3.10-1ubuntu3.', 9) // Ubuntu 12.04 (Precise) + ) { + return self::$useOpensslParse = true; + } + + // Symfony Process component is missing so we assume it is unsafe at this point + if (!class_exists('Symfony\Component\Process\PhpProcess')) { + return self::$useOpensslParse = false; + } + + // This is where things get crazy, because distros backport security + // fixes the chances are on NIX systems the fix has been applied but + // it's not possible to verify that from the PHP version. + // + // To verify exec a new PHP process and run the issue testcase with + // known safe input that replicates the bug. + + // Based on testcase in https://github.com/php/php-src/commit/c1224573c773b6845e83505f717fbf820fc18415 + // changes in https://github.com/php/php-src/commit/76a7fd893b7d6101300cc656058704a73254d593 + $cert = 'LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVwRENDQTR5Z0F3SUJBZ0lKQUp6dThyNnU2ZUJjTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUhETVFzd0NRWUQKVlFRR0V3SkVSVEVjTUJvR0ExVUVDQXdUVG05eVpISm9aV2x1TFZkbGMzUm1ZV3hsYmpFUU1BNEdBMVVFQnd3SApTOE9Ed3Jac2JqRVVNQklHQTFVRUNnd0xVMlZyZEdsdmJrVnBibk14SHpBZEJnTlZCQXNNRmsxaGJHbGphVzkxCmN5QkRaWEowSUZObFkzUnBiMjR4SVRBZkJnTlZCQU1NR0cxaGJHbGphVzkxY3k1elpXdDBhVzl1WldsdWN5NWsKWlRFcU1DZ0dDU3FHU0liM0RRRUpBUlliYzNSbFptRnVMbVZ6YzJWeVFITmxhM1JwYjI1bGFXNXpMbVJsTUhVWQpaREU1TnpBd01UQXhNREF3TURBd1dnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEKQUFBQUFBQVhEVEUwTVRFeU9ERXhNemt6TlZvd2djTXhDekFKQmdOVkJBWVRBa1JGTVJ3d0dnWURWUVFJREJOTwpiM0prY21obGFXNHRWMlZ6ZEdaaGJHVnVNUkF3RGdZRFZRUUhEQWRMdzRQQ3RteHVNUlF3RWdZRFZRUUtEQXRUClpXdDBhVzl1UldsdWN6RWZNQjBHQTFVRUN3d1dUV0ZzYVdOcGIzVnpJRU5sY25RZ1UyVmpkR2x2YmpFaE1COEcKQTFVRUF3d1liV0ZzYVdOcGIzVnpMbk5sYTNScGIyNWxhVzV6TG1SbE1Tb3dLQVlKS29aSWh2Y05BUWtCRmh0egpkR1ZtWVc0dVpYTnpaWEpBYzJWcmRHbHZibVZwYm5NdVpHVXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCCkR3QXdnZ0VLQW9JQkFRRERBZjNobDdKWTBYY0ZuaXlFSnBTU0RxbjBPcUJyNlFQNjV1c0pQUnQvOFBhRG9xQnUKd0VZVC9OYSs2ZnNnUGpDMHVLOURaZ1dnMnRIV1dvYW5TYmxBTW96NVBINlorUzRTSFJaN2UyZERJalBqZGhqaAowbUxnMlVNTzV5cDBWNzk3R2dzOWxOdDZKUmZIODFNTjJvYlhXczROdHp0TE11RDZlZ3FwcjhkRGJyMzRhT3M4CnBrZHVpNVVhd1Raa3N5NXBMUEhxNWNNaEZHbTA2djY1Q0xvMFYyUGQ5K0tBb2tQclBjTjVLTEtlYno3bUxwazYKU01lRVhPS1A0aWRFcXh5UTdPN2ZCdUhNZWRzUWh1K3ByWTNzaTNCVXlLZlF0UDVDWm5YMmJwMHdLSHhYMTJEWAoxbmZGSXQ5RGJHdkhUY3lPdU4rblpMUEJtM3ZXeG50eUlJdlZBZ01CQUFHalFqQkFNQWtHQTFVZEV3UUNNQUF3CkVRWUpZSVpJQVliNFFnRUJCQVFEQWdlQU1Bc0dBMVVkRHdRRUF3SUZvREFUQmdOVkhTVUVEREFLQmdnckJnRUYKQlFjREFqQU5CZ2txaGtpRzl3MEJBUVVGQUFPQ0FRRUFHMGZaWVlDVGJkajFYWWMrMVNub2FQUit2SThDOENhRAo4KzBVWWhkbnlVNGdnYTBCQWNEclk5ZTk0ZUVBdTZacXljRjZGakxxWFhkQWJvcHBXb2NyNlQ2R0QxeDMzQ2tsClZBcnpHL0t4UW9oR0QySmVxa2hJTWxEb214SE83a2EzOStPYThpMnZXTFZ5alU4QVp2V01BcnVIYTRFRU55RzcKbFcyQWFnYUZLRkNyOVRuWFRmcmR4R1ZFYnY3S1ZRNmJkaGc1cDVTanBXSDErTXEwM3VSM1pYUEJZZHlWODMxOQpvMGxWajFLRkkyRENML2xpV2lzSlJvb2YrMWNSMzVDdGQwd1lCY3BCNlRac2xNY09QbDc2ZHdLd0pnZUpvMlFnClpzZm1jMnZDMS9xT2xOdU5xLzBUenprVkd2OEVUVDNDZ2FVK1VYZTRYT1Z2a2NjZWJKbjJkZz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K'; + $script = <<<'EOT' + +error_reporting(-1); +$info = openssl_x509_parse(base64_decode('%s')); +var_dump(PHP_VERSION, $info['issuer']['emailAddress'], $info['validFrom_time_t']); + +EOT; + $script = '<'."?php\n".sprintf($script, $cert); + + try { + $process = new PhpProcess($script); + $process->mustRun(); + } catch (\Exception $e) { + // In the case of any exceptions just accept it is not possible to + // determine the safety of openssl_x509_parse and bail out. + return self::$useOpensslParse = false; + } + + $output = preg_split('{\r?\n}', trim($process->getOutput())); + $errorOutput = trim($process->getErrorOutput()); + + if ( + count($output) === 3 + && $output[0] === sprintf('string(%d) "%s"', strlen(PHP_VERSION), PHP_VERSION) + && $output[1] === 'string(27) "stefan.esser@sektioneins.de"' + && $output[2] === 'int(-1)' + && preg_match('{openssl_x509_parse\(\): illegal (?:ASN1 data type for|length in) timestamp in - on line \d+}', $errorOutput) + ) { + // This PHP has the fix backported probably by a distro security team. + return self::$useOpensslParse = true; + } + + return self::$useOpensslParse = false; + } + + /** + * Resets the static caches + */ + public static function reset() + { + self::$caFileValidity = array(); + self::$caPath = null; + self::$useOpensslParse = null; + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/composer/installed.json b/wp/wp-content/ip-geo-api/maxmind/vendor/composer/installed.json new file mode 100644 index 00000000..9349341b --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/composer/installed.json @@ -0,0 +1,221 @@ +[ + { + "name": "composer/ca-bundle", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/composer/ca-bundle.git", + "reference": "943b2c4fcad1ef178d16a713c2468bf7e579c288" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/943b2c4fcad1ef178d16a713c2468bf7e579c288", + "reference": "943b2c4fcad1ef178d16a713c2468bf7e579c288", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35", + "psr/log": "^1.0", + "symfony/process": "^2.5 || ^3.0 || ^4.0" + }, + "time": "2017-11-29T09:37:33+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Composer\\CaBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ] + }, + { + "name": "geoip2/geoip2", + "version": "v2.7.0", + "version_normalized": "2.7.0.0", + "source": { + "type": "git", + "url": "https://github.com/maxmind/GeoIP2-php.git", + "reference": "ca9f9a244474d97eac1ef542aaced7cc944bafbe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/ca9f9a244474d97eac1ef542aaced7cc944bafbe", + "reference": "ca9f9a244474d97eac1ef542aaced7cc944bafbe", + "shasum": "" + }, + "require": { + "maxmind-db/reader": "~1.0", + "maxmind/web-service-common": "~0.4", + "php": ">=5.4" + }, + "require-dev": { + "apigen/apigen": "*", + "friendsofphp/php-cs-fixer": "2.*", + "phpunit/phpunit": "4.*", + "squizlabs/php_codesniffer": "3.*" + }, + "time": "2017-10-27T19:20:22+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "GeoIp2\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Gregory J. Oschwald", + "email": "goschwald@maxmind.com", + "homepage": "http://www.maxmind.com/" + } + ], + "description": "MaxMind GeoIP2 PHP API", + "homepage": "https://github.com/maxmind/GeoIP2-php", + "keywords": [ + "IP", + "geoip", + "geoip2", + "geolocation", + "maxmind" + ] + }, + { + "name": "maxmind-db/reader", + "version": "v1.2.0", + "version_normalized": "1.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git", + "reference": "1647820dfbcb552222fb5feb3a8387e2636394c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/1647820dfbcb552222fb5feb3a8387e2636394c9", + "reference": "1647820dfbcb552222fb5feb3a8387e2636394c9", + "shasum": "" + }, + "require": { + "php": ">=5.4" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "2.*", + "phpunit/phpunit": "4.*", + "satooshi/php-coveralls": "1.0.*", + "squizlabs/php_codesniffer": "3.*" + }, + "suggest": { + "ext-bcmath": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder", + "ext-gmp": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder", + "ext-maxminddb": "A C-based database decoder that provides significantly faster lookups" + }, + "time": "2017-10-27T19:15:33+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "MaxMind\\Db\\": "src/MaxMind/Db" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Gregory J. Oschwald", + "email": "goschwald@maxmind.com", + "homepage": "http://www.maxmind.com/" + } + ], + "description": "MaxMind DB Reader API", + "homepage": "https://github.com/maxmind/MaxMind-DB-Reader-php", + "keywords": [ + "database", + "geoip", + "geoip2", + "geolocation", + "maxmind" + ] + }, + { + "name": "maxmind/web-service-common", + "version": "v0.4.0", + "version_normalized": "0.4.0.0", + "source": { + "type": "git", + "url": "https://github.com/maxmind/web-service-common-php.git", + "reference": "622f7c732a7f9c4c62497fc103939e042b6bdb88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/622f7c732a7f9c4c62497fc103939e042b6bdb88", + "reference": "622f7c732a7f9c4c62497fc103939e042b6bdb88", + "shasum": "" + }, + "require": { + "composer/ca-bundle": "^1.0.3", + "ext-curl": "*", + "ext-json": "*", + "php": ">=5.4" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "2.*", + "phpunit/phpunit": "4.*", + "squizlabs/php_codesniffer": "3.*" + }, + "time": "2017-07-06T17:48:21+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "MaxMind\\Exception\\": "src/Exception", + "MaxMind\\WebService\\": "src/WebService" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Gregory Oschwald", + "email": "goschwald@maxmind.com" + } + ], + "description": "Internal MaxMind Web Service API", + "homepage": "https://github.com/maxmind/web-service-common-php" + } +] diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/.gitmodules b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/.gitmodules new file mode 100644 index 00000000..820339f2 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/.gitmodules @@ -0,0 +1,3 @@ +[submodule "maxmind-db"] + path = maxmind-db + url = git://github.com/maxmind/MaxMind-DB.git diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/.php_cs b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/.php_cs new file mode 100644 index 00000000..52125736 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/.php_cs @@ -0,0 +1,34 @@ +setRiskyAllowed(true) + ->setRules([ + '@Symfony' => true, + '@Symfony:risky' => true, + 'array_syntax' => ['syntax' => 'short'], + 'combine_consecutive_unsets' => true, + 'concat_space' => [ 'spacing' => 'one'], + 'heredoc_to_nowdoc' => true, + 'list_syntax' => ['syntax' => 'long'], + 'no_extra_consecutive_blank_lines' => ['break', 'continue', 'extra', 'return', 'throw', 'use', 'parenthesis_brace_block', 'square_brace_block', 'curly_brace_block'], + 'no_short_echo_tag' => true, + 'no_unreachable_default_argument_value' => true, + 'no_useless_else' => true, + 'no_useless_return' => true, + 'ordered_imports' => true, + 'pre_increment' => false, + 'php_unit_strict' => true, + 'php_unit_test_class_requires_covers' => true, + 'phpdoc_add_missing_param_annotation' => true, + 'phpdoc_no_alias_tag' => false, + 'phpdoc_order' => true, + 'semicolon_after_instruction' => true, + 'strict_comparison' => true, + 'strict_param' => true, + 'yoda_style' => false, + ]) + ->setFinder( + PhpCsFixer\Finder::create() + ->in(__DIR__) + ) +; diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/CHANGELOG.md b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/CHANGELOG.md new file mode 100644 index 00000000..0cb3348a --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/CHANGELOG.md @@ -0,0 +1,250 @@ +CHANGELOG +========= + +2.7.0 (2017-10-27) +------------------ + +* The following new anonymizer properties were added to `GeoIp2\Record\Traits` + for use with GeoIP2 Precision Insights: `isAnonymous`, `isAnonymousVpn`, + `isHostingProvider`, `isPublicProxy`, and `isTorExitNode`. + +2.6.0 (2017-07-10) +----------------- + +* Code clean-up and tidying. +* Set minimum required PHP version to 5.4 in `composer.json`. Previously, + 5.3 would work but was not tested. Now 5.4 is hard minimum version. + +2.5.0 (2017-05-08) +------------------ + +* Support for PHP 5.3 was dropped. +* Added support for GeoLite2 ASN database. + +2.4.5 (2017-01-31) +------------------ + +* Additional error checking on the data returned from `MaxMind\Db\Reader` + was added to help detect corrupt databases. GitHub #83. + +2.4.4 (2016-10-11) +------------------ + +* `isset()` on `mostSpecificSubdivision` attribute now returns the + correct value. Reported by Juan Francisco Giordana. GitHub #81. + +2.4.3 (2016-10-11) +------------------ + +* `isset()` on `name` attribute now returns the correct value. Reported by + Juan Francisco Giordana. GitHub #79. + +2.4.2 (2016-08-17) +------------------ + +* Updated documentation to clarify what the accuracy radius refers to. +* Upgraded `maxmind/web-service-common` to 0.3.0. This version uses + `composer/ca-bundle` rather than our own CA bundle. GitHub #75. +* Improved PHP documentation generation. + +2.4.1 (2016-06-10) +------------------ + +* Corrected type annotations in documentation. GitHub #66. +* Updated documentation to reflect that the accuracy radius is now included + in City. +* Upgraded web service client, which supports setting a proxy. GitHub #59. + +2.4.0 (2016-04-15) +------------------ + +* Added support for the GeoIP2 Enterprise database. + +2.3.3 (2015-09-24) +------------------ + +* Corrected case on `JsonSerializable` interface. Reported by Axel Etcheverry. + GitHub #56. + +2.3.2 (2015-09-23) +------------------ + +* `JsonSerializable` compatibility interface was moved to `GeoIp2\Compat` + rather than the global namespace to prevent autoloading issues. Reported by + Tomas Buteler. GitHub #54. +* Missing documentation for the `$postal` property was added to the + `GeoIp2\Model\City` class. Fix by Roy Sindre Norangshol. GitHub #51. +* In the Phar distribution, source files for this module no longer have their + documentation stripped, allowing IDE introspection to work properly. + Reported by Dominic Black. GitHub #52. + +2.3.1 (2015-06-30) +------------------ + +* Updated `maxmind/web-service-common` to version with fixes for PHP 5.3 and + 5.4. + +2.3.0 (2015-06-29) +------------------ + +* Support for demographics fields `averageIncome` and `populationDensity` in + the `Location` record, returned by the Insights endpoint. +* The `isAnonymousProxy` and `isSatelliteProvider` properties on + `GeoIP2\Record\Traits` have been deprecated. Please use our [GeoIP2 + Anonymous IP database](https://www.maxmind.com/en/geoip2-anonymous-ip-database) + to determine whether an IP address is used by an anonymizing service. + +2.2.0-beta1 (2015-06-09) +------------------------ + +* Typo fix in documentation. + +2.2.0-alpha2 (2015-06-01) +------------------------- + +* `maxmind-ws/web-service-common` was renamed to `maxmind/web-service-common`. + +2.2.0-alpha1 (2015-05-22) +------------------------- + +* The library no longer uses Guzzle and instead uses curl directly. +* Support for `timeout` and `connectTimout` were added to the `$options` array + passed to the `GeoIp2\WebService\Client` constructor. Pull request by Will + Bradley. GitHub #36. + +2.1.1 (2014-12-03) +------------------ + +* The 2.1.0 Phar builds included a shebang line, causing issues when loading + it as a library. This has been corrected. GitHub #33. + +2.1.0 (2014-10-29) +------------------ + +* Update ApiGen dependency to version that isn't broken on case sensitive + file systems. +* Added support for the GeoIP2 Anonymous IP database. The + `GeoIP2\Database\Reader` class now has an `anonymousIp` method which returns + a `GeoIP2\Model\AnonymousIp` object. +* Boolean attributes like those in the `GeoIP2\Record\Traits` class now return + `false` instead of `null` when they were not true. + +2.0.0 (2014-09-22) +------------------ + +* First production release. + +0.9.0 (2014-09-15) +------------------ + +* IMPORTANT: The deprecated `omni()` and `cityIspOrg()` methods have been + removed from `GeoIp2\WebService\Client`. + +0.8.1 (2014-09-12) +------------------ + +* The check added to the `GeoIP2\Database\Reader` lookup methods in 0.8.0 did + not work with the GeoIP2 City Database Subset by Continent with World + Countries. This has been fixed. Fixes GitHub issue #23. + +0.8.0 (2014-09-10) +------------------ + +* The `GeoIp2\Database\Reader` lookup methods (e.g., `city()`, `isp()`) now + throw a `BadMethodCallException` if they are used with a database that + does not match the method. In particular, doing a `city()` lookup on a + GeoIP2 Country database will result in an exception, and vice versa. +* A `metadata()` method has been added to the `GeoIP2\Database\Reader` class. + This returns a `MaxMind\Db\Reader\Metadata` class with information about the + database. +* The name attribute was missing from the RepresentedCountry class. + +0.7.0 (2014-07-22) +------------------ + +* The web service client API has been updated for the v2.1 release of the web + service. In particular, the `cityIspOrg` and `omni` methods on + `GeoIp2\WebService\Client` should be considered deprecated. The `city` + method now provides all of the data formerly provided by `cityIspOrg`, and + the `omni` method has been replaced by the `insights` method. +* Support was added for GeoIP2 Connection Type, Domain and ISP databases. + + +0.6.3 (2014-05-12) +------------------ + +* With the previous Phar builds, some users received `phar error: invalid url + or non-existent phar` errors. The correct alias is now used for the Phar, + and this should no longer be an issue. + +0.6.2 (2014-05-08) +------------------ + +* The Phar build was broken with Guzzle 3.9.0+. This has been fixed. + +0.6.1 (2014-05-01) +------------------ + +* This API now officially supports HHVM. +* The `maxmind-db/reader` dependency was updated to a version that does not + require BC Math. +* The Composer compatibility autoload rules are now targeted more narrowly. +* A `box.json` file is included to build a Phar package. + +0.6.0 (2014-02-19) +------------------ + +* This API is now licensed under the Apache License, Version 2.0. +* Model and record classes now implement `JsonSerializable`. +* `isset` now works with model and record classes. + +0.5.0 (2013-10-21) +------------------ + +* Renamed $languages constructor parameters to $locales for both the Client + and Reader classes. +* Documentation and code clean-up (Ben Morel). +* Added the interface `GeoIp2\ProviderInterface`, which is implemented by both + `\GeoIp2\Database\Reader` and `\GeoIp2\WebService\Client`. + +0.4.0 (2013-07-16) +------------------ + +* This is the first release with the GeoIP2 database reader. Please see the + `README.md` file and the `\GeoIp2\Database\Reader` class. +* The general exception classes were replaced with specific exception classes + representing particular types of errors, such as an authentication error. + +0.3.0 (2013-07-12) +------------------ + +* In namespaces and class names, "GeoIP2" was renamed to "GeoIp2" to improve + consistency. + +0.2.1 (2013-06-10) +------------------ + +* First official beta release. +* Documentation updates and corrections. + +0.2.0 (2013-05-29) +------------------ + +* `GenericException` was renamed to `GeoIP2Exception`. +* We now support more languages. The new languages are de, es, fr, and pt-BR. +* The REST API now returns a record with data about your account. There is + a new `GeoIP\Records\MaxMind` class for this data. +* The `continentCode` attribute on `Continent` was renamed to `code`. +* Documentation updates. + +0.1.1 (2013-05-14) +------------------ + +* Updated Guzzle version requirement. +* Fixed Composer example in README.md. + + +0.1.0 (2013-05-13) +------------------ + +* Initial release. diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/LICENSE b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/LICENSE new file mode 100644 index 00000000..62589edd --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/README.md b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/README.md new file mode 100644 index 00000000..39e7be4e --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/README.md @@ -0,0 +1,401 @@ +# GeoIP2 PHP API # + +## Description ## + +This package provides an API for the GeoIP2 +[web services](https://dev.maxmind.com/geoip/geoip2/web-services) and +[databases](https://dev.maxmind.com/geoip/geoip2/downloadable). The API also +works with the free +[GeoLite2 databases](https://dev.maxmind.com/geoip/geoip2/geolite2/). + +## Install via Composer ## + +We recommend installing this package with [Composer](https://getcomposer.org/). + +### Download Composer ### + +To download Composer, run in the root directory of your project: + +```bash +curl -sS https://getcomposer.org/installer | php +``` + +You should now have the file `composer.phar` in your project directory. + +### Install Dependencies ### + +Run in your project root: + +``` +php composer.phar require geoip2/geoip2:~2.0 +``` + +You should now have the files `composer.json` and `composer.lock` as well as +the directory `vendor` in your project directory. If you use a version control +system, `composer.json` should be added to it. + +### Require Autoloader ### + +After installing the dependencies, you need to require the Composer autoloader +from your code: + +```php +require 'vendor/autoload.php'; +``` + +## Install via Phar ## + +Although we strongly recommend using Composer, we also provide a +[phar archive](https://php.net/manual/en/book.phar.php) containing most of the +dependencies for GeoIP2. Our latest phar archive is available on +[our releases page](https://github.com/maxmind/GeoIP2-php/releases). + +### Install Dependencies ### + +In order to use the phar archive, you must have the PHP +[Phar extension](https://php.net/manual/en/book.phar.php) installed and +enabled. + +If you will be making web service requests, you must have the PHP +[cURL extension](https://php.net/manual/en/book.curl.php) +installed to use this archive. For Debian based distributions, this can +typically be found in the the `php-curl` package. For other operating +systems, please consult the relevant documentation. After installing the +extension you may need to restart your web server. + +If you are missing this extension, you will see errors like the following: + +``` +PHP Fatal error: Uncaught Error: Call to undefined function MaxMind\WebService\curl_version() +``` + +### Require Package ### + +To use the archive, just require it from your script: + +```php +require 'geoip2.phar'; +``` + +## Optional C Extension ## + +The [MaxMind DB API](https://github.com/maxmind/MaxMind-DB-Reader-php) +includes an optional C extension that you may install to dramatically increase +the performance of lookups in GeoIP2 or GeoLite2 databases. To install, please +follow the instructions included with that API. + +The extension has no effect on web-service lookups. + +## IP Geolocation Usage ## + +IP geolocation is inherently imprecise. Locations are often near the center of +the population. Any location provided by a GeoIP2 database or web service +should not be used to identify a particular address or household. + +## Database Reader ## + +### Usage ### + +To use this API, you must create a new `\GeoIp2\Database\Reader` object with +the path to the database file as the first argument to the constructor. You +may then call the method corresponding to the database you are using. + +If the lookup succeeds, the method call will return a model class for the +record in the database. This model in turn contains multiple container +classes for the different parts of the data such as the city in which the +IP address is located. + +If the record is not found, a `\GeoIp2\Exception\AddressNotFoundException` +is thrown. If the database is invalid or corrupt, a +`\MaxMind\Db\InvalidDatabaseException` will be thrown. + +See the API documentation for more details. + +### City Example ### + +```php +city('128.101.101.101'); + +print($record->country->isoCode . "\n"); // 'US' +print($record->country->name . "\n"); // 'United States' +print($record->country->names['zh-CN'] . "\n"); // '美国' + +print($record->mostSpecificSubdivision->name . "\n"); // 'Minnesota' +print($record->mostSpecificSubdivision->isoCode . "\n"); // 'MN' + +print($record->city->name . "\n"); // 'Minneapolis' + +print($record->postal->code . "\n"); // '55455' + +print($record->location->latitude . "\n"); // 44.9733 +print($record->location->longitude . "\n"); // -93.2323 + +``` + +### Anonymous IP Example ### + +```php +anonymousIp('128.101.101.101'); + +if ($record->isAnonymous) { print "anon\n"; } +print($record->ipAddress . "\n"); // '128.101.101.101' + +``` + +### Connection-Type Example ### + +```php +connectionType('128.101.101.101'); + +print($record->connectionType . "\n"); // 'Corporate' +print($record->ipAddress . "\n"); // '128.101.101.101' + +``` + +### Domain Example ### + +```php +domain('128.101.101.101'); + +print($record->domain . "\n"); // 'umn.edu' +print($record->ipAddress . "\n"); // '128.101.101.101' + +``` + +### Enterprise Example ### + +```php +enterprise method to do a lookup in the Enterprise database +$record = $reader->enterprise('128.101.101.101'); + +print($record->country->confidence . "\n"); // 99 +print($record->country->isoCode . "\n"); // 'US' +print($record->country->name . "\n"); // 'United States' +print($record->country->names['zh-CN'] . "\n"); // '美国' + +print($record->mostSpecificSubdivision->confidence . "\n"); // 77 +print($record->mostSpecificSubdivision->name . "\n"); // 'Minnesota' +print($record->mostSpecificSubdivision->isoCode . "\n"); // 'MN' + +print($record->city->confidence . "\n"); // 60 +print($record->city->name . "\n"); // 'Minneapolis' + +print($record->postal->code . "\n"); // '55455' + +print($record->location->accuracyRadius . "\n"); // 50 +print($record->location->latitude . "\n"); // 44.9733 +print($record->location->longitude . "\n"); // -93.2323 + +``` + +### ISP Example ### + +```php +isp('128.101.101.101'); + +print($record->autonomousSystemNumber . "\n"); // 217 +print($record->autonomousSystemOrganization . "\n"); // 'University of Minnesota' +print($record->isp . "\n"); // 'University of Minnesota' +print($record->organization . "\n"); // 'University of Minnesota' + +print($record->ipAddress . "\n"); // '128.101.101.101' + +``` + +## Web Service Client ## + +### Usage ### + +To use this API, you must create a new `\GeoIp2\WebService\Client` +object with your `$userId` and `$licenseKey`, then you call the method +corresponding to a specific end point, passing it the IP address you want to +look up. + +If the request succeeds, the method call will return a model class for the end +point you called. This model in turn contains multiple record classes, each of +which represents part of the data returned by the web service. + +If there is an error, a structured exception is thrown. + +See the API documentation for more details. + +### Example ### + +```php +city('128.101.101.101'); + +print($record->country->isoCode . "\n"); // 'US' +print($record->country->name . "\n"); // 'United States' +print($record->country->names['zh-CN'] . "\n"); // '美国' + +print($record->mostSpecificSubdivision->name . "\n"); // 'Minnesota' +print($record->mostSpecificSubdivision->isoCode . "\n"); // 'MN' + +print($record->city->name . "\n"); // 'Minneapolis' + +print($record->postal->code . "\n"); // '55455' + +print($record->location->latitude . "\n"); // 44.9733 +print($record->location->longitude . "\n"); // -93.2323 + +``` + +## Values to use for Database or Array Keys ## + +**We strongly discourage you from using a value from any `names` property as +a key in a database or array.** + +These names may change between releases. Instead we recommend using one of the +following: + +* `GeoIp2\Record\City` - `$city->geonameId` +* `GeoIp2\Record\Continent` - `$continent->code` or `$continent->geonameId` +* `GeoIp2\Record\Country` and `GeoIp2\Record\RepresentedCountry` - + `$country->isoCode` or `$country->geonameId` +* `GeoIp2\Record\Subdivision` - `$subdivision->isoCode` or `$subdivision->geonameId` + +### What data is returned? ### + +While many of the end points return the same basic records, the attributes +which can be populated vary between end points. In addition, while an end +point may offer a particular piece of data, MaxMind does not always have every +piece of data for any given IP address. + +Because of these factors, it is possible for any end point to return a record +where some or all of the attributes are unpopulated. + +See the +[GeoIP2 Precision web service docs](https://dev.maxmind.com/geoip/geoip2/web-services) +for details on what data each end point may return. + +The only piece of data which is always returned is the `ipAddress` +attribute in the `GeoIp2\Record\Traits` record. + +## Integration with GeoNames ## + +[GeoNames](https://www.geonames.org/) offers web services and downloadable +databases with data on geographical features around the world, including +populated places. They offer both free and paid premium data. Each +feature is unique identified by a `geonameId`, which is an integer. + +Many of the records returned by the GeoIP2 web services and databases +include a `geonameId` property. This is the ID of a geographical feature +(city, region, country, etc.) in the GeoNames database. + +Some of the data that MaxMind provides is also sourced from GeoNames. We +source things like place names, ISO codes, and other similar data from +the GeoNames premium data set. + +## Reporting data problems ## + +If the problem you find is that an IP address is incorrectly mapped, +please +[submit your correction to MaxMind](https://www.maxmind.com/en/correction). + +If you find some other sort of mistake, like an incorrect spelling, +please check the [GeoNames site](https://www.geonames.org/) first. Once +you've searched for a place and found it on the GeoNames map view, there +are a number of links you can use to correct data ("move", "edit", +"alternate names", etc.). Once the correction is part of the GeoNames +data set, it will be automatically incorporated into future MaxMind +releases. + +If you are a paying MaxMind customer and you're not sure where to submit +a correction, please +[contact MaxMind support](https://www.maxmind.com/en/support) for help. + +## Other Support ## + +Please report all issues with this code using the +[GitHub issue tracker](https://github.com/maxmind/GeoIP2-php/issues). + +If you are having an issue with a MaxMind service that is not specific +to the client API, please see +[our support page](https://www.maxmind.com/en/support). + +## Requirements ## + +This library requires PHP 5.4 or greater. This library works and is tested +with HHVM. + +This library also relies on the [MaxMind DB Reader](https://github.com/maxmind/MaxMind-DB-Reader-php). + +## Contributing ## + +Patches and pull requests are encouraged. All code should follow the PSR-2 +style guidelines. Please include unit tests whenever possible. You may obtain +the test data for the maxmind-db folder by running `git submodule update +--init --recursive` or adding `--recursive` to your initial clone, or from +https://github.com/maxmind/MaxMind-DB + +## Versioning ## + +The GeoIP2 PHP API uses [Semantic Versioning](https://semver.org/). + +## Copyright and License ## + +This software is Copyright (c) 2013-2017 by MaxMind, Inc. + +This is free software, licensed under the Apache License, Version 2.0. + diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/composer.json b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/composer.json new file mode 100644 index 00000000..e5247f9a --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/composer.json @@ -0,0 +1,31 @@ +{ + "name": "geoip2/geoip2", + "description": "MaxMind GeoIP2 PHP API", + "keywords": ["geoip", "geoip2", "geolocation", "ip", "maxmind"], + "homepage": "https://github.com/maxmind/GeoIP2-php", + "type": "library", + "license": "Apache-2.0", + "authors": [ + { + "name": "Gregory J. Oschwald", + "email": "goschwald@maxmind.com", + "homepage": "http://www.maxmind.com/" + } + ], + "require": { + "maxmind-db/reader": "~1.0", + "maxmind/web-service-common": "~0.4", + "php": ">=5.4" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "2.*", + "phpunit/phpunit": "4.*", + "squizlabs/php_codesniffer": "3.*", + "apigen/apigen": "*" + }, + "autoload": { + "psr-4": { + "GeoIp2\\": "src" + } + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/maxmind-db/index.php b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/maxmind-db/index.php new file mode 100644 index 00000000..62200328 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/maxmind-db/index.php @@ -0,0 +1,2 @@ +dbReader = new DbReader($filename); + $this->locales = $locales; + } + + /** + * This method returns a GeoIP2 City model. + * + * @param string $ipAddress an IPv4 or IPv6 address as a string + * + * @throws \GeoIp2\Exception\AddressNotFoundException if the address is + * not in the database + * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database + * is corrupt or invalid + * + * @return \GeoIp2\Model\City + */ + public function city($ipAddress) + { + return $this->modelFor('City', 'City', $ipAddress); + } + + /** + * This method returns a GeoIP2 Country model. + * + * @param string $ipAddress an IPv4 or IPv6 address as a string + * + * @throws \GeoIp2\Exception\AddressNotFoundException if the address is + * not in the database + * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database + * is corrupt or invalid + * + * @return \GeoIp2\Model\Country + */ + public function country($ipAddress) + { + return $this->modelFor('Country', 'Country', $ipAddress); + } + + /** + * This method returns a GeoIP2 Anonymous IP model. + * + * @param string $ipAddress an IPv4 or IPv6 address as a string + * + * @throws \GeoIp2\Exception\AddressNotFoundException if the address is + * not in the database + * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database + * is corrupt or invalid + * + * @return \GeoIp2\Model\AnonymousIp + */ + public function anonymousIp($ipAddress) + { + return $this->flatModelFor( + 'AnonymousIp', + 'GeoIP2-Anonymous-IP', + $ipAddress + ); + } + + /** + * This method returns a GeoLite2 ASN model. + * + * @param string $ipAddress an IPv4 or IPv6 address as a string + * + * @throws \GeoIp2\Exception\AddressNotFoundException if the address is + * not in the database + * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database + * is corrupt or invalid + * + * @return \GeoIp2\Model\Asn + */ + public function asn($ipAddress) + { + return $this->flatModelFor( + 'Asn', + 'GeoLite2-ASN', + $ipAddress + ); + } + + /** + * This method returns a GeoIP2 Connection Type model. + * + * @param string $ipAddress an IPv4 or IPv6 address as a string + * + * @throws \GeoIp2\Exception\AddressNotFoundException if the address is + * not in the database + * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database + * is corrupt or invalid + * + * @return \GeoIp2\Model\ConnectionType + */ + public function connectionType($ipAddress) + { + return $this->flatModelFor( + 'ConnectionType', + 'GeoIP2-Connection-Type', + $ipAddress + ); + } + + /** + * This method returns a GeoIP2 Domain model. + * + * @param string $ipAddress an IPv4 or IPv6 address as a string + * + * @throws \GeoIp2\Exception\AddressNotFoundException if the address is + * not in the database + * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database + * is corrupt or invalid + * + * @return \GeoIp2\Model\Domain + */ + public function domain($ipAddress) + { + return $this->flatModelFor( + 'Domain', + 'GeoIP2-Domain', + $ipAddress + ); + } + + /** + * This method returns a GeoIP2 Enterprise model. + * + * @param string $ipAddress an IPv4 or IPv6 address as a string + * + * @throws \GeoIp2\Exception\AddressNotFoundException if the address is + * not in the database + * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database + * is corrupt or invalid + * + * @return \GeoIp2\Model\Enterprise + */ + public function enterprise($ipAddress) + { + return $this->modelFor('Enterprise', 'Enterprise', $ipAddress); + } + + /** + * This method returns a GeoIP2 ISP model. + * + * @param string $ipAddress an IPv4 or IPv6 address as a string + * + * @throws \GeoIp2\Exception\AddressNotFoundException if the address is + * not in the database + * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database + * is corrupt or invalid + * + * @return \GeoIp2\Model\Isp + */ + public function isp($ipAddress) + { + return $this->flatModelFor( + 'Isp', + 'GeoIP2-ISP', + $ipAddress + ); + } + + private function modelFor($class, $type, $ipAddress) + { + $record = $this->getRecord($class, $type, $ipAddress); + + $record['traits']['ip_address'] = $ipAddress; + $class = 'GeoIp2\\Model\\' . $class; + + return new $class($record, $this->locales); + } + + private function flatModelFor($class, $type, $ipAddress) + { + $record = $this->getRecord($class, $type, $ipAddress); + + $record['ip_address'] = $ipAddress; + $class = 'GeoIp2\\Model\\' . $class; + + return new $class($record); + } + + private function getRecord($class, $type, $ipAddress) + { + if (strpos($this->metadata()->databaseType, $type) === false) { + $method = lcfirst($class); + throw new \BadMethodCallException( + "The $method method cannot be used to open a " + . $this->metadata()->databaseType . ' database' + ); + } + $record = $this->dbReader->get($ipAddress); + if ($record === null) { + throw new AddressNotFoundException( + "The address $ipAddress is not in the database." + ); + } + if (!is_array($record)) { + // This can happen on corrupt databases. Generally, + // MaxMind\Db\Reader will throw a + // MaxMind\Db\Reader\InvalidDatabaseException, but occasionally + // the lookup may result in a record that looks valid but is not + // an array. This mostly happens when the user is ignoring all + // exceptions and the more frequent InvalidDatabaseException + // exceptions go unnoticed. + throw new InvalidDatabaseException( + "Expected an array when looking up $ipAddress but received: " + . gettype($record) + ); + } + + return $record; + } + + /** + * @throws \InvalidArgumentException if arguments are passed to the method + * @throws \BadMethodCallException if the database has been closed + * + * @return \MaxMind\Db\Reader\Metadata object for the database + */ + public function metadata() + { + return $this->dbReader->metadata(); + } + + /** + * Closes the GeoIP2 database and returns the resources to the system. + */ + public function close() + { + $this->dbReader->close(); + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/AddressNotFoundException.php b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/AddressNotFoundException.php new file mode 100644 index 00000000..d5483388 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/AddressNotFoundException.php @@ -0,0 +1,10 @@ +uri = $uri; + parent::__construct($message, $httpStatus, $previous); + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/InvalidRequestException.php b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/InvalidRequestException.php new file mode 100644 index 00000000..6464bcbb --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/InvalidRequestException.php @@ -0,0 +1,26 @@ +error = $error; + parent::__construct($message, $httpStatus, $uri, $previous); + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/OutOfQueriesException.php b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/OutOfQueriesException.php new file mode 100644 index 00000000..87a6ade4 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Exception/OutOfQueriesException.php @@ -0,0 +1,10 @@ +raw = $raw; + } + + /** + * @ignore + * + * @param mixed $field + */ + protected function get($field) + { + if (isset($this->raw[$field])) { + return $this->raw[$field]; + } + if (preg_match('/^is_/', $field)) { + return false; + } + + return null; + } + + /** + * @ignore + * + * @param mixed $attr + */ + public function __get($attr) + { + if ($attr !== 'instance' && property_exists($this, $attr)) { + return $this->$attr; + } + + throw new \RuntimeException("Unknown attribute: $attr"); + } + + /** + * @ignore + * + * @param mixed $attr + */ + public function __isset($attr) + { + return $attr !== 'instance' && isset($this->$attr); + } + + public function jsonSerialize() + { + return $this->raw; + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/AnonymousIp.php b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/AnonymousIp.php new file mode 100644 index 00000000..bdaeb898 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/AnonymousIp.php @@ -0,0 +1,46 @@ +isAnonymous = $this->get('is_anonymous'); + $this->isAnonymousVpn = $this->get('is_anonymous_vpn'); + $this->isHostingProvider = $this->get('is_hosting_provider'); + $this->isPublicProxy = $this->get('is_public_proxy'); + $this->isTorExitNode = $this->get('is_tor_exit_node'); + $this->ipAddress = $this->get('ip_address'); + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Asn.php b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Asn.php new file mode 100644 index 00000000..4144142f --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Asn.php @@ -0,0 +1,35 @@ +autonomousSystemNumber = $this->get('autonomous_system_number'); + $this->autonomousSystemOrganization = + $this->get('autonomous_system_organization'); + $this->ipAddress = $this->get('ip_address'); + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/City.php b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/City.php new file mode 100644 index 00000000..76886586 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/City.php @@ -0,0 +1,133 @@ +city = new \GeoIp2\Record\City($this->get('city'), $locales); + $this->location = new \GeoIp2\Record\Location($this->get('location')); + $this->postal = new \GeoIp2\Record\Postal($this->get('postal')); + + $this->createSubdivisions($raw, $locales); + } + + private function createSubdivisions($raw, $locales) + { + if (!isset($raw['subdivisions'])) { + return; + } + + foreach ($raw['subdivisions'] as $sub) { + array_push( + $this->subdivisions, + new \GeoIp2\Record\Subdivision($sub, $locales) + ); + } + } + + /** + * @ignore + * + * @param mixed $attr + */ + public function __get($attr) + { + if ($attr === 'mostSpecificSubdivision') { + return $this->$attr(); + } + + return parent::__get($attr); + } + + /** + * @ignore + * + * @param mixed $attr + */ + public function __isset($attr) + { + if ($attr === 'mostSpecificSubdivision') { + // We always return a mostSpecificSubdivision, even if it is the + // empty subdivision + return true; + } + + return parent::__isset($attr); + } + + private function mostSpecificSubdivision() + { + return empty($this->subdivisions) ? + new \GeoIp2\Record\Subdivision([], $this->locales) : + end($this->subdivisions); + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/ConnectionType.php b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/ConnectionType.php new file mode 100644 index 00000000..169e7c11 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/ConnectionType.php @@ -0,0 +1,31 @@ +connectionType = $this->get('connection_type'); + $this->ipAddress = $this->get('ip_address'); + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Country.php b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Country.php new file mode 100644 index 00000000..56e47006 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Country.php @@ -0,0 +1,71 @@ +continent = new \GeoIp2\Record\Continent( + $this->get('continent'), + $locales + ); + $this->country = new \GeoIp2\Record\Country( + $this->get('country'), + $locales + ); + $this->maxmind = new \GeoIp2\Record\MaxMind($this->get('maxmind')); + $this->registeredCountry = new \GeoIp2\Record\Country( + $this->get('registered_country'), + $locales + ); + $this->representedCountry = new \GeoIp2\Record\RepresentedCountry( + $this->get('represented_country'), + $locales + ); + $this->traits = new \GeoIp2\Record\Traits($this->get('traits')); + + $this->locales = $locales; + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Domain.php b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Domain.php new file mode 100644 index 00000000..f452e866 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Domain.php @@ -0,0 +1,31 @@ +domain = $this->get('domain'); + $this->ipAddress = $this->get('ip_address'); + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Enterprise.php b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Enterprise.php new file mode 100644 index 00000000..4608fce6 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Model/Enterprise.php @@ -0,0 +1,47 @@ +autonomousSystemNumber = $this->get('autonomous_system_number'); + $this->autonomousSystemOrganization = + $this->get('autonomous_system_organization'); + $this->isp = $this->get('isp'); + $this->organization = $this->get('organization'); + + $this->ipAddress = $this->get('ip_address'); + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/ProviderInterface.php b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/ProviderInterface.php new file mode 100644 index 00000000..44851b07 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/ProviderInterface.php @@ -0,0 +1,20 @@ +locales = $locales; + parent::__construct($record); + } + + /** + * @ignore + * + * @param mixed $attr + */ + public function __get($attr) + { + if ($attr === 'name') { + return $this->name(); + } + + return parent::__get($attr); + } + + /** + * @ignore + * + * @param mixed $attr + */ + public function __isset($attr) + { + if ($attr === 'name') { + return $this->firstSetNameLocale() === null ? false : true; + } + + return parent::__isset($attr); + } + + private function name() + { + $locale = $this->firstSetNameLocale(); + + return $locale === null ? null : $this->names[$locale]; + } + + private function firstSetNameLocale() + { + foreach ($this->locales as $locale) { + if (isset($this->names[$locale])) { + return $locale; + } + } + + return null; + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/AbstractRecord.php b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/AbstractRecord.php new file mode 100644 index 00000000..5d8cb0bf --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/AbstractRecord.php @@ -0,0 +1,61 @@ +record = isset($record) ? $record : []; + } + + /** + * @ignore + * + * @param mixed $attr + */ + public function __get($attr) + { + // XXX - kind of ugly but greatly reduces boilerplate code + $key = $this->attributeToKey($attr); + + if ($this->__isset($attr)) { + return $this->record[$key]; + } elseif ($this->validAttribute($attr)) { + if (preg_match('/^is_/', $key)) { + return false; + } + + return null; + } + throw new \RuntimeException("Unknown attribute: $attr"); + } + + public function __isset($attr) + { + return $this->validAttribute($attr) && + isset($this->record[$this->attributeToKey($attr)]); + } + + private function attributeToKey($attr) + { + return strtolower(preg_replace('/([A-Z])/', '_\1', $attr)); + } + + private function validAttribute($attr) + { + return in_array($attr, $this->validAttributes, true); + } + + public function jsonSerialize() + { + return $this->record; + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/City.php b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/City.php new file mode 100644 index 00000000..7f495ad7 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/City.php @@ -0,0 +1,29 @@ +military + * but this could expand to include other types in the future. + */ +class RepresentedCountry extends Country +{ + protected $validAttributes = [ + 'confidence', + 'geonameId', + 'isoCode', + 'names', + 'type', + ]; +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/Subdivision.php b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/Subdivision.php new file mode 100644 index 00000000..a6f9010d --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/Record/Subdivision.php @@ -0,0 +1,40 @@ +The user type associated with the IP + * address. This can be one of the following values:

+ *
    + *
  • business + *
  • cafe + *
  • cellular + *
  • college + *
  • content_delivery_network + *
  • dialup + *
  • government + *
  • hosting + *
  • library + *
  • military + *
  • residential + *
  • router + *
  • school + *
  • search_engine_spider + *
  • traveler + *
+ *

+ * This attribute is only available from the Insights web service and the + * GeoIP2 Enterprise database. + *

+ */ +class Traits extends AbstractRecord +{ + /** + * @ignore + */ + protected $validAttributes = [ + 'autonomousSystemNumber', + 'autonomousSystemOrganization', + 'connectionType', + 'domain', + 'ipAddress', + 'isAnonymous', + 'isAnonymousProxy', + 'isAnonymousVpn', + 'isHostingProvider', + 'isLegitimateProxy', + 'isp', + 'isPublicProxy', + 'isSatelliteProvider', + 'isTorExitNode', + 'organization', + 'userType', + ]; +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/WebService/Client.php b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/WebService/Client.php new file mode 100644 index 00000000..bac82f85 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/geoip2/geoip2/src/WebService/Client.php @@ -0,0 +1,239 @@ +locales = $locales; + + // This is for backwards compatibility. Do not remove except for a + // major version bump. + if (is_string($options)) { + $options = ['host' => $options]; + } + + if (!isset($options['host'])) { + $options['host'] = 'geoip.maxmind.com'; + } + + $options['userAgent'] = $this->userAgent(); + + $this->client = new WsClient($userId, $licenseKey, $options); + } + + private function userAgent() + { + return 'GeoIP2-API/' . self::VERSION; + } + + /** + * This method calls the GeoIP2 Precision: City service. + * + * @param string $ipAddress IPv4 or IPv6 address as a string. If no + * address is provided, the address that the web service is called + * from will be used. + * + * @throws \GeoIp2\Exception\AddressNotFoundException if the address you + * provided is not in our database (e.g., a private address). + * @throws \GeoIp2\Exception\AuthenticationException if there is a problem + * with the user ID or license key that you provided + * @throws \GeoIp2\Exception\OutOfQueriesException if your account is out + * of queries + * @throws \GeoIp2\Exception\InvalidRequestException} if your request was received by the web service but is + * invalid for some other reason. This may indicate an issue + * with this API. Please report the error to MaxMind. + * @throws \GeoIp2\Exception\HttpException if an unexpected HTTP error code or message was returned. + * This could indicate a problem with the connection between + * your server and the web service or that the web service + * returned an invalid document or 500 error code. + * @throws \GeoIp2\Exception\GeoIp2Exception This serves as the parent + * class to the above exceptions. It will be thrown directly + * if a 200 status code is returned but the body is invalid. + * + * @return \GeoIp2\Model\City + */ + public function city($ipAddress = 'me') + { + return $this->responseFor('city', 'City', $ipAddress); + } + + /** + * This method calls the GeoIP2 Precision: Country service. + * + * @param string $ipAddress IPv4 or IPv6 address as a string. If no + * address is provided, the address that the web service is called + * from will be used. + * + * @throws \GeoIp2\Exception\AddressNotFoundException if the address you provided is not in our database (e.g., + * a private address). + * @throws \GeoIp2\Exception\AuthenticationException if there is a problem + * with the user ID or license key that you provided + * @throws \GeoIp2\Exception\OutOfQueriesException if your account is out of queries + * @throws \GeoIp2\Exception\InvalidRequestException} if your request was received by the web service but is + * invalid for some other reason. This may indicate an + * issue with this API. Please report the error to MaxMind. + * @throws \GeoIp2\Exception\HttpException if an unexpected HTTP error + * code or message was returned. This could indicate a problem + * with the connection between your server and the web service + * or that the web service returned an invalid document or 500 + * error code. + * @throws \GeoIp2\Exception\GeoIp2Exception This serves as the parent class to the above exceptions. It + * will be thrown directly if a 200 status code is returned but + * the body is invalid. + * + * @return \GeoIp2\Model\Country + */ + public function country($ipAddress = 'me') + { + return $this->responseFor('country', 'Country', $ipAddress); + } + + /** + * This method calls the GeoIP2 Precision: Insights service. + * + * @param string $ipAddress IPv4 or IPv6 address as a string. If no + * address is provided, the address that the web service is called + * from will be used. + * + * @throws \GeoIp2\Exception\AddressNotFoundException if the address you + * provided is not in our database (e.g., a private address). + * @throws \GeoIp2\Exception\AuthenticationException if there is a problem + * with the user ID or license key that you provided + * @throws \GeoIp2\Exception\OutOfQueriesException if your account is out + * of queries + * @throws \GeoIp2\Exception\InvalidRequestException} if your request was received by the web service but is + * invalid for some other reason. This may indicate an + * issue with this API. Please report the error to MaxMind. + * @throws \GeoIp2\Exception\HttpException if an unexpected HTTP error code or message was returned. + * This could indicate a problem with the connection between + * your server and the web service or that the web service + * returned an invalid document or 500 error code. + * @throws \GeoIp2\Exception\GeoIp2Exception This serves as the parent + * class to the above exceptions. It will be thrown directly + * if a 200 status code is returned but the body is invalid. + * + * @return \GeoIp2\Model\Insights + */ + public function insights($ipAddress = 'me') + { + return $this->responseFor('insights', 'Insights', $ipAddress); + } + + private function responseFor($endpoint, $class, $ipAddress) + { + $path = implode('/', [self::$basePath, $endpoint, $ipAddress]); + + try { + $body = $this->client->get('GeoIP2 ' . $class, $path); + } catch (\MaxMind\Exception\IpAddressNotFoundException $ex) { + throw new AddressNotFoundException( + $ex->getMessage(), + $ex->getStatusCode(), + $ex + ); + } catch (\MaxMind\Exception\AuthenticationException $ex) { + throw new AuthenticationException( + $ex->getMessage(), + $ex->getStatusCode(), + $ex + ); + } catch (\MaxMind\Exception\InsufficientFundsException $ex) { + throw new OutOfQueriesException( + $ex->getMessage(), + $ex->getStatusCode(), + $ex + ); + } catch (\MaxMind\Exception\InvalidRequestException $ex) { + throw new InvalidRequestException( + $ex->getMessage(), + $ex->getErrorCode(), + $ex->getStatusCode(), + $ex->getUri(), + $ex + ); + } catch (\MaxMind\Exception\HttpException $ex) { + throw new HttpException( + $ex->getMessage(), + $ex->getStatusCode(), + $ex->getUri(), + $ex + ); + } catch (\MaxMind\Exception\WebServiceException $ex) { + throw new GeoIp2Exception( + $ex->getMessage(), + $ex->getCode(), + $ex + ); + } + + $class = 'GeoIp2\\Model\\' . $class; + + return new $class($body, $this->locales); + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/CHANGELOG.md b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/CHANGELOG.md new file mode 100644 index 00000000..9d320ac5 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/CHANGELOG.md @@ -0,0 +1,108 @@ +CHANGELOG +========= + +1.2.0 (2017-10-27) +------------------ + +* PHP 5.4 is now required. +* The `Reader` class for the `maxminddb` extension is no longer final. + This was change to match the behavior of the pure PHP class. + Reported and fixed by venyii. GitHub #52 & #54. + +1.1.3 (2017-01-19) +------------------ + +* Fix incorrect version in `ext/php_maxminddb.h`. GitHub #48. + +1.1.2 (2016-11-22) +------------------ + +* Searching for database metadata only occurs within the last 128KB + (128 * 1024 bytes) of the file, speeding detection of corrupt + datafiles. Reported by Eric Teubert. GitHub #42. +* Suggest relevant extensions when installing with Composer. GitHub #37. + +1.1.1 (2016-09-15) +------------------ + +* Development files were added to the `.gitattributes` as `export-ignore` so + that they are not part of the Composer release. Pull request by Michele + Locati. GitHub #39. + +1.1.0 (2016-01-04) +------------------ + +* The MaxMind DB extension now supports PHP 7. Pull request by John Boehr. + GitHub #27. + +1.0.3 (2015-03-13) +------------------ + +* All uses of `strlen` were removed. This should prevent issues in situations + where the function is overloaded or otherwise broken. + +1.0.2 (2015-01-19) +------------------ + +* Previously the MaxMind DB extension would cause a segfault if the Reader + object's destructor was called without first having called the constructor. + (Reported by Matthias Saou & Juan Peri. GitHub #20.) + +1.0.1 (2015-01-12) +------------------ + +* In the last several releases, the version number in the extension was + incorrect. This release is being done to correct it. No other code changes + are included. + +1.0.0 (2014-09-22) +------------------ + +* First production release. +* In the pure PHP reader, a string length test after `fread()` was replaced + with the difference between the start pointer and the end pointer. This + provided a 15% speed increase. + +0.3.3 (2014-09-15) +------------------ + +* Clarified behavior of 128-bit type in documentation. +* Updated phpunit and fixed some test breakage from the newer version. + +0.3.2 (2014-09-10) +------------------ + +* Fixed invalid reference to global class RuntimeException from namespaced + code. Fixed by Steven Don. GitHub issue #15. +* Additional documentation of `Metadata` class as well as misc. documentation + cleanup. + +0.3.1 (2014-05-01) +------------------ + +* The API now works when `mbstring.func_overload` is set. +* BCMath is no longer required. If the decoder encounters a big integer, + it will try to use GMP and then BCMath. If both of those fail, it will + throw an exception. No databases released by MaxMind currently use big + integers. +* The API now officially supports HHVM when using the pure PHP reader. + +0.3.0 (2014-02-19) +------------------ + +* This API is now licensed under the Apache License, Version 2.0. +* The code for the C extension was cleaned up, fixing several potential + issues. + +0.2.0 (2013-10-21) +------------------ + +* Added optional C extension for using libmaxminddb in place of the pure PHP + reader. +* Significantly improved error handling in pure PHP reader. +* Improved performance for IPv4 lookups in an IPv6 database. + +0.1.0 (2013-07-16) +------------------ + +* Initial release diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/LICENSE b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/LICENSE new file mode 100644 index 00000000..62589edd --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/README.md b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/README.md new file mode 100644 index 00000000..fb84ed30 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/README.md @@ -0,0 +1,139 @@ +# MaxMind DB Reader PHP API # + +## Description ## + +This is the PHP API for reading MaxMind DB files. MaxMind DB is a binary file +format that stores data indexed by IP address subnets (IPv4 or IPv6). + +## Installation ## + +We recommend installing this package with [Composer](https://getcomposer.org/). + +### Download Composer ### + +To download Composer, run in the root directory of your project: + +```bash +curl -sS https://getcomposer.org/installer | php +``` + +You should now have the file `composer.phar` in your project directory. + +### Install Dependencies ### + +Run in your project root: + +``` +php composer.phar require maxmind-db/reader:~1.0 +``` + +You should now have the files `composer.json` and `composer.lock` as well as +the directory `vendor` in your project directory. If you use a version control +system, `composer.json` should be added to it. + +### Require Autoloader ### + +After installing the dependencies, you need to require the Composer autoloader +from your code: + +```php +require 'vendor/autoload.php'; +``` + +## Usage ## + +## Example ## + +```php +get($ipAddress)); + +$reader->close(); +``` + +## Optional PHP C Extension ## + +MaxMind provides an optional C extension that is a drop-in replacement for +`MaxMind\Db\Reader`. In order to use this extension, you must install the +Reader API as described above and install the extension as described below. If +you are using an autoloader, no changes to your code should be necessary. + +### Installing Extension ### + +First install [libmaxminddb](https://github.com/maxmind/libmaxminddb) as +described in its [README.md +file](https://github.com/maxmind/libmaxminddb/blob/master/README.md#installing-from-a-tarball). +After successfully installing libmaxmindb, run the following commands from the +top-level directory of this distribution: + +``` +cd ext +phpize +./configure +make +make test +sudo make install +``` + +You then must load your extension. The recommend method is to add the +following to your `php.ini` file: + +``` +extension=maxminddb.so +``` + +Note: You may need to install the PHP development package on your OS such as +php5-dev for Debian-based systems or php-devel for RedHat/Fedora-based ones. + +## 128-bit Integer Support ## + +The MaxMind DB format includes 128-bit unsigned integer as a type. Although +no MaxMind-distributed database currently makes use of this type, both the +pure PHP reader and the C extension support this type. The pure PHP reader +requires gmp or bcmath to read databases with 128-bit unsigned integers. + +The integer is currently returned as a hexadecimal string (prefixed with "0x") +by the C extension and a decimal string (no prefix) by the pure PHP reader. +Any change to make the reader implementations always return either a +hexadecimal or decimal representation of the integer will NOT be considered a +breaking change. + +## Support ## + +Please report all issues with this code using the [GitHub issue tracker] +(https://github.com/maxmind/MaxMind-DB-Reader-php/issues). + +If you are having an issue with a MaxMind service that is not specific to the +client API, please see [our support page](https://www.maxmind.com/en/support). + +## Requirements ## + +This library requires PHP 5.4 or greater. The pure PHP reader included with +this library works and is tested with HHVM. + +The GMP or BCMath extension may be required to read some databases +using the pure PHP API. + +## Contributing ## + +Patches and pull requests are encouraged. All code should follow the PSR-1 and +PSR-2 style guidelines. Please include unit tests whenever possible. + +## Versioning ## + +The MaxMind DB Reader PHP API uses [Semantic Versioning](https://semver.org/). + +## Copyright and License ## + +This software is Copyright (c) 2014-2017 by MaxMind, Inc. + +This is free software, licensed under the Apache License, Version 2.0. diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/composer.json b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/composer.json new file mode 100644 index 00000000..9d767ee7 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/composer.json @@ -0,0 +1,34 @@ +{ + "name": "maxmind-db/reader", + "description": "MaxMind DB Reader API", + "keywords": ["database", "geoip", "geoip2", "geolocation", "maxmind"], + "homepage": "https://github.com/maxmind/MaxMind-DB-Reader-php", + "type": "library", + "license": "Apache-2.0", + "authors": [ + { + "name": "Gregory J. Oschwald", + "email": "goschwald@maxmind.com", + "homepage": "http://www.maxmind.com/" + } + ], + "require": { + "php": ">=5.4" + }, + "suggest": { + "ext-bcmath": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder", + "ext-gmp": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder", + "ext-maxminddb": "A C-based database decoder that provides significantly faster lookups" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "2.*", + "phpunit/phpunit": "4.*", + "satooshi/php-coveralls": "1.0.*", + "squizlabs/php_codesniffer": "3.*" + }, + "autoload": { + "psr-4": { + "MaxMind\\Db\\": "src/MaxMind/Db" + } + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/config.m4 b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/config.m4 new file mode 100644 index 00000000..a08bb2c4 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/config.m4 @@ -0,0 +1,19 @@ +PHP_ARG_WITH(maxminddb, + [Whether to enable the MaxMind DB Reader extension], + [ --with-maxminddb Enable MaxMind DB Reader extension support]) + +PHP_ARG_ENABLE(maxminddb-debug, for MaxMind DB debug support, + [ --enable-maxminddb-debug Enable enable MaxMind DB deubg support], no, no) + +if test $PHP_MAXMINDDB != "no"; then + PHP_CHECK_LIBRARY(maxminddb, MMDB_open) + + if test $PHP_MAXMINDDB_DEBUG != "no"; then + CFLAGS="$CFLAGS -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Werror" + fi + + PHP_ADD_LIBRARY(maxminddb, 1, MAXMINDDB_SHARED_LIBADD) + PHP_SUBST(MAXMINDDB_SHARED_LIBADD) + + PHP_NEW_EXTENSION(maxminddb, maxminddb.c, $ext_shared) +fi diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/maxminddb.c b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/maxminddb.c new file mode 100644 index 00000000..92df16a0 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/maxminddb.c @@ -0,0 +1,564 @@ +/* MaxMind, Inc., licenses this file to you under the Apache License, Version + * 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#include "php_maxminddb.h" + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include +#include +#include "Zend/zend_exceptions.h" +#include + +#ifdef ZTS +#include +#endif + +#define __STDC_FORMAT_MACROS +#include + +#define PHP_MAXMINDDB_NS ZEND_NS_NAME("MaxMind", "Db") +#define PHP_MAXMINDDB_READER_NS ZEND_NS_NAME(PHP_MAXMINDDB_NS, "Reader") +#define PHP_MAXMINDDB_READER_EX_NS \ + ZEND_NS_NAME(PHP_MAXMINDDB_READER_NS, \ + "InvalidDatabaseException") + +#ifdef ZEND_ENGINE_3 +#define Z_MAXMINDDB_P(zv) php_maxminddb_fetch_object(Z_OBJ_P(zv)) +#define _ZVAL_STRING ZVAL_STRING +#define _ZVAL_STRINGL ZVAL_STRINGL +typedef size_t strsize_t; +typedef zend_object free_obj_t; +#else +#define Z_MAXMINDDB_P(zv) (maxminddb_obj *) zend_object_store_get_object(zv TSRMLS_CC) +#define _ZVAL_STRING(a, b) ZVAL_STRING(a, b, 1) +#define _ZVAL_STRINGL(a, b, c) ZVAL_STRINGL(a, b, c, 1) +typedef int strsize_t; +typedef void free_obj_t; +#endif + +#ifdef ZEND_ENGINE_3 +typedef struct _maxminddb_obj { + MMDB_s *mmdb; + zend_object std; +} maxminddb_obj; +#else +typedef struct _maxminddb_obj { + zend_object std; + MMDB_s *mmdb; +} maxminddb_obj; +#endif + +PHP_FUNCTION(maxminddb); + +static const MMDB_entry_data_list_s *handle_entry_data_list( + const MMDB_entry_data_list_s *entry_data_list, + zval *z_value + TSRMLS_DC); +static const MMDB_entry_data_list_s *handle_array( + const MMDB_entry_data_list_s *entry_data_list, + zval *z_value TSRMLS_DC); +static const MMDB_entry_data_list_s *handle_map( + const MMDB_entry_data_list_s *entry_data_list, + zval *z_value TSRMLS_DC); +static void handle_uint128(const MMDB_entry_data_list_s *entry_data_list, + zval *z_value TSRMLS_DC); +static void handle_uint64(const MMDB_entry_data_list_s *entry_data_list, + zval *z_value TSRMLS_DC); +static zend_class_entry * lookup_class(const char *name TSRMLS_DC); + +#define CHECK_ALLOCATED(val) \ + if (!val ) { \ + zend_error(E_ERROR, "Out of memory"); \ + return; \ + } \ + +#define THROW_EXCEPTION(name, ... ) \ + { \ + zend_class_entry *exception_ce = lookup_class(name TSRMLS_CC); \ + zend_throw_exception_ex(exception_ce, 0 TSRMLS_CC, __VA_ARGS__); \ + } \ + + +#if PHP_VERSION_ID < 50399 +#define object_properties_init(zo, class_type) \ + { \ + zval *tmp; \ + zend_hash_copy((*zo).properties, \ + &class_type->default_properties, \ + (copy_ctor_func_t)zval_add_ref, \ + (void *)&tmp, \ + sizeof(zval *)); \ + } +#endif + +static zend_object_handlers maxminddb_obj_handlers; +static zend_class_entry *maxminddb_ce; + +static inline maxminddb_obj *php_maxminddb_fetch_object(zend_object *obj TSRMLS_DC){ +#ifdef ZEND_ENGINE_3 + return (maxminddb_obj *)((char*)(obj) - XtOffsetOf(maxminddb_obj, std)); +#else + return (maxminddb_obj *)obj; +#endif +} + +PHP_METHOD(MaxMind_Db_Reader, __construct){ + char *db_file = NULL; + strsize_t name_len; + zval * _this_zval = NULL; + + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", + &_this_zval, maxminddb_ce, &db_file, &name_len) == FAILURE) { + THROW_EXCEPTION("InvalidArgumentException", + "The constructor takes exactly one argument."); + return; + } + + if (0 != access(db_file, R_OK)) { + THROW_EXCEPTION("InvalidArgumentException", + "The file \"%s\" does not exist or is not readable.", + db_file); + return; + } + + MMDB_s *mmdb = (MMDB_s *)emalloc(sizeof(MMDB_s)); + uint16_t status = MMDB_open(db_file, MMDB_MODE_MMAP, mmdb); + + if (MMDB_SUCCESS != status) { + THROW_EXCEPTION( + PHP_MAXMINDDB_READER_EX_NS, + "Error opening database file (%s). Is this a valid MaxMind DB file?", + db_file); + efree(mmdb); + return; + } + + maxminddb_obj *mmdb_obj = Z_MAXMINDDB_P(getThis()); + mmdb_obj->mmdb = mmdb; +} + +PHP_METHOD(MaxMind_Db_Reader, get){ + char *ip_address = NULL; + strsize_t name_len; + zval * _this_zval = NULL; + + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", + &_this_zval, maxminddb_ce, &ip_address, &name_len) == FAILURE) { + THROW_EXCEPTION("InvalidArgumentException", + "Method takes exactly one argument."); + return; + } + + const maxminddb_obj *mmdb_obj = + (maxminddb_obj *)Z_MAXMINDDB_P(getThis()); + + MMDB_s *mmdb = mmdb_obj->mmdb; + + if (NULL == mmdb) { + THROW_EXCEPTION("BadMethodCallException", + "Attempt to read from a closed MaxMind DB."); + return; + } + + int gai_error = 0; + int mmdb_error = MMDB_SUCCESS; + MMDB_lookup_result_s result = + MMDB_lookup_string(mmdb, ip_address, &gai_error, + &mmdb_error); + + if (MMDB_SUCCESS != gai_error) { + THROW_EXCEPTION("InvalidArgumentException", + "The value \"%s\" is not a valid IP address.", + ip_address); + return; + } + + if (MMDB_SUCCESS != mmdb_error) { + char *exception_name; + if (MMDB_IPV6_LOOKUP_IN_IPV4_DATABASE_ERROR == mmdb_error) { + exception_name = "InvalidArgumentException"; + } else { + exception_name = PHP_MAXMINDDB_READER_EX_NS; + } + THROW_EXCEPTION(exception_name, + "Error looking up %s. %s", + ip_address, MMDB_strerror(mmdb_error)); + return; + } + + MMDB_entry_data_list_s *entry_data_list = NULL; + + if (!result.found_entry) { + RETURN_NULL(); + } + + int status = MMDB_get_entry_data_list(&result.entry, &entry_data_list); + + if (MMDB_SUCCESS != status) { + THROW_EXCEPTION(PHP_MAXMINDDB_READER_EX_NS, + "Error while looking up data for %s. %s", + ip_address, MMDB_strerror(status)); + MMDB_free_entry_data_list(entry_data_list); + return; + } else if (NULL == entry_data_list) { + THROW_EXCEPTION( + PHP_MAXMINDDB_READER_EX_NS, + "Error while looking up data for %s. Your database may be corrupt or you have found a bug in libmaxminddb.", + ip_address); + return; + } + + handle_entry_data_list(entry_data_list, return_value TSRMLS_CC); + MMDB_free_entry_data_list(entry_data_list); +} + +PHP_METHOD(MaxMind_Db_Reader, metadata){ + if (ZEND_NUM_ARGS() != 0) { + THROW_EXCEPTION("InvalidArgumentException", + "Method takes no arguments."); + return; + } + + const maxminddb_obj *const mmdb_obj = + (maxminddb_obj *)Z_MAXMINDDB_P(getThis()); + + if (NULL == mmdb_obj->mmdb) { + THROW_EXCEPTION("BadMethodCallException", + "Attempt to read from a closed MaxMind DB."); + return; + } + + const char *const name = ZEND_NS_NAME(PHP_MAXMINDDB_READER_NS, "Metadata"); + zend_class_entry *metadata_ce = lookup_class(name TSRMLS_CC); + + object_init_ex(return_value, metadata_ce); + +#ifdef ZEND_ENGINE_3 + zval _metadata_array; + zval *metadata_array = &_metadata_array; + ZVAL_NULL(metadata_array); +#else + zval *metadata_array; + ALLOC_INIT_ZVAL(metadata_array); +#endif + + MMDB_entry_data_list_s *entry_data_list; + MMDB_get_metadata_as_entry_data_list(mmdb_obj->mmdb, &entry_data_list); + + handle_entry_data_list(entry_data_list, metadata_array TSRMLS_CC); + MMDB_free_entry_data_list(entry_data_list); +#ifdef ZEND_ENGINE_3 + zend_call_method_with_1_params(return_value, metadata_ce, + &metadata_ce->constructor, + ZEND_CONSTRUCTOR_FUNC_NAME, + NULL, + metadata_array); + zval_ptr_dtor(metadata_array); +#else + zend_call_method_with_1_params(&return_value, metadata_ce, + &metadata_ce->constructor, + ZEND_CONSTRUCTOR_FUNC_NAME, + NULL, + metadata_array); + zval_ptr_dtor(&metadata_array); +#endif +} + +PHP_METHOD(MaxMind_Db_Reader, close){ + if (ZEND_NUM_ARGS() != 0) { + THROW_EXCEPTION("InvalidArgumentException", + "Method takes no arguments."); + return; + } + + maxminddb_obj *mmdb_obj = + (maxminddb_obj *)Z_MAXMINDDB_P(getThis()); + + if (NULL == mmdb_obj->mmdb) { + THROW_EXCEPTION("BadMethodCallException", + "Attempt to close a closed MaxMind DB."); + return; + } + MMDB_close(mmdb_obj->mmdb); + efree(mmdb_obj->mmdb); + mmdb_obj->mmdb = NULL; +} + +static const MMDB_entry_data_list_s *handle_entry_data_list( + const MMDB_entry_data_list_s *entry_data_list, + zval *z_value + TSRMLS_DC) +{ + switch (entry_data_list->entry_data.type) { + case MMDB_DATA_TYPE_MAP: + return handle_map(entry_data_list, z_value TSRMLS_CC); + case MMDB_DATA_TYPE_ARRAY: + return handle_array(entry_data_list, z_value TSRMLS_CC); + case MMDB_DATA_TYPE_UTF8_STRING: + _ZVAL_STRINGL(z_value, + (char *)entry_data_list->entry_data.utf8_string, + entry_data_list->entry_data.data_size); + break; + case MMDB_DATA_TYPE_BYTES: + _ZVAL_STRINGL(z_value, (char *)entry_data_list->entry_data.bytes, + entry_data_list->entry_data.data_size); + break; + case MMDB_DATA_TYPE_DOUBLE: + ZVAL_DOUBLE(z_value, entry_data_list->entry_data.double_value); + break; + case MMDB_DATA_TYPE_FLOAT: + ZVAL_DOUBLE(z_value, entry_data_list->entry_data.float_value); + break; + case MMDB_DATA_TYPE_UINT16: + ZVAL_LONG(z_value, entry_data_list->entry_data.uint16); + break; + case MMDB_DATA_TYPE_UINT32: + ZVAL_LONG(z_value, entry_data_list->entry_data.uint32); + break; + case MMDB_DATA_TYPE_BOOLEAN: + ZVAL_BOOL(z_value, entry_data_list->entry_data.boolean); + break; + case MMDB_DATA_TYPE_UINT64: + handle_uint64(entry_data_list, z_value TSRMLS_CC); + break; + case MMDB_DATA_TYPE_UINT128: + handle_uint128(entry_data_list, z_value TSRMLS_CC); + break; + case MMDB_DATA_TYPE_INT32: + ZVAL_LONG(z_value, entry_data_list->entry_data.int32); + break; + default: + THROW_EXCEPTION(PHP_MAXMINDDB_READER_EX_NS, + "Invalid data type arguments: %d", + entry_data_list->entry_data.type); + return NULL; + } + return entry_data_list; +} + +static const MMDB_entry_data_list_s *handle_map( + const MMDB_entry_data_list_s *entry_data_list, + zval *z_value TSRMLS_DC) +{ + array_init(z_value); + const uint32_t map_size = entry_data_list->entry_data.data_size; + + uint i; + for (i = 0; i < map_size && entry_data_list; i++ ) { + entry_data_list = entry_data_list->next; + + char *key = + estrndup((char *)entry_data_list->entry_data.utf8_string, + entry_data_list->entry_data.data_size); + if (NULL == key) { + THROW_EXCEPTION(PHP_MAXMINDDB_READER_EX_NS, + "Invalid data type arguments"); + return NULL; + } + + entry_data_list = entry_data_list->next; +#ifdef ZEND_ENGINE_3 + zval _new_value; + zval * new_value = &_new_value; + ZVAL_NULL(new_value); +#else + zval *new_value; + ALLOC_INIT_ZVAL(new_value); +#endif + entry_data_list = handle_entry_data_list(entry_data_list, + new_value TSRMLS_CC); + add_assoc_zval(z_value, key, new_value); + efree(key); + } + return entry_data_list; +} + +static const MMDB_entry_data_list_s *handle_array( + const MMDB_entry_data_list_s *entry_data_list, + zval *z_value TSRMLS_DC) +{ + const uint32_t size = entry_data_list->entry_data.data_size; + + array_init(z_value); + + uint i; + for (i = 0; i < size && entry_data_list; i++) { + entry_data_list = entry_data_list->next; +#ifdef ZEND_ENGINE_3 + zval _new_value; + zval * new_value = &_new_value; + ZVAL_NULL(new_value); +#else + zval *new_value; + ALLOC_INIT_ZVAL(new_value); +#endif + entry_data_list = handle_entry_data_list(entry_data_list, + new_value TSRMLS_CC); + add_next_index_zval(z_value, new_value); + } + return entry_data_list; +} + +static void handle_uint128(const MMDB_entry_data_list_s *entry_data_list, + zval *z_value TSRMLS_DC) +{ + uint64_t high = 0; + uint64_t low = 0; +#if MMDB_UINT128_IS_BYTE_ARRAY + int i; + for (i = 0; i < 8; i++) { + high = (high << 8) | entry_data_list->entry_data.uint128[i]; + } + + for (i = 8; i < 16; i++) { + low = (low << 8) | entry_data_list->entry_data.uint128[i]; + } +#else + high = entry_data_list->entry_data.uint128 >> 64; + low = (uint64_t)entry_data_list->entry_data.uint128; +#endif + + char *num_str; + spprintf(&num_str, 0, "0x%016" PRIX64 "%016" PRIX64, high, low); + CHECK_ALLOCATED(num_str); + + _ZVAL_STRING(z_value, num_str); + efree(num_str); +} + +static void handle_uint64(const MMDB_entry_data_list_s *entry_data_list, + zval *z_value TSRMLS_DC) +{ + // We return it as a string because PHP uses signed longs + char *int_str; + spprintf(&int_str, 0, "%" PRIu64, + entry_data_list->entry_data.uint64); + CHECK_ALLOCATED(int_str); + + _ZVAL_STRING(z_value, int_str); + efree(int_str); +} + +static zend_class_entry *lookup_class(const char *name TSRMLS_DC) +{ +#ifdef ZEND_ENGINE_3 + zend_string *n = zend_string_init(name, strlen(name), 0); + zend_class_entry *ce = zend_lookup_class(n); + zend_string_release(n); + if( NULL == ce ) { + zend_error(E_ERROR, "Class %s not found", name); + } + return ce; +#else + zend_class_entry **ce; + if (FAILURE == + zend_lookup_class(name, strlen(name), + &ce TSRMLS_CC)) { + zend_error(E_ERROR, "Class %s not found", name); + } + return *ce; +#endif +} + +static void maxminddb_free_storage(free_obj_t *object TSRMLS_DC) +{ + maxminddb_obj *obj = php_maxminddb_fetch_object((zend_object *)object TSRMLS_CC); + if (obj->mmdb != NULL) { + MMDB_close(obj->mmdb); + efree(obj->mmdb); + } + + zend_object_std_dtor(&obj->std TSRMLS_CC); +#ifndef ZEND_ENGINE_3 + efree(object); +#endif +} + +#ifdef ZEND_ENGINE_3 +static zend_object *maxminddb_create_handler( + zend_class_entry *type TSRMLS_DC) +{ + maxminddb_obj *obj = (maxminddb_obj *)ecalloc(1, sizeof(maxminddb_obj)); + zend_object_std_init(&obj->std, type TSRMLS_CC); + object_properties_init(&(obj->std), type); + + obj->std.handlers = &maxminddb_obj_handlers; + + return &obj->std; +} +#else +static zend_object_value maxminddb_create_handler( + zend_class_entry *type TSRMLS_DC) +{ + zend_object_value retval; + + maxminddb_obj *obj = (maxminddb_obj *)ecalloc(1, sizeof(maxminddb_obj)); + zend_object_std_init(&obj->std, type TSRMLS_CC); + object_properties_init(&(obj->std), type); + + retval.handle = zend_objects_store_put(obj, NULL, + maxminddb_free_storage, + NULL TSRMLS_CC); + retval.handlers = &maxminddb_obj_handlers; + + return retval; +} +#endif + +/* *INDENT-OFF* */ +static zend_function_entry maxminddb_methods[] = { + PHP_ME(MaxMind_Db_Reader, __construct, NULL, + ZEND_ACC_PUBLIC | ZEND_ACC_CTOR) + PHP_ME(MaxMind_Db_Reader, close, NULL, ZEND_ACC_PUBLIC) + PHP_ME(MaxMind_Db_Reader, get, NULL, ZEND_ACC_PUBLIC) + PHP_ME(MaxMind_Db_Reader, metadata, NULL, ZEND_ACC_PUBLIC) + { NULL, NULL, NULL } +}; +/* *INDENT-ON* */ + +PHP_MINIT_FUNCTION(maxminddb){ + zend_class_entry ce; + + INIT_CLASS_ENTRY(ce, PHP_MAXMINDDB_READER_NS, maxminddb_methods); + maxminddb_ce = zend_register_internal_class(&ce TSRMLS_CC); + maxminddb_ce->create_object = maxminddb_create_handler; + memcpy(&maxminddb_obj_handlers, + zend_get_std_object_handlers(), sizeof(zend_object_handlers)); + maxminddb_obj_handlers.clone_obj = NULL; +#ifdef ZEND_ENGINE_3 + maxminddb_obj_handlers.offset = XtOffsetOf(maxminddb_obj, std); + maxminddb_obj_handlers.free_obj = maxminddb_free_storage; +#endif + + return SUCCESS; +} + +zend_module_entry maxminddb_module_entry = { + STANDARD_MODULE_HEADER, + PHP_MAXMINDDB_EXTNAME, + NULL, + PHP_MINIT(maxminddb), + NULL, + NULL, + NULL, + NULL, + PHP_MAXMINDDB_VERSION, + STANDARD_MODULE_PROPERTIES +}; + +#ifdef COMPILE_DL_MAXMINDDB +ZEND_GET_MODULE(maxminddb) +#endif diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/php_maxminddb.h b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/php_maxminddb.h new file mode 100644 index 00000000..4d11fcb2 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/php_maxminddb.h @@ -0,0 +1,24 @@ +/* MaxMind, Inc., licenses this file to you under the Apache License, Version + * 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +#include + +#ifndef PHP_MAXMINDDB_H +#define PHP_MAXMINDDB_H 1 +#define PHP_MAXMINDDB_VERSION "1.2.0" +#define PHP_MAXMINDDB_EXTNAME "maxminddb" + +extern zend_module_entry maxminddb_module_entry; +#define phpext_maxminddb_ptr &maxminddb_module_entry + +#endif diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/tests/001-load.phpt b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/tests/001-load.phpt new file mode 100644 index 00000000..09810eec --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/tests/001-load.phpt @@ -0,0 +1,12 @@ +--TEST-- +Check for maxminddb presence +--SKIPIF-- + +--FILE-- + +--EXPECT-- +maxminddb extension is available diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/tests/002-final.phpt b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/tests/002-final.phpt new file mode 100644 index 00000000..d91b7d0f --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/ext/tests/002-final.phpt @@ -0,0 +1,13 @@ +--TEST-- +Check that Reader class is not final +--SKIPIF-- + +--FILE-- +isFinal()); +?> +--EXPECT-- +bool(false) diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader.php b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader.php new file mode 100644 index 00000000..4ccab914 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader.php @@ -0,0 +1,309 @@ +get method. + */ +class Reader +{ + private static $DATA_SECTION_SEPARATOR_SIZE = 16; + private static $METADATA_START_MARKER = "\xAB\xCD\xEFMaxMind.com"; + private static $METADATA_START_MARKER_LENGTH = 14; + private static $METADATA_MAX_SIZE = 131072; // 128 * 1024 = 128KB + + private $decoder; + private $fileHandle; + private $fileSize; + private $ipV4Start; + private $metadata; + + /** + * Constructs a Reader for the MaxMind DB format. The file passed to it must + * be a valid MaxMind DB file such as a GeoIp2 database file. + * + * @param string $database + * the MaxMind DB file to use + * + * @throws \InvalidArgumentException for invalid database path or unknown arguments + * @throws \MaxMind\Db\Reader\InvalidDatabaseException + * if the database is invalid or there is an error reading + * from it + */ + public function __construct($database) + { + if (func_num_args() !== 1) { + throw new \InvalidArgumentException( + 'The constructor takes exactly one argument.' + ); + } + + if (!is_readable($database)) { + throw new \InvalidArgumentException( + "The file \"$database\" does not exist or is not readable." + ); + } + $this->fileHandle = @fopen($database, 'rb'); + if ($this->fileHandle === false) { + throw new \InvalidArgumentException( + "Error opening \"$database\"." + ); + } + $this->fileSize = @filesize($database); + if ($this->fileSize === false) { + throw new \UnexpectedValueException( + "Error determining the size of \"$database\"." + ); + } + + $start = $this->findMetadataStart($database); + $metadataDecoder = new Decoder($this->fileHandle, $start); + list($metadataArray) = $metadataDecoder->decode($start); + $this->metadata = new Metadata($metadataArray); + $this->decoder = new Decoder( + $this->fileHandle, + $this->metadata->searchTreeSize + self::$DATA_SECTION_SEPARATOR_SIZE + ); + } + + /** + * Looks up the address in the MaxMind DB. + * + * @param string $ipAddress + * the IP address to look up + * + * @throws \BadMethodCallException if this method is called on a closed database + * @throws \InvalidArgumentException if something other than a single IP address is passed to the method + * @throws InvalidDatabaseException + * if the database is invalid or there is an error reading + * from it + * + * @return array the record for the IP address + */ + public function get($ipAddress) + { + if (func_num_args() !== 1) { + throw new \InvalidArgumentException( + 'Method takes exactly one argument.' + ); + } + + if (!is_resource($this->fileHandle)) { + throw new \BadMethodCallException( + 'Attempt to read from a closed MaxMind DB.' + ); + } + + if (!filter_var($ipAddress, FILTER_VALIDATE_IP)) { + throw new \InvalidArgumentException( + "The value \"$ipAddress\" is not a valid IP address." + ); + } + + if ($this->metadata->ipVersion === 4 && strrpos($ipAddress, ':')) { + throw new \InvalidArgumentException( + "Error looking up $ipAddress. You attempted to look up an" + . ' IPv6 address in an IPv4-only database.' + ); + } + $pointer = $this->findAddressInTree($ipAddress); + if ($pointer === 0) { + return null; + } + + return $this->resolveDataPointer($pointer); + } + + private function findAddressInTree($ipAddress) + { + // XXX - could simplify. Done as a byte array to ease porting + $rawAddress = array_merge(unpack('C*', inet_pton($ipAddress))); + + $bitCount = count($rawAddress) * 8; + + // The first node of the tree is always node 0, at the beginning of the + // value + $node = $this->startNode($bitCount); + + for ($i = 0; $i < $bitCount; $i++) { + if ($node >= $this->metadata->nodeCount) { + break; + } + $tempBit = 0xFF & $rawAddress[$i >> 3]; + $bit = 1 & ($tempBit >> 7 - ($i % 8)); + + $node = $this->readNode($node, $bit); + } + if ($node === $this->metadata->nodeCount) { + // Record is empty + return 0; + } elseif ($node > $this->metadata->nodeCount) { + // Record is a data pointer + return $node; + } + throw new InvalidDatabaseException('Something bad happened'); + } + + private function startNode($length) + { + // Check if we are looking up an IPv4 address in an IPv6 tree. If this + // is the case, we can skip over the first 96 nodes. + if ($this->metadata->ipVersion === 6 && $length === 32) { + return $this->ipV4StartNode(); + } + // The first node of the tree is always node 0, at the beginning of the + // value + return 0; + } + + private function ipV4StartNode() + { + // This is a defensive check. There is no reason to call this when you + // have an IPv4 tree. + if ($this->metadata->ipVersion === 4) { + return 0; + } + + if ($this->ipV4Start) { + return $this->ipV4Start; + } + $node = 0; + + for ($i = 0; $i < 96 && $node < $this->metadata->nodeCount; $i++) { + $node = $this->readNode($node, 0); + } + $this->ipV4Start = $node; + + return $node; + } + + private function readNode($nodeNumber, $index) + { + $baseOffset = $nodeNumber * $this->metadata->nodeByteSize; + + // XXX - probably could condense this. + switch ($this->metadata->recordSize) { + case 24: + $bytes = Util::read($this->fileHandle, $baseOffset + $index * 3, 3); + list(, $node) = unpack('N', "\x00" . $bytes); + + return $node; + case 28: + $middleByte = Util::read($this->fileHandle, $baseOffset + 3, 1); + list(, $middle) = unpack('C', $middleByte); + if ($index === 0) { + $middle = (0xF0 & $middle) >> 4; + } else { + $middle = 0x0F & $middle; + } + $bytes = Util::read($this->fileHandle, $baseOffset + $index * 4, 3); + list(, $node) = unpack('N', chr($middle) . $bytes); + + return $node; + case 32: + $bytes = Util::read($this->fileHandle, $baseOffset + $index * 4, 4); + list(, $node) = unpack('N', $bytes); + + return $node; + default: + throw new InvalidDatabaseException( + 'Unknown record size: ' + . $this->metadata->recordSize + ); + } + } + + private function resolveDataPointer($pointer) + { + $resolved = $pointer - $this->metadata->nodeCount + + $this->metadata->searchTreeSize; + if ($resolved > $this->fileSize) { + throw new InvalidDatabaseException( + "The MaxMind DB file's search tree is corrupt" + ); + } + + list($data) = $this->decoder->decode($resolved); + + return $data; + } + + /* + * This is an extremely naive but reasonably readable implementation. There + * are much faster algorithms (e.g., Boyer-Moore) for this if speed is ever + * an issue, but I suspect it won't be. + */ + private function findMetadataStart($filename) + { + $handle = $this->fileHandle; + $fstat = fstat($handle); + $fileSize = $fstat['size']; + $marker = self::$METADATA_START_MARKER; + $markerLength = self::$METADATA_START_MARKER_LENGTH; + $metadataMaxLengthExcludingMarker + = min(self::$METADATA_MAX_SIZE, $fileSize) - $markerLength; + + for ($i = 0; $i <= $metadataMaxLengthExcludingMarker; $i++) { + for ($j = 0; $j < $markerLength; $j++) { + fseek($handle, $fileSize - $i - $j - 1); + $matchBit = fgetc($handle); + if ($matchBit !== $marker[$markerLength - $j - 1]) { + continue 2; + } + } + + return $fileSize - $i; + } + throw new InvalidDatabaseException( + "Error opening database file ($filename). " . + 'Is this a valid MaxMind DB file?' + ); + } + + /** + * @throws \InvalidArgumentException if arguments are passed to the method + * @throws \BadMethodCallException if the database has been closed + * + * @return Metadata object for the database + */ + public function metadata() + { + if (func_num_args()) { + throw new \InvalidArgumentException( + 'Method takes no arguments.' + ); + } + + // Not technically required, but this makes it consistent with + // C extension and it allows us to change our implementation later. + if (!is_resource($this->fileHandle)) { + throw new \BadMethodCallException( + 'Attempt to read from a closed MaxMind DB.' + ); + } + + return $this->metadata; + } + + /** + * Closes the MaxMind DB and returns resources to the system. + * + * @throws \Exception + * if an I/O error occurs + */ + public function close() + { + if (!is_resource($this->fileHandle)) { + throw new \BadMethodCallException( + 'Attempt to close a closed MaxMind DB.' + ); + } + fclose($this->fileHandle); + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Decoder.php b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Decoder.php new file mode 100644 index 00000000..40ae27e0 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Decoder.php @@ -0,0 +1,311 @@ + 'extended', + 1 => 'pointer', + 2 => 'utf8_string', + 3 => 'double', + 4 => 'bytes', + 5 => 'uint16', + 6 => 'uint32', + 7 => 'map', + 8 => 'int32', + 9 => 'uint64', + 10 => 'uint128', + 11 => 'array', + 12 => 'container', + 13 => 'end_marker', + 14 => 'boolean', + 15 => 'float', + ]; + + public function __construct( + $fileStream, + $pointerBase = 0, + $pointerTestHack = false + ) { + $this->fileStream = $fileStream; + $this->pointerBase = $pointerBase; + $this->pointerTestHack = $pointerTestHack; + + $this->switchByteOrder = $this->isPlatformLittleEndian(); + } + + public function decode($offset) + { + list(, $ctrlByte) = unpack( + 'C', + Util::read($this->fileStream, $offset, 1) + ); + $offset++; + + $type = $this->types[$ctrlByte >> 5]; + + // Pointers are a special case, we don't read the next $size bytes, we + // use the size to determine the length of the pointer and then follow + // it. + if ($type === 'pointer') { + list($pointer, $offset) = $this->decodePointer($ctrlByte, $offset); + + // for unit testing + if ($this->pointerTestHack) { + return [$pointer]; + } + + list($result) = $this->decode($pointer); + + return [$result, $offset]; + } + + if ($type === 'extended') { + list(, $nextByte) = unpack( + 'C', + Util::read($this->fileStream, $offset, 1) + ); + + $typeNum = $nextByte + 7; + + if ($typeNum < 8) { + throw new InvalidDatabaseException( + 'Something went horribly wrong in the decoder. An extended type ' + . 'resolved to a type number < 8 (' + . $this->types[$typeNum] + . ')' + ); + } + + $type = $this->types[$typeNum]; + $offset++; + } + + list($size, $offset) = $this->sizeFromCtrlByte($ctrlByte, $offset); + + return $this->decodeByType($type, $offset, $size); + } + + private function decodeByType($type, $offset, $size) + { + switch ($type) { + case 'map': + return $this->decodeMap($size, $offset); + case 'array': + return $this->decodeArray($size, $offset); + case 'boolean': + return [$this->decodeBoolean($size), $offset]; + } + + $newOffset = $offset + $size; + $bytes = Util::read($this->fileStream, $offset, $size); + switch ($type) { + case 'utf8_string': + return [$this->decodeString($bytes), $newOffset]; + case 'double': + $this->verifySize(8, $size); + + return [$this->decodeDouble($bytes), $newOffset]; + case 'float': + $this->verifySize(4, $size); + + return [$this->decodeFloat($bytes), $newOffset]; + case 'bytes': + return [$bytes, $newOffset]; + case 'uint16': + case 'uint32': + return [$this->decodeUint($bytes), $newOffset]; + case 'int32': + return [$this->decodeInt32($bytes), $newOffset]; + case 'uint64': + case 'uint128': + return [$this->decodeBigUint($bytes, $size), $newOffset]; + default: + throw new InvalidDatabaseException( + 'Unknown or unexpected type: ' . $type + ); + } + } + + private function verifySize($expected, $actual) + { + if ($expected !== $actual) { + throw new InvalidDatabaseException( + "The MaxMind DB file's data section contains bad data (unknown data type or corrupt data)" + ); + } + } + + private function decodeArray($size, $offset) + { + $array = []; + + for ($i = 0; $i < $size; $i++) { + list($value, $offset) = $this->decode($offset); + array_push($array, $value); + } + + return [$array, $offset]; + } + + private function decodeBoolean($size) + { + return $size === 0 ? false : true; + } + + private function decodeDouble($bits) + { + // XXX - Assumes IEEE 754 double on platform + list(, $double) = unpack('d', $this->maybeSwitchByteOrder($bits)); + + return $double; + } + + private function decodeFloat($bits) + { + // XXX - Assumes IEEE 754 floats on platform + list(, $float) = unpack('f', $this->maybeSwitchByteOrder($bits)); + + return $float; + } + + private function decodeInt32($bytes) + { + $bytes = $this->zeroPadLeft($bytes, 4); + list(, $int) = unpack('l', $this->maybeSwitchByteOrder($bytes)); + + return $int; + } + + private function decodeMap($size, $offset) + { + $map = []; + + for ($i = 0; $i < $size; $i++) { + list($key, $offset) = $this->decode($offset); + list($value, $offset) = $this->decode($offset); + $map[$key] = $value; + } + + return [$map, $offset]; + } + + private $pointerValueOffset = [ + 1 => 0, + 2 => 2048, + 3 => 526336, + 4 => 0, + ]; + + private function decodePointer($ctrlByte, $offset) + { + $pointerSize = (($ctrlByte >> 3) & 0x3) + 1; + + $buffer = Util::read($this->fileStream, $offset, $pointerSize); + $offset = $offset + $pointerSize; + + $packed = $pointerSize === 4 + ? $buffer + : (pack('C', $ctrlByte & 0x7)) . $buffer; + + $unpacked = $this->decodeUint($packed); + $pointer = $unpacked + $this->pointerBase + + $this->pointerValueOffset[$pointerSize]; + + return [$pointer, $offset]; + } + + private function decodeUint($bytes) + { + list(, $int) = unpack('N', $this->zeroPadLeft($bytes, 4)); + + return $int; + } + + private function decodeBigUint($bytes, $byteLength) + { + $maxUintBytes = log(PHP_INT_MAX, 2) / 8; + + if ($byteLength === 0) { + return 0; + } + + $numberOfLongs = ceil($byteLength / 4); + $paddedLength = $numberOfLongs * 4; + $paddedBytes = $this->zeroPadLeft($bytes, $paddedLength); + $unpacked = array_merge(unpack("N$numberOfLongs", $paddedBytes)); + + $integer = 0; + + // 2^32 + $twoTo32 = '4294967296'; + + foreach ($unpacked as $part) { + // We only use gmp or bcmath if the final value is too big + if ($byteLength <= $maxUintBytes) { + $integer = ($integer << 32) + $part; + } elseif (extension_loaded('gmp')) { + $integer = gmp_strval(gmp_add(gmp_mul($integer, $twoTo32), $part)); + } elseif (extension_loaded('bcmath')) { + $integer = bcadd(bcmul($integer, $twoTo32), $part); + } else { + throw new \RuntimeException( + 'The gmp or bcmath extension must be installed to read this database.' + ); + } + } + + return $integer; + } + + private function decodeString($bytes) + { + // XXX - NOOP. As far as I know, the end user has to explicitly set the + // encoding in PHP. Strings are just bytes. + return $bytes; + } + + private function sizeFromCtrlByte($ctrlByte, $offset) + { + $size = $ctrlByte & 0x1f; + $bytesToRead = $size < 29 ? 0 : $size - 28; + $bytes = Util::read($this->fileStream, $offset, $bytesToRead); + $decoded = $this->decodeUint($bytes); + + if ($size === 29) { + $size = 29 + $decoded; + } elseif ($size === 30) { + $size = 285 + $decoded; + } elseif ($size > 30) { + $size = ($decoded & (0x0FFFFFFF >> (32 - (8 * $bytesToRead)))) + + 65821; + } + + return [$size, $offset + $bytesToRead]; + } + + private function zeroPadLeft($content, $desiredLength) + { + return str_pad($content, $desiredLength, "\x00", STR_PAD_LEFT); + } + + private function maybeSwitchByteOrder($bytes) + { + return $this->switchByteOrder ? strrev($bytes) : $bytes; + } + + private function isPlatformLittleEndian() + { + $testint = 0x00FF; + $packed = pack('S', $testint); + + return $testint === current(unpack('v', $packed)); + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/InvalidDatabaseException.php b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/InvalidDatabaseException.php new file mode 100644 index 00000000..d2a9a775 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/InvalidDatabaseException.php @@ -0,0 +1,10 @@ +binaryFormatMajorVersion = + $metadata['binary_format_major_version']; + $this->binaryFormatMinorVersion = + $metadata['binary_format_minor_version']; + $this->buildEpoch = $metadata['build_epoch']; + $this->databaseType = $metadata['database_type']; + $this->languages = $metadata['languages']; + $this->description = $metadata['description']; + $this->ipVersion = $metadata['ip_version']; + $this->nodeCount = $metadata['node_count']; + $this->recordSize = $metadata['record_size']; + $this->nodeByteSize = $this->recordSize / 4; + $this->searchTreeSize = $this->nodeCount * $this->nodeByteSize; + } + + public function __get($var) + { + return $this->$var; + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Util.php b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Util.php new file mode 100644 index 00000000..87ebbf13 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind-db/reader/src/MaxMind/Db/Reader/Util.php @@ -0,0 +1,26 @@ +=5.4", + "composer/ca-bundle": "^1.0.3", + "ext-curl": "*", + "ext-json": "*" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "2.*", + "phpunit/phpunit": "4.*", + "squizlabs/php_codesniffer": "3.*" + }, + "autoload": { + "psr-4": { + "MaxMind\\Exception\\": "src/Exception", + "MaxMind\\WebService\\": "src/WebService" + } + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/AuthenticationException.php b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/AuthenticationException.php new file mode 100644 index 00000000..ba423627 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/AuthenticationException.php @@ -0,0 +1,10 @@ +uri = $uri; + parent::__construct($message, $httpStatus, $previous); + } + + public function getUri() + { + return $this->uri; + } + + public function getStatusCode() + { + return $this->getCode(); + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/InsufficientFundsException.php b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/InsufficientFundsException.php new file mode 100644 index 00000000..fe159a2a --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/InsufficientFundsException.php @@ -0,0 +1,10 @@ +error = $error; + parent::__construct($message, $httpStatus, $uri, $previous); + } + + public function getErrorCode() + { + return $this->error; + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/IpAddressNotFoundException.php b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/IpAddressNotFoundException.php new file mode 100644 index 00000000..31608f71 --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/Exception/IpAddressNotFoundException.php @@ -0,0 +1,7 @@ +userId = $userId; + $this->licenseKey = $licenseKey; + + $this->httpRequestFactory = isset($options['httpRequestFactory']) + ? $options['httpRequestFactory'] + : new RequestFactory(); + + if (isset($options['host'])) { + $this->host = $options['host']; + } + if (isset($options['userAgent'])) { + $this->userAgentPrefix = $options['userAgent'] . ' '; + } + + $this->caBundle = isset($options['caBundle']) ? + $this->caBundle = $options['caBundle'] : $this->getCaBundle(); + + if (isset($options['connectTimeout'])) { + $this->connectTimeout = $options['connectTimeout']; + } + if (isset($options['timeout'])) { + $this->timeout = $options['timeout']; + } + + if (isset($options['proxy'])) { + $this->proxy = $options['proxy']; + } + } + + /** + * @param string $service name of the service querying + * @param string $path the URI path to use + * @param array $input the data to be posted as JSON + * + * @throws InvalidInputException when the request has missing or invalid + * data + * @throws AuthenticationException when there is an issue authenticating the + * request + * @throws InsufficientFundsException when your account is out of funds + * @throws InvalidRequestException when the request is invalid for some + * other reason, e.g., invalid JSON in the POST. + * @throws HttpException when an unexpected HTTP error occurs + * @throws WebServiceException when some other error occurs. This also + * serves as the base class for the above exceptions. + * + * @return array The decoded content of a successful response + */ + public function post($service, $path, $input) + { + $body = json_encode($input); + if ($body === false) { + throw new InvalidInputException( + 'Error encoding input as JSON: ' + . $this->jsonErrorDescription() + ); + } + + $request = $this->createRequest( + $path, + ['Content-Type: application/json'] + ); + + list($statusCode, $contentType, $body) = $request->post($body); + + return $this->handleResponse( + $statusCode, + $contentType, + $body, + $service, + $path + ); + } + + public function get($service, $path) + { + $request = $this->createRequest($path); + + list($statusCode, $contentType, $body) = $request->get(); + + return $this->handleResponse( + $statusCode, + $contentType, + $body, + $service, + $path + ); + } + + private function userAgent() + { + $curlVersion = curl_version(); + + return $this->userAgentPrefix . 'MaxMind-WS-API/' . self::VERSION . ' PHP/' . PHP_VERSION . + ' curl/' . $curlVersion['version']; + } + + private function createRequest($path, $headers = []) + { + array_push( + $headers, + 'Authorization: Basic ' + . base64_encode($this->userId . ':' . $this->licenseKey), + 'Accept: application/json' + ); + + return $this->httpRequestFactory->request( + $this->urlFor($path), + [ + 'caBundle' => $this->caBundle, + 'connectTimeout' => $this->connectTimeout, + 'headers' => $headers, + 'proxy' => $this->proxy, + 'timeout' => $this->timeout, + 'userAgent' => $this->userAgent(), + ] + ); + } + + /** + * @param int $statusCode the HTTP status code of the response + * @param string $contentType the Content-Type of the response + * @param string $body the response body + * @param string $service the name of the service + * @param string $path the path used in the request + * + * @throws AuthenticationException when there is an issue authenticating the + * request + * @throws InsufficientFundsException when your account is out of funds + * @throws InvalidRequestException when the request is invalid for some + * other reason, e.g., invalid JSON in the POST. + * @throws HttpException when an unexpected HTTP error occurs + * @throws WebServiceException when some other error occurs. This also + * serves as the base class for the above exceptions + * + * @return array The decoded content of a successful response + */ + private function handleResponse( + $statusCode, + $contentType, + $body, + $service, + $path + ) { + if ($statusCode >= 400 && $statusCode <= 499) { + $this->handle4xx($statusCode, $contentType, $body, $service, $path); + } elseif ($statusCode >= 500) { + $this->handle5xx($statusCode, $service, $path); + } elseif ($statusCode !== 200) { + $this->handleUnexpectedStatus($statusCode, $service, $path); + } + + return $this->handleSuccess($body, $service); + } + + /** + * @return string describing the JSON error + */ + private function jsonErrorDescription() + { + $errno = json_last_error(); + switch ($errno) { + case JSON_ERROR_DEPTH: + return 'The maximum stack depth has been exceeded.'; + case JSON_ERROR_STATE_MISMATCH: + return 'Invalid or malformed JSON.'; + case JSON_ERROR_CTRL_CHAR: + return 'Control character error.'; + case JSON_ERROR_SYNTAX: + return 'Syntax error.'; + case JSON_ERROR_UTF8: + return 'Malformed UTF-8 characters.'; + default: + return "Other JSON error ($errno)."; + } + } + + /** + * @param string $path the path to use in the URL + * + * @return string the constructed URL + */ + private function urlFor($path) + { + return 'https://' . $this->host . $path; + } + + /** + * @param int $statusCode the HTTP status code + * @param string $contentType the response content-type + * @param string $body the response body + * @param string $service the service name + * @param string $path the path used in the request + * + * @throws AuthenticationException + * @throws HttpException + * @throws InsufficientFundsException + * @throws InvalidRequestException + */ + private function handle4xx( + $statusCode, + $contentType, + $body, + $service, + $path + ) { + if (strlen($body) === 0) { + throw new HttpException( + "Received a $statusCode error for $service with no body", + $statusCode, + $this->urlFor($path) + ); + } + if (!strstr($contentType, 'json')) { + throw new HttpException( + "Received a $statusCode error for $service with " . + 'the following body: ' . $body, + $statusCode, + $this->urlFor($path) + ); + } + + $message = json_decode($body, true); + if ($message === null) { + throw new HttpException( + "Received a $statusCode error for $service but could " . + 'not decode the response as JSON: ' + . $this->jsonErrorDescription() . ' Body: ' . $body, + $statusCode, + $this->urlFor($path) + ); + } + + if (!isset($message['code']) || !isset($message['error'])) { + throw new HttpException( + 'Error response contains JSON but it does not ' . + 'specify code or error keys: ' . $body, + $statusCode, + $this->urlFor($path) + ); + } + + $this->handleWebServiceError( + $message['error'], + $message['code'], + $statusCode, + $path + ); + } + + /** + * @param string $message the error message from the web service + * @param string $code the error code from the web service + * @param int $statusCode the HTTP status code + * @param string $path the path used in the request + * + * @throws AuthenticationException + * @throws InvalidRequestException + * @throws InsufficientFundsException + */ + private function handleWebServiceError( + $message, + $code, + $statusCode, + $path + ) { + switch ($code) { + case 'IP_ADDRESS_NOT_FOUND': + case 'IP_ADDRESS_RESERVED': + throw new IpAddressNotFoundException( + $message, + $code, + $statusCode, + $this->urlFor($path) + ); + case 'AUTHORIZATION_INVALID': + case 'LICENSE_KEY_REQUIRED': + case 'USER_ID_REQUIRED': + case 'USER_ID_UNKNOWN': + throw new AuthenticationException( + $message, + $code, + $statusCode, + $this->urlFor($path) + ); + case 'OUT_OF_QUERIES': + case 'INSUFFICIENT_FUNDS': + throw new InsufficientFundsException( + $message, + $code, + $statusCode, + $this->urlFor($path) + ); + case 'PERMISSION_REQUIRED': + throw new PermissionRequiredException( + $message, + $code, + $statusCode, + $this->urlFor($path) + ); + default: + throw new InvalidRequestException( + $message, + $code, + $statusCode, + $this->urlFor($path) + ); + } + } + + /** + * @param int $statusCode the HTTP status code + * @param string $service the service name + * @param string $path the URI path used in the request + * + * @throws HttpException + */ + private function handle5xx($statusCode, $service, $path) + { + throw new HttpException( + "Received a server error ($statusCode) for $service", + $statusCode, + $this->urlFor($path) + ); + } + + /** + * @param int $statusCode the HTTP status code + * @param string $service the service name + * @param string $path the URI path used in the request + * + * @throws HttpException + */ + private function handleUnexpectedStatus($statusCode, $service, $path) + { + throw new HttpException( + 'Received an unexpected HTTP status ' . + "($statusCode) for $service", + $statusCode, + $this->urlFor($path) + ); + } + + /** + * @param string $body the successful request body + * @param string $service the service name + * + * @throws WebServiceException if the request body cannot be decoded as + * JSON + * + * @return array the decoded request body + */ + private function handleSuccess($body, $service) + { + if (strlen($body) === 0) { + throw new WebServiceException( + "Received a 200 response for $service but did not " . + 'receive a HTTP body.' + ); + } + + $decodedContent = json_decode($body, true); + if ($decodedContent === null) { + throw new WebServiceException( + "Received a 200 response for $service but could " . + 'not decode the response as JSON: ' + . $this->jsonErrorDescription() . ' Body: ' . $body + ); + } + + return $decodedContent; + } + + private function getCaBundle() + { + $curlVersion = curl_version(); + + // On OS X, when the SSL version is "SecureTransport", the system's + // keychain will be used. + if ($curlVersion['ssl_version'] === 'SecureTransport') { + return; + } + $cert = CaBundle::getSystemCaRootBundlePath(); + + // Check if the cert is inside a phar. If so, we need to copy the cert + // to a temp file so that curl can see it. + if (substr($cert, 0, 7) === 'phar://') { + $tempDir = sys_get_temp_dir(); + $newCert = tempnam($tempDir, 'geoip2-'); + if ($newCert === false) { + throw new \RuntimeException( + "Unable to create temporary file in $tempDir" + ); + } + if (!copy($cert, $newCert)) { + throw new \RuntimeException( + "Could not copy $cert to $newCert: " + . var_export(error_get_last(), true) + ); + } + + // We use a shutdown function rather than the destructor as the + // destructor isn't called on a fatal error such as an uncaught + // exception. + register_shutdown_function( + function () use ($newCert) { + unlink($newCert); + } + ); + $cert = $newCert; + } + if (!file_exists($cert)) { + throw new \RuntimeException("CA cert does not exist at $cert"); + } + + return $cert; + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/WebService/Http/CurlRequest.php b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/WebService/Http/CurlRequest.php new file mode 100644 index 00000000..e44e408a --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/WebService/Http/CurlRequest.php @@ -0,0 +1,110 @@ +url = $url; + $this->options = $options; + } + + /** + * @param $body + * + * @return array + */ + public function post($body) + { + $curl = $this->createCurl(); + + curl_setopt($curl, CURLOPT_POST, true); + curl_setopt($curl, CURLOPT_POSTFIELDS, $body); + + return $this->execute($curl); + } + + public function get() + { + $curl = $this->createCurl(); + + curl_setopt($curl, CURLOPT_HTTPGET, true); + + return $this->execute($curl); + } + + /** + * @return resource + */ + private function createCurl() + { + $curl = curl_init($this->url); + + if (!empty($this->options['caBundle'])) { + $opts[CURLOPT_CAINFO] = $this->options['caBundle']; + } + $opts[CURLOPT_SSL_VERIFYHOST] = 2; + $opts[CURLOPT_FOLLOWLOCATION] = false; + $opts[CURLOPT_SSL_VERIFYPEER] = true; + $opts[CURLOPT_RETURNTRANSFER] = true; + + $opts[CURLOPT_HTTPHEADER] = $this->options['headers']; + $opts[CURLOPT_USERAGENT] = $this->options['userAgent']; + $opts[CURLOPT_PROXY] = $this->options['proxy']; + + // The defined()s are here as the *_MS opts are not available on older + // cURL versions + $connectTimeout = $this->options['connectTimeout']; + if (defined('CURLOPT_CONNECTTIMEOUT_MS')) { + $opts[CURLOPT_CONNECTTIMEOUT_MS] = ceil($connectTimeout * 1000); + } else { + $opts[CURLOPT_CONNECTTIMEOUT] = ceil($connectTimeout); + } + + $timeout = $this->options['timeout']; + if (defined('CURLOPT_TIMEOUT_MS')) { + $opts[CURLOPT_TIMEOUT_MS] = ceil($timeout * 1000); + } else { + $opts[CURLOPT_TIMEOUT] = ceil($timeout); + } + + curl_setopt_array($curl, $opts); + + return $curl; + } + + private function execute($curl) + { + $body = curl_exec($curl); + if ($errno = curl_errno($curl)) { + $errorMessage = curl_error($curl); + + throw new HttpException( + "cURL error ({$errno}): {$errorMessage}", + 0, + $this->url + ); + } + + $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); + $contentType = curl_getinfo($curl, CURLINFO_CONTENT_TYPE); + curl_close($curl); + + return [$statusCode, $contentType, $body]; + } +} diff --git a/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/WebService/Http/Request.php b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/WebService/Http/Request.php new file mode 100644 index 00000000..27bdd58e --- /dev/null +++ b/wp/wp-content/ip-geo-api/maxmind/vendor/maxmind/web-service-common/src/WebService/Http/Request.php @@ -0,0 +1,29 @@ + 'form', + ) ); + + return (bool) apply_filters( 'wpcf7_autop_or_not', WPCF7_AUTOP, $options ); } diff --git a/wp/wp-content/plugins/contact-form-7/includes/mail.php b/wp/wp-content/plugins/contact-form-7/includes/mail.php index 70cfc2fb..4d68fc95 100644 --- a/wp/wp-content/plugins/contact-form-7/includes/mail.php +++ b/wp/wp-content/plugins/contact-form-7/includes/mail.php @@ -6,7 +6,7 @@ add_filter( 'wpcf7_mail_html_body', 'wpcf7_mail_html_body_autop', 10, 1 ); * Filter callback that applies auto-p to HTML email message body. */ function wpcf7_mail_html_body_autop( $body ) { - if ( wpcf7_autop_or_not() ) { + if ( wpcf7_autop_or_not( array( 'for' => 'mail' ) ) ) { $body = wpcf7_autop( $body ); } diff --git a/wp/wp-content/plugins/contact-form-7/includes/submission.php b/wp/wp-content/plugins/contact-form-7/includes/submission.php index 9036b703..39d89645 100644 --- a/wp/wp-content/plugins/contact-form-7/includes/submission.php +++ b/wp/wp-content/plugins/contact-form-7/includes/submission.php @@ -68,6 +68,14 @@ class WPCF7_Submission { } + /** + * Destructor. + */ + public function __destruct() { + $this->remove_uploaded_files(); + } + + /** * The main logic of submission. */ @@ -124,8 +132,6 @@ class WPCF7_Submission { do_action( 'wpcf7_mail_failed', $contact_form ); } } - - $this->remove_uploaded_files(); }; wpcf7_switch_locale( $this->contact_form->locale(), $callback ); diff --git a/wp/wp-content/plugins/contact-form-7/license.txt b/wp/wp-content/plugins/contact-form-7/license.txt index 7ded71ac..daf093c5 100644 --- a/wp/wp-content/plugins/contact-form-7/license.txt +++ b/wp/wp-content/plugins/contact-form-7/license.txt @@ -1,4 +1,4 @@ -Contact Form 7 WordPress Plugin, 2007-2023 Takayuki Miyoshi +Contact Form 7 WordPress Plugin, 2007-2024 Takayuki Miyoshi Contact Form 7 is distributed under the terms of the GNU GPL This program is free software; you can redistribute it and/or modify diff --git a/wp/wp-content/plugins/contact-form-7/modules/sendinblue/contact-form-properties.php b/wp/wp-content/plugins/contact-form-7/modules/sendinblue/contact-form-properties.php index 668456ff..2926659d 100644 --- a/wp/wp-content/plugins/contact-form-7/modules/sendinblue/contact-form-properties.php +++ b/wp/wp-content/plugins/contact-form-7/modules/sendinblue/contact-form-properties.php @@ -102,7 +102,7 @@ function wpcf7_sendinblue_editor_panels( $panels ) { ) ); - $lists = $service->get_lists(); + $lists = wpcf7_sendinblue_get_lists(); $templates = $service->get_templates(); ?> @@ -301,3 +301,39 @@ function wpcf7_sendinblue_editor_panels( $panels ) { return $panels; } + + +/** + * Retrieves contact lists from Brevo's database. + */ +function wpcf7_sendinblue_get_lists() { + static $lists = array(); + + $service = WPCF7_Sendinblue::get_instance(); + + if ( ! empty( $lists ) or ! $service->is_active() ) { + return $lists; + } + + $limit = 50; + $offset = 0; + + while ( count( $lists ) < $limit * 10 ) { + $lists_next = (array) $service->get_lists( array( + 'limit' => $limit, + 'offset' => $offset, + ) ); + + if ( ! empty( $lists_next ) ) { + $lists = array_merge( $lists, $lists_next ); + } + + if ( count( $lists_next ) < $limit ) { + break; + } + + $offset += $limit; + } + + return $lists; +} diff --git a/wp/wp-content/plugins/contact-form-7/modules/sendinblue/service.php b/wp/wp-content/plugins/contact-form-7/modules/sendinblue/service.php index 305287cc..752dc1e7 100644 --- a/wp/wp-content/plugins/contact-form-7/modules/sendinblue/service.php +++ b/wp/wp-content/plugins/contact-form-7/modules/sendinblue/service.php @@ -252,12 +252,14 @@ trait WPCF7_Sendinblue_API { } - public function get_lists() { + public function get_lists( $options = '' ) { + $options = wp_parse_args( $options, array( + 'limit' => 50, + 'offset' => 0, + ) ); + $endpoint = add_query_arg( - array( - 'limit' => 50, - 'offset' => 0, - ), + $options, 'https://api.sendinblue.com/v3/contacts/lists' ); diff --git a/wp/wp-content/plugins/contact-form-7/readme.txt b/wp/wp-content/plugins/contact-form-7/readme.txt index e8190e81..ea80793d 100644 --- a/wp/wp-content/plugins/contact-form-7/readme.txt +++ b/wp/wp-content/plugins/contact-form-7/readme.txt @@ -5,7 +5,7 @@ Tags: contact, form, contact form, feedback, email, ajax, captcha, akismet, mult Requires at least: 6.2 Requires PHP: 7.4 Tested up to: 6.4 -Stable tag: 5.8.5 +Stable tag: 5.8.6 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -78,6 +78,10 @@ Do you have questions or issues with Contact Form 7? Use these support channels For more information, see [Releases](https://contactform7.com/category/releases/). += 5.8.6 = + +[https://contactform7.com/contact-form-7-586/](https://contactform7.com/contact-form-7-586/) + = 5.8.5 = [https://contactform7.com/contact-form-7-585/](https://contactform7.com/contact-form-7-585/) diff --git a/wp/wp-content/plugins/contact-form-7/wp-contact-form-7.php b/wp/wp-content/plugins/contact-form-7/wp-contact-form-7.php index ff60a500..1f85730b 100644 --- a/wp/wp-content/plugins/contact-form-7/wp-contact-form-7.php +++ b/wp/wp-content/plugins/contact-form-7/wp-contact-form-7.php @@ -7,12 +7,12 @@ * Author URI: https://ideasilo.wordpress.com/ * License: GPL v2 or later * License URI: https://www.gnu.org/licenses/gpl-2.0.html - * Version: 5.8.5 + * Version: 5.8.6 * Requires at least: 6.2 * Requires PHP: 7.4 */ -define( 'WPCF7_VERSION', '5.8.5' ); +define( 'WPCF7_VERSION', '5.8.6' ); define( 'WPCF7_REQUIRED_WP_VERSION', '6.2' ); diff --git a/wp/wp-content/plugins/ip-geo-block/LICENSE.txt b/wp/wp-content/plugins/ip-geo-block/LICENSE.txt new file mode 100644 index 00000000..f288702d --- /dev/null +++ b/wp/wp-content/plugins/ip-geo-block/LICENSE.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/wp/wp-content/plugins/ip-geo-block/README.txt b/wp/wp-content/plugins/ip-geo-block/README.txt new file mode 100644 index 00000000..5deb2311 --- /dev/null +++ b/wp/wp-content/plugins/ip-geo-block/README.txt @@ -0,0 +1,766 @@ +=== IP Geo Block === +Contributors: tokkonopapa +Donate link: +Tags: security, firewall, brute force, vulnerability, login, wp-admin, admin, ajax, xmlrpc, comment, pingback, trackback, spam, IP address, geo, geolocation, buddypress, bbPress +Requires at least: 3.7 +Tested up to: 5.0.3 +Stable tag: 3.0.17.4 +License: GPLv3 +License URI: https://www.gnu.org/licenses/gpl-3.0.txt + +It blocks spam posts, login attempts and malicious access to the back-end requested from the specific countries, and also prevents zero-day exploit. + +== Description == + +The more you install themes and plugins, the more likely your sites will be vulnerable, even if you [securely harden your sites](https://codex.wordpress.org/Hardening_WordPress "Hardening WordPress « WordPress Codex"). + +While WordPress.org [provides](https://wordpress.org/about/security/ "Security | WordPress.org") [excellent](https://developer.wordpress.org/themes/theme-security/ "Theme Security | Theme Developer Handbook | WordPress Developer Resources") [resources](https://developer.wordpress.org/plugins/security/ "Plugin Security | Plugin Developer Handbook | WordPress Developer Resources"), themes and plugins may often get vulnerable due to developers' [human factors](https://www.google.com/search?q=human+factors+in+security "human factors in security - Google Search") such as lack of security awareness, misuse and disuse of the best practices in those resources. + +This plugin focuses on insights into such developers' human factors instead of detecting the specific attack vectors after they were disclosed. This brings a smart and powerful methods named as "**WP Zero-day Exploit Prevention**" and "**WP Metadata Exploit Protection**". + +Combined with those methods and IP address geolocation, you'll be surprised to find a bunch of malicious or undesirable access blocked in the logs of this plugin after several days of installation. + += Features = + +* **Privacy by design:** + IP address is always encrypted on recording in logs/cache. Moreover, it can be anonymized and restricted on sending to the 3rd parties such as geolocation APIs or whois service. + +* **Immigration control:** + Access to the basic and important entrances into back-end such as `wp-comments-post.php`, `xmlrpc.php`, `wp-login.php`, `wp-signup.php`, `wp-admin/admin.php`, `wp-admin/admin-ajax.php`, `wp-admin/admin-post.php` will be validated by means of a country code based on IP address. It allows you to configure either whitelist or blacklist to [specify the countires](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements "ISO 3166-1 alpha-2 - Wikipedia"), [CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing "Classless Inter-Domain Routing - Wikipedia") for a range of IP addresses and [AS number](https://en.wikipedia.org/wiki/Autonomous_system_(Internet) "Autonomous system (Internet) - Wikipedia") for a group of IP networks. + +* **Zero-day Exploit Prevention:** + Unlike other security firewalls based on attack patterns (vectors), the original feature "**W**ord**P**ress **Z**ero-day **E**xploit **P**revention" (WP-ZEP) is focused on patterns of vulnerability. It is simple but still smart and strong enough to block any malicious accesses to `wp-admin/*.php`, `plugins/*.php` and `themes/*.php` even from the permitted countries. It will protect your site against certain types of attack such as CSRF, LFI, SQLi, XSS and so on, **even if you have some vulnerable plugins and themes in your site**. + +* **Guard against login attempts:** + In order to prevent hacking through the login form and XML-RPC by brute-force and the reverse-brute-force attacks, the number of login attempts will be limited per IP address even from the permitted countries. + +* **Minimize server load against brute-force attacks:** + You can configure this plugin as a [Must Use Plugins](https://codex.wordpress.org/Must_Use_Plugins "Must Use Plugins « WordPress Codex") so that this plugin can be loaded prior to regular plugins. It can massively [reduce the load on server](https://www.ipgeoblock.com/codex/validation-timing.html "Validation timing | IP Geo Block"). + +* **Prevent malicious down/uploading:** + A malicious request such as exposing `wp-config.php` or uploading malwares via vulnerable plugins/themes can be blocked. + +* **Block badly-behaved bots and crawlers:** + A simple logic may help to reduce the number of rogue bots and crawlers scraping your site. + +* **Support of BuddyPress and bbPress:** + You can configure this plugin so that a registered user can login as a membership from anywhere, while a request such as a new user registration, lost password, creating a new topic and subscribing comment can be blocked by country. It is suitable for [BuddyPress](https://wordpress.org/plugins/buddypress/ "BuddyPress — WordPress Plugins") and [bbPress](https://wordpress.org/plugins/bbpress/ "WordPress › bbPress « WordPress Plugins") to help reducing spams. + +* **Referrer suppressor for external links:** + When you click an external hyperlink on admin screens, http referrer will be eliminated to hide a footprint of your site. + +* **Multiple source of IP Geolocation databases:** + [MaxMind GeoLite2 free databases](https://www.maxmind.com "MaxMind - IP Geolocation and Online Fraud Prevention") (it requires PHP 5.4.0+) and [IP2Location LITE databases](https://www.ip2location.com/ "IP Address Geolocation to Identify Website Visitor's Geographical Location") can be installed in this plugin. Also free Geolocation REST APIs and whois information can be available for audit purposes. + Father more, [dedicated API class libraries](https://www.ipgeoblock.com/article/api-class-library.html "CloudFlare & CloudFront API class library | IP Geo Block") can be installed for CloudFlare and CloudFront as a reverse proxy service. + +* **Customizing response:** + HTTP response code can be selectable as `403 Forbidden` to deny access pages, `404 Not Found` to hide pages or even `200 OK` to redirect to the top page. + You can also have a human friendly page (like `404.php`) in your parent/child theme template directory to fit your site design. + +* **Validation logs:** + Validation logs for useful information to audit attack patterns can be manageable. + +* **Cooperation with full spec security plugin:** + This plugin is lite enough to be able to cooperate with other full spec security plugin such as [Wordfence Security](https://wordpress.org/plugins/wordfence/ "Wordfence Security — WordPress Plugins"). See [this report](https://www.ipgeoblock.com/codex/page-speed-performance.html "Page speed performance | IP Geo Block") about page speed performance. + +* **Extendability:** + You can customize the behavior of this plugin via `add_filter()` with [pre-defined filter hook](https://www.ipgeoblock.com/codex/ "Codex | IP Geo Block"). See various use cases in [samples.php](https://github.com/tokkonopapa/WordPress-IP-Geo-Block/blob/master/ip-geo-block/samples.php "WordPress-IP-Geo-Block/samples.php at master - tokkonopapa/WordPress-IP-Geo-Block - GitHub") bundled within this package. + You can also get the extension [IP Geo Allow](https://github.com/ddur/WordPress-IP-Geo-Allow "GitHub - ddur/WordPress-IP-Geo-Allow: WordPress Plugin Exension for WordPress-IP-Geo-Block Plugin") by [Dragan](https://github.com/ddur "ddur (Dragan) - GitHub"). It makes admin screens strictly private with more flexible way than specifying IP addresses. + +* **Self blocking prevention and easy rescue:** + Website owners do not prefer themselves to be blocked. This plugin prevents such a sad thing unless you force it. And futhermore, if such a situation occurs, you can [rescue yourself](https://www.ipgeoblock.com/codex/what-should-i-do-when-i-m-locked-out.html "What should I do when I'm locked out? | IP Geo Block") easily. + +* **Clean uninstallation:** + Nothing is left in your precious mySQL database after uninstallation. So you can feel free to install and activate to make a trial of this plugin's functionality. + += Attribution = + +This package includes GeoLite2 library distributed by MaxMind, available from [MaxMind](https://www.maxmind.com "MaxMind - IP Geolocation and Online Fraud Prevention") (it requires PHP 5.4.0+), and also includes IP2Location open source libraries available from [IP2Location](https://www.ip2location.com "IP Address Geolocation to Identify Website Visitor's Geographical Location"). + +Also thanks for providing the following great services and REST APIs for free. + +* [http://ip-api.com/](http://ip-api.com/ "IP-API.com - Free Geolocation API") (IPv4, IPv6 / free for non-commercial use) +* [http://geoiplookup.net/](http://geoiplookup.net/ "What Is My IP Address | GeoIP Lookup") (IPv4, IPv6 / free) +* [https://ipinfo.io/](https://ipinfo.io/ "IP Address API and Data Solutions") (IPv4, IPv6 / free) +* [https://ipapi.com/](https://ipapi.com/ "ipapi - IP Address Lookup and Geolocation API) (IPv4, IPv6 / free, need API key) +* [https://ipdata.co/](https://ipdata.co/ "ipdata.co - IP Geolocation and Threat Data API") (IPv4, IPv6 / free, need API key) +* [https://ipstack.com/](https://ipstack.com/ "ipstack - Free IP Geolocation API") (IPv4, IPv6 / free for registered user, need API key) +* [https://ipinfodb.com/](https://ipinfodb.com/ "Free IP Geolocation Tools and API| IPInfoDB") (IPv4, IPv6 / free for registered user, need API key) + += Development = + +Development of this plugin is promoted at [WordPress-IP-Geo-Block](https://github.com/tokkonopapa/WordPress-IP-Geo-Block "tokkonopapa/WordPress-IP-Geo-Block - GitHub") and class libraries to handle geo-location database are developed separately as "add-in"s at [WordPress-IP-Geo-API](https://github.com/tokkonopapa/WordPress-IP-Geo-API "tokkonopapa/WordPress-IP-Geo-API - GitHub"). + +All contributions will always be welcome. Or visit my [development blog](https://www.ipgeoblock.com/ "IP Geo Block"). + +== Installation == + += Using The WordPress Dashboard = + +1. Navigate to the 'Add New' in the plugins dashboard +2. Search for 'IP Geo Block' +3. Click 'Install Now' +4. Activate the plugin on the Plugin dashboard +5. Stay cool for a while and go to 'Settings' » 'IP Geo Block' +6. Try 'Best for Back-end' button for easy setup at the bottom of this plugin's setting page. + +Please refer to [the document](https://www.ipgeoblock.com/codex/ "Codex | IP Geo Block") for your best setup. + +== Frequently Asked Questions == + += Does the site using this plugin comply with GDPR? = + +This plugin is designed based on the principle of "Privacy by design" so that you can compliantly run it to GDPR. As guarding against personal data breach, IP addresses in this plugin are encrypted and also can be anonymized by default. It also provides some functions not only to manually erase them but also to automatically remove them when those are exceeded a certain amount/time. + +However, these are the part of GDPR requirements and do not guarantee that the site is compliant with GDPR. Refer to [3.0.11 release note](https://www.ipgeoblock.com/changelog/release-3.0.11.html) for details. + += Does this plugin support multisite? = + +Yes. You can synchronize the settings with all the sites on the network when you activate on network and enable "**Network wide settings**" in "**Plugin settings**" section. + += Does this plugin works well with caching? = + +The short answer is **YES**, especially for the purpose of security e.g. blocking malicious access both on the back-end and on the front-end. + +You can find the long answer and the compatibility list of cache plugins at "[Compatibility with cache plugins](https://www.ipgeoblock.com/codex/living-with-caching-plugin.html 'Compatibility with cache plugins | IP Geo Block')". + += I still have access from blacklisted country. Does it work correctly? = + +Absolutely, YES. + +Sometimes, a Wordfence Security user would report this type of claim when he/she found some accesses in its Live traffic view. But please don't worry. Before WordPress runs, Wordfence cleverly filters out malicious requests to your site using auto_prepend_file directive to include PHP based Web Application Firewall. Then this plugin validates the rest of the requests that pass over Wordfence because those were not in WAF rules, especially you enables "**Prevent Zero-day Exploit**". + +It would also possibly be caused by the accuracy of country code in the geolocation databases. Actually, there is a case that a same IP address has different country code. + +For more detail, please refer to "[I still have access from blacklisted country.](https://www.ipgeoblock.com/codex/access-from-blacklisted-country.html 'I still have access from blacklisted country. | IP Geo Block')". + += How can I test this plugin works? = + +The easiest way is to use [free proxy browser addon](https://www.google.com/search?q=free+proxy+browser+addon "free proxy browser addon - Google Search"). + +Another one is to use [http header browser addon](https://www.google.com/search?q=browser+add+on+modify+http+header "browser add on modify http header - Google Search"). + +You can add an IP address to the `X-Forwarded-For` header to emulate the access behind the proxy. In this case, you should add `HTTP_X_FORWARDED_FOR` into the "**$_SERVER keys for extra IPs**" on "**Settings**" tab. + +See more details at "[How to test prevention of attacks](https://www.ipgeoblock.com/codex/#how-to-test-prevention-of-attacks 'Codex | IP Geo Block')". + += I'm locked out! What shall I do? = + +Please find the solution in [Quick recovery from blocking on your login page](https://www.ipgeoblock.com/codex/quick-recovery-from-blockig-on-login-page.html "Quick recovery from blocking on your login page | IP Geo Block") at first. + +You can also find another solution by editing "**Emergent Functionality**" code section near the bottom of `ip-geo-block.php`. This code block can be activated by replacing `/*` (opening multi-line comment) at the top of the line to `//` (single line comment), or `*` at the end of the line to `*/` (closing multi-line comment). + +`/** + * Invalidate blocking behavior in case yourself is locked out. + * + * How to use: Activate the following code and upload this file via FTP. + */ +/* -- ADD '/' TO THE TOP OR END OF THIS LINE TO ACTIVATE THE FOLLOWINGS -- */ +function ip_geo_block_emergency( $validate, $settings ) { + $validate['result'] = 'passed'; + return $validate; +} +add_filter( 'ip-geo-block-login', 'ip_geo_block_emergency', 1, 2 ); +add_filter( 'ip-geo-block-admin', 'ip_geo_block_emergency', 1, 2 ); +// */` + +Please not that you have to use an [appropriate editor](https://codex.wordpress.org/Editing_Files#Using_Text_Editors "Editing Files « WordPress Codex"). + +After saving and uploading it to `/wp-content/plugins/ip-geo-block/` on your server via FTP, you become to be able to login again as an admin. + +Remember that you should upload the original one after re-configuration to deactivate this feature. + +[This document](https://www.ipgeoblock.com/codex/what-should-i-do-when-i-m-locked-out.html "What should I do when I'm locked out? | IP Geo Block") can also help you. + += Do I have to turn on all the selection to enhance security? = + +Yes. Roughly speaking, the strategy of this plugin has been constructed as follows: + +- **Block by country** + It blocks malicious requests from outside your country. + +- **Prevent Zero-day Exploit** + It blocks malicious requests from your country. + +- **Force to load WP core** + It blocks the request which has not been covered in the above two. + +- **Bad signatures in query** + It blocks the request which has not been covered in the above three. + +Please try "**Best for Back-end**" button at the bottom of this plugin's setting page for easy setup. And also see more details in "[The best practice of target settings](https://www.ipgeoblock.com/codex/the-best-practice-for-target-settings.html 'The best practice of target settings | IP Geo Block')". + += Does this plugin validate all the requests? = + +Unfortunately, no. This plugin can't handle the requests that are not parsed by WordPress. In other words, a standalone file (PHP, CGI or something excutable) that is unrelated to WordPress can't be validated by this plugin even if it is in the WordPress install directory. + +But there're exceptions: When you enable "**Force to load WP core**" for **Plugins area** or **Themes area**, a standalone PHP file becomes to be able to be blocked. Sometimes this kind of file has some vulnerabilities. This function protects your site against such a case. + += How to resolve "Sorry, your request cannot be accepted."? = + +If you encounter this message, please refer to [this document](https://www.ipgeoblock.com/codex/you-are-not-allowed-to-access.html "Why “Sorry, your request cannot be accepted” ? | IP Geo Block") to resolve your blocking issue. + +If you can't solve your issue, please let me know about it on the [support forum](https://wordpress.org/support/plugin/ip-geo-block/ "View: Plugin Support « WordPress.org Forums"). Your logs in this plugin and "**Installation information**" at "**Plugin settings**" will be a great help to resolve the issue. + += How can I fix "Unable to write" error? = + +When you enable "**Force to load WP core**" options, this plugin will try to configure `.htaccess` in your `/wp-content/plugins/` and `/wp-content/themes/` directory in order to protect your site against the malicous attacks to the [OMG plugins and themes](https://www.ipgeoblock.com/article/exposure-of-wp-config-php.html "Prevent exposure of wp-config.php | IP Geo Block"). + +But some servers doesn't give read / write permission against `.htaccess` to WordPress. In this case, you can configure `.htaccess` files by your own hand instead of enabling "**Force to load WP core**" options. + +Please refer to "[How can I fix permission troubles?](https://www.ipgeoblock.com/codex/how-can-i-fix-permission-troubles.html 'How can I fix permission troubles? | IP Geo Block')" in order to fix this error. + +== Other Notes == + += Known issues = + +* No image is shown after drag & drop a image in grid view at "Media Library". For more details, please refer to [this ticket at Github](https://github.com/tokkonopapa/WordPress-IP-Geo-Block/issues/2 "No image is shown after drag & drop a image in grid view at "Media Library". - Issue #2 - tokkonopapa/WordPress-IP-Geo-Block - GitHub"). +* From [WordPress 4.5](https://make.wordpress.org/core/2016/03/09/comment-changes-in-wordpress-4-5/ "Comment Changes in WordPress 4.5 – Make WordPress Core"), `rel=nofollow` had no longer be attached to the links in `comment_content`. This change prevents to block "[Server Side Request Forgeries](https://www.owasp.org/index.php/Server_Side_Request_Forgery 'Server Side Request Forgery - OWASP')" (not Cross Site but a malicious internal link in the comment field). +* [WordPress.com Mobile App](https://apps.wordpress.com/mobile/ "WordPress.com Apps - Mobile Apps") can't execute image uploading because of its own authentication system via XMLRPC. + +== Screenshots == + +1. **IP Geo Plugin** - Multisite list on network +2. **IP Geo Plugin** - Settings tab +3. **IP Geo Plugin** - Validation rules and behavior +4. **IP Geo Plugin** - Back-end target settings +5. **IP Geo Plugin** - Front-end target settings +6. **IP Geo Plugin** - Geolocation API settings +7. **IP Geo Plugin** - IP address cache settings +8. **IP Geo Plugin** - Statistics tab +9. **IP Geo Plugin** - Logs tab +10. **IP Geo Plugin** - Search tab +11. **IP Geo Plugin** - Attribution tab + +== Changelog == + += 3.0.17.4 = +* **Fix issue:** Add an option "Metadata Exploit Protection" in "Validation rules and behavior" section and make it disabled by default because it potentially caused "Sorry, your request cannot be accepted". +* **Fix issue:** Fix the issue that direct request to PHP files under plugins/themes directory was "404 Not found" when WP-ZEP enabled. +* **Fix issue:** Fix the incorrect link to the corresponding option page on error message in multisite environment. +* **Improvement:** Update the url to the google map api to prevent 301 redirection. +* **Improvement:** Use [RIPE stat Data API](https://stat.ripe.net/docs/data_api "RIPEstat — Internet Measurements and Analysis") to get whois information instead of using YQL (Yahoo! Query Language) which was retired on Jan. 3, 2019. + += 3.0.17.3 = +Sorry for the frequent update. +* **Fix issue:** Remove `wp_user_roles` from "Metadata Exploit Protection" which was equipped in 3.0.17 because some plugins/themes would add their own role and capability without admin authority. + += 3.0.17.2 = +* **Fix issue:** Fixed the fatal error under certain condition. + += 3.0.17.1 = +* **Fix issue:** Inadequate verification of IPv4 with some CIDR notation. +* **Fix issue:** Insufficient path parsing for document root and content directory when real path and symbolic link were mixtured on virtual host. +* **Fix issue:** Unexpected blocking on admin dashboard when home url is different from site url. +* **Fix issue:** `wp-signup.php` was not blocked when only "Register" was enabled as "Target actions" at "Login form" in "Back-end target settings" section. +* **Improvement:** Improve compatibility with Advanced Access Manager. +* **Improvement:** Use comment syntax `@codingStandardsIgnoreLine` for deprecated function on PHP7+ to avoid false positive by some scanning tool like PHP Compatibility Checker. +Hava a happy new year! + += 3.0.17 = +* **Fix issue:** Avoid the error of "Can not load Geolocation API libraries" caused by the race condition on upgrading this plugin. +* **New feature:** Enhance protecting against certain types of attacks by privilege escalation. +* **New feature:** Add a new option of "**Network wide settings**" in "**Plugin settings**" section to synchronize all the settings with the main blog on multisite. +* **New feature:** Add "**Preset filters**" using [`ip-geo-block-logs[-preset]`](https://www.ipgeoblock.com/codex/ip-geo-block-logs-preset.html "ip-geo-block-logs[-preset] | IP Geo Block") filter hook to make analyze logs easy on "**Logs**" tab. +* **Improvement:** When `pwd` is set at "**$_POST key to record with value**" in "**Privacy and record settings**" section, mask the password in logs unless the login attempt is blocked. +* **Improvement:** Flush out the buffer of "**Live update**" on "**Logs**" tab when stop button is activated to avoid data remains. +* **Improvement:** Update the geolocation API service "geoip.nekudo.com" to "ipapi.com". +* **Improvement:** Update the class for Maxmind GeoLite Legacy databases to prepare against the upcoming expiry of support. +* See [3.0.17 release note](https://www.ipgeoblock.com/changelog/release-3.0.17.html) for some details. + += 3.0.16 = +* **Fix issue:** Fix the issue that some functions did not work properly when "Validation timing" was set as `"mu-plugins" (ip-geo-block-mu.php)` under some conditions before WP 4.0. +* **New feature:** Add "**Sites list**" page at Network admin page to look through the status of the sites if this plugin is network activated on multisite. +* **Improvement:** Support [Swift Performance Lite](https://wordpress.org/plugins/swift-performance-lite/ "Swift Performance Lite | WordPress.org") cache plugin with "Disk Cashe with PHP" caching mode. +* **Improvement:** Apply simulation mode to not only the front-end but also to the back-end. +* **Improvement:** Optimize SQL issuing to reduce some queries. +* See [3.0.16 release note](https://www.ipgeoblock.com/changelog/release-3.0.16.html) for some details. + += 3.0.15 = +* **Fix issue:** Fix the issue that "Can not find Geolocation API libraries" error would always appear when once Geolite2, Maxmind and IP2Location were unselected. +* **Fix issue:** Fix the issue that https in ipstack.com is available only for premiums users. +* **New feature:** Introduce a new filter hook [`ip-geo-block-logs-preset`](https://www.ipgeoblock.com/codex/ip-geo-block-logs-preset.html "ip-geo-block-logs[-preset] | IP Geo Block") that adds an UI of "Preset filters" at "Search in logs". +* **Improvement:** Prevent to make a cached page by WP Fastest Cache on blocking when "Validation timing" is "init" action hook. +* **Improvement:** Make the priority of "UA string and qualification" is higher than that of "Block badly-behaved bots and crawlers" on public facing pages. +* **Improvement:** Update google charts based on the [release note](https://developers.google.com/chart/interactive/docs/release_notes "Google Charts Release Notes  |  Charts | Google Developers"). +* **Improvement:** Always show "Google Maps API key" text box in "Plugin settings" section. If it is saved as empty, Google Maps API will no longer be used and a simple map will appear on "Search" tab. +* **Improvement:** Follow the change of RIPE whois format related to AS number. +* **Improvement:** Add UI to select the number of entries per page on IP address tables. +* **Improvement:** Multiple entries on IP address tables can be selected across the pages for bulk action. +* **Improvement:** Multiple Geolocation APIs can be selected on "Search" tab. +* **Improvement:** The country code of admin should not be cached if it's `ZZ` during initialization process. + += 3.0.14 = +* **Fix issue:** Fix wrong handling of anonymized IPv6 on clicking a link or applying bulk actions. +* **Fix issue:** Fix the issue that added a server's country code which was not in "Whitelist of country code" but its IP address was in "Whitelist of extra IP addresses prior to country code" on activation. ([forum topic](https://wordpress.org/support/topic/possible-bug-disabling-enabling-adds-us-to-whitelist-country-code/ "Topic: Possible bug: disabling/enabling adds “,US” to whitelist country code | WordPress.org")) +* **Fix issue:** Fix the issue of "Fatal error: Call to undefined function" which caused 500 Internal error on admin screen under a certain condition. +* **Fix issue:** Fix the issue of undefined symbol for openssl in PHP 5.3.5 and under. +* **New feature:** Introduce an emergency login link in "Plugins settings" section. +* **New feature:** Introduce a new filter hook [`ip-geo-block-dns`](https://www.ipgeoblock.com/codex/ip-geo-block-dns.html "ip-geo-block-dns | IP Geo Block") to specify the primary and secondary domain name resolvers. +* **New feature:** Introduce a new filter hook `ip-geo-block-logs`. ([forum topic](https://wordpress.org/support/topic/request-log-filtering/ "Topic: Request: Log filtering | WordPress.org")) +* **New feature:** Introduce a new drop-in file `drop-in-admin.php` in Geolocation API library folder. +* **Improvement:** Provide help links on "Settings" tab. +* **Improvement:** Sort out some related items in the section on "Settings" tab. +* **Improvement:** All the http had been replaced to https if possible. + += 3.0.13 = +* **Deprecate:** Remove the hotfix in 3.0.12.1 because of [WordPress 4.9.7 Security and Maintenance Release](https://wordpress.org/news/2018/07/wordpress-4-9-7-security-and-maintenance-release/ "WordPress 4.9.7 Security and Maintenance Release"). +* **Fix issue:** Local databases settings will be updated when Geolocation API folder can not be found on activation. ([forum topic](https://wordpress.org/support/topic/local-database-settings-wrong-after-server-move/ "Topic: Local Database settings wrong after server move | WordPress.org")) +* **Fix issue:** Fix the issue of "ip_geo_block_cache doesn't exist" at activation on clean installation. +* **Fix issue:** Fix the issue that "Remove entries by IP address" did not work when "Anonymize IP address" in "Privacy and record settings" section was enabled. +* **Fix issue:** Ipdata.co became to require API key for registered user to make up to 1500 requests daily. +* **Improvement:** AES256 is applied to encrypt IP address if the algorithm is available. (PHP 5.3.3+) +* **Improvement:** Add "Do not send IP address to external APIs" apart from "Anonymize IP address" in "Privacy and record settings" section. + += 3.0.12.1 = +* **Fix issue:** Unexpected blocking cause by an extra slash at the end of `$_SERVER['DOCUMENT_ROOT']` that might be added by server's configuration. ([forum topic](https://wordpress.org/support/topic/wpwebinar/ "Topic: WPWebinar | WordPress.org")) +* **Fix issue:** [Human friendly error page](https://www.ipgeoblock.com/codex/customizing-the-response.html#human-friendly-error-page) now works properly. ([forum topic](https://wordpress.org/support/topic/problem-with-permalinks-51/ "Topic: Problem with Permalinks | WordPress.org")) +* **Fix issue:** Fix the conflict with WP hide & Security Enhancer. ([forum topic](https://wordpress.org/support/topic/problem-with-permalinks-51/ "Topic: Problem with Permalinks | WordPress.org")) +* **Fix issue:** Hotfix [WordPress File Delete to Code Execution](https://blog.ripstech.com/2018/wordpress-file-delete-to-code-execution/ "WARNING: WordPress File Delete to Code Execution") by RIPS Technologies. + += 3.0.12 = +* **Improvement:** Enhance "Privacy and record settings" where "Expiration time [sec] for Logs" can be specified. +* **Improvement:** Add "Export cache" in "Statistics in IP address cache" on "Statistics" tab. +* **Fix:** Fix some minor bugs. + += 3.0.11 = +* **Improvement:** To comply with GDPR, IP address in logs/cache will be always encrypted. The option of "**Anonymize IP address**" was renamed to "**Privacy friendly**" in "**Privacy and record settings**". It will not only anonymize an IP address but also will restrict on sending to the 3rd parties such as geolocation APIs and whois service. +* **Improvement:** Update geolocation APIs and add a new one. +* **Improvement:** Change the JavaScript compressor from Google Closure Compiler to UglifyJS 2 to prevent "Uncaught TypeError: Cannot read property 'toLowerCase' of undefined" in a certain environment. +* **Fix:** Fix the issue that blocking occurred immediately instead of displaying the login page again when login failed, even the number of times did not exceed the limit. +* See [3.0.11 release note](https://www.ipgeoblock.com/changelog/release-3.0.11.html) for some details. + += 3.0.10.4 = +* **Fix:** JavaScript error caused by bad handling form tag without method property. This error was happened with Wordfence Live Traffic. +* **Fix:** Inconsistent tags on the settings dashboard. +* **Fix:** "Add AS number to Whitelist/Blacklist" at "Bulk action" in "Statistics in cache" section on "Statistics" tab did not work properly because of illegal regular expression. +* **Fix:** Add a fallback function to support WP 3.7 and PHP before 5.3. + += 3.0.10.3 = +* **Fix:** Add a fallback process to add some fields into database table especially for MariaDB. +* **Fix:** Fatal error that would cause a blank page in PHP 5.3 and under or single site. +* **Fix:** Validation timing was not proper when redirection happened in admin context. (#36) + += 3.0.10.1 = +This release is intented to fix the issue reported at forum [here](https://wordpress.org/support/topic/error-on-updating-version-3-0-10/ "Error on updating Version 3.0.10") and [here](https://wordpress.org/support/topic/error-report-on-latest-update/ "error report on latest update"). + +If you still find the error "/plugins/ip-geo-block/classes/class-ip-geo-block-logs.php (837) Unknown column 'last' in 'field list'", please deactivate plugin once and activate again. You will see the same error message again, but the things should be fixed. + += 3.0.10 = +* **New feature:** Add "Block badly-behaved bots and crawlers" in "Front-end target settings" section that validates the frequency of request. +* **Improvement:** Add a help link to the document for some sections. +* **Improvement:** Add descriptions on "Target actions" at "Login form" in "Back-end target settings" section. +* **Improvement:** Add new descriptions "passUA" and "blockUA" for result in Logs to identify the reason when "UA string and qualification" is applied. +* **Improvement:** AS Number can be handled in "UA string and qualification". +* **Improvement:** Make WP cron job for "Auto updating" reliably in multisite environment. +* **Improvement:** Better logout compatibility for redirecting to the previous page after login. +* **Improvement:** Validate the prefix of IP address CIDR to prevent unexpected fatal error. +* **Improvement:** Prevent opening a new window on clicking "Visit Site" in the admin bar menu for multi site by multi domain type. +* **Bug fix:** Fix the issue of failing to retrieve client IP address from Chrome Data Saver. +* **Bug fix:** Fix the issue of illegal redirection after "Save Changes" on "Settings" => "General Settings" page. +* **Bug fix:** Fix the issue of unexpected blocking against the requests to plugins/themes area when "Force to load WP core" is enabled on windows server. +* **Bug fix:** Fix the issue that "Search now" was not available when google map failed to load. + += 3.0.9 = +* **New feature:** Add CIDR calculator for IPv4 / IPv6. +* **Improvement:** Avoid blocking by wp-zep when IP address is private or loopback network. +* **Improvement:** Chnage the priority of internal action hook for better compatibility with other plugins/themes. +* **Maintenance:** Change the priority order of local geolocation databases. +* **Bug fix:** Fix the issue that the target action for login form on settings tab could not unchecked on saving changes. +* **Bug fix:** Fix some other minor bugs. +* See [3.0.9 release note](https://www.ipgeoblock.com/changelog/release-3.0.9.html "3.0.9 Release Note | IP Geo Block") for some details. + += 3.0.8 = +* **Improvement:** Use both Maxmind Legacy and GeoLite2 databases parallely. +* **Improvement:** Remove self IP address from cache on activation or upgrade to prevent blocking caused by 'ZZ' in cache. + += 3.0.7.2 = +* **Bug fix:** Update Geolocation API library for Maxmind GeoLite2. +* **Bug fix:** Fix the issue of potentially fatal error related to "Force to load WP core". + += 3.0.7.1 = +Sorry for frequent update every time, but the following bug should be fixed. +* **Bug fix:** Fix the issue that unexpected blocking when GeoLite2 DBs returned "ZZ" (unknown country) as an country code. Actually, GeoLite2 DBs seems not to be equivalent to the legacy ones. + += 3.0.7 = +* **New feature:** Support Maxmind GeoLite2 database which requires PHP 5.4.0+. +* **Improvement:** "Live update" can show requests even if those are not specified as a blocking target. +* **Bug fix:** Fix the issue that "Force to load WP core" did not work properly under certain condition on Nginx. +* **Bug fix:** Fix the compatibility issue with Mail Poet 2/3 related to "Exceptions" for "Admin ajax/post". + += 3.0.6.1 = +Sorry for frequent update but the following bug should be fixed. +* **Bug fix:** Fix the bug that "Candidate actions/pages" at "Exceptions" in "Admin ajax/post" were not displayed. + += 3.0.6 = +* **New feature:** Add "Find blocked requests in Logs" button at "Exceptions". This helps to find a solution related to the incompatibility with unwanted blocking. +* **Improvement:** Support nginx for "Force to load WP core" at "Plugins area" / "Themes area". +* **Improvement:** Improve the extraction ability and verifiability of "Slug in back-end". +* **Improvement:** Add a new result "UAlist" that indicate a request is blocked by "UA string and qualification" in "Front-end target settings" section. +* **Improvement:** Improve responsiveness of live update control button on windows system. +* **Bug fix:** Fix the bug using php short open tag on "Logs" tab. +* **Bug fix:** Fix the bug related to absolute path in filesystem on windows system. +* **Bug fix:** Fix the issue that "Auto updating (once a month)" could not be disabled. +* See [3.0.6 release note](https://www.ipgeoblock.com/changelog/release-3.0.6.html "3.0.6 Release Note | IP Geo Block") for some details. + += 3.0.5 = +* **New feature:** Add "Live update" mode on "Logs" tab. +* **Improvement:** List all the IP addresses in cache are now displayed and manageable on "Statistics" tab. +* **Improvement:** Add "Either blocked or passed" as a new condition for recording logs. It enables to verify the requests "passed" from the blacklisted countries or the countries not in the whitelist. +* **Improvement:** Add two new filter hooks to utilize Google APIs from native domain in China. +* See [3.0.5 release note](https://www.ipgeoblock.com/changelog/release-3.0.5.html "3.0.5 Release Note | IP Geo Block") for some details. + += 3.0.4.6 = +* **Bug fix:** Fix the issue that the emergent functionality didn't work when the number of login attempts reached to the limit. +* **Bug fix:** Fix the issue that the result would be always `limited` when "Max number of failed login attempts per IP address" is "Disabled". + += 3.0.4.5 = +* **Improvement:** Avoid conflict with [WP Limit Login Attempts](https://wordpress.org/plugins/wp-limit-login-attempts/ "WP Limit Login Attempts — WordPress Plugins"). See some details in ["Sorry, your request cannot be accepted."](https://wordpress.org/support/topic/sorry-your-request-cannot-be-accepted/#post-9544556 "Topic: “Sorry, your request cannot be accepted.” « WordPress.org Forums"). + += 3.0.4.4 = +Sorry for the frequent update, but it should be fixed before the next release. +* **Bug fix:** Fix the issue that limit of login attempts took precedence over authority of admin. +* **Improvement:** Suppress "Unable to read" error message on dashboard in a certain type of server. + += 3.0.4.3 = +* **Bug fix:** Fix a bug of "Missing argument 2 for IP_Geo_Block_Admin_Rewrite::show_message()". + += 3.0.4.2 = +This is a maintenance release addressing various internal improvement toward the next version. +* **Bug fix:** Fix a bug that the counter of login attempt counted illegally. +* **Bug fix:** Fix a bug that the emergency functionality did not work properly. +* **Bug fix:** Fix a bug that an error messages was not displayed when downloading database file. +* **Improvement:** Improve the compatibility with a certain type of server using "ftpext" as a method of file system. +* **Improvement:** Change rewrite setting from server type base to server function base. +* **Improvement:** Strict evaluation of URL on anchor tags for zero-day exploit prevention. +* **Improvement:** Avoid blocking on redirection between multisite admin screen. + += 3.0.4.1 = +Thank you all for taking your time again since last update. +* **Bug fix:** Fix the error on updating 3.0.4. ([@](https://wordpress.org/support/topic/error-on-updating-3-0-4/ "Topic: Error on updating 3.0.4 « WordPress.org Forums")) +* **Bug fix:** Fix the issue of unexpected redirection on anchor tag with empty href in multisite. ([@](https://wordpress.org/support/topic/refresh-the-backend-page/ "Topic: refresh the backend page « WordPress.org Forums")) +* **Bug fix:** Fix the issue that "Remove all settings at uninstallation" could not be unchecked. ([@](https://github.com/tokkonopapa/WordPress-IP-Geo-Block/issues/19 "Bugs in v3.0.4 - Issue #19 - tokkonopapa/WordPress-IP-Geo-Block")) + += 3.0.4 = +* **New feature:** Autonomous System Number (ASN) in whitelist and blacklist of extra IP addresses instead of specifying many IP addresses. +* **New feature:** Statistics in logs - a new section in Statistics tab. +* **Deprecated:** Add a new filter hook `ip-geo-block-upload-forbidden` instead of `ip-geo-block-forbidden-upload`. +* **Improvement:** Add a new filter hook `ip-geo-block-upload-capability` to improve compatibility with other plugins that have uploading functionality. +* **Improvement:** Add a new option for verifying file upload capability. It can be set apart from verifying file extension and MIME type in "Prevent malicious file uploading". +* **Improvement:** Improve ability to extract Ajax actions for "Exception" in "Admin post/ajax". +* **Improvement:** Inhibit to embed a special nonce into links when WP-ZEP is disabled at each target. This may improve compatibility with some plugins and themes. +* **Bug fix:** Fix the issue of verifying file upload. It could not handle multiple files. ([@](https://wordpress.org/support/topic/incompatible-with-awesome-support-plugin/#post-9403708 "Topic: incompatible with Awesome Support plugin « WordPress.org Forums")) +* **Bug fix:** Fix the issue of illegal click event handling on anchor tag without href. ([@](https://wordpress.org/support/topic/pagebuilder-broken-by-ipgeoblock-v3-0-3-4/ "Topic: Pagebuilder broken by IPGeoblock v3.0.3.4 « WordPress.org Forums")) +* See [3.0.4 release note](https://www.ipgeoblock.com/changelog/release-3.0.4.html "3.0.4 Release Note | IP Geo Block") for some details. + += 3.0.3.4 = +* **Improvement:** Some minor refactoring for the future release. +* **Improvement:** Better throughput against attacks on admin area when `"mu-plugins" (ip-geo-block-mu.php)` is enable. +* **Improvement:** Avoid annoying error message related to private IP address. +* **Bug fix:** Fix the issue of excessive blocking by bad signature. +* **Bug fix:** Fix the issue of illegal usage of `switch_to_blog()`. See [this notes on codex](https://codex.wordpress.org/Function_Reference/restore_current_blog#Notes "Function Reference/restore current blog « WordPress Codex"). +* **Bug fix:** Fix the issue of illegal JSON format on "Export settings". + += 3.0.3.3 = +Thank you for your patience and understanding in frequent update. + +* **Bug fix:** Fixed the issue of "Notice: Undefined variable" in WP cron. This bug caused frequent refreshing of IP address cache. +* **Bug fix:** Fixed the issue of "Fatal Error" in validating user authentication. + += 3.0.3.2 = +* **Bug fix:** Fixed the issue where nonce for WP-ZEP didn't match on front-end. +* **Bug fix:** Fixed the issue which deleted all expired cache on multisite. + += 3.0.3.1 = +This is a maintenance release addressing various internal improvement. + +* **Bug fix:** Fixed an issue where deletion of the expired cache was not executed in subordinate blogs when this plugin was activated on the network wide. +* **Bug fix:** Some issues caused by IE10/11 on admin pages had been fixed. +* **Bug fix:** Turning off check boxes in "**API selection and key settings**" section now becomes to work. +* **Improvement:** Better validation performance for logged in user authentication. +* **Improvement:** Better rendering by CSS and JS for sections. +* **Improvement:** Better handling of click event for embedding a nonce. +* **Improvement:** Better handling of cookie for sections. +* **Improvement:** Better handling of server and private IP address. +* **Improvement:** Better compatibility with file operations using Filesystem API. FTP or SSH based operations are now supported only when [some symbols are defined in `wp-config.php`](https://codex.wordpress.org/Editing_wp-config.php#WordPress_Upgrade_Constants "Editing wp-config.php « WordPress Codex"). +* **Improvement:** Better timing of upgrade check at activation phase instead of `init` action hook. + += 3.0.3 = +* **New feature:** New option "Prevent malicious upload" to restrict MIME types. +* **New feature:** New option "Response code" and "Response message" for front-end. This is useful not to violate your affiliate program. +* **Improvement:** New Option "DNS reverse lookup" to enable/disable. +* **Improvement:** Stop rendering by javascript on setting pages to reduce flash of unstyled content. +* **Improvement:** Better compatibility of WP-ZEP with some plugins (Wordfence, Imagify) that request ajax from server side. +* **Improvement:** Better handling of server and private IP address. +* **Bug fix:** Fix the bug of "Export/Import settings". **Please export json file again if you hold it as backup purpose** because some of settings data might be incompatible. +* **Bug fix:** Fix the bug of "Password Reset" caused by miss-spelling "resetpasss". +* See some details at [release 3.0.3](https://www.ipgeoblock.com/changelog/release-3.0.3.html "3.0.3 Release Note | IP Geo Block"). + += 3.0.2.2 = +* **Improvement:** Change the behavior of "Referrer Suppressor" not to open a new window on public facing pages. +* **Improvement:** Improve some of the descriptions of help text. +* **Bug fix:** Fix the bug of undefined symbol in admin class related to the Google Map API. +* **Bug fix:** Fix the bug of incompatible function arguments when the number of login fails reaches the limit. +* **Bug fix:** Fix the issue of not working blocking by country on specific pages correctly as the validation target. + += 3.0.2.1 = +This is a maintenance release addressing some issues. + +* **Update:** Net_DNS2, Net_IPv6, Net_IPv4 to the newest. +* **Update:** Geolocation database API for Maxmind and IP2Location to 1.1.8. +* **Update:** Bring back the priority of validation for wp-zep and badsig as same as 3.0.2 and before. +* **Improvement:** Handle some of loop back and private IP addresses for localhost and host inside load balancer. +* **Improvement:** Update instructions when the geolocation API libraries fails to install. +* **Bug fix:** Fix the blocking issue of admin ajax/post on front-end. +* **Bug fix:** Fix the issue of improper IPv6 handling on setting page. + += 3.0.2 = +* **New feature:** Add "Exceptions" for "Admin ajax/post" to specify the name of action which causes undesired blocking (typically on the public facing pages). +* **Improvement:** Add "Disable" to "Max number of failed login attempts per IP address" to avoid conflict with other similar plugin. +* **Improvement:** Update geolocation database libraries to 1.1.7 for better compatibility on some platform. +* **Trial feature:** Add custom action hook `ip-geo-block-send-response`. This is useful to control firewall via [fail2ban](https://www.fail2ban.org/ "Fail2ban") like [WP fail2ban](https://wordpress.org/plugins/wp-fail2ban/ "WP fail2ban - WordPress Plugins"). +* See some details at [release 3.0.2](https://www.ipgeoblock.com/changelog/release-3.0.2.html "3.0.2 Release Note | IP Geo Block"). + += 3.0.1.2 = +* **Bug fix:** Fix the blocking issue in some environments when upgrading from 2.2.9.1 to 3.0.0. +* **Bug fix:** Fix the blocking issue at opening a new window via context menu on dashboard. +* **Bug fix:** Fix the potential issue of 500 Internal error in cron job. +* **Improvement:** Revive 410 Gone for response code. +* **Improvement:** Prevent the issue of resetting matching rule and country code at upgrading. + += 3.0.1.1 = +* **Bug fix:** Fix the issue where **Login form** could not be disabled on **Back-end target settings**. +* **Bug fix:** Fix the issue where trackback and pingback could not be blocked since 2.2.4. +* **Improved:** Apply the action hook 'pre_trackback_post' that was introduced in WP 4.7.0. +* **Improved:** Use 'safe_redirect()' instead of 'redirect()' for secured internal redirection. If you set an external url for **Redirect URL**, please use the filter hook 'allowed_redirect_hosts'. +* **Improved:** Better compatibility with the plugin "Anti-Malware Security and Brute-Force Firewall". + += 3.0.1 = +* **Bug fix:** Add lock mechanism for local geolocation DBs to avoid potential fatal error. +* **Improvement:** Add self blocking prevention potentially caused by login attempts with the same IP address of logged in user. +* **New feature:** Add "**Installation information**" button to make it easy to submit an issue at support forum. + += 3.0.0 = +* **New feature:** Add the function of blocking on front-end. +* **New filter hook:** Add `ip-geo-block-public` to extend validation on front-end. +* **Improvement:** Avoid conflict with "Open external links in a new window" plugin and some other reason to prevent duplicated window open. For more detail, see [this discussion at support forum](https://wordpress.org/support/topic/ip-geoblock-opens-2-windows-on-link-clicks-when-user-is-logged-in/ "Topic: IP Geoblock opens 2 windows on link clicks when user is logged in « WordPress.org Forums"). +* **Improvement:** Better compatibility with some plugins, themes and widgets. +* **Improvement:** Deferred execution of SQL command to improve the response. +* **Improvement:** Make the response compatible with WP original when it is requested by GET method. +* See some details at [release 3.0.0](https://www.ipgeoblock.com/changelog/release-3.0.0.html "3.0.0 Release Note | IP Geo Block"). + += 2.2.9.1 = +* **Bug fix:** Blocking Wordfence scanning. ([@](https://wordpress.org/support/topic/wordfence-conflict-2/ "WordFence Conflict")) +* **Bug fix:** Illegal elimination of colon in text field for IP address. ([@](https://wordpress.org/support/topic/adding-ipv6-to-white-list/ "Adding IPv6 to white list")) +* **Improved:** Compatibility with PHP 7 that cause to feel relaxed. ([@](https://wordpress.org/support/topic/plans-for-php-7-compatiblity/ "Plans for PHP 7 compatiblity?")) +* **Improved:** Avoid resetting whitelist on update by InfiniteWP. ([@](https://wordpress.org/support/topic/whitelist-resets-on-update/ "[Resolved] Whitelist resets on update")) +* **Trial feature:** `X-Robots-Tag` HTTP header with `noindex, nofollow` for login page. ([@](https://wordpress.org/support/topic/ip-geo-block-and-searchmachines/ "IP GEo-block and searchmachines")) + += 2.2.9 = +* **New feature:** A new option that makes this plugin configured as a "Must-use plugin". It can massively reduce the server load especially against brute-force attacks because it initiates this plugin prior to other typical plugins. +* **Improvement:** Validation of a certain signature against XSS is internally added to "Bad signature in query" by default. +* **Improvement:** Improved compatibility with PHP 7 (Thanks to [FireMyst](https://wordpress.org/support/topic/plans-for-php-7-compatiblity/ "Topic: Plans for PHP 7 compatiblity? « WordPress.org Forums")). +* Find details in [2.2.9 Release Note](https://www.ipgeoblock.com/changelog/release-2.2.9.html "2.2.9 Release Note"). + += 2.2.8.2 = +* **Bug fix:** Fixed the mismatched internal version number. + += 2.2.8.1 = +* **Bug fix:** Fixed the issue of undefined function `wp_get_raw_referer()` error that happened under certain condition. See [the issue](https://wordpress.org/support/topic/since-php-update-fatal-error-everytime-i-want-to-edit-a-post/ "Since PHP update Fatal error everytime I want to edit a post") at forum. +* **Improved:** Avoid resetting country code on update. See [the issue](https://wordpress.org/support/topic/whitelist-resets-on-update/ "Whitelist resets on update") at forum. + += 2.2.8 = +* **Bug fix:** Fixed the issue of stripping some required characters for Google maps API key. +* **New feature:** Whois database Lookup for IP address on search tab. +* **Update:** Updated geolocation API libraries and services. +* Find more details in [2.2.8 Release Note](https://www.ipgeoblock.com/changelog/release-2.2.8.html "2.2.8 Release Note"). + += 2.2.7 = +* **Bug fix:** Fix inadequate validation of "**Bad signatures in query**". +* **Improvement:** Add fallback for Google Maps API key ([@](https://wordpress.org/support/topic/226-problem-with-search-resp-google-maps "WordPress › Support » [2.2.6] Problem with SEARCH resp. Google Maps")) and corruption of "Bad signatures" ([@](https://wordpress.org/support/topic/226-problem-with-bad-signatures-in-query "WordPress › Support » [2.2.6] Problem with "Bad signatures in query"")). +* **Update:** Update geolocation service api. +* Find details about Google Maps API in [2.2.7 Release Note](https://www.ipgeoblock.com/changelog/release-2.2.7.html "2.2.7 Release Note"). + += 2.2.6 = +* **New feature:** Add saving csv file of logs in "Logs" tab. +* **New feature:** Add filter hook `ip-geo-block-record-log` to control over the conditions of recording in more detail. +* **Bug fix:** Fixed the issue that "Exceptions" for Plugins/Themes area does not work properly. Please confirm your settings again. +* See details at [release 2.2.6](https://www.ipgeoblock.com/changelog/release-2.2.6.html "2.2.6 Release Note"). + += 2.2.5 = +* **New feature:** On the settings page, you can specify the pliugin or theme which would cause undesired blocking in order to exclude it from the validation target without embedding any codes into `functions.php`. +* **Improvement:** Optimize resource loading on admin dashboard. +* **Improvement:** Support clean uninstall for network / multisite. +* **Improvement:** Improve the compatibility of downloading IP address databases for Microsoft IIS. +* **Bug fix:** Support `FORCE_SSL_ADMIN`. +* **Bug fix:** Fix the issue of [@](https://wordpress.org/support/topic/compatibility-with-ag-custom-admin "WordPress › Support » Compatibility with AG Custom Admin") and change the option name "**Important files**" to "**Bad signatures in query**" to avoid misuse. +* **Bug fix:** Fix the issue of [@](https://wordpress.org/support/topic/gb-added-to-whitelist "WordPress › Support » GB added to whitelist") which might be caused by some race condition. +* **Bug fix:** Fix the issue of restoring post revisions which was blocked. + += 2.2.4.1 = +Sorry for frequent updating. + +* **Bug fix:** Fixed the issue of `Warning: strpos(): Empty needle in...` that was reported in [@](https://wordpress.org/support/topic/version-224-produces-warning-message "WordPress › Support » Version 2.2.4 Produces Warning Message") and [@](https://wordpress.org/support/topic/error-after-update-to-newest-version "WordPress › Support » Error after Update to newest version"). + += 2.2.4 = +* **Bug fix:** Fixed the issue that some links on network admin of multisite were blocked when WP-ZEP for `admin area` or `admin ajax/post` was enabled. +* **New feature:** Added configure of `.htaccess` for the plugins/themes area. +* **Enhancement:** Added `wp-signup.php` to the list of validation target. +* **Enhancement:** Added exporting and importing the setting parameters. +* **Improvement:** Made the logout url compatible with [Rename wp-login.php](https://wordpress.org/plugins/rename-wp-login/). +* **Improvement:** Made condition of validation more strictly at admin diagnosis to prevent unnecessary notice of self blocking. ([@](https://wordpress.org/support/topic/youll-be-blocked-after-you-log-out-notice-doesnt-disappear "[resolved] "You'll be blocked after you log out" notice doesn't disappear")) +* **Improvement:** Improved some of UI. ([@](https://wordpress.org/support/topic/possible-to-select-which-countries-are-blocked "[resolved] Possible to select which countries are blocked?"), [@](https://wordpress.org/support/topic/ip-geo-block-black-list "IP Geo Block Black List")) +* See some details at [release 2.2.4](https://www.ipgeoblock.com/changelog/release-2.2.4.html "2.2.4 Release Note"). + += 2.2.3.1 = +* **Bug fix:** Fixed the issue that disabled validation target was still blocked by country. ([@](https://wordpress.org/support/topic/logs-whitelist-comments-still-blocked "[resolved] logs whitelist comments still blocked?")) +* **Improvement:** Better handling of charset and errors for MySQL. ([@](https://wordpress.org/support/topic/whitelist-log "[resolved] Whitelist + Log")) + += 2.2.3 = +* **Improvement:** Since WordPress 4.4, XML-RPC system.multicall is disabled when the authentication fails, but still processed all the methods to the end. Now this plugin immediately blocks the request when the authentication fails without processing the rest of the methods. +* **Improvement:** Add UI to change the maximum number of login attempts. +* **Improvement:** Add a fallback process of setting up the directory where the geo location database APIs should be installed. It will be set as `wp-content/uploads/` instead of `wp-content/plugins/ip-geo-block/` or `wp-content/` in case of being unable to obtain proper permission. ([@](https://wordpress.org/support/topic/deactivated-after-updte-why "[resolved] Deactivated after update - why?"), [@](https://wordpress.org/support/topic/the-plugin-caused-an-error-message "[resolved] The plugin caused an error message")) +* **Improvement:** Moderate the conditions of redirection after logout. ([@](https://wordpress.org/support/topic/logout-redirect-doesnt-work-when-plugin-is-active "[resolved] Logout redirect doesn't work when plugin is active")) +* **Improvement:** Prevent self blocking caused by irrelevant signature. ([@](https://wordpress.org/support/topic/works-too-well-blocked-my-wp-admin-myself "[resolved] Works too well - Blocked my wp-admin myself")) +* **Bug fix:** Fixed the issue of conflicting with certain plugins due to the irrelevant handling of js event. ([@](https://wordpress.org/support/topic/cannot-edit-pages-when-ip-geo-block-is-enabled "[resolved] Cannot edit pages when ip-geo-block is enabled.")) +* **New feature:** Add "Blocked per day" graph for the daily statistics. +* See some details at [2.2.3 release note](https://www.ipgeoblock.com/changelog/release-2.2.3.html "2.2.3 Release Note"). + += 2.2.2.3 = +Sorry for frequent update again but the following obvious bugs should be fixed. + +* **Bug fix:** Fixed the issue of not initializing country code at activation. +* **Bug fix:** Fixed the issue that scheme less notation like '//example.com' could not be handled correctly. + += 2.2.2.2 = +Sorry for frequent update. + +* **Bug fix:** Fixed the issue of race condition at activation. This fix is related to the urgent security update at **2.2.2.1 which was not actually the security issue but a bug**. See [this thread](https://wordpress.org/support/topic/white-list-hack "white list hack") about little more details. +* **Improvement:** Improved the compatibility with Jetpack. + += 2.2.2.1 = +* **Urgent security update:** Killed the possibility of the options being altered. + += 2.2.2 = +* **Enhancement:** Refactored some codes and components. The number of attacks that can be proccessed per second has been improved by 25% at the maximum. +* **Improvement:** In the previous version, the statistical data was recorded into `wp_options`. It caused the uncertainty of recording especially in case of burst attacks. Now the data will be recorded in an independent table to improve this issue. +* **Bug fix:** Fixed conflict with NextGEN Gallary Pro. Thanks to [bodowewer](https://wordpress.org/support/profile/bodowewer). +* **Bug fix:** Fixed some filter hooks that did not work as intended. +* See more details at [2.2.2 release note](https://www.ipgeoblock.com/changelog/release-2.2.2.html "2.2.2 Release Note"). + += 2.2.1.1 = +* **Bug fix:** Fixed "open_basedir restriction" issue caused by `file_exists()`. + += 2.2.1 = +* **Enhancement:** In previous version, local geolocation databases will always be removed and downloaded again at every upgrading. Now, the class library for Maxmind and IP2Location have become independent of this plugin and you can put them outside this plugin in order to cut the above useless process. The library can be available from [WordPress-IP-Geo-API](https://github.com/tokkonopapa/WordPress-IP-Geo-API). +* **Deprecated:** Cooperation with IP2Location plugins such as [IP2Location Tags](https://wordpress.org/plugins/ip2location-tags/ "WordPress - IP2Location Tags - WordPress Plugins"), [IP2Location Variables](https://wordpress.org/plugins/ip2location-variables/ "WordPress - IP2Location Variables - WordPress Plugins"), [IP2Location Country Blocker](https://wordpress.org/plugins/ip2location-country-blocker/ "WordPress - IP2Location Country Blocker - WordPress Plugins") is out of use. Instead of it, free [IP2Location LITE databases for IPv4 and IPv6](https://lite.ip2location.com/ "Free IP Geolocation Database") will be downloaded. +* **Improvement:** Improved connectivity with Jetpack. +* **Improvement:** Improved immediacy of downloading databases at upgrading. +* **Improvement:** Replaced a terminated RESTful API service with a new stuff. +* **Bug fix:** Fixed issue that clicking a link tag without href always refreshed the page. Thanks to [wyclef](https://wordpress.org/support/topic/conflict-with-menu-editor-plugin "WordPress › Support » Conflict with Menu Editor plugin?"). +* **Bug fix:** Fixed issue that deactivating and activating repeatedly caused to show the welcome message. +* **Bug fix:** Fixed issue that a misaligned argument in the function caused 500 internal server error when a request to the php files in plugins/themes area was rewrited to `rewrite.php`. + += 2.2.0.1 = +Sorry for frequent update. + +* **Fix:** Fixed the issue that some actions of other plugins were blocked. + += 2.2.0 = +* **Important:** Now **Block by country** and **Prevent Zero-day Exploit** become to work independently on **Admin area**, **Admin ajax/post** at **Validation target settings**. Please reconfirm them. +* **Important:** Previously, a request whose country code can't be available was always blocked. But from this release, such a request is considered as comming from the country whose code is `ZZ`. It means that you can put `ZZ` into the white list and black list. +* **New feature:** White list and Black list of extra IP addresses prior to the validation of country code. Thanks to Fabiano for good suggestions at [support forum](https://wordpress.org/support/topic/white-list-of-ip-addresses-or-ranges "WordPress › Support » White list of IP addresses or ranges?") +* **New feature:** Malicious signatures to prevent disclosing the important files via vulnerable plugins or themes. A malicious request to try to expose `wp-config.php` or `passwd` can be blocked. +* **New feature:** Add privacy considerations related to IP address. Add **Anonymize IP address** at **Record settings**. +* **Bug fix:** Fix the issue that spaces in **Text message on comment form** are deleted. +* See details at [2.2.0 release note](https://www.ipgeoblock.com/changelog/release-2.2.0.html "2.2.0 Release Note"). + += 2.1.5.1 = +* **Bug fix:** Fixed the issue that the Blacklist did not work properly. Thanks to TJayYay for reporting this issue at [support forum](https://wordpress.org/support/topic/hackers-from-country-in-blocked-list-of-countries-trying-to-login "WordPress › Support » Hackers from country in Blocked List of Countries trying to login"). + += 2.1.5 = +* **Enhancement:** Enforce preventing self blocking at the first installation. And add the scan button to get all the country code using selected API. Thanks to **Nils** for a nice idea at [support forum](https://wordpress.org/support/topic/locked-out-due-to-eu-vs-country "WordPress › Support » Locked out due to EU vs. Country"). +* **New feature:** Add pie chart to display statistics of "Blocked by country". +* **Enhancement:** WP-ZEP is reinforced against CSRF. +* **Bug fix:** Fix illegal handling of the fragment in a link. +* See details at [2.1.5 release note](https://www.ipgeoblock.com/changelog/release-2.1.5.html "2.1.5 Release Note"). + += 2.1.4 = +* **Bug fix:** Fix the issue that this plugin broke functionality of a certain plugin. Thanks to **opsec** for reporting this issue at [support forum](https://wordpress.org/support/topic/blocks-saves-in-types-or-any-plugins-from-wp-typescom "WordPress › Support » Blocks saves in Types or any plugins from wp-types.com"). +* **Improvement:** Add checking process for validation rule to prevent being blocked itself. Thanks to **internationals** for proposing at [support forum](https://wordpress.org/support/topic/locked-out-due-to-eu-vs-country "WordPress › Support » Locked out due to EU vs. Country") +* **Improvement:** Arrage the order of setting sections to focus the goal of this plugin. +* See details at [2.1.4 release note](https://www.ipgeoblock.com/changelog/release-2.1.4.html "2.1.4 Release Note"). + += 2.1.3 = +* **New feature:** Add "show" / "hide" at each section on the "Settings" tab. +* **New feature:** Add an emergency function that invalidate blocking behavior in case yourself is locked out. This feature is commented out by default at the bottom of `ip-geo-block.php`. +* **Improvement:** Prevent adding query strings to the static resources when users logged in. +* **Improvement:** Improved the compatibility with Autoptimize. +* **Bug fix:** Fix the issue related to showing featured themes on dashboard. +* **Bug fix:** Fix minor bug in `rewrite.php` for the advanced use case. +* See details at [2.1.3 release note](https://www.ipgeoblock.com/changelog/release-2.1.3.html "2.1.3 Release Note"). + += 2.1.2 = +This is a maintenance release. + +* **Bug fix:** Fix the issue that the login-fail-counter didn't work when the validation at `Login form` was `block by country (register, lost password)`. In this release, the login-fail-counter works correctly. +* **Bug fix:** Fix the issue that the validation settings of `Admin area` and `Admin ajax/post` were influential with each other. Now each of those works individually. +* **Bug fix:** "Site Stats" of Jetpack is now shown on the admin bar which issue was reported on [support forum](https://wordpress.org/support/topic/admin-area-prevent-zero-day-exploit-incompatible-with-jetpack-site-stats-in-a "WordPress › Support » Admin area - Prevent zero-day exploit: Incompatible with Jetpack Site Stats in A"). +* **Improvement:** Hide checking the existence of log db behind the symbol `IP_GEO_BLOCK_DEBUG` to reduce 1 query on admin screen. +* **Improvement:** Add alternative functions of BCMath extension to avoid `PHP Fatal error: Call to undefined function` in `IP2Location.php` when IPv6 is specified. +* **Improvement:** Use MaxMind database at the activating process not to be locked out by means of inconsistency of database at the activation and after. +* See more details at [2.1.2 release note](https://www.ipgeoblock.com/changelog/release-2.1.2.html "2.1.2 Release Note"). + += 2.1.1 = +* **New feature:** Added `Block by country (register, lost password)` at `Login form` on `Settings` tab in order to accept the registered users as membership from anywhere but block the request of new user ragistration and lost password by the country code. Is't suitable for BuddyPress and bbPress. +* **Improvement:** Added showing the custom error page for http response code 4xx and 5xx. For example the `403.php` in the theme template directory or in the child theme directory is used if it exists. And new filter hooks `ip-geo-block-(comment|xmlrpc|login|admin)-(status|reason)` are available to customize the response code and reason for human. +* **Obsoleted:** Obsoleted the filter hooks `ip-geo-block-(admin-actions|admin-pages|wp-content)`. Alternatively new filter hooks `ip-geo-block-bypass-(admins|plugins|themes)` are added to bypass WP-ZEP. +* Find out more details in the [2.1.1 release note](https://www.ipgeoblock.com/changelog/release-2.1.1.html "2.1.1 Release Note"). + += 2.1.0 = +* **New feature:** Expanded the operating range of ZP-ZEP, that includes admin area, plugins area, themes area. Now it can prevent a direct malicios attack to the file in plugins and themes area. Please go to the "Validation Settings" on "Settings" tab and check it. Also check my article in "[Analysis of Attack Vector against WP Plugins](https://www.ipgeoblock.com/article/analysis-attack-vector.html)". +* **Bug fix:** Fixed the issue that action hook `ip-geo-block-backup-dir` did not work correctly because the order of argument was mismatched. +* **Bug fix:** Fixed the issue that a record including utf8 4 bytes character in its columns was not logged into DB in WordPress 4.2. +* **Improvement:** Fixed the issue that Referrer Suppressor do nothing with a new element which is added into DOM after DOM ready. The event handler is now delegated at the `body`. + += 2.0.8 = +* Fixed an issue that a certain type of attack vector to the admin area ([example](https://blog.sucuri.net/2014/08/database-takeover-in-custom-contact-forms.html "Critical Vulnerability Disclosed on WordPress Custom Contact Forms Plugin")) could not be blocked by the reason that some plugins accept it on earlier hook (ie `init`) than this plugin (previously `admin_init`). +* Added re-creating DB table for validation logs in case of accidentally failed at activation process. +* The time of day is shown with local time by adding GMT offset based on the time zone setting. +* Optimized resource loading and settings to avoid redundancy. +* See details at [this plugin's blog](https://www.ipgeoblock.com/changelog/release-2.0.8.html "2.0.8 Release Note"). + += 2.0.7 = +* Avoid JavaScript error which occurs if an anchor link has no `href`. +* Improved UI on admin screen. +* Added a diagnosis for creation of database table. + += 2.0.6 = +* Sorry for urgent update but avoid an javascript error. + += 2.0.4 = +* Sorry for frequent update but added a function of showing admin notice when none of the IP geolocation providers is selected. Because the user will be locked out from admin screen when the cache expires. +* **Bug fix:** Fixed an issue of `get_geolocation()` method at a time of when the cache of IP address is cleared. +* Referrer suppressor now supports [meta referrer](https://wiki.whatwg.org/wiki/Meta_referrer "Meta referrer - WHATWG Wiki") + += 2.0.3 = +* **Bug fix:** Fixed an issue that empty black list doesn't work correctly when matching rule is black list. +* **New feature:** Added 'Zero-day Exploit Prevention for wp-admin'. Because it is an experimental feature, please open a new issue at [support forum](https://wordpress.org/support/plugin/ip-geo-block "WordPress › Support » IP Geo Block") if you have any troubles with it. +* **New feature:** Referrer suppressor for external link. When you click an external hyperlink on admin screen, http referrer will be suppressed to hide a footprint of your site. +* Also added the filter hook `ip-geo-block-admin-actions` for safe actions on back-end. + += 2.0.2 = +* **New feature:** Include `wp-admin/admin-post.php` as a validation target in the `Admin area`. This feature is to protect against a vulnerability such as [Analysis of the Fancybox-For-WordPress Vulnerability](https://blog.sucuri.net/2015/02/analysis-of-the-fancybox-for-wordpress-vulnerability.html) on Sucuri Blog. +* Added a sample code snippet as a use case for 'Give ajax permission in case of safe actions on front facing page'. See Example 10 in `sample.php`. + += 2.0.1 = +* Fixed the issue of improper scheme from the HTTPS site when loading js for google map. +* In order to prevent accidental disclosure of the length of password, changed the length of `*` (masked password) which is logged into the database. + += 2.0.0 = +* **New feature:** Protection against brute-force and reverse-brute-force attacks to `wp-login.php`, `xmlrpc.php` and admin area. This is an experimental function and can be enabled on `Settings` tab. Malicious access can try to login only 5 times per IP address. This retry counter can be reset to zero by `Clear statistics` on `Statistics` tab. + += 1.0.0 = +* Ready to release. + +== Upgrade Notice == diff --git a/wp/wp-content/plugins/ip-geo-block/admin/class-ip-geo-block-admin.php b/wp/wp-content/plugins/ip-geo-block/admin/class-ip-geo-block-admin.php new file mode 100644 index 00000000..b1feb943 --- /dev/null +++ b/wp/wp-content/plugins/ip-geo-block/admin/class-ip-geo-block-admin.php @@ -0,0 +1,1744 @@ + + * @license GPL-3.0 + * @link https://www.ipgeoblock.com/ + * @copyright 2013-2019 tokkonopapa + */ + +class IP_Geo_Block_Admin { + + /** + * Constants for admin class + * + */ + const INTERVAL_LIVE_UPDATE = 5; // interval for live update [sec] + const TIMEOUT_LIVE_UPDATE = 60; // timeout of pausing live update [sec] + + /** + * Globals in this class + * + */ + private static $instance = NULL; + private $is_network_admin = FALSE; + private $admin_tab = 0; + + /** + * Initialize the plugin by loading admin scripts & styles + * and adding a settings page and menu. + */ + private function __construct() { + // Setup the tab number. + $this->admin_tab = isset( $_GET['tab'] ) ? (int)$_GET['tab'] : 0; + $this->admin_tab = min( 5, max( 0, $this->admin_tab ) ); + + // Load plugin text domain and add body class + add_action( 'init', array( $this, 'admin_init' ) ); + + // Add suggest text for inclusion in the site's privacy policy. @since 4.9.6 + // add_action( 'admin_init', array( $this, 'add_privacy_policy' ) ); + + // Setup a nonce to validate authentication. + add_filter( 'wp_redirect', array( $this, 'add_redirect_nonce' ), 10, 2 ); // @since 2.1.0 + } + + /** + * Return an instance of this class. + * + */ + public static function get_instance() { + return self::$instance ? self::$instance : ( self::$instance = new self ); + } + + /** + * Load the plugin text domain for translation and add body class. + * + */ + public function admin_init() { + // include drop in for admin if it exists + $settings = IP_Geo_Block::get_option(); + file_exists( $file = IP_Geo_Block_Util::unslashit( $settings['api_dir'] ) . '/drop-in-admin.php' ) and include( $file ); + + // Add the options page and menu item. + add_action( 'admin_menu', array( $this, 'setup_admin_page' ) ); // @since: 2.5.0 + add_action( 'admin_post_ip_geo_block', array( $this, 'admin_ajax_callback' ) ); // @since: 2.6.0 + add_action( 'wp_ajax_ip_geo_block', array( $this, 'admin_ajax_callback' ) ); // @since: 2.1.0 + add_filter( 'wp_prepare_revision_for_js', array( $this, 'add_revision_nonce' ), 10, 3 ); + + if ( IP_Geo_Block_Util::is_user_logged_in() ) + add_filter( IP_Geo_Block::PLUGIN_NAME . '-bypass-admins', array( $this, 'verify_request' ), 10, 2 ); + + if ( is_multisite() && is_plugin_active_for_network( IP_GEO_BLOCK_BASE ) ) { // @since: 3.0.0 + $this->is_network_admin = current_user_can( 'manage_network_options' ); + add_action( 'network_admin_menu', array( $this, 'setup_admin_page' ) ); // @since: 2.5 + add_action( 'wpmu_new_blog', array( $this, 'create_blog' ), 10, 6 ); // on creating a new blog @since MU + add_action( 'delete_blog', array( $this, 'delete_blog' ), 10, 2 ); // on deleting an old blog @since 3.0.0 + } + + // loads a plugin’s translated strings. + load_plugin_textdomain( IP_Geo_Block::PLUGIN_NAME, FALSE, dirname( IP_GEO_BLOCK_BASE ) . '/languages/' ); + + // add webview class into body tag. + // https://stackoverflow.com/questions/37591279/detect-if-user-is-using-webview-for-android-ios-or-a-regular-browser + if ( isset( $_SERVER['HTTP_USER_AGENT'] ) && + ( strpos( $_SERVER['HTTP_USER_AGENT'], 'Mobile/' ) !== FALSE ) && + ( strpos( $_SERVER['HTTP_USER_AGENT'], 'Safari/' ) === FALSE ) ) { + add_filter( 'admin_body_class', array( $this, 'add_webview_class' ) ); + } + + // for Android + elseif ( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && $_SERVER['HTTP_X_REQUESTED_WITH'] === "com.company.app" ) { + add_filter( 'admin_body_class', array( $this, 'add_webview_class' ) ); + } + } + + /** + * Whether this plugin activated by network or not. + * + */ + public function is_network_admin() { + return $this->is_network_admin; + } + + /** + * Add webview class into the body. + * + */ + public function add_webview_class( $classes ) { + return $classes . ($classes ? ' ' : '') . 'webview'; + } + + /** + * Add nonce when redirect into wp-admin area. + * + */ + public function add_redirect_nonce( $location, $status ) { + $status = TRUE; // default is `retrieve` a nonce + $urls = array( wp_login_url() ); + + // avoid multiple redirection caused by WP hide 1.4.9.1 + if ( is_plugin_active( 'wp-hide-security-enhancer/wp-hide.php' ) ) + $urls[] = 'options-permalink.php'; + + foreach ( $urls as $url ) { + if ( FALSE !== strpos( $location, $url ) ) { + $status = FALSE; // do not `retieve` a nonce + break; + } + } + + return IP_Geo_Block_Util::rebuild_nonce( $location, $status ); + } + + /** + * Add nonce to revision @since 4.4.0 + * + */ + public function add_revision_nonce( $revisions_data, $revision, $post ) { + $revisions_data['restoreUrl'] = add_query_arg( + $nonce = IP_Geo_Block::get_auth_key(), + IP_Geo_Block_Util::create_nonce( $nonce ), + $revisions_data['restoreUrl'] + ); + + return $revisions_data; + } + + /** + * Verify admin screen without action instead of validating nonce. + * + */ + public function verify_request( $queries, $settings ) { + // the request that is intended to show the page without any action follows authentication of core. + if ( 'GET' === $_SERVER['REQUEST_METHOD'] && isset( $_GET['page'] ) ) { + foreach ( array( 'action', 'task') as $key ) { + if ( ! empty( $_GET[ $key ] ) ) + return $queries; + } + $queries[] = $_GET['page']; + } + + return $queries; + } + + /** + * Do some procedures when a blog is created or deleted. + * + */ + public function create_blog( $blog_id, $user_id, $domain, $path, $site_id, $meta ) { + defined( 'IP_GEO_BLOCK_DEBUG' ) and IP_GEO_BLOCK_DEBUG and assert( is_main_site(), 'Not main blog.' ); + require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-actv.php'; + + // get options on main blog + $settings = IP_Geo_Block::get_option(); + + // Switch to the new blog and initialize. + switch_to_blog( $blog_id ); + IP_Geo_Block_Activate::activate_blog(); + + // Copy option from main blog. + if ( $this->is_network_admin && $settings['network_wide'] ) + IP_Geo_Block::update_option( $settings, FALSE ); + + // Restore the main blog. + restore_current_blog(); + } + + public function delete_blog( $blog_id, $drop ) { + // blog is already switched to the target in wpmu_delete_blog() + $drop and IP_Geo_Block_Logs::delete_tables(); + } + + /** + * Get the action name of ajax for nonce + * + */ + private function get_ajax_action() { + return IP_Geo_Block::PLUGIN_NAME . '-ajax-action'; + } + + /** + * Register and enqueue plugin-specific style sheet and JavaScript. + * + * @see https://developers.google.com/maps/faq#china_ws_access + */ + public function enqueue_admin_assets() { + $release = ( ! defined( 'IP_GEO_BLOCK_DEBUG' ) || ! IP_GEO_BLOCK_DEBUG ); + + $footer = TRUE; + $dependency = array( 'jquery' ); + $version = $release ? IP_Geo_Block::VERSION : max( + filemtime( plugin_dir_path( __FILE__ ) . 'css/admin.css' ), + filemtime( plugin_dir_path( __FILE__ ) . 'js/admin.js' ) + ); + + switch ( $this->admin_tab ) { + case 1: /* Statistics */ + case 4: /* Logs */ + // css and js for DataTables + wp_enqueue_style( IP_Geo_Block::PLUGIN_NAME . '-datatables-css', + plugins_url( 'datatables/css/datatables-all.min.css', __FILE__ ), + array(), IP_Geo_Block::VERSION + ); + wp_enqueue_script( IP_Geo_Block::PLUGIN_NAME . '-datatables-js', + plugins_url( 'datatables/js/datatables-all.min.js', __FILE__ ), + $dependency, IP_Geo_Block::VERSION, $footer + ); + if ( 4 === $this->admin_tab ) + break; + + case 5: /* Sites list */ + // js for google charts + wp_register_script( + $addon = IP_Geo_Block::PLUGIN_NAME . '-google-chart', + apply_filters( 'google-charts', 'https://www.gstatic.com/charts/loader.js' ), array(), NULL, $footer + ); + wp_enqueue_script( $addon ); + break; + + case 2: /* Search */ + // Google Map in China + $geo = IP_Geo_Block::get_geolocation(); + if ( isset( $geo['code'] ) && 'CN' === $geo['code'] ) { + add_filter( 'google-charts', array( $this, 'google_charts_cn' ) ); + add_filter( 'google-maps', array( $this, 'google_maps_cn' ) ); + add_filter( 'google-maps-nokey', array( $this, 'google_maps_nokey_cn' ) ); + } + + // js for google map + $settings = IP_Geo_Block::get_option(); + if ( $key = $settings['api_key']['GoogleMap'] ) { + wp_enqueue_script( IP_Geo_Block::PLUGIN_NAME . '-gmap-js', + plugins_url( $release ? 'js/gmap.min.js' : 'js/gmap.js', __FILE__ ), + $dependency, IP_Geo_Block::VERSION, $footer + ); + wp_enqueue_script( IP_Geo_Block::PLUGIN_NAME . '-google-map', + apply_filters( 'google-maps', '//maps.googleapis.com/maps/api/js' ) . ( 'default' !== $key ? "?key=$key" : '' ), + $dependency, IP_Geo_Block::VERSION, $footer + ); + } + + wp_enqueue_script( IP_Geo_Block::PLUGIN_NAME . '-whois-js', + plugins_url( $release ? 'js/whois.min.js' : 'js/whois.js', __FILE__ ), + $dependency, IP_Geo_Block::VERSION, $footer + ); + break; + } + + // css for option page + wp_enqueue_style( IP_Geo_Block::PLUGIN_NAME . '-admin-icons', + plugins_url( $release ? 'css/admin-icons.min.css' : 'css/admin-icons.css', __FILE__ ), + array(), IP_Geo_Block::VERSION + ); + wp_enqueue_style( IP_Geo_Block::PLUGIN_NAME . '-admin-styles', + plugins_url( $release ? 'css/admin.min.css' : 'css/admin.css', __FILE__ ), + array(), $version + ); + + // js for IP Geo Block admin page + wp_register_script( + $handle = IP_Geo_Block::PLUGIN_NAME . '-admin-script', + plugins_url( $release ? 'js/admin.min.js' : 'js/admin.js', __FILE__ ), + $dependency + ( isset( $addon ) ? array( $addon ) : array() ), + $version, $footer + ); + wp_localize_script( $handle, + 'IP_GEO_BLOCK', + array( + 'action' => 'ip_geo_block', + 'tab' => $this->admin_tab, + 'url' => admin_url( 'admin-ajax.php' ), + 'nonce' => IP_Geo_Block_Util::create_nonce( $this->get_ajax_action() ), + 'msg' => array( + /* [ 0] */ __( 'Are you sure ?', 'ip-geo-block' ), + /* [ 1] */ __( 'Open a new window', 'ip-geo-block' ), + /* [ 2] */ __( 'Generate new link', 'ip-geo-block' ), + /* [ 3] */ __( 'Delete current link', 'ip-geo-block' ), + /* [ 4] */ __( 'Please add the following link to favorites / bookmarks in your browser : ', 'ip-geo-block' ), + /* [ 5] */ __( 'ajax for logged-in user', 'ip-geo-block' ), + /* [ 6] */ __( 'ajax for non logged-in user', 'ip-geo-block' ), + /* [ 7] */ __( '[Found: %d]', 'ip-geo-block' ), + /* [ 8] */ __( 'Find and verify `%s` on “Logs” tab.', 'ip-geo-block' ), + /* [ 9] */ __( 'This feature is available with HTML5 compliant browsers.', 'ip-geo-block' ), + /* [10] */ __( 'The selected row cannot be found in the table.', 'ip-geo-block' ), + /* [11] */ __( 'An error occurred while executing the ajax command `%s`.', 'ip-geo-block' ), + ), + 'i18n' => array( + /* [ 0] */ '
', + /* [ 1] */ __( 'No data available in table', 'ip-geo-block' ), + /* [ 2] */ __( 'No matching records found', 'ip-geo-block' ), + /* [ 3] */ __( 'IP address', 'ip-geo-block' ), + /* [ 4] */ __( 'Code', 'ip-geo-block' ), + /* [ 5] */ __( 'ASN', 'ip-geo-block' ), + /* [ 6] */ __( 'Host name', 'ip-geo-block' ), + /* [ 7] */ __( 'Target', 'ip-geo-block' ), + /* [ 8] */ __( 'Failure / Total', 'ip-geo-block' ), + /* [ 9] */ __( 'Elapsed[sec]', 'ip-geo-block' ), + /* [10] */ __( 'Time', 'ip-geo-block' ), + /* [11] */ __( 'Result', 'ip-geo-block' ), + /* [12] */ __( 'Request', 'ip-geo-block' ), + /* [13] */ __( 'User agent', 'ip-geo-block' ), + /* [14] */ __( 'HTTP headers', 'ip-geo-block' ), + /* [15] */ __( '$_POST data', 'ip-geo-block' ), + ), + 'interval' => self::INTERVAL_LIVE_UPDATE, // interval for live update [sec] + 'timeout' => self::TIMEOUT_LIVE_UPDATE, // timeout of pausing live update [sec] + 'altgmap' => apply_filters( 'google-maps-nokey', 'https://www.google.com/maps/embed' ), + ) + ); + wp_enqueue_script( $handle ); + } + + /** + * Google Map in China + * + */ + public function google_charts_cn ( $url ) { return 'https://www.gstatic.cn/charts/loader.js'; } + public function google_maps_cn ( $url ) { return '//maps.google.cn/maps/api/js'; } + public function google_maps_nokey_cn( $url ) { return '//maps.google.cn/maps'; } + + /** + * Add plugin meta links + * + */ + public function add_plugin_meta_links( $links, $file ) { + if ( $file === IP_GEO_BLOCK_BASE ) { + array_push( + $links, + '' . __( 'Contribute on GitHub', 'ip-geo-block' ) . '' + ); + } + + return $links; + } + + /** + * Add settings action link to the plugins page. + * + */ + public function add_action_links( $links ) { + $settings = IP_Geo_Block::get_option(); + return array_merge( + array( 'settings' => '' . __( 'Settings' ) . '' ), + $links + ); + } + + /** + * Add suggest text for inclusion in the site's privacy policy. @since 4.9.6 + * + * /wp-admin/tools.php?wp-privacy-policy-guide + * https://developer.wordpress.org/plugins/privacy/privacy-related-options-hooks-and-capabilities/ + */ + public function add_privacy_policy() { + if ( function_exists( 'wp_add_privacy_policy_content' ) ) + wp_add_privacy_policy_content( 'IP Geo Block', __( 'suggested text.', 'ip-geo-block' ) ); + } + + /** + * Show global notice. + * + */ + public function show_admin_notices() { + $key = IP_Geo_Block::PLUGIN_NAME . '-notice'; + + if ( FALSE !== ( $notices = get_transient( $key ) ) ) { + foreach ( $notices as $msg => $type ) { + echo "\n", '

'; + if ( 'updated' === $type ) + echo '', IP_Geo_Block_Util::kses( $msg ), ''; + else + echo 'IP Geo Block: ', IP_Geo_Block_Util::kses( $msg ); + echo '

', "\n"; + } + + // delete all admin noties + delete_transient( $key ); + } + } + + /** + * Add global notice. + * + */ + public static function add_admin_notice( $type, $msg ) { + $key = IP_Geo_Block::PLUGIN_NAME . '-notice'; + if ( FALSE === ( $notices = get_transient( $key ) ) ) + $notices = array(); + + // can't overwrite the existent notice + if ( ! isset( $notices[ $msg ] ) ) { + $notices[ $msg ] = $type; + set_transient( $key, $notices, MINUTE_IN_SECONDS ); + } + } + + /** + * Get the admin url that depends on network multisite. + * + */ + public function dashboard_url( $network_wide = FALSE ) { + return ( $network_wide ? $this->is_network_admin : $network_wide ) ? network_admin_url( 'admin.php' /*'settings.php'*/ ) : admin_url( 'options-general.php' ); + } + + /** + * Register the administration menu into the WordPress Dashboard menu. + * + */ + private function add_plugin_admin_menu( $settings ) { + // Control tab number + if ( $admin_menu = ( 'admin_menu' === current_filter() ) ) { + if ( $this->is_network_admin && $settings['network_wide'] ) + $this->admin_tab = min( 4, max( 1, $this->admin_tab ) ); + else + $this->admin_tab = min( 4, max( 0, $this->admin_tab ) ); + } else { + if ( $this->is_network_admin && $settings['network_wide'] ) + $this->admin_tab = in_array( $this->admin_tab, array( 0, 5 ), TRUE ) ? $this->admin_tab : 0; + else + $this->admin_tab = 5; + } + + if ( $admin_menu ) { + // `options-general.php` ==> `options.php` ==> `settings-updated` is added as query just after settings updated. + if ( ! empty( $_REQUEST['page'] ) && IP_Geo_Block::PLUGIN_NAME === $_REQUEST['page'] && + ! empty( $_REQUEST['settings-updated'] ) && $this->is_network_admin && $settings['network_wide'] ) { + $this->update_multisite_settings( $settings ); + wp_safe_redirect( esc_url_raw( add_query_arg( + array( 'page' => IP_Geo_Block::PLUGIN_NAME ), + $this->dashboard_url( TRUE ) + ) ) ); + exit; + } + + // Add a settings page for this plugin to the Settings menu. + $hook = add_options_page( + __( 'IP Geo Block', 'ip-geo-block' ), + __( 'IP Geo Block', 'ip-geo-block' ), + 'manage_options', + IP_Geo_Block::PLUGIN_NAME, + array( $this, 'display_plugin_admin_page' ) + ); + } + + elseif ( $this->is_network_admin ) { + // Add a settings page for this plugin to the Settings menu. + $hook = add_menu_page( + __( 'IP Geo Block', 'ip-geo-block' ), + __( 'IP Geo Block', 'ip-geo-block' ), + 'manage_network_options', + IP_Geo_Block::PLUGIN_NAME, + array( $this, 'display_plugin_admin_page' ) + //, 'dashicons-admin-site' // or 'data:image/svg+xml;base64...' + ); + + add_submenu_page( + IP_Geo_Block::PLUGIN_NAME, + __( 'IP Geo Block', 'ip-geo-block' ), + __( 'Sites list', 'ip-geo-block' ), + 'manage_network_options', + IP_Geo_Block::PLUGIN_NAME . '&tab=5', + array( $this, 'display_plugin_admin_page' ) + ); + + if ( $settings['network_wide'] ) { + add_submenu_page( + IP_Geo_Block::PLUGIN_NAME, + __( 'IP Geo Block', 'ip-geo-block' ), + __( 'Settings', 'ip-geo-block' ), + 'manage_network_options', + IP_Geo_Block::PLUGIN_NAME, + array( $this, 'display_plugin_admin_page' ) + ); + } + + wp_enqueue_style( IP_Geo_Block::PLUGIN_NAME . '-admin-icons', + plugins_url( ! defined( 'IP_GEO_BLOCK_DEBUG' ) || ! IP_GEO_BLOCK_DEBUG ? + 'css/admin-icons.min.css' : 'css/admin-icons.css', __FILE__ + ), + array(), IP_Geo_Block::VERSION + ); + } + + // If successful, load admin assets only on this page. + if ( ! empty( $hook ) ) // 'admin_enqueue_scripts' + add_action( "load-$hook", array( $this, 'enqueue_admin_assets' ) ); + } + + /** + * Diagnosis of admin settings. + * + */ + private function diagnose_admin_screen( $settings ) { + $updating = get_transient( IP_Geo_Block::CRON_NAME ); + $adminurl = $this->dashboard_url( FALSE ); + $network = $this->dashboard_url( $settings['network_wide'] ); + + // Check version and compatibility + if ( version_compare( get_bloginfo( 'version' ), '3.7.0' ) < 0 ) + self::add_admin_notice( 'error', __( 'You need WordPress 3.7+.', 'ip-geo-block' ) ); + + if ( ! $settings['api_dir'] || ! file_exists( $settings['api_dir'] ) ) { + $this->add_admin_notice( 'error', sprintf( + __( 'Can not load Geolocation API libraries from %s. It seems to have failed downloading ZIP file from WordPress-IP-Geo-API. Try to deactivate IP Geo Block once and activate it again, or install ip-geo-api with write permission according to this instruction.', 'ip-geo-block' ), + apply_filters( 'ip-geo-block-api-dir', $settings['api_dir'] ? $settings['api_dir'] : basename( WP_CONTENT_DIR ) ) + ) ); + } + + else { + $providers = IP_Geo_Block_Provider::get_valid_providers( $settings, FALSE, FALSE, TRUE ); + if ( empty( $providers ) ) { + $this->add_admin_notice( 'error', sprintf( + __( 'You should select at least one API at Geolocation API settings. Otherwise you\'ll be blocked after the cache expires.', 'ip-geo-block' ), + esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME, 'tab' => 0, 'sec' => 4 ), $network ) ) . '#' . IP_Geo_Block::PLUGIN_NAME . '-section-4' + ) ); + } + + else { + $providers = IP_Geo_Block_Provider::get_addons( $settings['providers'] ); + if ( empty( $providers ) ) { + $this->add_admin_notice( 'error', sprintf( + __( 'You should select at least one API for local database at Geolocation API settings. Otherwise access to the external API may slow down the site.', 'ip-geo-block' ), + esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME, 'tab' => 0, 'sec' => 4 ), $network ) ) . '#' . IP_Geo_Block::PLUGIN_NAME . '-section-4' + ) ); + } + } + } + + // Check consistency of matching rule + if ( -1 === (int)$settings['matching_rule'] ) { + if ( FALSE !== $updating ) { + self::add_admin_notice( 'notice-warning', sprintf( + __( 'Now downloading geolocation databases in background. After a little while, please check your country code and “Matching rule” at Validation rules and behavior.', 'ip-geo-block' ), + esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME ), $network ) ) + ) ); + } + else { + self::add_admin_notice( 'error', sprintf( + __( 'The “Matching rule” is not set properly. Please confirm it at Validation rules and behavior.', 'ip-geo-block' ), + esc_url( add_query_arg( array( 'page' => IP_Geo_Block::PLUGIN_NAME ), $network ) ) + ) ); + } + } + + // Check to finish updating matching rule + elseif ( 'done' === $updating ) { + delete_transient( IP_Geo_Block::CRON_NAME ); + self::add_admin_notice( 'updated ', __( 'Local database and matching rule have been updated.', 'ip-geo-block' ) ); + } + + // Check self blocking (skip during updating) + if ( FALSE === $updating && 1 === (int)$settings['validation']['login'] ) { + $instance = IP_Geo_Block::get_instance(); + $validate = $instance->validate_ip( 'login', $settings, TRUE, FALSE ); // skip authentication check + + switch( $validate['result'] ) { + case 'limited': + self::add_admin_notice( 'error', + __( 'Once you logout, you will be unable to login again because the number of login attempts reaches the limit.', 'ip-geo-block' ) . ' ' . + sprintf( + __( 'Please remove your IP address in “%1$sStatistics in IP address cache%2$s” on “%3$sStatistics%4$s” tab to prevent locking yourself out.', 'ip-geo-block' ), + '', '', + '', '' + ) + ); + break; + + case 'blocked': + case 'extra': + self::add_admin_notice( 'error', + ( $settings['matching_rule'] ? + __( 'Once you logout, you will be unable to login again because your country code or IP address is in the blacklist.', 'ip-geo-block' ) : + __( 'Once you logout, you will be unable to login again because your country code or IP address is not in the whitelist.', 'ip-geo-block' ) + ) . ' ' . + ( 'ZZ' !== $validate['code'] ? + sprintf( + __( 'Please check your “%sValidation rules and behavior%s”.', 'ip-geo-block' ), + '', '' + ) : + sprintf( + __( 'Please confirm your local geolocation database files exist at “%sLocal database settings%s” section, or remove your IP address in cache at “%sStatistics in cache%s” section.', 'ip-geo-block' ), + '', '', + '', '' + ) + ) + ); + break; + } + } + + // Check consistency of emergency login link + if ( isset( $settings['login_link'] ) && $settings['login_link']['link'] && ! IP_Geo_Block_Util::verify_link( $settings['login_link']['link'], $settings['login_link']['hash'] ) ) { + self::add_admin_notice( 'error', + sprintf( + __( 'Emergency login link is outdated. Please delete it once and generate again at “%sPlugin settings%s” section. Also do not forget to update favorites / bookmarks in your browser.', 'ip-geo-block' ), + '', '' + ) + ); + } + + // Check activation of IP Geo Allow + if ( $settings['validation']['timing'] && is_plugin_active( 'ip-geo-allow/index.php' ) ) { + self::add_admin_notice( 'error', + __( '“mu-plugins” (ip-geo-block-mu.php) at “Validation timing” is imcompatible with IP Geo Allow. Please select “init” action hook.', 'ip-geo-block' ) + ); + } + } + + /** + * Setup menu and option page for this plugin + * + */ + public function setup_admin_page() { + $settings = IP_Geo_Block::get_option(); + + // Register the administration menu. + $this->add_plugin_admin_menu( $settings ); + + // Avoid multiple validation. + if ( 'GET' === $_SERVER['REQUEST_METHOD'] ) + $this->diagnose_admin_screen( $settings ); + + // Register settings page only if it is needed. + if ( ( isset( $_GET ['page' ] ) && IP_Geo_Block::PLUGIN_NAME === $_GET ['page' ] ) || + ( isset( $_POST['option_page'] ) && IP_Geo_Block::PLUGIN_NAME === $_POST['option_page'] ) ) { + $this->register_settings_tab(); + } + + // Add an action link pointing to the options page. @since 2.7 + else { + add_filter( 'plugin_row_meta', array( $this, 'add_plugin_meta_links' ), 10, 2 ); + add_filter( 'plugin_action_links_' . IP_GEO_BLOCK_BASE, array( $this, 'add_action_links' ), 10, 1 ); + } + + // Register scripts for admin. + add_action( 'admin_enqueue_scripts', array( 'IP_Geo_Block', 'enqueue_nonce' ), 0 ); + + // Show admin notices at the place where it should be. @since 2.5.0 + add_action( 'admin_notices', array( $this, 'show_admin_notices' ) ); + add_action( 'network_admin_notices', array( $this, 'show_admin_notices' ) ); + } + + /** + * Get cookie that indicates open/close section + * + */ + public function get_cookie() { + static $cookie = array(); + + if ( empty( $cookie ) && ! empty( $_COOKIE[ IP_Geo_Block::PLUGIN_NAME ] ) ) { + foreach ( explode( '&', $_COOKIE[ IP_Geo_Block::PLUGIN_NAME ] ) as $i => $v ) { + list( $i, $v ) = explode( '=', $v ); + $cookie[ $i ] = str_split( $v ); + } + } + + return $cookie; + } + + /** + * Prints out all settings sections added to a particular settings page + * + * wp-admin/includes/template.php @since 2.7.0 + */ + private function do_settings_sections( $page, $tab ) { + global $wp_settings_sections, $wp_settings_fields; + + // target section to be opened + $target = isset( $_GET['sec'] ) ? (int)$_GET['sec'] : -1; + + if ( isset( $wp_settings_sections[ $page ] ) ) { + $index = 0; // index of fieldset + $cookie = $this->get_cookie(); + + foreach ( (array) $wp_settings_sections[ $page ] as $section ) { + // TRUE if open ('o') or FALSE if close ('x') + $stat = empty( $cookie[ $tab ][ $index ] ) || 'x' !== $cookie[ $tab ][ $index ] || $index === $target; + + echo "\n", '
', "\n", + '

', + is_array( $section['title'] ) ? $section['title'][0] . '[ ' . $section['title'][1] . ' ]' : $section['title'], + '

', "\n", '
' : ' style="display:none">'), "\n"; + + if ( $section['callback'] ) + call_user_func( $section['callback'], $section ); + + if ( isset( $wp_settings_fields, + $wp_settings_fields[ $page ], + $wp_settings_fields[ $page ][ $section['id'] ] ) ) { + echo ''; + do_settings_fields( $page, $section['id'] ); + echo "
\n"; + } + + echo "
\n
\n"; + ++$index; + } + } + } + + /** + * Render the settings page for this plugin. + * + */ + public function display_plugin_admin_page() { + $tab = $this->admin_tab; + $tabs = array( + 5 => __( 'Sites list', 'ip-geo-block' ), + 0 => __( 'Settings', 'ip-geo-block' ), + 1 => __( 'Statistics', 'ip-geo-block' ), + 4 => __( 'Logs', 'ip-geo-block' ), + 2 => __( 'Search', 'ip-geo-block' ), + 3 => __( 'Attribution', 'ip-geo-block' ), + ); + + $settings = IP_Geo_Block::get_option(); + $cookie = $this->get_cookie(); + $title = esc_html( get_admin_page_title() ); + + // Target page that depends on the network multisite or not. + if ( 'options-general.php' === $GLOBALS['pagenow'] ) { + $action = 'options.php'; + unset( $tabs[5] ); // Sites list + if ( $this->is_network_admin ) { + $title .= ' [ '; + $title .= '' . __( 'Sites list', 'ip-geo-block' ) . ''; + if ( $settings['network_wide'] ) { + unset( $tabs[0] ); // Settings + $title .= ' / ' . __( 'Settings', 'ip-geo-block' ) . ''; + } + $title .= ' ]'; + } + } + + // '/wp-admin/network/admin.php' + else { + // `edit.php` is an action handler for Multisite administration dashboard. + // `edit.php` ==> do action `network_admin_edit_ip-geo-block` ==> `validate_network_settings()` + $action = 'edit.php?action=' . IP_Geo_Block::PLUGIN_NAME; + if ( $this->is_network_admin ) { + unset( $tabs[1], $tabs[4], $tabs[2], $tabs[3] ); // Statistics, Logs, Search, Attribution + $title .= ' [ '; + $title .= __( 'Sites list', 'ip-geo-block' ); + if ( $settings['network_wide'] ) { + $title .= ' / ' . __( 'Settings', 'ip-geo-block' ); + } else { + unset( $tabs[0] ); // Settings + } + $title .= ' ]'; + } + } + +?> +
+

+ + +
> +do_settings_sections( IP_Geo_Block::PLUGIN_NAME, $tab ); + if ( 0 === $tab ) + submit_button(); // @since 3.1 +?> +
+ +
+
+
+get_attribution(); + } + } + echo '

', implode( '
', $tab ), "

\n"; + echo '

', __( 'Thanks for providing these great services for free.', 'ip-geo-block' ), "
\n"; + echo __( '(Most browsers will redirect you to each site without referrer when you click the link.)', 'ip-geo-block' ), "

\n"; +} ?> +', get_num_queries(), ' queries. ', timer_stop(0), ' seconds. ', memory_get_usage(), " bytes.

\n"; +} ?> +

[ ]

+
+ 'admin/includes/tab-settings.php', + 1 => 'admin/includes/tab-statistics.php', + 4 => 'admin/includes/tab-accesslog.php', + 2 => 'admin/includes/tab-geolocation.php', + 3 => 'admin/includes/tab-attribution.php', + 5 => 'admin/includes/tab-network.php', + ); + + require_once IP_GEO_BLOCK_PATH . $files[ $this->admin_tab ]; + IP_Geo_Block_Admin_Tab::tab_setup( $this, $this->admin_tab ); + } + + /** + * Function that fills the field with the desired inputs as part of the larger form. + * The 'id' and 'name' should match the $id given in the add_settings_field(). + * + * @param array $args['value'] must be sanitized because it comes from external. + */ + public function callback_field( $args ) { + if ( ! empty( $args['before'] ) ) + echo $args['before'], "\n"; // must be sanitized at caller + + // field + $id = $name = ''; + if ( ! empty( $args['field'] ) ) { + $id = "${args['option']}_${args['field']}"; + $name = "${args['option']}[${args['field']}]"; + } + + // sub field + $sub_id = $sub_name = ''; + if ( ! empty( $args['sub-field'] ) ) { + $sub_id = "_${args['sub-field']}"; + $sub_name = "[${args['sub-field']}]"; + } + + switch ( $args['type'] ) { + case 'check-provider': + echo "\n
    \n"; + foreach ( $args['providers'] as $key => $val ) { + $id = "${args['option']}_providers_{$key}"; + $name = "${args['option']}[providers][$key]"; + $stat = ( NULL === $val && ! isset( $args['value'][ $key ] ) ) || + ( FALSE === $val && ! empty( $args['value'][ $key ] ) ) || + ( is_string( $val ) && ! empty( $args['value'][ $key ] ) ); ?> +
  • + class="" /> + + + + +
  • +\n"; + break; + + case 'checkboxes': + echo "\n
      \n"; + foreach ( $args['list'] as $key => $val ) { ?> +
    • + /> +
    • +\n"; + break; + + case 'checkbox': ?> + /> +\n"; + foreach ( $args['list'] as $key => $val ) { + echo "\t', "\n"; + } + echo "\n"; + + if ( isset( $args['desc'] ) ) + echo '

      ', $desc, "

      \n"; + + if ( 'select' === $args['type'] ) + break; + + echo "
      \n"; + $sub_id = '_' . $args['txt-field']; // possible value of 'txt-field' is 'msg' + $sub_name = '[' . $args['txt-field'] . ']'; + $args['value'] = $args['text']; // should be escaped because it can contain allowed tags + + case 'text': ?> + /> + + + +/> +array_replace_recursive( + $output = $this->preprocess_options( $output, $default ), $input + ); + + // restore the 'signature' that might be transformed to avoid self blocking + if ( isset( $input['signature'] ) && FALSE === strpos( $input['signature'], ',' ) ) + $input['signature'] = str_rot13( base64_decode( $input['signature'] ) ); + + /** + * Sanitize a string from user input + */ + foreach ( $output as $key => $val ) { + $key = sanitize_text_field( $key ); // @since 3.0.0 can't use sanitize_key() because of capital letters. + + // delete old key + if ( ! array_key_exists( $key, $default ) ) { + unset( $output[ $key ] ); + continue; + } + + switch( $key ) { + case 'providers': + foreach ( IP_Geo_Block_Provider::get_providers() as $provider => $api ) { + // need no key + if ( NULL === $api ) { + if ( isset( $input[ $key ][ $provider ] ) ) + unset( $output[ $key ][ $provider ] ); + else + $output['providers'][ $provider ] = ''; + } + + // non-commercial + elseif ( FALSE === $api ) { + if ( isset( $input[ $key ][ $provider ] ) ) + $output['providers'][ $provider ] = '@'; + else + unset( $output[ $key ][ $provider ] ); + } + + // need key + else { + $output[ $key ][ $provider ] = + isset( $input[ $key ][ $provider ] ) ? sanitize_text_field( $input[ $key ][ $provider ] ) : ''; + } + } + break; + + case 'comment': + if ( isset( $input[ $key ]['pos'] ) ) + $output[ $key ]['pos'] = (int)$input[ $key ]['pos']; + + if ( isset( $input[ $key ]['msg'] ) ) + $output[ $key ]['msg'] = IP_Geo_Block_Util::kses( $input[ $key ]['msg'] ); + break; + + case 'white_list': + case 'black_list': + $output[ $key ] = isset( $input[ $key ] ) ? preg_replace( '/[^A-Z,]/', '', strtoupper( $input[ $key ] ) ) : ''; + break; + + case 'mimetype': + if ( isset( $input[ $key ]['white_list'] ) ) { // for json file before 3.0.3 + foreach ( $input[ $key ]['white_list'] as $k => $v ) { + $output[ $key ]['white_list'][ sanitize_text_field( $k ) ] = sanitize_mime_type( $v ); // @since 3.1.3 + } + } + if ( isset( $input[ $key ]['black_list'] ) ) { // for json file before 3.0.3 + $output[ $key ]['black_list'] = sanitize_text_field( $input[ $key ]['black_list'] ); + } + if ( isset( $input[ $key ]['capability'] ) ) { + $output[ $key ]['capability'] = array_map( 'sanitize_key', explode( ',', trim( $input[ $key ]['capability'], ',' ) ) ); // @since 3.0.0 + } + break; + + case 'metadata': + if ( isset( $input[ $key ] ) ) { + if ( is_string( $input[ $key ]['pre_update_option' ] ) ) { + $output[ $key ]['pre_update_option' ] = array_map( 'sanitize_key', explode( ',', trim( $input[ $key ]['pre_update_option' ], ',' ) ) ); // @since 3.0.17 + } + if ( is_string( $input[ $key ]['pre_update_site_option'] ) ) { + $output[ $key ]['pre_update_site_option'] = array_map( 'sanitize_key', explode( ',', trim( $input[ $key ]['pre_update_site_option'], ',' ) ) ); // @since 3.0.17 + } + } + break; + + default: // checkbox, select, text + // single field + if ( ! is_array( $default[ $key ] ) ) { + // for checkbox + if ( is_bool( $default[ $key ] ) ) { + $output[ $key ] = ! empty( $input[ $key ] ); + } + + // for implicit data + elseif ( isset( $input[ $key ] ) ) { + $output[ $key ] = is_int( $default[ $key ] ) ? + (int)$input[ $key ] : + IP_Geo_Block_Util::kses( trim( $input[ $key ] ), FALSE ); + } + + // otherwise keep as it is + else { + } + } + + // sub field + else foreach ( array_keys( (array)$val ) as $sub ) { + // delete old key + if ( ! array_key_exists( $sub, $default[ $key ] ) ) { + unset( $output[ $key ][ $sub ] ); + } + + // for checkbox + elseif ( is_bool( $default[ $key ][ $sub ] ) ) { + $output[ $key ][ $sub ] = ! empty( $input[ $key ][ $sub ] ); + } + + // for array + elseif ( is_array( $default[ $key ][ $sub ] ) ) { + $output[ $key ][ $sub ] = empty( $input[ $key ][ $sub ] ) ? + array() : $input[ $key ][ $sub ]; + } + + // for implicit data + elseif ( isset( $input[ $key ][ $sub ] ) ) { + // for checkboxes + if ( is_array( $input[ $key ][ $sub ] ) ) { + foreach ( $input[ $key ][ $sub ] as $k => $v ) { + $output[ $key ][ $sub ] |= $v; + } + } else { + $output[ $key ][ $sub ] = ( is_int( $default[ $key ][ $sub ] ) ? + (int)$input[ $key ][ $sub ] : + IP_Geo_Block_Util::kses( trim( $input[ $key ][ $sub ] ), FALSE ) + ); + } + } + + // otherwise keep as it is + else { + } + } + } + } + + // Check and format each setting data + return $this->postprocess_options( $output, $default ); + } + + // Initialize not on the form (mainly unchecked checkbox) + public function preprocess_options( $output, $default ) { + // initialize checkboxes not in the form (added after 2.0.0, just in case) + foreach ( array( 'providers', 'save_statistics', 'cache_hold', 'anonymize', 'restrict_api', 'network_wide', 'clean_uninstall', 'simulate' ) as $key ) { + $output[ $key ] = is_array( $default[ $key ] ) ? array() : 0; + } + + // initialize checkboxes not in the form + foreach ( array( 'comment', 'login', 'admin', 'ajax', 'plugins', 'themes', 'public', 'mimetype' ) as $key ) { + $output['validation'][ $key ] = 0; + } + + // initialize checkboxes not in the form + foreach ( array( 'plugins', 'themes', 'includes', 'uploads', 'languages' ) as $key ) { + $output['rewrite'][ $key ] = FALSE; + } + + // initialize checkboxes not in the form + $output['mimetype']['white_list'] = array(); + + // keep disabled checkboxes not in the form + foreach ( array( 'admin', 'plugins', 'themes' ) as $key ) { + $output['exception'][ $key ] = array(); + } + + // keep disabled checkboxes not in the form + foreach ( array( 'target_pages', 'target_posts', 'target_cates', 'target_tags', 'dnslkup', 'behavior' ) as $key ) { + $output['public'][ $key ] = is_array( $default['public'][ $key ] ) ? array() : FALSE; + } + + // disabled in case IP address cache is disabled + empty( $output['cache_hold'] ) and $output['login_fails'] = -1; + + // 3.0.4 AS number, 3.0.6 Auto updating of DB files, 3.0.8 Geolite2 + $output['Maxmind']['use_asn'] = $output['Geolite2']['use_asn'] = $output['update']['auto'] = FALSE; + + // 3.0.5 Live update + $output['live_update']['in_memory'] = 0; + + // 3.0.9 Fix for `login_action` + foreach ( array( 'login', 'register', 'resetpass', 'lostpassword', 'postpass' ) as $key ) { + $output['login_action'][ $key ] = FALSE; + } + + return $output; + } + + // Check and format each setting data + private function postprocess_options( $output, $default ) { + // normalize escaped char + $output ['response_msg'] = preg_replace( '/\\\\/', '', $output ['response_msg'] ); + $output['public' ]['response_msg'] = preg_replace( '/\\\\/', '', $output['public' ]['response_msg'] ); + $output['comment']['msg' ] = preg_replace( '/\\\\/', '', $output['comment']['msg' ] ); + + // sanitize proxy + $output['validation']['proxy'] = implode( ',', $this->trim( + preg_replace( '/[^\w,]/', '', strtoupper( $output['validation']['proxy'] ) ) + ) ); + + // sanitize and format ip address (text area) + $key = array( '/[^\w\n\.\/,:]/', '/([\s,])+/', '/(?:^,|,$)/' ); + $val = array( '', '$1', '' ); + $output['extra_ips']['white_list'] = preg_replace( $key, $val, trim( $output['extra_ips']['white_list'] ) ); + $output['extra_ips']['black_list'] = preg_replace( $key, $val, trim( $output['extra_ips']['black_list'] ) ); + + // format and reject invalid words which potentially blocks itself (text area) + array_shift( $key ); + array_shift( $val ); + $output['signature'] = preg_replace( $key, $val, trim( $output['signature'] ) ); + $output['signature'] = implode ( ',', $this->trim( $output['signature'] ) ); + + // 3.0.3 trim extra space and comma + $output['mimetype']['black_list'] = preg_replace( $key, $val, trim( $output['mimetype']['black_list'] ) ); + $output['mimetype']['black_list'] = implode ( ',', $this->trim( $output['mimetype']['black_list'] ) ); + + // 3.0.0 convert country code to upper case, remove redundant spaces + $output['public']['ua_list'] = preg_replace( $key, $val, trim( $output['public']['ua_list'] ) ); + $output['public']['ua_list'] = preg_replace( '/([:#]) *([!]+) *([^ ]+) *([,\n]+)/', '$1$2$3$4', $output['public']['ua_list'] ); + $output['public']['ua_list'] = preg_replace_callback( '/[:#]([\w:]+)/', array( $this, 'strtoupper' ), $output['public']['ua_list'] ); + + // 3.0.0 public : convert country code to upper case + foreach ( array( 'white_list', 'black_list' ) as $key ) { + $output['public' ][ $key ] = strtoupper( preg_replace( '/\s/', '', $output['public'][ $key ] ) ); + // 3.0.4 extra_ips : convert AS number to upper case + $output['extra_ips'][ $key ] = strtoupper( $output['extra_ips'][ $key ] ); + } + + // 2.2.5 exception : convert associative array to simple array + foreach ( array( 'plugins', 'themes' ) as $key ) { + $output['exception'][ $key ] = array_keys( $output['exception'][ $key ] ); + } + + // 3.0.0 - 3.0.3 exception : trim extra space and comma + foreach ( array( 'admin', 'public', 'includes', 'uploads', 'languages', 'restapi' ) as $key ) { + if ( empty( $output['exception'][ $key ] ) ) { + $output['exception'][ $key ] = $default['exception'][ $key ]; + } else { + $output['exception'][ $key ] = ( is_array( $output['exception'][ $key ] ) ? + $output['exception'][ $key ] : $this->trim( $output['exception'][ $key ] ) ); + } + } + + // 3.0.4 AS number, 3.0.8 Geolite2 + if ( version_compare( PHP_VERSION, '5.4' ) >= 0 ) + $output['Geolite2']['use_asn'] = $output['Maxmind']['use_asn']; + + // force to update asn file not immediately but after `validate_settings()` and `validate_network_settings()` + if ( $output['Maxmind']['use_asn'] && ( + ( ! $output['Maxmind']['asn4_path'] && class_exists( 'IP_Geo_Block_API_Maxmind', FALSE ) ) || + ( ! $output['Geolite2']['asn_path'] && class_exists( 'IP_Geo_Block_API_Geolite2', FALSE ) ) ) ) { + require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-cron.php'; + add_action( IP_Geo_Block::PLUGIN_NAME . '-settings-updated', array( 'IP_Geo_Block_Cron', 'start_update_db' ), 10, 2 ); + } + + // reset path if asn file does not exist + else { + require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-file.php'; + $fs = IP_Geo_Block_FS::init( __FUNCTION__ ); + + if ( ! $output['Maxmind']['use_asn'] && ! $fs->exists( $output['Maxmind']['asn4_path'] ) ) { + $output['Maxmind']['asn4_path'] = NULL; + $output['Maxmind']['asn6_path'] = NULL; + } + if ( ! $output['Geolite2']['use_asn'] && ! $fs->exists( $output['Geolite2']['asn_path'] ) ) { + $output['Geolite2']['asn_path'] = NULL; + } + } + + // cron event + $key = wp_next_scheduled( IP_Geo_Block::CRON_NAME, array( FALSE ) ); + if ( $output['update']['auto'] && ! $key ) { + require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-cron.php'; + IP_Geo_Block_Cron::start_update_db( $output, FALSE ); + } else if ( ! $output['update']['auto'] && $key ){ + require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-cron.php'; + IP_Geo_Block_Cron::stop_update_db(); + } + + // expiration time [days] + if ( version_compare( $output['version'], '3.0.13' ) < 0 ) + $output['validation']['explogs'] /= DAY_IN_SECONDS; + $output['validation']['explogs'] = min( 365, max( 1, (int)$output['validation']['explogs'] ) ); + + return $output; + } + + /** + * A fallback function of array_replace_recursive() before PHP 5.3. + * + * @link https://php.net/manual/en/function.array-replace-recursive.php#92574 + * @link https://php.net/manual/en/function.array-replace-recursive.php#109390 + */ + public function array_replace_recursive() { + if ( function_exists( 'array_replace_recursive' ) ) { + return call_user_func_array( 'array_replace_recursive', func_get_args() ); + } + + else { + foreach ( array_slice( func_get_args(), 1 ) as $replacements ) { + $bref_stack = array( &$base ); + $head_stack = array( $replacements ); + + do { + end( $bref_stack ); + + $bref = &$bref_stack[ key( $bref_stack ) ]; + $head = array_pop( $head_stack ); + + unset( $bref_stack[ key( $bref_stack ) ] ); + + foreach ( array_keys( $head ) as $key ) { + if ( isset( $key, $bref, $bref[ $key ], $head[ $key ] ) && is_array( $bref[ $key ] ) && is_array( $head[ $key ] ) ) { + $bref_stack[] = &$bref[ $key ]; + $head_stack[] = $head [ $key ]; + } else { + $bref[ $key ] = $head [ $key ]; + } + } + } while( count( $head_stack ) ); + } + + return $base; + } + } + + // Callback for preg_replace_callback() + public function strtoupper( $matches ) { + return filter_var( $matches[1], FILTER_VALIDATE_IP ) ? $matches[0] : strtoupper( $matches[0] ); + } + + // Trim extra space and comma avoiding invalid signature which potentially blocks itself + private function trim( $text ) { + $path = IP_Geo_Block::get_wp_path(); + + $ret = array(); + foreach ( explode( ',', $text ) as $val ) { + $val = trim( $val ); + if ( $val && FALSE === stripos( $path['admin'], $val ) ) { + $ret[] = $val; + } + } + + return $ret; + } + + /** + * Check admin post + * + */ + private function check_admin_post( $ajax = FALSE ) { + if ( $ajax ) + $nonce = IP_Geo_Block_Util::verify_nonce( IP_Geo_Block_Util::retrieve_nonce( 'nonce' ), $this->get_ajax_action() ); + else + $nonce = check_admin_referer( IP_Geo_Block::PLUGIN_NAME . '-options' ); // a postfix '-options' is added at settings_fields(). + + $settings = IP_Geo_Block::get_option(); + if ( ( $ajax and $settings['validation']['ajax' ] & 2 ) || + ( ! $ajax and $settings['validation']['admin'] & 2 ) ) { + $action = IP_Geo_Block::get_auth_key(); + $nonce &= IP_Geo_Block_Util::verify_nonce( IP_Geo_Block_Util::retrieve_nonce( $action ), $action ); + } + + if ( ! $nonce || ( ! current_user_can( 'manage_options' ) && ! current_user_can( 'manage_network_options' ) ) ) { + status_header( 403 ); + wp_die( + __( 'You do not have sufficient permissions to access this page.' ), '', + array( 'response' => 403, 'back_link' => TRUE ) + ); + } + } + + /** + * Validate settings and configure some features. + * + * @note: This function is triggered when update_option() is executed. + */ + public function validate_settings( $input = array() ) { + // must check that the user has the required capability + $this->check_admin_post( FALSE ); + + // validate setting options + $options = $this->sanitize_options( $input ); + + // activate rewrite rules + require_once IP_GEO_BLOCK_PATH . 'admin/includes/class-admin-rewrite.php'; + $options['rewrite'] = IP_Geo_Block_Admin_Rewrite::activate_rewrite_all( $options['rewrite'] ); + + // additional configuration + require_once IP_GEO_BLOCK_PATH . 'classes/class-ip-geo-block-opts.php'; + if ( TRUE !== ( $file = IP_Geo_Block_Opts::setup_validation_timing( $options ) ) ) { + $options['validation']['timing'] = 0; + self::add_admin_notice( 'error', sprintf( + __( 'Unable to write %s. Please check the permission.', 'ip-geo-block' ), '' . $file . '' + ) ); + } + + // Force to finish update matching rule + delete_transient( IP_Geo_Block::CRON_NAME ); + + // start to update databases immediately + do_action( IP_Geo_Block::PLUGIN_NAME . '-settings-updated', $options, TRUE ); + + return $options; + } + + /** + * Validate settings and configure some features for network multisite. + * + * @see https://vedovini.net/2015/10/using-the-wordpress-settings-api-with-network-admin-pages/ + */ + public function validate_network_settings() { + // Must check that the user has the required capability + $this->check_admin_post( FALSE ); + + // The list of registered options (IP_Geo_Block::OPTION_NAME). + global $new_whitelist_options; + $options = $new_whitelist_options[ IP_Geo_Block::PLUGIN_NAME ]; + + // Go through the posted data and save the targetted options. + foreach ( $options as $option ) { + if ( isset( $_POST[ $option ] ) ) { + $this->update_multisite_settings( $_POST[ $option ] ); + } + } + + // Register a settings error to be displayed to the user + self::add_admin_notice( 'updated', __( 'Settings saved.' ) ); + + // Redirect in order to back to the settings page. + wp_redirect( esc_url_raw( + add_query_arg( + array( 'page' => IP_Geo_Block::PLUGIN_NAME ), + $this->dashboard_url( ! empty( $_POST[ $option ]['network_wide'] ) ) + ) + ) ); + + exit; + } + + /** + * Update option in all blogs. + * + * @note: This function triggers `validate_settings()` on register_setting() in wp-include/option.php. + */ + public function update_multisite_settings( $settings ) { + global $wpdb; + $blog_ids = $wpdb->get_col( "SELECT `blog_id` FROM `$wpdb->blogs`" ); + $ret = TRUE; + + foreach ( $blog_ids as $id ) { + switch_to_blog( $id ); + $map = IP_Geo_Block::get_option( FALSE ); + $settings['api_key']['GoogleMap'] = $map['api_key']['GoogleMap']; + $ret &= IP_Geo_Block::update_option( $settings, FALSE ); + restore_current_blog(); + } + + return $ret; + } + + /** + * Analyze entries in "Validation logs" + * + * @param array $logs An array including each entry where: + * Array ( + * [0 DB row number] => 154 + * [1 Target ] => comment + * [2 Time ] => 1534580897 + * [3 IP address ] => 102.177.147.*** + * [4 Country code ] => ZA + * [5 Result ] => blocked + * [6 AS number ] => AS328239 + * [7 Request ] => POST[80]:/wp-comments-post.php + * [8 User agent ] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) ... + * [9 HTTP headers ] => HTTP_ORIGIN=http://localhost,HTTP_X_FORWARDED_FOR=102.177.147.*** + * [10 $_POST data ] => comment=Hello.,author,email,url,comment_post_ID,comment_parent + * ) + * And put a mark at "Target" + * ¹¹: Passed in Whitelist + * ¹²: Passed in Blacklist + * ¹³: Passed not in list + * ²¹: Blocked in Whitelist + * ²²: Blocked in Blacklist + * ²³: Blocked not in list + */ + public function filter_logs( $logs ) { + $settings = IP_Geo_Block::get_option(); + + // White/Black list for back-end + $white_backend = $settings['white_list']; + $black_backend = $settings['black_list']; + + // White/Black list for front-end + if ( $settings['public']['matching_rule'] < 0 ) { + // Follow "Validation rule settings" + $white_frontend = $white_backend; + $black_frontend = $black_backend; + } else { + // Whitelist or Blacklist for "Public facing pages" + $white_frontend = $settings['public']['white_list']; + $black_frontend = $settings['public']['black_list']; + } + + foreach ( $logs as $key => $log ) { + // Passed or Blocked + $mark = IP_Geo_Block::is_passed( $log[5] ) ? '¹' : '²'; + + // Whitelisted, Blacklisted or N/A + if ( 'public' === $log[1] ) { + $mark .= IP_Geo_Block::is_listed( $log[4], $white_frontend ) ? '¹' : ( + IP_Geo_Block::is_listed( $log[4], $black_frontend ) ? '²' : '³' ); + } else { + $mark .= IP_Geo_Block::is_listed( $log[4], $white_backend ) ? '¹' : ( + IP_Geo_Block::is_listed( $log[4], $black_backend ) ? '²' : '³' ); + } + + // Put a mark at "Target" + $logs[ $key ][1] .= $mark; + } + + return $logs; + } + + /** + * Register UI "Preset filters" at "Search in logs" + * + * @param array $filters An empty array by default. + * @return array $filters The array of paired with 'title' and 'value'. + */ + public function preset_filters( $filters = array() ) { + return array( + array( 'title' => ' ' . __( 'Passed in Whitelist', 'ip-geo-block' ), 'value' => '¹¹' ), + array( 'title' => ' ' . __( 'Passed in Blacklist', 'ip-geo-block' ), 'value' => '¹²' ), + array( 'title' => ' ' . __( 'Passed not in List', 'ip-geo-block' ), 'value' => '¹³' ), + array( 'title' => ' ' . __( 'Blocked in Whitelist', 'ip-geo-block' ), 'value' => '²¹' ), + array( 'title' => ' ' . __( 'Blocked in Blacklist', 'ip-geo-block' ), 'value' => '²²' ), + array( 'title' => ' ' . __( 'Blocked not in List', 'ip-geo-block' ), 'value' => '²³' ), + ); + } + + /** + * Ajax callback function + * + * @link https://codex.wordpress.org/AJAX_in_Plugins + * @link https://codex.wordpress.org/Function_Reference/check_ajax_referer + * @link https://core.trac.wordpress.org/browser/trunk/wp-admin/admin-ajax.php + */ + public function admin_ajax_callback() { + require_once IP_GEO_BLOCK_PATH . 'admin/includes/class-admin-ajax.php'; + + // Check request origin, nonce, capability. + $this->check_admin_post( TRUE ); + + // `$which` and `$cmd` should be restricted by whitelist in each function + $settings = IP_Geo_Block::get_option(); + $which = isset( $_POST['which'] ) ? $_POST['which'] : NULL; + $cmd = isset( $_POST['cmd' ] ) ? $_POST['cmd' ] : NULL; + + switch ( $cmd ) { + case 'download': + $res = IP_Geo_Block::get_instance(); + $res = $res->exec_update_db(); + break; + + case 'search': // Get geolocation by IP + $res = array(); + foreach ( (array)$which as $cmd ) { + $res[ $cmd ] = IP_Geo_Block_Admin_Ajax::search_ip( $cmd ); + } + break; + + case 'scan-code': // Fetch providers to get country code + $res = IP_Geo_Block_Admin_Ajax::scan_country( $which ); + break; + + case 'clear-statistics': // Set default values + IP_Geo_Block_Logs::clear_stat(); + $res = array( + 'page' => 'options-general.php?page=' . IP_Geo_Block::PLUGIN_NAME, + 'tab' => 'tab=1' + ); + break; + + case 'clear-cache': // Delete cache of IP address + IP_Geo_Block_API_Cache::clear_cache(); + $res = array( + 'page' => 'options-general.php?page=' . IP_Geo_Block::PLUGIN_NAME, + 'tab' => 'tab=1' + ); + break; + + case 'clear-logs': // Delete logs in MySQL DB + IP_Geo_Block_Logs::clear_logs( $which ); + $res = array( + 'page' => 'options-general.php?page=' . IP_Geo_Block::PLUGIN_NAME, + 'tab' => 'tab=4' + ); + break; + + case 'export-logs':// Export logs from MySQL DB + IP_Geo_Block_Admin_Ajax::export_logs( $which ); + break; + + case 'restore-logs': // Get logs from MySQL DB + has_filter( $cmd = IP_Geo_Block::PLUGIN_NAME . '-logs' ) or add_filter( $cmd, array( $this, 'filter_logs' ) ); + $res = IP_Geo_Block_Admin_Ajax::restore_logs( $which ); + break; + + case 'live-start': // Restore live log + has_filter( $cmd = IP_Geo_Block::PLUGIN_NAME . '-logs' ) or add_filter( $cmd, array( $this, 'filter_logs' ) ); + if ( is_wp_error( $res = IP_Geo_Block_Admin_Ajax::restore_live_log( $which, $settings ) ) ) + $res = array( 'error' => $res->get_error_message() ); + break; + + case 'live-pause': // Pause live log + if ( ! is_wp_error( $res = IP_Geo_Block_Admin_Ajax::catch_live_log() ) ) + $res = array( 'data' => array() ); + else + $res = array( 'error' => $res->get_error_message() ); + break; + + case 'live-stop': // Stop live log + if ( ! is_wp_error( $res = IP_Geo_Block_Admin_Ajax::release_live_log() ) ) + $res = array( 'data' => array() ); + else + $res = array( 'error' => $res->get_error_message() ); + break; + + case 'reset-live': // Reset data source of live log + $res = IP_Geo_Block_Admin_Ajax::reset_live_log(); + break; + + case 'validate': // Validate settings + IP_Geo_Block_Admin_Ajax::validate_settings( $this ); + break; + + case 'import-default': // Import initial settings + $res = IP_Geo_Block_Admin_Ajax::settings_to_json( IP_Geo_Block::get_default() ); + break; + + case 'import-preferred': // Import preference + $res = IP_Geo_Block_Admin_Ajax::preferred_to_json(); + break; + + case 'gmap-error': // Reset Google Maps API key + if ( $settings['api_key']['GoogleMap'] === 'default' ) { + $settings['api_key']['GoogleMap'] = NULL; + IP_Geo_Block::update_option( $settings ); + $res = array( + 'page' => 'options-general.php?page=' . IP_Geo_Block::PLUGIN_NAME, + 'tab' => 'tab=2' + ); + } + break; + + case 'generate-link': // Generate new link + $res = array( 'link' => IP_Geo_Block_Util::generate_link( $this ) ); + break; + + case 'delete-link': // Delete existing link + IP_Geo_Block_Util::delete_link( $this ); + break; + + case 'show-info': // Show system and debug information + $res = IP_Geo_Block_Admin_Ajax::get_wp_info(); + break; + + case 'get-actions': // Get all the ajax/post actions + $res = IP_Geo_Block_Util::get_registered_actions( TRUE ); + break; + + case 'export-cache': // Restore cache from database and format for DataTables + IP_Geo_Block_Admin_Ajax::export_cache( $settings['anonymize'] ); + break; + + case 'restore-cache': // Restore cache from database and format for DataTables + $res = IP_Geo_Block_Admin_Ajax::restore_cache( $settings['anonymize'] ); + break; + + case 'bulk-action-remove': // Delete specified IP addresses from cache + $res = IP_Geo_Block_Logs::delete_cache_entry( $which['IP'] ); + break; + + case 'bulk-action-ip-erase': + $res = IP_Geo_Block_Logs::delete_logs_entry( $which['IP'] ); + break; + + case 'bulk-action-ip-white': + case 'bulk-action-ip-black': + case 'bulk-action-as-white': + case 'bulk-action-as-black': + // Bulk actions for registration of settings + $src = ( FALSE !== strpos( $cmd, '-ip-' ) ? 'IP' : 'AS' ); + $dst = ( FALSE !== strpos( $cmd, '-white' ) ? 'white_list' : 'black_list' ); + + if ( empty( $which[ $src ] ) ) { + $res = array( 'error' => sprintf( __( 'An error occurred while executing the ajax command `%s`.', 'ip-geo-block' ), $cmd ) ); + break; + } + + foreach ( array_unique( (array)$which[ $src ] ) as $val ) { + // replace anonymized IP address with CIDR (IPv4:256, IPv6:4096) + $val = preg_replace( + array( '/\.\*\*\*$/', '/:\w*\*\*\*$/', '/(::.*)::\/116$/' ), + array( '.0/24', '::/116', '$1/116' ), + trim( $val ) + ); + if ( ( filter_var( preg_replace( '/\/\d+$/', '', $val ), FILTER_VALIDATE_IP ) || preg_match( '/^AS\d+$/', $val ) ) && + ( FALSE === strpos( $settings['extra_ips'][ $dst ], $val ) ) ) { + $settings['extra_ips'][ $dst ] .= "\n" . $val; + } + } + + if ( $this->is_network_admin && $settings['network_wide'] ) + $this->update_multisite_settings( $settings ); + else + IP_Geo_Block::update_option( $settings ); + + $res = array( 'page' => 'options-general.php?page=' . IP_Geo_Block::PLUGIN_NAME ); + break; + + case 'restore-network': // Restore blocked per target in logs + $res = IP_Geo_Block_Admin_Ajax::restore_network( $which, (int)$_POST['offset'], (int)$_POST['length'], FALSE ); + break; + + case 'find-admin': + case 'find-plugins': + case 'find-themes': + // Get slug in blocked requests for exceptions + $res = IP_Geo_Block_Admin_Ajax::find_exceptions( $cmd ); + break; + + case 'diag-tables': // Check database tables + IP_Geo_Block_Logs::diag_tables() or IP_Geo_Block_Logs::create_tables(); + $res = array( 'page' => 'options-general.php?page=' . IP_Geo_Block::PLUGIN_NAME ); + break; + } + + if ( isset( $res ) ) // wp_send_json_{success,error}() @since 3.5.0 + wp_send_json( $res ); // @since 3.5.0 + + die(); // End of ajax + } + +} \ No newline at end of file diff --git a/wp/wp-content/plugins/ip-geo-block/admin/css/admin-icons.css b/wp/wp-content/plugins/ip-geo-block/admin/css/admin-icons.css new file mode 100644 index 00000000..61110679 --- /dev/null +++ b/wp/wp-content/plugins/ip-geo-block/admin/css/admin-icons.css @@ -0,0 +1,79 @@ +/*! IP Geo Block admin icons + * This package includes the following icon font. + * IcoMoon - Free / Designer: Keyamoon / License: GPL / CC BY 4.0 + * Zondicons / Designer: Steve Schoger / License: CC BY 4.0 + * Material Icons / Designer: Google / License: Apache License 2.0 + */ +@font-face { + font-family: 'icomoon'; + src: url('fonts/icomoon.eot?jihakz'); + src: url('fonts/icomoon.eot?jihakz#iefix') format('embedded-opentype'), + url('fonts/icomoon.ttf?jihakz') format('truetype'), + url('fonts/icomoon.woff?jihakz') format('woff'), + url('fonts/icomoon.svg?jihakz#icomoon') format('svg'); + font-weight: normal; + font-style: normal; +} + +[class^="ip-geo-block-icon-"], [class*=" ip-geo-block-icon-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'icomoon' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.ip-geo-block-icon-calc { + margin-top: 0.2em !important; +} +.ip-geo-block-icon-calc:before { + content: "\e901"; +} +.ip-geo-block-icon-vpn_lock:before { + content: "\e62f"; +} +.ip-geo-block-icon-play:before { + content: "\ea1c"; +} +.ip-geo-block-icon-pause:before { + content: "\ea1d"; +} +.ip-geo-block-icon-stop:before { + content: "\ea1e"; +} +.ip-geo-block-icon-warning:before { + content: "\e900"; +} +.ip-geo-block-icon-happy:before { + content: "\e9df"; +} +.ip-geo-block-icon-grin2:before { + content: "\e9ea"; +} +.ip-geo-block-icon-cool:before { + content: "\e9eb"; +} +.ip-geo-block-icon-confused:before { + content: "\e9f5"; +} +.ip-geo-block-icon-confused2:before { + content: "\e9f6"; +} +.ip-geo-block-icon-crying:before { + content: "\ea01"; +} + +/* Dashicons is the official icon font of the WordPress admin as of 3.8+. */ +#toplevel_page_ip-geo-block .dashicons-admin-generic:before { + font-family: 'icomoon'; + content: "\e62f"; + font-size: 18px; + margin-left: 2px; +} diff --git a/wp/wp-content/plugins/ip-geo-block/admin/css/admin-icons.min.css b/wp/wp-content/plugins/ip-geo-block/admin/css/admin-icons.min.css new file mode 100644 index 00000000..6c9419fe --- /dev/null +++ b/wp/wp-content/plugins/ip-geo-block/admin/css/admin-icons.min.css @@ -0,0 +1,7 @@ +/*! IP Geo Block admin icons + * This package includes the following icon font. + * IcoMoon - Free / Designer: Keyamoon / License: GPL / CC BY 4.0 + * Zondicons / Designer: Steve Schoger / License: CC BY 4.0 + * Material Icons / Designer: Google / License: Apache License 2.0 + */ +@font-face{font-family:icomoon;src:url(fonts/icomoon.eot?jihakz);src:url(fonts/icomoon.eot?jihakz#iefix) format('embedded-opentype'),url(fonts/icomoon.ttf?jihakz) format('truetype'),url(fonts/icomoon.woff?jihakz) format('woff'),url(fonts/icomoon.svg?jihakz#icomoon) format('svg');font-weight:400;font-style:normal}[class*=" ip-geo-block-icon-"],[class^=ip-geo-block-icon-]{font-family:icomoon!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ip-geo-block-icon-calc{margin-top:.2em!important}.ip-geo-block-icon-calc:before{content:"\e901"}.ip-geo-block-icon-vpn_lock:before{content:"\e62f"}.ip-geo-block-icon-play:before{content:"\ea1c"}.ip-geo-block-icon-pause:before{content:"\ea1d"}.ip-geo-block-icon-stop:before{content:"\ea1e"}.ip-geo-block-icon-warning:before{content:"\e900"}.ip-geo-block-icon-happy:before{content:"\e9df"}.ip-geo-block-icon-grin2:before{content:"\e9ea"}.ip-geo-block-icon-cool:before{content:"\e9eb"}.ip-geo-block-icon-confused:before{content:"\e9f5"}.ip-geo-block-icon-confused2:before{content:"\e9f6"}.ip-geo-block-icon-crying:before{content:"\ea01"}#toplevel_page_ip-geo-block .dashicons-admin-generic:before{font-family:icomoon;content:"\e62f";font-size:18px;margin-left:2px} \ No newline at end of file diff --git a/wp/wp-content/plugins/ip-geo-block/admin/css/admin.css b/wp/wp-content/plugins/ip-geo-block/admin/css/admin.css new file mode 100644 index 00000000..cf7a61d7 --- /dev/null +++ b/wp/wp-content/plugins/ip-geo-block/admin/css/admin.css @@ -0,0 +1,1015 @@ +/*! + * Project: WordPress IP Geo Block + * Copyright (c) 2013-2019 tokkonopapa (tokkonopapa@yahoo.com) + * This software is released under the MIT License. + */ +dfn { + cursor: help; + border-bottom: 1px dotted #888; +} + +/* style legend and fieldset as panel */ +fieldset, legend { + padding: 0; + margin: 0; + border: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +fieldset { + min-width: 0; +} +legend { + display: block; + line-height: inherit; + width: 100%; +} +label { + display: inline-block; + max-width: 100%; +} +.panel { + border-color: #888; + border: 1px solid #e5e5e5; + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,.04); + -moz-box-shadow: 0 1px 1px rgba(0,0,0,.04); + box-shadow: 0 1px 1px rgba(0,0,0,.04); + background: #f5f5f5; +} +.panel-heading { + float: left !important; + background: #fff; +} +.panel-default > .panel-heading { + border-color: inherit; +} +.panel-body { + width: 100%; + padding: 0 1em; + display: inline-block; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.panel-body:before, +.panel-body:after { + content: " "; + display: table; +} +.panel-body:after { + clear: both; +} +.ip-geo-block-navi-link { + text-align: left; +} +.ip-geo-block-help-link { + float: right; + font-size: 90%; + font-weight: normal; +} +.ip-geo-block-help-link a { + box-shadow: none; +} + +/* style legend and fieldset */ +fieldset label { + vertical-align: text-middle; +} +fieldset input[type="checkbox"] { + margin: 1px 2px 0; +} +fieldset.ip-geo-block-field { +/* padding: 0 10px;*/ + margin: 1em 0; +} +fieldset.ip-geo-block-field h2, +fieldset.ip-geo-block-field h3 { + padding: 0; + margin: 0; + font-size: 14px !important; +} +fieldset.ip-geo-block-field h4 { + margin: 0.75em 0 0.5em 0; +} +fieldset.ip-geo-block-field legend.panel-heading { + padding: 10px; +} + +fieldset.ip-geo-block-field .ip-geo-block-dropup, +fieldset.ip-geo-block-field .ip-geo-block-dropdown { + cursor: pointer; + position: relative; + padding-left: 1em; +} +fieldset.ip-geo-block-field .ip-geo-block-dropup:before, +fieldset.ip-geo-block-field .ip-geo-block-dropdown:before { + content: ''; + height: 0; + width: 0; + border: 0.4em solid transparent; + position: absolute; +} +fieldset.ip-geo-block-field .ip-geo-block-dropup:before { + border-left: 0.4em solid #555; + left: 2px; + top: 18%; +} +fieldset.ip-geo-block-field .ip-geo-block-dropdown:before { + border-top: 0.4em solid #555; + left: -2px; + top: 38%; +} +fieldset.ip-geo-block-field .form-table .ip-geo-block-dropup, +fieldset.ip-geo-block-field .form-table .ip-geo-block-dropdown { + margin-top: 0.75em; +} +fieldset.ip-geo-block-field ul.ip-geo-block-dropup:before { + top: 0.25em; +} +fieldset.ip-geo-block-field ul.ip-geo-block-dropdown:before { + top: 0.5em; +} +fieldset.ip-geo-block-field table.form-table { + margin: 0 0 0.5em; + width: 100%; +} + +/* Text */ +textarea.regular-text { + width: 25em; +} +fieldset.ip-geo-block-field input.regular-text, +fieldset.ip-geo-block-field textarea.regular-text { + font-size: 95%; +} + +/* Checkbox / Radio */ +p.ip-geo-block-navi-link input[type="checkbox"], +fieldset.ip-geo-block-field input[type="checkbox"], +fieldset.ip-geo-block-field input[type="radio"] { + margin-right: 0.4em; +} + +/* Plugins/Themes area, Geolocation API settings */ +input[id*="ip_geo_block_settings_rewrite_"] + label { + margin-left: 0.25em; +} +input[id*="ip_geo_block_settings_providers"] + label { + min-width: 7em; +} + +/* Folding */ +.ip-geo-block-settings-folding { + margin: 0.5em 0; +} +.ip-geo-block-settings-folding ul { + margin-bottom: 0; +} +.ip-geo-block-settings-folding li { + margin: 0.5em 0; +} +.folding-disable { + pointer-events: none; + opacity: 0.5; +} +.folding-inactive { + opacity: 0.5; + font-style:oblique !important; +} + +/* Etc */ +.ip-geo-block-float li { + display: inline-block; + width: 18em; + margin-top: 0; +} +.ip-geo-block-checked { + list-style-type: disc; +} +.ip-geo-block-ip-addr { + display: inline-block; + padding-top: 5px; +} +.ip-geo-block-hide { + display: none; +} +.ip-geo-block-sup { + margin-left: 0.2em; + display: inline-block; +} +.ip-geo-block-note { + margin-top: 1em; + list-style: disc inside; +} +.ip-geo-block-note li { + text-indent: -1em; + padding-left: 1em; +} +.ip-geo-block-border { + border-top: inherit; +} +.ip-geo-block-notice { + color: #dd3d36; +} +.ip-geo-block-title { + width: 100px; + display: inline-block; +} +.ip-geo-block-result { + color: #2786C2; + display: inline-block; +} +.ip-geo-block-primary { + color: #fff !important;; + background: #00838f !important; + border-color: #00707a !important; + text-shadow: none; /* for WordPress 3.7.21 */ +} +.ip-geo-block-primary:hover { + background-color: #00919e !important; + border-color: #00525a !important; +} +ul#ip-geo-block-logs-preset { + margin: 0.25em 0; + max-width: 600px; +} +ul#ip-geo-block-logs-preset li { + float: left; + line-height: 1.5em; + margin-right: 1em; + min-width: 160px; +} + +/* Loading image */ +.ip-geo-block-loading, +#ip-geo-block-live-loading { + height: 16px; + width: 16px; + background-size: 16px 16px; + background-position: center center; + background-repeat: no-repeat; + margin-left: 1em; + margin-top: 0.2em; + display: inline-block; + vertical-align: top; +} +.ip-geo-block-loading { + background-image: url(data:image/gif;base64,R0lGODlhEAAQAPYCAKqqqsbGxlZWVsrKyvr6+ubm5tDQ0K6urmZmZmJiYuzs7IaGhvT09JycnLq6us7Ozurq6o6OjtbW1tra2vDw8CgoKCYmJvz8/NLS0kJCQlJSUqysrPLy8vb29pqamra2tm5ubujo6Kampvj4+IiIiMjIyEhISNzc3OLi4rKysj4+PlBQULi4uJKSkmRkZODg4KKiou7u7iQkJB4eHlpaWhISErCwsHh4eMDAwDIyMi4uLqSkpIKCgr6+vt7e3n5+fggICJCQkAwMDEpKSmBgYHZ2dhgYGBYWFnx8fF5eXk5OTiIiIjAwMIyMjISEhDQ0NJaWltTU1AQEBBwcHGpqaoqKiuTk5CoqKlhYWAoKCtjY2Hp6ehAQEJ6ensLCwkxMTJSUlCwsLAYGBnR0dDg4OFxcXLy8vKCgoA4ODsTExMzMzDw8PERERDY2NqioqHJycrS0tGhoaBQUFEZGRjo6OkBAQICAgHBwcFRUVCAgIGxsbP///wAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCgACACwAAAAAEAAQAEAHjIACgoOEhYJsbTGGghcPGIJRbFNNhgQKCheDDkllDQYMHSc4MAcvhTB0aFliggQjmYNEFQ6LAh0+VoIwbFW1GGamhCgfUE5NbgMKtQYLc0a1gjsyR3E2IYwMFASDYDJvtRRWFIJ1TMq1ElqCICpetQoBEoInVCsAhhI2XhyEPUgIIG7waALlwAloCAMBACH5BAkKAAIALAEAAQAOAA4AAAeDgAKCEmBYYRVKJAaCjAcrVzIzRjVoTw2MKRk5Ww4KECkuWTWCE0Rrl4yCTow7bAupsBcCW19psKkjBEQaFLeMHBwINBy+ggoxVQkPxSMFMXBUMMUQPhRWVUU9tyFRLwQCA048cCcjIyFaJQYxjA8NEVBnAClmahCwEANwbjYBJwyMAgEAIfkECQoABQAsAQABAA4ADgAAB4OABYInO29DbC5QUYKMZiBfbCptTBUmIow4LgJBaTExZkVLFTAFKD8JB4yMQUZrBixUXaqqVFwkUG8Ys4wpQiZOWwy7ghBiRk08HcOqblUTy4wlLWbLBCMFCgBdurMjFMoFE24ADxAXFwwKITEEjD5mH2YBDxI+IdeqHCcGAxgv7IwCAQAh+QQJCgAAACwBAAEADgAOAAAHhYAAglYfTVQJSCITgowDVSAISQJKJgkpjA8LWyIGHBQBJCoZBwAQDU44jIxdTxoSAxEfqqpbFWApUCezjA5LWCJdI7uCClNXGyLCwxBHFl4HBcMAKVxfEx8Y0glZCxwlOCjDUkwPACElAygMghftAB6MClpRJygQFB0EuyMKBQUKDPQxCgQAIfkECQoAAAAsAQABAA4ADgAAB4SAAIIKahstTQ0OVoKMJzYeLVU8W29OXowvBztePh0dUTtxVD0AHDgHEoyMKWVvPj4sBqqqLUoiGDgQs4wBJmNqARe7gjEqXxgPwsMxbWw+UQzDAGY6LjEnusNjFmAEBVbRs00zc1EAHRAKHYw2CHIyO4wEHAwjgmJCZDC7F8psC7IEBQIAIfkECQoARwAsAQABAA4ADgAAB4OAR4IMPgMfNg4PCoKMEA84LCkAMB47GIwxBiUTEAQjKD0REQ9HBD4YIYyMATwtBRQnqaqMG0UOEC8ds4wYIEEQBbuMHC4gMYvCRxw0CAwcF8kBGj8EHdDCJCYiRxfXsw0qCROqRDYQECw3ORkpqjpAQjVGMxYrB7MPC0MyFQItEowCAQAh+QQJCgACACwBAAEADgAOAAAHgIACghcUVhIYEigMgowjEC8nUQ8BOGkojAQxITEdAhcxEh9wPoIMFCOMjBMAKTEXHaipjGldDxcEsqkvUAe5sh1NLb6pHTxNbGK9vlE3DU5ZLsNnIA4GbTVVuQcJdpdnS0Z3LAoxXhF4LjiMMBl5FjptKiZ6ZrJRLUkqbCAwJ4yBACH5BAUKAAEALAEAAQAOAA4AAAd/gAGCARcjHDExHASDjAQdHAoFLy8Ugw2MgiMKWhIKAQ9MYpiCEA8YHQtZCaOCJ14vX2g2rAEKZgMyNRC0BCksFUa7rCMANgIzH7QvZw4tMmO0DlAPUV9hHqNeVTC7G2tkTmkUHA8iSFUGgzZlGSYaNC4gTWqYEzA3SQhVH1aDgQA7); +} + +/* Google Map infomation window */ +#ip-geo-block-map { + height: 400px; + margin: 1em auto; +} +#ip-geo-block-apis div.nav-tab-wrapper { + padding-top: 0; + margin-bottom: 1em; +} +#ip-geo-block-geoinfo { + white-space: normal; + word-wrap: break-word; + word-break: break-all; +} +#ip-geo-block-geoinfo ul { + margin-top: 0; + margin-left: 1em; +} +.gm-style-iw { + width: 18em; + height: auto !important; + height: 100%; + min-height: 100%: +} +.gm-style-iw ul { + margin: 0.1em; +} +.gm-style-iw li { + margin: 0.2em; +} + +/* SVG in google chart */ +svg a { + cursor: pointer; +} +svg a:hover > text { + fill: #0096dd; +} +svg a > text { + fill: #0073aa; + text-decoration: underline; +} + +/* table */ +table.ip-geo-block-statistics-table { + float: right; +} +table.ip-geo-block-statistics-table th, +table.ip-geo-block-statistics-table td { + width: 12em; + margin: 0; + padding: 0.2em; + text-align: right; + line-height: 1.5em; + word-wrap: break-word; +} +table.ip-geo-block-statistics-table tr:nth-child(even) { + background-color: #eee; +} +table.ip-geo-block-statistics-table tr:nth-child(odd) { +} +table.ip-geo-block-table { + margin: 1em 0; + width: 100%; + white-space: normal; + word-wrap: break-word; + word-break: break-all; +} +table.ip-geo-block-table td:first-child { + min-width: 4.3em; + max-width: 5.0em; +} + +/* Whois */ +@media screen and (max-width:782px) { + #ip-geo-block-whois .panel-body { + padding: 0 0.5em; + } +} + +/* Scan the country code */ +#ip-geo-block-scan-code { + vertical-align: middle; +} +#ip-geo-block-code-list { + display: none; + margin-bottom: 0; +} + +/* Google Chart */ +#ip-geo-block-chart-countries { + height: 200px; +} +#ip-geo-block-chart-daily { + height: 240px; +} +#ip_geo_block_settings_validation_mimetype + label { + padding-top: 0.25em; +} +#ip_geo_block_settings_validation_mimetype + label + ul { + margin-top: 0.7em; +} +#ip_geo_block_settings_create_user { + margin-bottom: 0.5em; +} +#ip-geo-block-toggle-sections, +#ip-geo-block-back-to-top a { + box-shadow: none; +} +#ip-geo-block-wp-info textarea { + margin-top: 0.5em; + overflow: auto; + width: 100%; + word-wrap: normal; + word-break: normal; + white-space: pre; +} +#ip-geo-block-back-to-top { + margin:0; + text-align:right; +} +#ip-geo-block-open-new, +#ip-geo-block-live-update { + margin-left: 1em; +} + +/* Top menu link */ +.ip-geo-block-menu-link { + font-size: 13px !important; +} + +/* Icons */ +dfn ~ .ip-geo-block-icon { + margin-left: 0.4em; +} +.ip-geo-block-icon { + position: relative; + cursor: pointer; + outline: none; + box-shadow: none; + text-decoration: none; + background-color: transparent; +} +.ip-geo-block-icon:active { + top: 1px; +} +.ip-geo-block-icon span { + height: 16px; + width: 16px; + margin: 0; + border: none; + display: inline-block; + vertical-align: middle; + background-size: 16px 16px; + background-position: center center; + background-repeat: no-repeat; +} +.ip-geo-block-icon-cycle span { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAh1BMVEUAda2otLp+rsSHprWHr8IBd7EpfKRGhaNajqeUqrRymKuKoq5yo7prlKgAcqoVe6w8gqQmgq5Tj6wIdqsVdKIshrEMea1Uhp+Anqw0hawDdq4gfKhljqE7hqoLdKYbgbM4jLQygKUGeK8CdawQd6gVeKcad6NKkrSerrZAj7UAc6sAc6rc3NySrVGQAAAALXRSTlP//////////////////////////////////////////////////////////wCl7wv9AAACOklEQVR4Ae2W15rzKgxF9xTZzhTX9B7S/gN6/9ebYqzzGZsw/S7LV3FZgCSIwD/kQ8FVcBU8xatZUczy8luC/ABNOn0DSHEsvyZ4PgLatNCYR3efFxyhTQ8g+qQgJxgv2JefERzJXATRh4LHOUwAHD4S7OGEztRJaN86hAUxtaNWDUf/bRdDBbQMWVDAO8jn89WUhag1MeyCAh6hHofyrliLgZKggDMYgzF3eVAwFq0uCZq5KY0TezjIHDDzC0qqmkwe2ctGDOQVLMkgu+F3/rGXwb4xIPcJ6P3JgkM8wFjmfcFAWfeKQywaAz33BJVuHsUcAt09gVbuLDThAJkdR687ggLmf4gDJLIGV7BydtB8yn3u+fbtuj/LS7G9wZAd1AKK+yxJ1x+aBmibTtgCcEHGHsh0wdbOgNLek4L7lI5BigY8nWuZUQ3qGEXes9JzOKGJztPaGtLslu3lIXJirdxCWkASHGDTMqg7V1DKPplygDG61YJukLHjEErGSXqCSos6xNSOgzP3BDmsQBcchNwkoV8oiNnPA78zIefUgCdJeGIfE7LmFWXsFTCFdzTJ/RlfEMRiSGnFXXbkC7AIeqcKDu4ynseozeouKJiSEYBDwkJyIC1nRUjgblkNWp/e/1vXc2gjoAoLksYgjrrFMi0oDgjEEIDij1scBXMJSH6DAj6RNl7o8MkuLak8Co15/Pk+MRmT0xilQJV/sdWNKg2kTaeroudvNNsDjmejYjSL+e6v2/2r4Cp4BXNajr0H7hRfAAAAAElFTkSuQmCC); +} +.ip-geo-block-icon-lock span { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAYFBMVEXc3Ny3y9Zzq8dRmb7M1dlXnsIFdK0AcawAcqwphrYAcKvZ29wAb6oJd680jrqlw9MBcqxmo8MUfbJLl75eoMI7kbzX2ttqp8VSmL1YnL8NeK+Tu89DlL1ImMEOebBNmL4OkqMoAAAAAXRSTlMAQObYZgAAAPlJREFUeAG9kAWyhTAQBIPOsCzufv9TPnf4Ll0CSbpmxXwNy3Yc23rz2fV8kPA99433AIQIiGDTCD0lojiOQPXCDSFJIbF16CMWItkQMkF+inZzSLYhFKLl+a9UKTZaqJTZJYtarZuo40chrv9CqJTN+behVi+Cm7RdDgRld6AMgLxrE/dxBz0BEjwBEmD/uIsWPAOAF9A+CE56ufSryr8oqfOYcBbQJ8YkES7COkFOYzTypqCDOTDo2wljaEw4vp1APYyWKd8WMBozylvCpcvmXeHQ5fCegHia4s1FgZcIVeVFeFx1M4MvYG4eBHdYWufC+addBtf8E3vdjBNhWnVQqAAAAABJRU5ErkJggg==); +} +.ip-geo-block-icon-unlock span { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAYFBMVEXc3NyzydRzq8dRmb7I09hYnsEFdK0AcawAcqzP1toqhrYAcKvZ29wAb6oMeK8zjbqrxtQBcazBz9Zko8MVfbLF0thMmL07kbtpp8WjwtJSmL1YnL+Tu89DlL1JmMEPebBFV++UAAAAAXRSTlMAQObYZgAAAONJREFUeAG9kAWChDAMAIMmJaTFXf7/ynXflvMbnE5j8DU8Pwh8D1yEUYxEGEchWFEJEjEflESBhTQSQm2MRpIotQhZTmgKgMIg5ZlFKBmrGg7UFXJpEQKW8qIKN7YeikJdBJI2BTtXwfyx0L3XoPphvBEliNU49OoxqEa6g4cTST/OYshvi3hV8+FxSNfluG3jqxG8C6h7gF6jU+AODnTsFGSCA5O4I8wpQDq7I5CUAKWQW+AZYOYtoQPoGDeECWDaioBmWQxeBduoWURso+5WpBdw7R4ENTVDcGE435tJwT+xB+vMEnZRNB0YAAAAAElFTkSuQmCC); +} +.ip-geo-block-icon-find span { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAYFBMVEXc3NzS19rD0NWHtMpGk7kYfbAGda0Req+WtcTT1temwM4AcasAcqwAc6wAcKydvMt1pr8Ab6pqpcLX2doggrKoxdNYm7yzw8u/y9HO1tkKdq4th7Td3t6DrcLL0taxyNPGe/YhAAAAAXRSTlMAQObYZgAAARVJREFUeAGtkkeiwyAMRP2xDfxoRjElvd3/lOkNUlZ5u0GPruan/Bnz96Xadr21rvP/7+ujXsAjom78rj4ApCoERIipqfGB1H7wPmYhw1DXjZI6nOel1oJhVAmdUP0tTEDkVC4AYvqIbaDOCqFV6vwRF0tIeYoo6J/X7ICuPAJl9ZynwiIfB5DXxZlRChulbh8xZci0EHZK3TziJFDL504rEOZ+iR5cVj82DoS7XtSshLJpKqaB0Dg3ZjcsQWKaKiF1gVQlITwh/bw2pgKeEeURhE29yKSzUFF03p1V7Wqj2Y7GfrY9X/NirJsPxKsxfBLSSs5GmH8yjAWPSNd8Yoez4f4/G1nIsksqFtGK1i9e39o0P+EAqaoRLlQ+r94AAAAASUVORK5CYII=); +} +span.ip-geo-block-icon-alert, +.ip-geo-block-icon-alert span { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAkFBMVEXc3Nzc2trWl5DHRDTFOyvOgXfc1tXCLBrEMiHEMyLNcmfaxMLDMSDDLx7bu7jRiYHDLhzDMB/LX1PaxsTDLh3YtrHMY1bWmpPJVknSjYXUkYnZuLTMZVnENCPWlI3QhXzENiXXrqrDLRzXsa3Oal7Pe3Hc2NjVn5nNbmPayMbbwb7ay8rUj4fc09Lbw8Db0dDBbRUDAAAAAXRSTlMAQObYZgAAAPVJREFUeAG9ktXWwyAQBonC12brFvff5f2frr4nBredK2DnTFS8Gst2XM8XZmypIGeWcT4PFABaGIXlClfWG1NiC4Ubu705oKRcY32wTAHl2MdTYEqEK8hIiHgHSnSJeaogMyEWO4BijZCvwII2MS9UJ2BXTh+hQidoEttboBOwq3WBnkCNpQlA2iyAhol2hRu71n97p4fw0Z9/ugoPHCfFA+o/iLfCkyBglRJdICBas7uuey+R56fF14wNanj+/QjwY3aX23cBFn6EiHmHNT/ICYxystv/wJy4UHWGlN2cuPB72tFqAq3dP/Hk3zs0E5LZVryGC/hqGNnUa0SVAAAAAElFTkSuQmCC); + vertical-align: bottom; +} + +table.form-table th .ip-geo-block-cycle span { + vertical-align: text-bottom; +} + +/* Option list */ +.ip-geo-block-list { + margin-top: 0; + margin-bottom: 0.7em; +} +@media screen and (min-width:782px) { + ul.ip-geo-block-list .code { + width: 15em; + } +} + +/* Exceptions */ +.ip-geo-block-list-exceptions label { + display: inline-block; +} +.ip-geo-block-list-exceptions dfn { + border: none; +} +.ip-geo-block-list-exceptions span.dashicons { + font-size: 14px; +} +.ip-geo-block-list-exceptions a.ip-geo-block-icon { + margin-left: 0.3em; + outline: none; + box-shadow: none; + text-decoration: none; + background-color: transparent; +} + +/* Description */ +.form-table td p.ip-geo-block-desc, +.form-table td p.ip-geo-block-find-desc { + color: #666; + font-size: 13px !important; + margin: 4px 0 0.5em 0.5em; +} +.ip-geo-block-find-desc { + display: none; +} + +/* Action for admin post */ +.ip-geo-block-admin-post { + color: #c43322; + margin-left: 0.25em; +} +.ip-geo-block-warn { + color: #c43322; + font-weight: bold; +} + +/* Badly-behaved bots and crawlers */ +input#ip_geo_block_settings_behavior_view, +input#ip_geo_block_settings_behavior_time { + width: 3.5em; +} + +/* Statistics */ +.ip-geo-block-top-list { + display: inline-table; + list-style-position: outside; + margin: 0 2em 0.5em 1.75em; +} +.ip-geo-block-top-list h4 { + margin: 1em 0; +} +.ip-geo-block-top-list li code { + background: none; +} + +/* Embeded data for network site list */ +.ip-geo-block-network { + margin-bottom: 1em; +} + +/*------------------------------------------------------------ + * multi column for Site List + * https://caniuse.com/#search=flexbox + *------------------------------------------------------------*/ +.ip-geo-block-container { + margin: 0 auto; + padding: 0 1em; + position: relative; + width: 100%; +} +.ip-geo-block-row { + display: flex; + flex-direction: column; + align-items: flex-start; + align-items: stretch; /* baseline */ + padding: 0; + width: 100%; +} +.ip-geo-block-row .ip-geo-block-column { + display: block; + flex: 1 1 auto; + align-self: flex-start; + margin-left: 0; + max-width: 100%; + width: 100%; +} +.ip-geo-block-row .ip-geo-block-column.column-20 { + flex: 0 0 20%; + max-width: 20%; +} +.ip-geo-block-row .ip-geo-block-column.column-25 { + flex: 0 0 25%; + max-width: 25%; +} +.ip-geo-block-row .ip-geo-block-column.column-33 { + flex: 0 0 33.3333%; + max-width: 33.3333%; +} +.ip-geo-block-row .ip-geo-block-column.column-50 { + flex: 0 0 50%; + max-width: 50%; +} +@media (min-width: 40rem) { + .ip-geo-block-row { + flex-direction: row; + margin-left: -2em; + width: calc(100% + 2em); + } + .ip-geo-block-row .ip-geo-block-column { + margin-bottom: inherit; + padding: 0 1em; + } +} + +/*------------------------------------------------------------ + * Customizing based on jquery.dataTables.css + *------------------------------------------------------------*/ +table.ip-geo-block-dataTable { + clear: none !important; +} +table.ip-geo-block-dataTable th, +table.ip-geo-block-dataTable td { + text-align: right; +} +table.ip-geo-block-dataTable th:nth-child(n+2), +table.ip-geo-block-dataTable td:nth-child(n+2) { + padding-left: 0 !important; +} +table.ip-geo-block-dataTable th { + white-space: nowrap; +} +table.ip-geo-block-dataTable > thead > tr { + line-height: 1.8em; +} +table.ip-geo-block-dataTable > tbody > tr { + cursor: pointer; +} +table.ip-geo-block-dataTable > thead > tr > th, +table.ip-geo-block-dataTable > thead > tr > td, +table.ip-geo-block-dataTable.no-footer { + border-bottom: 1px solid #ddd; +} +table.ip-geo-block-dataTable thead th, +table.ip-geo-block-dataTable thead td { + padding: 10px 16px; +} +/* country code */ +#ip-geo-block-statistics-cache td:nth-child(3), +#ip-geo-block-validation-logs td:nth-child(4) { + min-width: 1.6em; +} + +/* Scroll bar */ +div[class*="ip-geo-block"] .dataTables_wrapper.no-footer .dataTables_scrollBody { + border-bottom: 1px solid #ddd; +} + +/* Size of column */ +table.ip-geo-block-dataTable.nowrap td, +table.ip-geo-block-dataTable > tbody > tr > td span { + white-space: normal !important; + word-wrap: break-word !important; + word-break: break-all !important; +} +table.ip-geo-block-dataTable > tbody > tr > td span { + display: inline-block; +} + +/* Checkbox */ +.ip-geo-block-settings-folding input[type="checkbox"] { + margin-right: 0.5em; +} +table.ip-geo-block-dataTable input[type="checkbox"] { + margin: 0; + max-height: 16px; + max-width: 16px; + vertical-align: middle; +} +table.ip-geo-block-dataTable > thead > tr > th:first-child, +table.ip-geo-block-dataTable > tbody > tr > td:first-child { + padding: 8px 4px 8px 1.4em; + text-align: left; +} + +/* No data available in table */ +table.ip-geo-block-dataTable > tbody > tr > td.dataTables_empty, +table.collapsed > tbody > tr > td.dataTables_empty:first-child::before { + border: none; + text-align: center; +} + +/* Checkbox column */ +table.ip-geo-block-dataTable thead > tr > th:first-child.sorting_asc { + background-image: none !important; +} +table.ip-geo-block-dataTable.display tbody tr.even > .sorting_1, +table.ip-geo-block-dataTable.display tbody tr.odd > .sorting_1, +table.ip-geo-block-dataTable.display tbody tr:hover > .sorting_1 { + background-color: inherit !important; +} + +/* Collapsed */ +table.ip-geo-block-dataTable.collapsed > tbody > tr > td:first-child { + padding: 8px 4px 8px 8px !important; +} +table.collapsed > tbody > tr > td:first-child::before, +table.collapsed > tbody > tr.parent > td:first-child::before { + content: ''; + height: 0; + width: 0; + display: inline-block; + border-radius: 0; + border: 5px solid transparent; + box-shadow: none; + position: relative; + background-color: transparent; +} +table.collapsed > tbody > tr > td:first-child::before { + border-left: 5px solid #555; + top: 1px; + left: -2px; +} +table.collapsed > tbody > tr.parent > td:first-child::before { + border-top: 5px solid #555; + top: 4px; + left: -4px; +} +table.collapsed > tbody > tr.child > td:first-child::before { + border: none; +} +table.collapsed > tbody > tr.child > td.child > ul li { + border: none; + padding: 0; + margin: 0; + line-height: 1.8em; +} +table.collapsed > tbody > tr.child > td.child > ul li span.dtr-title, +table.collapsed > tbody > tr.child > td.child > ul li span.dtr-data { + font-size: 13px !important; + display: block; + white-space: normal; + word-wrap: break-word; + word-break: break-all; +} +table.collapsed > tbody > tr.child > td.child > ul li span.dtr-data { + margin-left: 1.25em; + margin-right: 0.3em; +} + +/* Length menu */ +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_length { + padding-top: 0.15em; + margin: 0.5em 0 0 0.3em; + position: relative; + display: inline-block; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_length:after { + content: ''; + width: 6px; + height: 6px; + border: 0px; + border-bottom: solid 2px #999; + border-right: solid 2px #999; + -ms-transform: rotate(45deg); + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + position: absolute; + top: 50%; + right: 10px; + margin-top: -4px; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_length select { + padding-top: 0; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + font-size: 13px !important; + line-height: 1.4em; + width: 100%; + height: 2.05em !important; + background: transparent; + position: relative; + z-index: 1; + padding: 0.125em 1.5em 0.125em 0.25em; + border: 1px solid #ddd; + border-radius: 4px; + box-shadow: none; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_length select::-ms-expand { + display: none; +} + +/* Pagenation */ +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate { + float: none; + text-align: center; + margin-bottom: 1em; + margin-top: 0 !important; +} +@media screen and (min-width:640px) { + div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_length { + margin: 0.5em 0 0 0.6em; + } + div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate { + position: relative; + left: -2.25em; + } +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate span.ellipsis, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button:hover, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button:active, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.current, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:hover, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:active, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:hover, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:active { + min-width: 2em; + background: inherit; + border-color: #ddd; + border-radius: 0; + border-image: none; + border-style: solid; + border-width: 1px 1px 1px 0; + box-shadow: none; + margin: 0.5em 0 0 0; + padding: 0.25em 0; + display: inline-block; + text-decoration: none; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate > a.paginate_button:first-child, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate:hover > a.paginate_button:first-child, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate:active > a.paginate_button:first-child { + border-left-width: 1px; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate > a.paginate_button:last-child, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate:hover > a.paginate_button:last-child, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate:active > a.paginate_button:last-child { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button { + color: #0073aa !important; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button:hover { + color: #0096dd !important; + background-color: #fff; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate span.ellipsis, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:hover, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:active { + cursor: default; + color: #999 !important; + background-color: transparent; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.current, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:hover, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:active { + cursor: default; + color: #444 !important; + background-color: #fff !important; +} + +/* Alignment of table */ +#ip-geo-block-1 #ip-geo-block-section-2 .panel-body, +#ip-geo-block-4 #ip-geo-block-section-0 .panel-body { + padding: 0; +} +#ip-geo-block-1 #ip-geo-block-section-2 table.form-table, +#ip-geo-block-4 #ip-geo-block-section-0 table.form-table { + margin-left: 1em; + max-width: 95%; +} + +/* Select target / Period to extract */ +#ip-geo-block-select-target, +#ip-geo-block-select-layout, +#ip-geo-block-select-duration { + margin: 0; +} +#ip-geo-block-select-target li, +#ip-geo-block-select-layout li, +#ip-geo-block-select-duration li { + float: left; + margin-right: 1.5em; +} +#ip-geo-block-select-target li label, +#ip-geo-block-select-duration li label { + cursor: pointer; +} + +/* Filter */ +#ip_geo_block_settings_search_filter { + width: 16em; + padding-top: 3px; +} + +/* Transition for new row */ +table.ip-geo-block-dataTable.display tbody tr.ip-geo-block-passed { + background-color: #edf6ff !important; +} +table.ip-geo-block-dataTable.display tbody tr.ip-geo-block-blocked { + background-color: #ffefef !important; +} +.ip-geo-block-new-passed { + animation: ip-geo-block-flash-passed 1s ease-out 0s 1 normal both running; +} +.ip-geo-block-new-blocked { + animation: ip-geo-block-flash-blocked 1s ease-out 0s 1 normal both running; +} +@keyframes ip-geo-block-flash-passed { + 0% { background-color: #ffd700; } + 100% { background-color: #edf6ff; } +} +@keyframes ip-geo-block-flash-blocked { + 0% { background-color: #ffd700; } + 100% { background-color: #ffefef; } +} + +/* Mark.js */ +mark { + padding: 0; + background: #ffd700; // Gold +} + +/* Live update log */ +#ip-geo-block-live-log { + margin: 0; +} +#ip-geo-block-live-log li { + float: left; + margin-right: 3em; +} +#ip-geo-block-live-log li:last-child { + margin-right: 0; +} +#ip-geo-block-live-log li input[type=radio] { + visibility: hidden; + position: absolute; +} +#ip-geo-block-live-log li input[type=radio] + label { + display:inline-block; + margin:-2px; + padding: 4px 12px; + margin-bottom: 0; + font-size: 14px; + line-height: 20px; + color: #333; + text-align: center; + text-shadow: 0 1px 1px rgba(255,255,255,0.75); + vertical-align: middle; + cursor: pointer; + background-color: #f5f5f5; + background-image: -moz-linear-gradient(top,#fff,#e6e6e6); + background-image: -webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6)); + background-image: -webkit-linear-gradient(top,#fff,#e6e6e6); + background-image: -o-linear-gradient(top,#fff,#e6e6e6); + background-image: linear-gradient(to bottom,#fff,#e6e6e6); + background-repeat: repeat-x; + border: 1px solid #ccc; + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25); + border-bottom-color: #b3b3b3; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); + box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05); +} +#ip-geo-block-live-log li input[type=radio]:checked + label { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05); + box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05); + background-color: #e0e0e0; +} + +/*---------------------------------------------------------------------- + * Timer animation based on https://codepen.io/paulobrien/pen/joptI + *----------------------------------------------------------------------*/ +.ip-geo-block-live-timer { + height: 1em; + width: 1em; + margin: 0; + position: relative; + top: 0; + left: 0; +} +.ip-geo-block-live-timer:before { + content: ""; + display: block; + height: 1em; + width: 1em; + background: #0073aa; + border-radius: 50%; + position: absolute; + top: 0; + left: 0; +} +.ip-geo-block-live-timer:after { + display: none +} +.ip-geo-block-live-timer > div { + position: absolute; + width: 1em; + height: 1em; + clip: rect(0, 1em, 1em, .5em); +} +.ip-geo-block-live-timer > div:before { + content: " "; + position: absolute; + width: 1em; + height: 1em; + border-radius: .5em; + clip: rect(0, .5em, 1em, 0); + background-color: #f1f1f1; + transform: rotate(0deg); +} +.ip-geo-block-live-timer > div:first-child:before { + animation: 30s spin-timer linear forwards; +} +.ip-geo-block-live-timer > div:last-child { + transform: rotate(180deg); +} +.ip-geo-block-live-timer > div:last-child:before { + /* older webkit seems buggy with zero so use 0.00001 if you notice something strange */ + transform: rotate(0deg); + animation: 30s spin-timer linear 30s forwards; +} +@keyframes spin-timer { + 0% {transform: rotate( 0deg);} + 100% {transform: rotate(180deg);} +} + +/* sub items in settings */ +.ip-geo-block-subitem { + margin-left: 1.7em +} +.ip-geo-block-subitem:before { + content: "\00bb"; /* » */ + position: absolute; + left: 2em; +} +.ip-geo-block-subitem dfn { + vertical-align: middle; +} +.ip-geo-block-subitem-parent th, +.ip-geo-block-subitem-parent td { + padding-top: 0; +} + +/* placeholder */ +:placeholder-shown { color: #888; } +::-webkit-input-placeholder { color: #888; } /* Google Chrome, Safari, Opera 15+, Android, iOS */ +:-moz-placeholder { color: #888; opacity: 1; } /* Firefox 18- */ +::-moz-placeholder { color: #888; opacity: 1; } /* Firefox 19+ */ +:-ms-input-placeholder { color: #888; } /* IE 10+ */ diff --git a/wp/wp-content/plugins/ip-geo-block/admin/css/admin.min.css b/wp/wp-content/plugins/ip-geo-block/admin/css/admin.min.css new file mode 100644 index 00000000..50795951 --- /dev/null +++ b/wp/wp-content/plugins/ip-geo-block/admin/css/admin.min.css @@ -0,0 +1,6 @@ +/*! + * Project: WordPress IP Geo Block + * Copyright (c) 2013-2019 tokkonopapa (tokkonopapa@yahoo.com) + * This software is released under the MIT License. + */ +dfn{cursor:help;border-bottom:1px dotted #888}fieldset,legend{padding:0;margin:0;border:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}fieldset{min-width:0}legend{display:block;line-height:inherit;width:100%}label{display:inline-block;max-width:100%}.panel{border-color:#888;border:1px solid #e5e5e5;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);-moz-box-shadow:0 1px 1px rgba(0,0,0,.04);box-shadow:0 1px 1px rgba(0,0,0,.04);background:#f5f5f5}.panel-heading{float:left!important;background:#fff}.panel-default>.panel-heading{border-color:inherit}.panel-body{width:100%;padding:0 1em;display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.panel-body:after,.panel-body:before{content:" ";display:table}.panel-body:after{clear:both}.ip-geo-block-navi-link{text-align:left}.ip-geo-block-help-link{float:right;font-size:90%;font-weight:400}.ip-geo-block-help-link a{box-shadow:none}fieldset label{vertical-align:text-middle}fieldset input[type=checkbox]{margin:1px 2px 0}fieldset.ip-geo-block-field{margin:1em 0}fieldset.ip-geo-block-field h2,fieldset.ip-geo-block-field h3{padding:0;margin:0;font-size:14px!important}fieldset.ip-geo-block-field h4{margin:.75em 0 .5em 0}fieldset.ip-geo-block-field legend.panel-heading{padding:10px}fieldset.ip-geo-block-field .ip-geo-block-dropdown,fieldset.ip-geo-block-field .ip-geo-block-dropup{cursor:pointer;position:relative;padding-left:1em}fieldset.ip-geo-block-field .ip-geo-block-dropdown:before,fieldset.ip-geo-block-field .ip-geo-block-dropup:before{content:'';height:0;width:0;border:.4em solid transparent;position:absolute}fieldset.ip-geo-block-field .ip-geo-block-dropup:before{border-left:.4em solid #555;left:2px;top:18%}fieldset.ip-geo-block-field .ip-geo-block-dropdown:before{border-top:.4em solid #555;left:-2px;top:38%}fieldset.ip-geo-block-field .form-table .ip-geo-block-dropdown,fieldset.ip-geo-block-field .form-table .ip-geo-block-dropup{margin-top:.75em}fieldset.ip-geo-block-field ul.ip-geo-block-dropup:before{top:.25em}fieldset.ip-geo-block-field ul.ip-geo-block-dropdown:before{top:.5em}fieldset.ip-geo-block-field table.form-table{margin:0 0 .5em;width:100%}textarea.regular-text{width:25em}fieldset.ip-geo-block-field input.regular-text,fieldset.ip-geo-block-field textarea.regular-text{font-size:95%}fieldset.ip-geo-block-field input[type=checkbox],fieldset.ip-geo-block-field input[type=radio],p.ip-geo-block-navi-link input[type=checkbox]{margin-right:.4em}input[id*=ip_geo_block_settings_rewrite_]+label{margin-left:.25em}input[id*=ip_geo_block_settings_providers]+label{min-width:7em}.ip-geo-block-settings-folding{margin:.5em 0}.ip-geo-block-settings-folding ul{margin-bottom:0}.ip-geo-block-settings-folding li{margin:.5em 0}.folding-disable{pointer-events:none;opacity:.5}.folding-inactive{opacity:.5;font-style:oblique!important}.ip-geo-block-float li{display:inline-block;width:18em;margin-top:0}.ip-geo-block-checked{list-style-type:disc}.ip-geo-block-ip-addr{display:inline-block;padding-top:5px}.ip-geo-block-hide{display:none}.ip-geo-block-sup{margin-left:.2em;display:inline-block}.ip-geo-block-note{margin-top:1em;list-style:disc inside}.ip-geo-block-note li{text-indent:-1em;padding-left:1em}.ip-geo-block-border{border-top:inherit}.ip-geo-block-notice{color:#dd3d36}.ip-geo-block-title{width:100px;display:inline-block}.ip-geo-block-result{color:#2786c2;display:inline-block}.ip-geo-block-primary{color:#fff!important;background:#00838f!important;border-color:#00707a!important;text-shadow:none}.ip-geo-block-primary:hover{background-color:#00919e!important;border-color:#00525a!important}ul#ip-geo-block-logs-preset{margin:.25em 0;max-width:600px}ul#ip-geo-block-logs-preset li{float:left;line-height:1.5em;margin-right:1em;min-width:160px}#ip-geo-block-live-loading,.ip-geo-block-loading{height:16px;width:16px;background-size:16px 16px;background-position:center center;background-repeat:no-repeat;margin-left:1em;margin-top:.2em;display:inline-block;vertical-align:top}.ip-geo-block-loading{background-image:url(data:image/gif;base64,R0lGODlhEAAQAPYCAKqqqsbGxlZWVsrKyvr6+ubm5tDQ0K6urmZmZmJiYuzs7IaGhvT09JycnLq6us7Ozurq6o6OjtbW1tra2vDw8CgoKCYmJvz8/NLS0kJCQlJSUqysrPLy8vb29pqamra2tm5ubujo6Kampvj4+IiIiMjIyEhISNzc3OLi4rKysj4+PlBQULi4uJKSkmRkZODg4KKiou7u7iQkJB4eHlpaWhISErCwsHh4eMDAwDIyMi4uLqSkpIKCgr6+vt7e3n5+fggICJCQkAwMDEpKSmBgYHZ2dhgYGBYWFnx8fF5eXk5OTiIiIjAwMIyMjISEhDQ0NJaWltTU1AQEBBwcHGpqaoqKiuTk5CoqKlhYWAoKCtjY2Hp6ehAQEJ6ensLCwkxMTJSUlCwsLAYGBnR0dDg4OFxcXLy8vKCgoA4ODsTExMzMzDw8PERERDY2NqioqHJycrS0tGhoaBQUFEZGRjo6OkBAQICAgHBwcFRUVCAgIGxsbP///wAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJCgACACwAAAAAEAAQAEAHjIACgoOEhYJsbTGGghcPGIJRbFNNhgQKCheDDkllDQYMHSc4MAcvhTB0aFliggQjmYNEFQ6LAh0+VoIwbFW1GGamhCgfUE5NbgMKtQYLc0a1gjsyR3E2IYwMFASDYDJvtRRWFIJ1TMq1ElqCICpetQoBEoInVCsAhhI2XhyEPUgIIG7waALlwAloCAMBACH5BAkKAAIALAEAAQAOAA4AAAeDgAKCEmBYYRVKJAaCjAcrVzIzRjVoTw2MKRk5Ww4KECkuWTWCE0Rrl4yCTow7bAupsBcCW19psKkjBEQaFLeMHBwINBy+ggoxVQkPxSMFMXBUMMUQPhRWVUU9tyFRLwQCA048cCcjIyFaJQYxjA8NEVBnAClmahCwEANwbjYBJwyMAgEAIfkECQoABQAsAQABAA4ADgAAB4OABYInO29DbC5QUYKMZiBfbCptTBUmIow4LgJBaTExZkVLFTAFKD8JB4yMQUZrBixUXaqqVFwkUG8Ys4wpQiZOWwy7ghBiRk08HcOqblUTy4wlLWbLBCMFCgBdurMjFMoFE24ADxAXFwwKITEEjD5mH2YBDxI+IdeqHCcGAxgv7IwCAQAh+QQJCgAAACwBAAEADgAOAAAHhYAAglYfTVQJSCITgowDVSAISQJKJgkpjA8LWyIGHBQBJCoZBwAQDU44jIxdTxoSAxEfqqpbFWApUCezjA5LWCJdI7uCClNXGyLCwxBHFl4HBcMAKVxfEx8Y0glZCxwlOCjDUkwPACElAygMghftAB6MClpRJygQFB0EuyMKBQUKDPQxCgQAIfkECQoAAAAsAQABAA4ADgAAB4SAAIIKahstTQ0OVoKMJzYeLVU8W29OXowvBztePh0dUTtxVD0AHDgHEoyMKWVvPj4sBqqqLUoiGDgQs4wBJmNqARe7gjEqXxgPwsMxbWw+UQzDAGY6LjEnusNjFmAEBVbRs00zc1EAHRAKHYw2CHIyO4wEHAwjgmJCZDC7F8psC7IEBQIAIfkECQoARwAsAQABAA4ADgAAB4OAR4IMPgMfNg4PCoKMEA84LCkAMB47GIwxBiUTEAQjKD0REQ9HBD4YIYyMATwtBRQnqaqMG0UOEC8ds4wYIEEQBbuMHC4gMYvCRxw0CAwcF8kBGj8EHdDCJCYiRxfXsw0qCROqRDYQECw3ORkpqjpAQjVGMxYrB7MPC0MyFQItEowCAQAh+QQJCgACACwBAAEADgAOAAAHgIACghcUVhIYEigMgowjEC8nUQ8BOGkojAQxITEdAhcxEh9wPoIMFCOMjBMAKTEXHaipjGldDxcEsqkvUAe5sh1NLb6pHTxNbGK9vlE3DU5ZLsNnIA4GbTVVuQcJdpdnS0Z3LAoxXhF4LjiMMBl5FjptKiZ6ZrJRLUkqbCAwJ4yBACH5BAUKAAEALAEAAQAOAA4AAAd/gAGCARcjHDExHASDjAQdHAoFLy8Ugw2MgiMKWhIKAQ9MYpiCEA8YHQtZCaOCJ14vX2g2rAEKZgMyNRC0BCksFUa7rCMANgIzH7QvZw4tMmO0DlAPUV9hHqNeVTC7G2tkTmkUHA8iSFUGgzZlGSYaNC4gTWqYEzA3SQhVH1aDgQA7)}#ip-geo-block-map{height:400px;margin:1em auto}#ip-geo-block-apis div.nav-tab-wrapper{padding-top:0;margin-bottom:1em}#ip-geo-block-geoinfo{white-space:normal;word-wrap:break-word;word-break:break-all}#ip-geo-block-geoinfo ul{margin-top:0;margin-left:1em}.gm-style-iw{width:18em;height:auto!important;height:100%;min-height:100%:}.gm-style-iw ul{margin:.1em}.gm-style-iw li{margin:.2em}svg a{cursor:pointer}svg a:hover>text{fill:#0096dd}svg a>text{fill:#0073aa;text-decoration:underline}table.ip-geo-block-statistics-table{float:right}table.ip-geo-block-statistics-table td,table.ip-geo-block-statistics-table th{width:12em;margin:0;padding:.2em;text-align:right;line-height:1.5em;word-wrap:break-word}table.ip-geo-block-statistics-table tr:nth-child(even){background-color:#eee}table.ip-geo-block-table{margin:1em 0;width:100%;white-space:normal;word-wrap:break-word;word-break:break-all}table.ip-geo-block-table td:first-child{min-width:4.3em;max-width:5em}@media screen and (max-width:782px){#ip-geo-block-whois .panel-body{padding:0 .5em}}#ip-geo-block-scan-code{vertical-align:middle}#ip-geo-block-code-list{display:none;margin-bottom:0}#ip-geo-block-chart-countries{height:200px}#ip-geo-block-chart-daily{height:240px}#ip_geo_block_settings_validation_mimetype+label{padding-top:.25em}#ip_geo_block_settings_validation_mimetype+label+ul{margin-top:.7em}#ip_geo_block_settings_create_user{margin-bottom:.5em}#ip-geo-block-back-to-top a,#ip-geo-block-toggle-sections{box-shadow:none}#ip-geo-block-wp-info textarea{margin-top:.5em;overflow:auto;width:100%;word-wrap:normal;word-break:normal;white-space:pre}#ip-geo-block-back-to-top{margin:0;text-align:right}#ip-geo-block-live-update,#ip-geo-block-open-new{margin-left:1em}.ip-geo-block-menu-link{font-size:13px!important}dfn~.ip-geo-block-icon{margin-left:.4em}.ip-geo-block-icon{position:relative;cursor:pointer;outline:0;box-shadow:none;text-decoration:none;background-color:transparent}.ip-geo-block-icon:active{top:1px}.ip-geo-block-icon span{height:16px;width:16px;margin:0;border:none;display:inline-block;vertical-align:middle;background-size:16px 16px;background-position:center center;background-repeat:no-repeat}.ip-geo-block-icon-cycle span{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAh1BMVEUAda2otLp+rsSHprWHr8IBd7EpfKRGhaNajqeUqrRymKuKoq5yo7prlKgAcqoVe6w8gqQmgq5Tj6wIdqsVdKIshrEMea1Uhp+Anqw0hawDdq4gfKhljqE7hqoLdKYbgbM4jLQygKUGeK8CdawQd6gVeKcad6NKkrSerrZAj7UAc6sAc6rc3NySrVGQAAAALXRSTlP//////////////////////////////////////////////////////////wCl7wv9AAACOklEQVR4Ae2W15rzKgxF9xTZzhTX9B7S/gN6/9ebYqzzGZsw/S7LV3FZgCSIwD/kQ8FVcBU8xatZUczy8luC/ABNOn0DSHEsvyZ4PgLatNCYR3efFxyhTQ8g+qQgJxgv2JefERzJXATRh4LHOUwAHD4S7OGEztRJaN86hAUxtaNWDUf/bRdDBbQMWVDAO8jn89WUhag1MeyCAh6hHofyrliLgZKggDMYgzF3eVAwFq0uCZq5KY0TezjIHDDzC0qqmkwe2ctGDOQVLMkgu+F3/rGXwb4xIPcJ6P3JgkM8wFjmfcFAWfeKQywaAz33BJVuHsUcAt09gVbuLDThAJkdR687ggLmf4gDJLIGV7BydtB8yn3u+fbtuj/LS7G9wZAd1AKK+yxJ1x+aBmibTtgCcEHGHsh0wdbOgNLek4L7lI5BigY8nWuZUQ3qGEXes9JzOKGJztPaGtLslu3lIXJirdxCWkASHGDTMqg7V1DKPplygDG61YJukLHjEErGSXqCSos6xNSOgzP3BDmsQBcchNwkoV8oiNnPA78zIefUgCdJeGIfE7LmFWXsFTCFdzTJ/RlfEMRiSGnFXXbkC7AIeqcKDu4ynseozeouKJiSEYBDwkJyIC1nRUjgblkNWp/e/1vXc2gjoAoLksYgjrrFMi0oDgjEEIDij1scBXMJSH6DAj6RNl7o8MkuLak8Co15/Pk+MRmT0xilQJV/sdWNKg2kTaeroudvNNsDjmejYjSL+e6v2/2r4Cp4BXNajr0H7hRfAAAAAElFTkSuQmCC)}.ip-geo-block-icon-lock span{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAYFBMVEXc3Ny3y9Zzq8dRmb7M1dlXnsIFdK0AcawAcqwphrYAcKvZ29wAb6oJd680jrqlw9MBcqxmo8MUfbJLl75eoMI7kbzX2ttqp8VSmL1YnL8NeK+Tu89DlL1ImMEOebBNmL4OkqMoAAAAAXRSTlMAQObYZgAAAPlJREFUeAG9kAWyhTAQBIPOsCzufv9TPnf4Ll0CSbpmxXwNy3Yc23rz2fV8kPA99433AIQIiGDTCD0lojiOQPXCDSFJIbF16CMWItkQMkF+inZzSLYhFKLl+a9UKTZaqJTZJYtarZuo40chrv9CqJTN+behVi+Cm7RdDgRld6AMgLxrE/dxBz0BEjwBEmD/uIsWPAOAF9A+CE56ufSryr8oqfOYcBbQJ8YkES7COkFOYzTypqCDOTDo2wljaEw4vp1APYyWKd8WMBozylvCpcvmXeHQ5fCegHia4s1FgZcIVeVFeFx1M4MvYG4eBHdYWufC+addBtf8E3vdjBNhWnVQqAAAAABJRU5ErkJggg==)}.ip-geo-block-icon-unlock span{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAYFBMVEXc3NyzydRzq8dRmb7I09hYnsEFdK0AcawAcqzP1toqhrYAcKvZ29wAb6oMeK8zjbqrxtQBcazBz9Zko8MVfbLF0thMmL07kbtpp8WjwtJSmL1YnL+Tu89DlL1JmMEPebBFV++UAAAAAXRSTlMAQObYZgAAAONJREFUeAG9kAWChDAMAIMmJaTFXf7/ynXflvMbnE5j8DU8Pwh8D1yEUYxEGEchWFEJEjEflESBhTQSQm2MRpIotQhZTmgKgMIg5ZlFKBmrGg7UFXJpEQKW8qIKN7YeikJdBJI2BTtXwfyx0L3XoPphvBEliNU49OoxqEa6g4cTST/OYshvi3hV8+FxSNfluG3jqxG8C6h7gF6jU+AODnTsFGSCA5O4I8wpQDq7I5CUAKWQW+AZYOYtoQPoGDeECWDaioBmWQxeBduoWURso+5WpBdw7R4ENTVDcGE435tJwT+xB+vMEnZRNB0YAAAAAElFTkSuQmCC)}.ip-geo-block-icon-find span{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAYFBMVEXc3NzS19rD0NWHtMpGk7kYfbAGda0Req+WtcTT1temwM4AcasAcqwAc6wAcKydvMt1pr8Ab6pqpcLX2doggrKoxdNYm7yzw8u/y9HO1tkKdq4th7Td3t6DrcLL0taxyNPGe/YhAAAAAXRSTlMAQObYZgAAARVJREFUeAGtkkeiwyAMRP2xDfxoRjElvd3/lOkNUlZ5u0GPruan/Bnz96Xadr21rvP/7+ujXsAjom78rj4ApCoERIipqfGB1H7wPmYhw1DXjZI6nOel1oJhVAmdUP0tTEDkVC4AYvqIbaDOCqFV6vwRF0tIeYoo6J/X7ICuPAJl9ZynwiIfB5DXxZlRChulbh8xZci0EHZK3TziJFDL504rEOZ+iR5cVj82DoS7XtSshLJpKqaB0Dg3ZjcsQWKaKiF1gVQlITwh/bw2pgKeEeURhE29yKSzUFF03p1V7Wqj2Y7GfrY9X/NirJsPxKsxfBLSSs5GmH8yjAWPSNd8Yoez4f4/G1nIsksqFtGK1i9e39o0P+EAqaoRLlQ+r94AAAAASUVORK5CYII=)}.ip-geo-block-icon-alert span,span.ip-geo-block-icon-alert{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAkFBMVEXc3Nzc2trWl5DHRDTFOyvOgXfc1tXCLBrEMiHEMyLNcmfaxMLDMSDDLx7bu7jRiYHDLhzDMB/LX1PaxsTDLh3YtrHMY1bWmpPJVknSjYXUkYnZuLTMZVnENCPWlI3QhXzENiXXrqrDLRzXsa3Oal7Pe3Hc2NjVn5nNbmPayMbbwb7ay8rUj4fc09Lbw8Db0dDBbRUDAAAAAXRSTlMAQObYZgAAAPVJREFUeAG9ktXWwyAQBonC12brFvff5f2frr4nBredK2DnTFS8Gst2XM8XZmypIGeWcT4PFABaGIXlClfWG1NiC4Ubu705oKRcY32wTAHl2MdTYEqEK8hIiHgHSnSJeaogMyEWO4BijZCvwII2MS9UJ2BXTh+hQidoEttboBOwq3WBnkCNpQlA2iyAhol2hRu71n97p4fw0Z9/ugoPHCfFA+o/iLfCkyBglRJdICBas7uuey+R56fF14wNanj+/QjwY3aX23cBFn6EiHmHNT/ICYxystv/wJy4UHWGlN2cuPB72tFqAq3dP/Hk3zs0E5LZVryGC/hqGNnUa0SVAAAAAElFTkSuQmCC);vertical-align:bottom}table.form-table th .ip-geo-block-cycle span{vertical-align:text-bottom}.ip-geo-block-list{margin-top:0;margin-bottom:.7em}@media screen and (min-width:782px){ul.ip-geo-block-list .code{width:15em}}.ip-geo-block-list-exceptions label{display:inline-block}.ip-geo-block-list-exceptions dfn{border:none}.ip-geo-block-list-exceptions span.dashicons{font-size:14px}.ip-geo-block-list-exceptions a.ip-geo-block-icon{margin-left:.3em;outline:0;box-shadow:none;text-decoration:none;background-color:transparent}.form-table td p.ip-geo-block-desc,.form-table td p.ip-geo-block-find-desc{color:#666;font-size:13px!important;margin:4px 0 .5em .5em}.ip-geo-block-find-desc{display:none}.ip-geo-block-admin-post{color:#c43322;margin-left:.25em}.ip-geo-block-warn{color:#c43322;font-weight:700}input#ip_geo_block_settings_behavior_time,input#ip_geo_block_settings_behavior_view{width:3.5em}.ip-geo-block-top-list{display:inline-table;list-style-position:outside;margin:0 2em .5em 1.75em}.ip-geo-block-top-list h4{margin:1em 0}.ip-geo-block-top-list li code{background:0 0}.ip-geo-block-network{margin-bottom:1em}.ip-geo-block-container{margin:0 auto;padding:0 1em;position:relative;width:100%}.ip-geo-block-row{display:flex;flex-direction:column;align-items:flex-start;align-items:stretch;padding:0;width:100%}.ip-geo-block-row .ip-geo-block-column{display:block;flex:1 1 auto;align-self:flex-start;margin-left:0;max-width:100%;width:100%}.ip-geo-block-row .ip-geo-block-column.column-20{flex:0 0 20%;max-width:20%}.ip-geo-block-row .ip-geo-block-column.column-25{flex:0 0 25%;max-width:25%}.ip-geo-block-row .ip-geo-block-column.column-33{flex:0 0 33.3333%;max-width:33.3333%}.ip-geo-block-row .ip-geo-block-column.column-50{flex:0 0 50%;max-width:50%}@media (min-width:40rem){.ip-geo-block-row{flex-direction:row;margin-left:-2em;width:calc(100% + 2em)}.ip-geo-block-row .ip-geo-block-column{margin-bottom:inherit;padding:0 1em}}table.ip-geo-block-dataTable{clear:none!important}table.ip-geo-block-dataTable td,table.ip-geo-block-dataTable th{text-align:right}table.ip-geo-block-dataTable td:nth-child(n+2),table.ip-geo-block-dataTable th:nth-child(n+2){padding-left:0!important}table.ip-geo-block-dataTable th{white-space:nowrap}table.ip-geo-block-dataTable>thead>tr{line-height:1.8em}table.ip-geo-block-dataTable>tbody>tr{cursor:pointer}table.ip-geo-block-dataTable.no-footer,table.ip-geo-block-dataTable>thead>tr>td,table.ip-geo-block-dataTable>thead>tr>th{border-bottom:1px solid #ddd}table.ip-geo-block-dataTable thead td,table.ip-geo-block-dataTable thead th{padding:10px 16px}#ip-geo-block-statistics-cache td:nth-child(3),#ip-geo-block-validation-logs td:nth-child(4){min-width:1.6em}div[class*=ip-geo-block] .dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #ddd}table.ip-geo-block-dataTable.nowrap td,table.ip-geo-block-dataTable>tbody>tr>td span{white-space:normal!important;word-wrap:break-word!important;word-break:break-all!important}table.ip-geo-block-dataTable>tbody>tr>td span{display:inline-block}.ip-geo-block-settings-folding input[type=checkbox]{margin-right:.5em}table.ip-geo-block-dataTable input[type=checkbox]{margin:0;max-height:16px;max-width:16px;vertical-align:middle}table.ip-geo-block-dataTable>tbody>tr>td:first-child,table.ip-geo-block-dataTable>thead>tr>th:first-child{padding:8px 4px 8px 1.4em;text-align:left}table.collapsed>tbody>tr>td.dataTables_empty:first-child::before,table.ip-geo-block-dataTable>tbody>tr>td.dataTables_empty{border:none;text-align:center}table.ip-geo-block-dataTable thead>tr>th:first-child.sorting_asc{background-image:none!important}table.ip-geo-block-dataTable.display tbody tr.even>.sorting_1,table.ip-geo-block-dataTable.display tbody tr.odd>.sorting_1,table.ip-geo-block-dataTable.display tbody tr:hover>.sorting_1{background-color:inherit!important}table.ip-geo-block-dataTable.collapsed>tbody>tr>td:first-child{padding:8px 4px 8px 8px!important}table.collapsed>tbody>tr.parent>td:first-child::before,table.collapsed>tbody>tr>td:first-child::before{content:'';height:0;width:0;display:inline-block;border-radius:0;border:5px solid transparent;box-shadow:none;position:relative;background-color:transparent}table.collapsed>tbody>tr>td:first-child::before{border-left:5px solid #555;top:1px;left:-2px}table.collapsed>tbody>tr.parent>td:first-child::before{border-top:5px solid #555;top:4px;left:-4px}table.collapsed>tbody>tr.child>td:first-child::before{border:none}table.collapsed>tbody>tr.child>td.child>ul li{border:none;padding:0;margin:0;line-height:1.8em}table.collapsed>tbody>tr.child>td.child>ul li span.dtr-data,table.collapsed>tbody>tr.child>td.child>ul li span.dtr-title{font-size:13px!important;display:block;white-space:normal;word-wrap:break-word;word-break:break-all}table.collapsed>tbody>tr.child>td.child>ul li span.dtr-data{margin-left:1.25em;margin-right:.3em}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_length{padding-top:.15em;margin:.5em 0 0 .3em;position:relative;display:inline-block}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_length:after{content:'';width:6px;height:6px;border:0;border-bottom:solid 2px #999;border-right:solid 2px #999;-ms-transform:rotate(45deg);-webkit-transform:rotate(45deg);transform:rotate(45deg);position:absolute;top:50%;right:10px;margin-top:-4px}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_length select{padding-top:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-size:13px!important;line-height:1.4em;width:100%;height:2.05em!important;background:0 0;position:relative;z-index:1;padding:.125em 1.5em .125em .25em;border:1px solid #ddd;border-radius:4px;box-shadow:none}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_length select::-ms-expand{display:none}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate{float:none;text-align:center;margin-bottom:1em;margin-top:0!important}@media screen and (min-width:640px){div[class*=ip-geo-block] .dataTables_wrapper .dataTables_length{margin:.5em 0 0 .6em}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate{position:relative;left:-2.25em}}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:hover,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:hover,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button:hover,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate span.ellipsis{min-width:2em;background:inherit;border-color:#ddd;border-radius:0;border-image:none;border-style:solid;border-width:1px 1px 1px 0;box-shadow:none;margin:.5em 0 0 0;padding:.25em 0;display:inline-block;text-decoration:none}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate:active>a.paginate_button:first-child,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate:hover>a.paginate_button:first-child,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate>a.paginate_button:first-child{border-left-width:1px;border-bottom-left-radius:4px;border-top-left-radius:4px}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate:active>a.paginate_button:last-child,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate:hover>a.paginate_button:last-child,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate>a.paginate_button:last-child{border-bottom-right-radius:4px;border-top-right-radius:4px}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button{color:#0073aa!important}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button:hover{color:#0096dd!important;background-color:#fff}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.disabled:hover,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate span.ellipsis{cursor:default;color:#999!important;background-color:transparent}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate a.paginate_button.current:hover{cursor:default;color:#444!important;background-color:#fff!important}#ip-geo-block-1 #ip-geo-block-section-2 .panel-body,#ip-geo-block-4 #ip-geo-block-section-0 .panel-body{padding:0}#ip-geo-block-1 #ip-geo-block-section-2 table.form-table,#ip-geo-block-4 #ip-geo-block-section-0 table.form-table{margin-left:1em;max-width:95%}#ip-geo-block-select-duration,#ip-geo-block-select-layout,#ip-geo-block-select-target{margin:0}#ip-geo-block-select-duration li,#ip-geo-block-select-layout li,#ip-geo-block-select-target li{float:left;margin-right:1.5em}#ip-geo-block-select-duration li label,#ip-geo-block-select-target li label{cursor:pointer}#ip_geo_block_settings_search_filter{width:16em;padding-top:3px}table.ip-geo-block-dataTable.display tbody tr.ip-geo-block-passed{background-color:#edf6ff!important}table.ip-geo-block-dataTable.display tbody tr.ip-geo-block-blocked{background-color:#ffefef!important}.ip-geo-block-new-passed{animation:ip-geo-block-flash-passed 1s ease-out 0s 1 normal both running}.ip-geo-block-new-blocked{animation:ip-geo-block-flash-blocked 1s ease-out 0s 1 normal both running}@keyframes ip-geo-block-flash-passed{0%{background-color:gold}100%{background-color:#edf6ff}}@keyframes ip-geo-block-flash-blocked{0%{background-color:gold}100%{background-color:#ffefef}}mark{padding:0;background:gold}// Gold #ip-geo-block-live-log{margin:0}#ip-geo-block-live-log li{float:left;margin-right:3em}#ip-geo-block-live-log li:last-child{margin-right:0}#ip-geo-block-live-log li input[type=radio]{visibility:hidden;position:absolute}#ip-geo-block-live-log li input[type=radio]+label{display:inline-block;margin:-2px;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25);border-bottom-color:#b3b3b3;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}#ip-geo-block-live-log li input[type=radio]:checked+label{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);background-color:#e0e0e0}.ip-geo-block-live-timer{height:1em;width:1em;margin:0;position:relative;top:0;left:0}.ip-geo-block-live-timer:before{content:"";display:block;height:1em;width:1em;background:#0073aa;border-radius:50%;position:absolute;top:0;left:0}.ip-geo-block-live-timer:after{display:none}.ip-geo-block-live-timer>div{position:absolute;width:1em;height:1em;clip:rect(0,1em,1em,.5em)}.ip-geo-block-live-timer>div:before{content:" ";position:absolute;width:1em;height:1em;border-radius:.5em;clip:rect(0,.5em,1em,0);background-color:#f1f1f1;transform:rotate(0)}.ip-geo-block-live-timer>div:first-child:before{animation:30s spin-timer linear forwards}.ip-geo-block-live-timer>div:last-child{transform:rotate(180deg)}.ip-geo-block-live-timer>div:last-child:before{transform:rotate(0);animation:30s spin-timer linear 30s forwards}@keyframes spin-timer{0%{transform:rotate(0)}100%{transform:rotate(180deg)}}.ip-geo-block-subitem{margin-left:1.7em}.ip-geo-block-subitem:before{content:"\00bb";position:absolute;left:2em}.ip-geo-block-subitem dfn{vertical-align:middle}.ip-geo-block-subitem-parent td,.ip-geo-block-subitem-parent th{padding-top:0}:placeholder-shown{color:#888}::-webkit-input-placeholder{color:#888}:-moz-placeholder{color:#888;opacity:1}::-moz-placeholder{color:#888;opacity:1}:-ms-input-placeholder{color:#888} \ No newline at end of file diff --git a/wp/wp-content/plugins/ip-geo-block/admin/css/cidr.min.css b/wp/wp-content/plugins/ip-geo-block/admin/css/cidr.min.css new file mode 100644 index 00000000..09539b5c --- /dev/null +++ b/wp/wp-content/plugins/ip-geo-block/admin/css/cidr.min.css @@ -0,0 +1 @@ +*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{margin:8xp;font-size:14px;line-height:1.4}.container{margin:0;padding:0}.clr:after,.col:after,.container:after,.row:after{content:"";display:table;clear:both}.row{padding-bottom:0}.col{display:block;float:left;width:100%}.span_2{width:8.33333333333%}.span_11{width:45.8333333333%}.span_24{width:100%}fieldset{border:none;margin:0;padding:.5rem}textarea{width:100%;height:4.5rem;resize:horizontal;border:1px solid #ccc;font-size:12px;font-family:Consolas,Monaco,monospace}legend input[type=button]{margin-left:.5rem;vertical-align:middle}#j,#i{display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;justify-content:center;align-items:center}#j{padding:0 .5rem}ul#h{padding:1.5rem 0 0;list-style:none}ul#h li{width:100%;margin:.1rem 0;display:inline-block}ul#h li input{padding:0}#g{height:3em;text-align:center;border:1px solid #ccc;padding:.5rem;font-size:12px;font-family:Consolas,Monaco,monospace} \ No newline at end of file diff --git a/wp/wp-content/plugins/ip-geo-block/admin/css/fonts/icomoon.eot b/wp/wp-content/plugins/ip-geo-block/admin/css/fonts/icomoon.eot new file mode 100644 index 0000000000000000000000000000000000000000..ae697d386406c8c68cb2091c84ee3b4caeda3562 GIT binary patch literal 3988 zcmbtXU2Gd!6+YMF8OL_x*dE)HIF9j*5=d3T-yt)JfY- z;%?%wE!u}cLOkpuu@4Bb<)se@mI@(+#2aWW!~+k_Y7uk=;(?Vat&}bgOVL6l$e44- zlX%?PMTDE&JKy=a_s%_Y&hfe5=>z!81wg<8?Tx@YgmM{ZxA1s7a^3ar5ntV0>LkQ0Csa<*U_b*WAS#$go3bloRsBa?3E1Qi${Vpge$D(2X{tYbb)$AO3zj9Me}i;ky}DBNOWsESy;h{9jq=SKFbF?J zI)QX#v%FDx_lx#_A^igG@y#36?Hax(HrIz#4h-`r@(!>7mUk`pkn`>4lY9yau~R)$ zBlz0wtpM;a%+wooC@|PjNNsV@B08YE(H=rs^U3I1A+Q2HV*ste0EfKDCnxvF-e2}U z-TTKw@-W=kZ#483C?AmjaPM>Ehjcz^JQ%nyuz^G%9PkI6{=eZG=Dqca#z27JN_{3d zI#cdBUA;Bu**q&G8~2%yn6KkHXQ7Dh0kMoEpCWM=@%w}@5duUBBec1Qjf+b0Q4*Ik z>D)BQWtEA5;P-JUl+r<*2n-R*nJq z=WrJz?82Tr_k z+TkZMd9vnl#jU5z^P2*11^Vvs?LkWqqXu@NqS7E#2BES^8k zwhr|?!4qYgbjFj;>NN96Q{B_U!_#g}?PEONDUktj%IjhJv?AYI=;fanZlPF~#eE2$ z4h=;jL!r~*fkUM_MMR$j4p?pMGPjvs;6XtD6Y(vRa1s=lgi`=K8W_KYf868aqT`|@ zXU08(U(B$6B@2^d}L-@D0tKFKJG zuC6e+X-xMFTH%-j7tj(uSY~N^7_I;$&6E}>THJyM1S-rb_(- z1O26`sWU#e+s|?TOiWHDOdT+XwCtCMB~0nBK@C$of?-}^p9LdX=Z?~rYw!k5kj1{9w%Xwp-_?~&K{c+S##RYx{Ais z`tj(n;_4%y7V3R2WjM;zyBYJZb7QQX?XlZ?27|#t`b2VUt}|Er$z!L`KbuJWo2~ED&Zpw{47>!_j~>4^Q(T&3lve_rjiVlio+?D;Y%WWKnkL%+*=TnU0<#sO zrCHl^+3A~t>xGyU?P(*9V7ZT*8Q@@>nD*yv*%z3cj!CX#Gf^|9`OoZgam><-&yHPQ z4^0f*!!T`P(%Cv_x2^^%8Sklm-vH#T&Ne`UbPv1+93Iq2ef#%29yVJBtgTGB{w!wu zO?VUDg73i(kM1)xi=i>}UsWF`wo&|Hg5#vPObZiQf&^%`LXlo^G~?9PM#b8wc3D?* zb`MgOh7TPytdhx~59`RDM`npMP-i{a5<(pM#T@`~ZJ+&VAB)>Rz>r zbPs(KypVNk=GhDEGHTFW-S8u<%V;}zJDo5F7yQ(CH$p9CU<=}915*oT4QxfcV_+6< zV15I0$p4ao9T3E*!n=XhjvN5Ht5d(9`zhGboq~QnG zR;nA->Sp_GvQ*jHzE<6gjE|0WzCw1K)scCjvbM8c-fF*_cGR4&Zq_1emCedlxmLLn zdG%K0#g*zJzS}6w>(|#Bo?;DeESvhJwv07V1+F0PRk(%Yi~4nV(YOweqSfgw?HTPq DV2-ti literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/ip-geo-block/admin/css/fonts/icomoon.svg b/wp/wp-content/plugins/ip-geo-block/admin/css/fonts/icomoon.svg new file mode 100644 index 00000000..3d17dedf --- /dev/null +++ b/wp/wp-content/plugins/ip-geo-block/admin/css/fonts/icomoon.svg @@ -0,0 +1,22 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wp/wp-content/plugins/ip-geo-block/admin/css/fonts/icomoon.ttf b/wp/wp-content/plugins/ip-geo-block/admin/css/fonts/icomoon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8868e55a509c0175767818a5f65627d3ec107836 GIT binary patch literal 3824 zcmbtXO>7(25uV58E=8_IkzA51Q53^nic6Z5Wl75)MWH3imW8CTnD_@ojUtK|nUd{F zq9aj_UF5I@iXM^z&8cXdiw{MU7)4PO=&ePGB8MKVAVuq-MGp-SAb^}6S{G>zv|4uF zawRTf(M8oKy|>@|yuaC*;VcjU;6Vch#$LF1a-z@YkdX5W>`Tk*l^Y+=d{+e^VWhvk zTG_gRPY=>}@Y%Dvc5B63{`qf^eh{j!J;~>w5+~KOG=j(OY(;K#{?YLTZcs7Bv9f zjrK6gT2IE%3WFW!9fN2M1~}wJKRdZgcK^Kl`R+d+kOz_GUbAVeK>2|D2fJS&KWy+x z^V5O*A{$HwBf&tB5Bv?+uXLFjN32N#nQqa>kZGx=$fnZG2rLYD5Zlm5ga0vH%+ny zB4jg4Oy&&E5TOcm)l5#!VxI^G$X$8jL%UrRU(DyoFUy2T@>Xf#@>ffxZAq4;ZN$=S zM2(gEePsf^P%3=FnHpV8MIx!6`9dMz@98i-lAbwnX*@P^&zBHRPd)Rsp$K`654bLu zN_AP1H{qvuXNP z-OUE`5Z`{688q`y*F4k1!_yvJ z>tnpWDTx7T%I9VJ^pen9>=nK=+(NOUNP7@D9Uh8Chr*{L0|!bCiij}@T(HvIVQw=! zAb^PeC*dhma1vCQgi`#xx6_5&Hqc>ZWrzNM88C*{zjsoFLW)sULu&=wy;W@bJ(Ag>fVwJ1VY6WewC5n? z;Uc^YUq|MI;X~Ps;ZZT!@GsNjgbBm(4s|-AH80Ou9Wp`Rix^C_Tnn!)D{%|9!S$CG z-%MhAbMd9?R$M-J?$xLyMPEI4u588Wbn3jK#Mtm)c``pUlbycL)!K$ zz#^=o{py&KI&7wP*i*#!@24h0OQ3H4_#Ow3tU3LsT}5MB<9KXXb@vg_ij6+EIvisf-HiE{xiQws z_BfqAgQ3tMeIhwFcQ{x7@grXBpG_uzN1zEkk4_|$v;87qZf@H$510QRPh@GnGh;s1 znF}!M(KN?kq7e5TRY~L{q^tR^TfNVM$v1ihC8UKE%@~DVOaz+HyEI>ybAh3u`Qyov z;j>T4V&(`wcn8-BDN2a;C7NHN(OyA^xk)J&9y-qR9(UfwKNi1d;03sT^!RmH;?f$U zf*Rx;9Q8Q#R57OH@;MsRG|~RgM!UNonC%cP&pMvYP2UvV&&K6gPX}=X%YD+y0Q=j- z^*`k*{@~xmM>uR8~c~1Qu6OcC! zw*eZYd*C(U;G$;g+q-}0Wpfq4+RBpa&tkUUfY;#-_yPRr=srWU7#hR)RrPaH2PGUN zI8II|v@oG1NRVbL6d4sqD^499RJ?=glyx;{_aN11_|QRD58&UqV=NPwq&VXWxtvaM zK@b*1r;|PQO{#3^x@sY);0PY6f6}oeuA(PdyPfClPA6_3@4YTR~?Q22GMs3 z&>9&30P9G>Ng6h7Ph*O@rfbO2P=*v%Ob(PvUWs7WNKtQ)1|6B=9?JHNb=tayrbhWx zeo$MV|McRoUhXS=0X!}F0sg?xeb#;&UbTaC4?T&|u*NlNbQ)mTa70c=^Ry%_9-W4C z3cDNo3YB%~4diRI8#7(thX}j}kI0MUueR?qW6VePd3Ka7uou`R)S$b1;9acCXxl%X zL70OZeqx@DP)nKEhIq-u)Pgw^+YxV@n8h!!fQdQeKW}0egfOb`+raKbjvFN{Y(usKGk+8f=uSn_Jgv8`1I6 zF(~6V!X|8?0t#@QaTtZMLuVbzyii@;UaM^4rd2%XHmpGfHV@UDuWi($tJRI_W~E-e z5`E=X^tt8Q0-kLY=8e7Uxce$DvtgX5f;CYUt|0FfxP{|$#swBy7r-;py8emnKinIm A-v9sr literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/ip-geo-block/admin/css/fonts/icomoon.woff b/wp/wp-content/plugins/ip-geo-block/admin/css/fonts/icomoon.woff new file mode 100644 index 0000000000000000000000000000000000000000..51e973292c1c237d7c8a1a209e22fa02b2e0d54d GIT binary patch literal 3900 zcmbtXOKcnG5uTsRU5cdnT#_qM6vJJLOPZ8rNy~?#&=O_KLeg0D6GV+7iWr%a?Mh-I zQMFy5wj}{`UO)&13(^?96C*EoFnDy!u!D*FO?YD>wzx^`;?Wq${-)hT&OzkTm&rF;e8$UCUdQsUF^m#(4^ zW%S))N|tw-53jD*ZUQ*m$QLMO!L+zmT}C^{Ipifue#!e_y?hh*b<~iL=rjnw*eI`8 zQ1)Zo`v;WX_=fdgFIKnE#uYlSV-PXSpU7*#0+`+~-9`RK%_sRB6kF4_Id?&rJzxKHkf z8+(lg>Oq$S%J1)fh4PRtCyh@B?g?xl5eNtT0lWXN#;W=Yk4yvzuH@2pZK_NFxhM6b zw$A%_nHiFed(6ko_i&xlPz3aDEF;M$NZd*MJ|Rqm08zpSEly(LqEdX6#N|vnH%)R` zWg;N>eOwB)bP^{5LxjqvNhVMDOj?dgoGuw6)PSy<&MFzCiGZKnktW_Zn+4%qE=zt_ zB1Dw7iVK&&SuAdgk|b^;7H7jswAAk{5%30+p<~wM=wdP)PX5Ll40``Sr|FT@%&|-3 z(UH5}IDc~Lsc#L1$ql>TcDY!rNuns#ibY&;p(aXp>snN~q zqfC>}c+y#&XC7#(dwO_y+O4TB#^aq584#zu9>%2=c}Ky)KQi4ywJeK!5Iz|iibRG& zC&L2=Ms?MI}AHjELhW^uX&HbbRx@9M>L@ zar#|^K)e}Rcx_3JwP6!ne{S*B1ddl1pS#|UOJ~l!6cNS9OJ~lM+HoqCJTJ>pHZ)k8 z%+1W?CQE}MHY&^Klc{^L!NC|MqVA)@*B5SX!o2nMrJLJmR*v(#-M&*(Q>Ffaf&S9e z)G43a?dQ0ECMG8nZ3I|DTK>z!BCMkSu;P&ppD7*w6!81|sEg1O=wKSWh$qRo&SDDE z0C}u|!YF?FYFuV9K5`kQSpj;wvNSeF2(erG?1W8*LP?g``z&@8&1t{xsTx!3N29}v z(?vin)Ll+xILg#}IrEFTG1kiVS*?A8!Qdc$B0DzMU8?=^poO(Z@d(15;&#}bLz zegUvHw|tp{%l}U#vb5eAIUnt;1z7cHnPad}2>XF5$8%xQ(|y<5qpuBKlls0L+K zpLqus0+n|x&DW%?e`sj_Xkuje^b?YhK12+@h3f=mIY?=V)|W`c!D}!#DMmv>N9}gE zGiRecL}&h5hm(7*|d#koue;TX(2D}Wf z!0YhS!^aG*V(1M0ud0s|J2?KJz;RMsri}@0K?1Z|p-S&Knt5vJ;9?zIr>>_vdnc(% z(}zx)asdCv9buW6D8?9D&}Ov?3p~FdSgq`l?^5G7(v&uaDh?5m+9w@L;woB#HJj~r zv(<{*2kiC$KFloXZ*?8@{{}I33D6!G{{i-qyp_~V>YmCJG*wekqM{Bt?3gU56+I$B zQb|FplRBN5!XE1O^mSUcx}{3xRDaN0pa1mY@1J+&zXCfZ430nA=RRva^{CoGzK@PBRIbPP)P8(|Z+&;S*<&Nz(1Sl73@3NKVvx7W&>xM>9s zx(#bkhRv>)^VN-7WVNzU*(}#8S0XRmiafJiUBI)A!o0qB4R>F~Wj6E^m9ZzPz!j9e V0Jm^{M! ^8$EA+SfmJ{0E_VsYd_+ literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/datatables-all.css b/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/datatables-all.css new file mode 100644 index 00000000..5734bbdd --- /dev/null +++ b/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/datatables-all.css @@ -0,0 +1,679 @@ +/*! DataTables 1.10.16 + * 2008-2017 SpryMedia Ltd - datatables.net/license + */ + +table.ip-geo-block-dataTable { + width: 100%; + margin: 0 auto; + clear: both; + border-collapse: separate; + border-spacing: 0; + /* + * Header and footer styles + */ + /* + * Body styles + */ +} +table.ip-geo-block-dataTable thead th, +table.ip-geo-block-dataTable tfoot th { + font-weight: bold; +} +table.ip-geo-block-dataTable thead th, +table.ip-geo-block-dataTable thead td { + padding: 10px 18px; + border-bottom: 1px solid #111; +} +table.ip-geo-block-dataTable thead th:active, +table.ip-geo-block-dataTable thead td:active { + outline: none; +} +table.ip-geo-block-dataTable tfoot th, +table.ip-geo-block-dataTable tfoot td { + padding: 10px 18px 6px 18px; + border-top: 1px solid #111; +} +table.ip-geo-block-dataTable thead .sorting, +table.ip-geo-block-dataTable thead .sorting_asc, +table.ip-geo-block-dataTable thead .sorting_desc, +table.ip-geo-block-dataTable thead .sorting_asc_disabled, +table.ip-geo-block-dataTable thead .sorting_desc_disabled { + cursor: pointer; + *cursor: hand; + background-repeat: no-repeat; + background-position: center right; +} +table.ip-geo-block-dataTable thead .sorting { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAATCAYAAACZZ43PAAAAN0lEQVR4AWO4c+cORZhmBvyH4QEx4D86pqsB/3Fjwgb8J4RpaQBhPES8gE/z0ElI9M9MA1+gAAD5jWGc4eZ87AAAAABJRU5ErkJggg==); /*url("../images/sort_both.png");*/ +} +table.ip-geo-block-dataTable thead .sorting_asc { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAATCAIAAAAWBRqYAAAABnRSTlMA3ADcANwpVcdiAAAAdUlEQVR4AWO4QyKgWMONG3eWrrh76xbRGtZvulPTdHfzVuI0nDl7p7XrblXD3Y7eu+fPE6FhwWKgaihasuIuAQ2Hj95pbENoqG+9e/QYbg3Xr9+ZPB2iFIGmzrp78yYODdt3gvxa24yCgCK79pAcD8NEw6gGAPv5+lejjyPQAAAAAElFTkSuQmCC); /*url("../images/sort_asc.png");*/ +} +table.ip-geo-block-dataTable thead .sorting_desc { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAATCAIAAAAWBRqYAAAABnRSTlMA3ADcANwpVcdiAAAAcklEQVR4AWO4QyIY2hpGNezac6em6W5tMwoCimzfiUPDzZt3ps66W9WAgiZPv3v9Om4nHT12p74Vobqx7e7ho4T8sGQFQsOCxXcJe/r8+TsdvSDVrV13z5wlLpQ2bwX5fv0mooP11q07S1fcvXFjACMOAM7v+leNDkNAAAAAAElFTkSuQmCC); /*url("../images/sort_desc.png");*/ +} +table.ip-geo-block-dataTable thead .sorting_asc_disabled { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAATCAYAAACZZ43PAAAALklEQVR4AWO4c+cORZhmBvyH4QEx4D86pqsB/3Fjwgb8J4RpZsDAJ6RRA0YNAAAd2DjFaOCLnQAAAABJRU5ErkJggg==); /*url("../images/sort_asc_disabled.png");*/ +} +table.ip-geo-block-dataTable thead .sorting_desc_disabled { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAATCAYAAACZZ43PAAAALUlEQVR4AWO4c+cORZjqBowaMGrAf0KYlgYQNoToMMClma4GMKBrpqsB9E9IAFTzOMWpD7f6AAAAAElFTkSuQmCC); /*url("../images/sort_desc_disabled.png");*/ +} +table.ip-geo-block-dataTable tbody tr { + background-color: #ffffff; +} +table.ip-geo-block-dataTable tbody tr.selected { + background-color: #B0BED9; +} +table.ip-geo-block-dataTable tbody th, +table.ip-geo-block-dataTable tbody td { + padding: 8px 10px; +} +table.ip-geo-block-dataTable.row-border tbody th, +table.ip-geo-block-dataTable.row-border tbody td, +table.ip-geo-block-dataTable.display tbody th, +table.ip-geo-block-dataTable.display tbody td { + border-top: 1px solid #ddd; +} +table.ip-geo-block-dataTable.row-border tbody tr:first-child th, +table.ip-geo-block-dataTable.row-border tbody tr:first-child td, +table.ip-geo-block-dataTable.display tbody tr:first-child th, +table.ip-geo-block-dataTable.display tbody tr:first-child td { + border-top: none; +} +table.ip-geo-block-dataTable.cell-border tbody th, +table.ip-geo-block-dataTable.cell-border tbody td { + border-top: 1px solid #ddd; + border-right: 1px solid #ddd; +} +table.ip-geo-block-dataTable.cell-border tbody tr th:first-child, +table.ip-geo-block-dataTable.cell-border tbody tr td:first-child { + border-left: 1px solid #ddd; +} +table.ip-geo-block-dataTable.cell-border tbody tr:first-child th, +table.ip-geo-block-dataTable.cell-border tbody tr:first-child td { + border-top: none; +} +table.ip-geo-block-dataTable.stripe tbody tr.odd, +table.ip-geo-block-dataTable.display tbody tr.odd { + background-color: #f9f9f9; +} +table.ip-geo-block-dataTable.stripe tbody tr.odd.selected, +table.ip-geo-block-dataTable.display tbody tr.odd.selected { + background-color: #acbad4; +} +table.ip-geo-block-dataTable.hover tbody tr:hover, +table.ip-geo-block-dataTable.display tbody tr:hover { + background-color: #f6f6f6; +} +table.ip-geo-block-dataTable.hover tbody tr:hover.selected, +table.ip-geo-block-dataTable.display tbody tr:hover.selected { + background-color: #aab7d1; +} +table.ip-geo-block-dataTable.order-column tbody tr > .sorting_1, +table.ip-geo-block-dataTable.order-column tbody tr > .sorting_2, +table.ip-geo-block-dataTable.order-column tbody tr > .sorting_3, +table.ip-geo-block-dataTable.display tbody tr > .sorting_1, +table.ip-geo-block-dataTable.display tbody tr > .sorting_2, +table.ip-geo-block-dataTable.display tbody tr > .sorting_3 { + background-color: #fafafa; +} +table.ip-geo-block-dataTable.order-column tbody tr.selected > .sorting_1, +table.ip-geo-block-dataTable.order-column tbody tr.selected > .sorting_2, +table.ip-geo-block-dataTable.order-column tbody tr.selected > .sorting_3, +table.ip-geo-block-dataTable.display tbody tr.selected > .sorting_1, +table.ip-geo-block-dataTable.display tbody tr.selected > .sorting_2, +table.ip-geo-block-dataTable.display tbody tr.selected > .sorting_3 { + background-color: #acbad5; +} +table.ip-geo-block-dataTable.display tbody tr.odd > .sorting_1, +table.ip-geo-block-dataTable.order-column.stripe tbody tr.odd > .sorting_1 { + background-color: #f1f1f1; +} +table.ip-geo-block-dataTable.display tbody tr.odd > .sorting_2, +table.ip-geo-block-dataTable.order-column.stripe tbody tr.odd > .sorting_2 { + background-color: #f3f3f3; +} +table.ip-geo-block-dataTable.display tbody tr.odd > .sorting_3, +table.ip-geo-block-dataTable.order-column.stripe tbody tr.odd > .sorting_3 { + background-color: whitesmoke; +} +table.ip-geo-block-dataTable.display tbody tr.odd.selected > .sorting_1, +table.ip-geo-block-dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 { + background-color: #a6b4cd; +} +table.ip-geo-block-dataTable.display tbody tr.odd.selected > .sorting_2, +table.ip-geo-block-dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 { + background-color: #a8b5cf; +} +table.ip-geo-block-dataTable.display tbody tr.odd.selected > .sorting_3, +table.ip-geo-block-dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 { + background-color: #a9b7d1; +} +table.ip-geo-block-dataTable.display tbody tr.even > .sorting_1, +table.ip-geo-block-dataTable.order-column.stripe tbody tr.even > .sorting_1 { + background-color: #fafafa; +} +table.ip-geo-block-dataTable.display tbody tr.even > .sorting_2, +table.ip-geo-block-dataTable.order-column.stripe tbody tr.even > .sorting_2 { + background-color: #fcfcfc; +} +table.ip-geo-block-dataTable.display tbody tr.even > .sorting_3, +table.ip-geo-block-dataTable.order-column.stripe tbody tr.even > .sorting_3 { + background-color: #fefefe; +} +table.ip-geo-block-dataTable.display tbody tr.even.selected > .sorting_1, +table.ip-geo-block-dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 { + background-color: #acbad5; +} +table.ip-geo-block-dataTable.display tbody tr.even.selected > .sorting_2, +table.ip-geo-block-dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 { + background-color: #aebcd6; +} +table.ip-geo-block-dataTable.display tbody tr.even.selected > .sorting_3, +table.ip-geo-block-dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 { + background-color: #afbdd8; +} +table.ip-geo-block-dataTable.display tbody tr:hover > .sorting_1, +table.ip-geo-block-dataTable.order-column.hover tbody tr:hover > .sorting_1 { + background-color: #eaeaea; +} +table.ip-geo-block-dataTable.display tbody tr:hover > .sorting_2, +table.ip-geo-block-dataTable.order-column.hover tbody tr:hover > .sorting_2 { + background-color: #ececec; +} +table.ip-geo-block-dataTable.display tbody tr:hover > .sorting_3, +table.ip-geo-block-dataTable.order-column.hover tbody tr:hover > .sorting_3 { + background-color: #efefef; +} +table.ip-geo-block-dataTable.display tbody tr:hover.selected > .sorting_1, +table.ip-geo-block-dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 { + background-color: #a2aec7; +} +table.ip-geo-block-dataTable.display tbody tr:hover.selected > .sorting_2, +table.ip-geo-block-dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 { + background-color: #a3b0c9; +} +table.ip-geo-block-dataTable.display tbody tr:hover.selected > .sorting_3, +table.ip-geo-block-dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 { + background-color: #a5b2cb; +} +table.ip-geo-block-dataTable.no-footer { + border-bottom: 1px solid #111; +} +table.ip-geo-block-dataTable.nowrap th, +table.ip-geo-block-dataTable.nowrap td { + white-space: nowrap; +} +table.ip-geo-block-dataTable.compact thead th, +table.ip-geo-block-dataTable.compact thead td { + padding: 4px 17px 4px 4px; +} +table.ip-geo-block-dataTable.compact tfoot th, +table.ip-geo-block-dataTable.compact tfoot td { + padding: 4px; +} +table.ip-geo-block-dataTable.compact tbody th, +table.ip-geo-block-dataTable.compact tbody td { + padding: 4px; +} +table.ip-geo-block-dataTable th.dt-left, +table.ip-geo-block-dataTable td.dt-left { + text-align: left; +} +table.ip-geo-block-dataTable th.dt-center, +table.ip-geo-block-dataTable td.dt-center, +table.ip-geo-block-dataTable td.dataTables_empty { + text-align: center; +} +table.ip-geo-block-dataTable th.dt-right, +table.ip-geo-block-dataTable td.dt-right { + text-align: right; +} +table.ip-geo-block-dataTable th.dt-justify, +table.ip-geo-block-dataTable td.dt-justify { + text-align: justify; +} +table.ip-geo-block-dataTable th.dt-nowrap, +table.ip-geo-block-dataTable td.dt-nowrap { + white-space: nowrap; +} +table.ip-geo-block-dataTable thead th.dt-head-left, +table.ip-geo-block-dataTable thead td.dt-head-left, +table.ip-geo-block-dataTable tfoot th.dt-head-left, +table.ip-geo-block-dataTable tfoot td.dt-head-left { + text-align: left; +} +table.ip-geo-block-dataTable thead th.dt-head-center, +table.ip-geo-block-dataTable thead td.dt-head-center, +table.ip-geo-block-dataTable tfoot th.dt-head-center, +table.ip-geo-block-dataTable tfoot td.dt-head-center { + text-align: center; +} +table.ip-geo-block-dataTable thead th.dt-head-right, +table.ip-geo-block-dataTable thead td.dt-head-right, +table.ip-geo-block-dataTable tfoot th.dt-head-right, +table.ip-geo-block-dataTable tfoot td.dt-head-right { + text-align: right; +} +table.ip-geo-block-dataTable thead th.dt-head-justify, +table.ip-geo-block-dataTable thead td.dt-head-justify, +table.ip-geo-block-dataTable tfoot th.dt-head-justify, +table.ip-geo-block-dataTable tfoot td.dt-head-justify { + text-align: justify; +} +table.ip-geo-block-dataTable thead th.dt-head-nowrap, +table.ip-geo-block-dataTable thead td.dt-head-nowrap, +table.ip-geo-block-dataTable tfoot th.dt-head-nowrap, +table.ip-geo-block-dataTable tfoot td.dt-head-nowrap { + white-space: nowrap; +} +table.ip-geo-block-dataTable tbody th.dt-body-left, +table.ip-geo-block-dataTable tbody td.dt-body-left { + text-align: left; +} +table.ip-geo-block-dataTable tbody th.dt-body-center, +table.ip-geo-block-dataTable tbody td.dt-body-center { + text-align: center; +} +table.ip-geo-block-dataTable tbody th.dt-body-right, +table.ip-geo-block-dataTable tbody td.dt-body-right { + text-align: right; +} +table.ip-geo-block-dataTable tbody th.dt-body-justify, +table.ip-geo-block-dataTable tbody td.dt-body-justify { + text-align: justify; +} +table.ip-geo-block-dataTable tbody th.dt-body-nowrap, +table.ip-geo-block-dataTable tbody td.dt-body-nowrap { + white-space: nowrap; +} + +table.ip-geo-block-dataTable, +table.ip-geo-block-dataTable th, +table.ip-geo-block-dataTable td { + box-sizing: content-box; +} + +/* + * Control feature layout + */ +div[class*="ip-geo-block"] .dataTables_wrapper { + position: relative; + clear: both; + *zoom: 1; + zoom: 1; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_length { + float: left; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_filter { + float: right; + text-align: right; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_filter input { + margin-left: 0.5em; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_info { + clear: both; + float: left; + padding-top: 0.755em; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate { + float: right; + text-align: right; + padding-top: 0.25em; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate .paginate_button { + box-sizing: border-box; + display: inline-block; + min-width: 1.5em; + padding: 0.5em 1em; + margin-left: 2px; + text-align: center; + text-decoration: none !important; + cursor: pointer; + *cursor: hand; + color: #333 !important; + border: 1px solid transparent; + border-radius: 2px; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate .paginate_button.current, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover { + color: #333 !important; + border: 1px solid #979797; + background-color: white; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dcdcdc)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, white 0%, #dcdcdc 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, white 0%, #dcdcdc 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, white 0%, #dcdcdc 100%); + /* IE10+ */ + background: -o-linear-gradient(top, white 0%, #dcdcdc 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, white 0%, #dcdcdc 100%); + /* W3C */ +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate .paginate_button.disabled, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active { + cursor: default; + color: #666 !important; + border: 1px solid transparent; + background: transparent; + box-shadow: none; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate .paginate_button:hover { + color: white !important; + border: 1px solid #111; + background-color: #585858; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #585858 0%, #111 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, #585858 0%, #111 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, #585858 0%, #111 100%); + /* IE10+ */ + background: -o-linear-gradient(top, #585858 0%, #111 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, #585858 0%, #111 100%); + /* W3C */ +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate .paginate_button:active { + outline: none; + background-color: #2b2b2b; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + /* IE10+ */ + background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%); + /* W3C */ + box-shadow: inset 0 0 3px #111; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate .ellipsis { + padding: 0 1em; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_processing { + position: absolute; + top: 50%; + left: 50%; + width: 100%; + height: 40px; + margin-left: -50%; + margin-top: -25px; + padding-top: 20px; + text-align: center; + font-size: 1.2em; + background-color: white; + background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0))); + background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_length, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_filter, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_info, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_processing, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate { + color: #333; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_scroll { + clear: both; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody { + *margin-top: -1px; + -webkit-overflow-scrolling: touch; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td { + vertical-align: middle; +} +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th > div.dataTables_sizing, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td > div.dataTables_sizing, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th > div.dataTables_sizing, +div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td > div.dataTables_sizing { + height: 0; + overflow: hidden; + margin: 0 !important; + padding: 0 !important; +} +div[class*="ip-geo-block"] .dataTables_wrapper.no-footer .dataTables_scrollBody { + border-bottom: 1px solid #111; +} +div[class*="ip-geo-block"] .dataTables_wrapper.no-footer div.dataTables_scrollHead table.ip-geo-block-dataTable, +div[class*="ip-geo-block"] .dataTables_wrapper.no-footer div.dataTables_scrollBody > table { + border-bottom: none; +} +div[class*="ip-geo-block"] .dataTables_wrapper:after { + visibility: hidden; + display: block; + content: ""; + clear: both; + height: 0; +} + +@media screen and (max-width: 767px) { + div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_info, + div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate { + float: none; + text-align: center; + } + div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_paginate { + margin-top: 0.5em; + } +} +@media screen and (max-width: 640px) { + div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_length, + div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_filter { + float: none; + text-align: center; + } + div[class*="ip-geo-block"] .dataTables_wrapper .dataTables_filter { + margin-top: 0.5em; + } +} + +/*! Responsive 2.1.1 + * 2014-2016 SpryMedia Ltd - datatables.net/license + */ + +table.ip-geo-block-dataTable.dtr-inline.collapsed > tbody > tr > td.child, +table.ip-geo-block-dataTable.dtr-inline.collapsed > tbody > tr > th.child, +table.ip-geo-block-dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty { + cursor: default !important; +} +table.ip-geo-block-dataTable.dtr-inline.collapsed > tbody > tr > td.child:before, +table.ip-geo-block-dataTable.dtr-inline.collapsed > tbody > tr > th.child:before, +table.ip-geo-block-dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before { + display: none !important; +} +table.ip-geo-block-dataTable.dtr-inline.collapsed > tbody > tr > td:first-child, +table.ip-geo-block-dataTable.dtr-inline.collapsed > tbody > tr > th:first-child { + position: relative; + padding-left: 30px; + cursor: pointer; +} +table.ip-geo-block-dataTable.dtr-inline.collapsed > tbody > tr > td:first-child:before, +table.ip-geo-block-dataTable.dtr-inline.collapsed > tbody > tr > th:first-child:before { + top: 9px; + left: 4px; + height: 14px; + width: 14px; + display: block; + position: absolute; + color: white; + border: 2px solid white; + border-radius: 14px; + box-shadow: 0 0 3px #444; + box-sizing: content-box; + text-align: center; + font-family: 'Courier New', Courier, monospace; + line-height: 14px; + content: '+'; + background-color: #31b131; +} +table.ip-geo-block-dataTable.dtr-inline.collapsed > tbody > tr.parent > td:first-child:before, +table.ip-geo-block-dataTable.dtr-inline.collapsed > tbody > tr.parent > th:first-child:before { + content: '-'; + background-color: #d33333; +} +table.ip-geo-block-dataTable.dtr-inline.collapsed > tbody > tr.child td:before { + display: none; +} +table.ip-geo-block-dataTable.dtr-inline.collapsed.compact > tbody > tr > td:first-child, +table.ip-geo-block-dataTable.dtr-inline.collapsed.compact > tbody > tr > th:first-child { + padding-left: 27px; +} +table.ip-geo-block-dataTable.dtr-inline.collapsed.compact > tbody > tr > td:first-child:before, +table.ip-geo-block-dataTable.dtr-inline.collapsed.compact > tbody > tr > th:first-child:before { + top: 5px; + left: 4px; + height: 14px; + width: 14px; + border-radius: 14px; + line-height: 14px; + text-indent: 3px; +} +table.ip-geo-block-dataTable.dtr-column > tbody > tr > td.control, +table.ip-geo-block-dataTable.dtr-column > tbody > tr > th.control { + position: relative; + cursor: pointer; +} +table.ip-geo-block-dataTable.dtr-column > tbody > tr > td.control:before, +table.ip-geo-block-dataTable.dtr-column > tbody > tr > th.control:before { + top: 50%; + left: 50%; + height: 16px; + width: 16px; + margin-top: -10px; + margin-left: -10px; + display: block; + position: absolute; + color: white; + border: 2px solid white; + border-radius: 14px; + box-shadow: 0 0 3px #444; + box-sizing: content-box; + text-align: center; + font-family: 'Courier New', Courier, monospace; + line-height: 14px; + content: '+'; + background-color: #31b131; +} +table.ip-geo-block-dataTable.dtr-column > tbody > tr.parent td.control:before, +table.ip-geo-block-dataTable.dtr-column > tbody > tr.parent th.control:before { + content: '-'; + background-color: #d33333; +} +table.ip-geo-block-dataTable > tbody > tr.child { + padding: 0.5em 1em; +} +table.ip-geo-block-dataTable > tbody > tr.child:hover { + background: transparent !important; +} +table.ip-geo-block-dataTable > tbody > tr.child ul.dtr-details { + display: inline-block; + list-style-type: none; + margin: 0; + padding: 0; +} +table.ip-geo-block-dataTable > tbody > tr.child ul.dtr-details li { + border-bottom: 1px solid #efefef; + padding: 0.5em 0; +} +table.ip-geo-block-dataTable > tbody > tr.child ul.dtr-details li:first-child { + padding-top: 0; +} +table.ip-geo-block-dataTable > tbody > tr.child ul.dtr-details li:last-child { + border-bottom: none; +} +table.ip-geo-block-dataTable > tbody > tr.child span.dtr-title { + display: inline-block; + min-width: 75px; + font-weight: bold; +} + +div.dtr-modal { + position: fixed; + box-sizing: border-box; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: 100; + padding: 10em 1em; +} +div.dtr-modal div.dtr-modal-display { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + width: 50%; + height: 50%; + overflow: auto; + margin: auto; + z-index: 102; + overflow: auto; + background-color: #f5f5f7; + border: 1px solid black; + border-radius: 0.5em; + box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6); +} +div.dtr-modal div.dtr-modal-content { + position: relative; + padding: 1em; +} +div.dtr-modal div.dtr-modal-close { + position: absolute; + top: 6px; + right: 6px; + width: 22px; + height: 22px; + border: 1px solid #eaeaea; + background-color: #f9f9f9; + text-align: center; + border-radius: 3px; + cursor: pointer; + z-index: 12; +} +div.dtr-modal div.dtr-modal-close:hover { + background-color: #eaeaea; +} +div.dtr-modal div.dtr-modal-background { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 101; + background: rgba(0, 0, 0, 0.6); +} + +@media screen and (max-width: 767px) { + div.dtr-modal div.dtr-modal-display { + width: 95%; + } +} + +/*! datatables.mark.js v2.0.1 + * Copyright (c) 2016-2017 Julian Motz + * https://github.com/julmot/datatables.mark.js/blob/master/LICENSE + */ + +mark { + background: orange; + color: black; +} diff --git a/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/datatables-all.min.css b/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/datatables-all.min.css new file mode 100644 index 00000000..330a13cf --- /dev/null +++ b/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/datatables-all.min.css @@ -0,0 +1,15 @@ +/*! DataTables 1.10.16 + * 2008-2017 SpryMedia Ltd - datatables.net/license + */ +table.ip-geo-block-dataTable tbody td.dt-body-nowrap,table.ip-geo-block-dataTable tbody th.dt-body-nowrap,table.ip-geo-block-dataTable td.dt-nowrap,table.ip-geo-block-dataTable tfoot td.dt-head-nowrap,table.ip-geo-block-dataTable tfoot th.dt-head-nowrap,table.ip-geo-block-dataTable th.dt-nowrap,table.ip-geo-block-dataTable thead td.dt-head-nowrap,table.ip-geo-block-dataTable thead th.dt-head-nowrap,table.ip-geo-block-dataTable.nowrap td,table.ip-geo-block-dataTable.nowrap th{white-space:nowrap}table.ip-geo-block-dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.ip-geo-block-dataTable tfoot th,table.ip-geo-block-dataTable thead th{font-weight:700}table.ip-geo-block-dataTable thead td,table.ip-geo-block-dataTable thead th{padding:10px 18px;border-bottom:1px solid #111}table.ip-geo-block-dataTable thead td:active,table.ip-geo-block-dataTable thead th:active{outline:0}table.ip-geo-block-dataTable tfoot td,table.ip-geo-block-dataTable tfoot th{padding:10px 18px 6px;border-top:1px solid #111}table.ip-geo-block-dataTable thead .sorting,table.ip-geo-block-dataTable thead .sorting_asc,table.ip-geo-block-dataTable thead .sorting_asc_disabled,table.ip-geo-block-dataTable thead .sorting_desc,table.ip-geo-block-dataTable thead .sorting_desc_disabled{cursor:pointer;background-repeat:no-repeat;background-position:center right}table.ip-geo-block-dataTable thead .sorting{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAATCAYAAACZZ43PAAAAN0lEQVR4AWO4c+cORZhmBvyH4QEx4D86pqsB/3Fjwgb8J4RpaQBhPES8gE/z0ElI9M9MA1+gAAD5jWGc4eZ87AAAAABJRU5ErkJggg==)}table.ip-geo-block-dataTable thead .sorting_asc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAATCAIAAAAWBRqYAAAABnRSTlMA3ADcANwpVcdiAAAAdUlEQVR4AWO4QyKgWMONG3eWrrh76xbRGtZvulPTdHfzVuI0nDl7p7XrblXD3Y7eu+fPE6FhwWKgaihasuIuAQ2Hj95pbENoqG+9e/QYbg3Xr9+ZPB2iFIGmzrp78yYODdt3gvxa24yCgCK79pAcD8NEw6gGAPv5+lejjyPQAAAAAElFTkSuQmCC)}table.ip-geo-block-dataTable thead .sorting_desc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAATCAIAAAAWBRqYAAAABnRSTlMA3ADcANwpVcdiAAAAcklEQVR4AWO4QyIY2hpGNezac6em6W5tMwoCimzfiUPDzZt3ps66W9WAgiZPv3v9Om4nHT12p74Vobqx7e7ho4T8sGQFQsOCxXcJe/r8+TsdvSDVrV13z5wlLpQ2bwX5fv0mooP11q07S1fcvXFjACMOAM7v+leNDkNAAAAAAElFTkSuQmCC)}table.ip-geo-block-dataTable thead .sorting_asc_disabled{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAATCAYAAACZZ43PAAAALklEQVR4AWO4c+cORZhmBvyH4QEx4D86pqsB/3Fjwgb8J4RpZsDAJ6RRA0YNAAAd2DjFaOCLnQAAAABJRU5ErkJggg==)}table.ip-geo-block-dataTable thead .sorting_desc_disabled{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAATCAYAAACZZ43PAAAALUlEQVR4AWO4c+cORZjqBowaMGrAf0KYlgYQNoToMMClma4GMKBrpqsB9E9IAFTzOMWpD7f6AAAAAElFTkSuQmCC)}table.ip-geo-block-dataTable tbody tr{background-color:#fff}table.ip-geo-block-dataTable tbody tr.selected{background-color:#B0BED9}table.ip-geo-block-dataTable tbody td,table.ip-geo-block-dataTable tbody th{padding:8px 10px}table.ip-geo-block-dataTable.display tbody td,table.ip-geo-block-dataTable.display tbody th,table.ip-geo-block-dataTable.row-border tbody td,table.ip-geo-block-dataTable.row-border tbody th{border-top:1px solid #ddd}table.ip-geo-block-dataTable.display tbody tr:first-child td,table.ip-geo-block-dataTable.display tbody tr:first-child th,table.ip-geo-block-dataTable.row-border tbody tr:first-child td,table.ip-geo-block-dataTable.row-border tbody tr:first-child th{border-top:none}table.ip-geo-block-dataTable.cell-border tbody td,table.ip-geo-block-dataTable.cell-border tbody th{border-top:1px solid #ddd;border-right:1px solid #ddd}table.ip-geo-block-dataTable.cell-border tbody tr td:first-child,table.ip-geo-block-dataTable.cell-border tbody tr th:first-child{border-left:1px solid #ddd}table.ip-geo-block-dataTable.cell-border tbody tr:first-child td,table.ip-geo-block-dataTable.cell-border tbody tr:first-child th{border-top:none}table.ip-geo-block-dataTable.display tbody tr.odd,table.ip-geo-block-dataTable.stripe tbody tr.odd{background-color:#f9f9f9}table.ip-geo-block-dataTable.display tbody tr.odd.selected,table.ip-geo-block-dataTable.stripe tbody tr.odd.selected{background-color:#acbad4}table.ip-geo-block-dataTable.display tbody tr:hover,table.ip-geo-block-dataTable.hover tbody tr:hover{background-color:#f6f6f6}table.ip-geo-block-dataTable.display tbody tr:hover.selected,table.ip-geo-block-dataTable.hover tbody tr:hover.selected{background-color:#aab7d1}table.ip-geo-block-dataTable.display tbody tr>.sorting_1,table.ip-geo-block-dataTable.display tbody tr>.sorting_2,table.ip-geo-block-dataTable.display tbody tr>.sorting_3,table.ip-geo-block-dataTable.order-column tbody tr>.sorting_1,table.ip-geo-block-dataTable.order-column tbody tr>.sorting_2,table.ip-geo-block-dataTable.order-column tbody tr>.sorting_3{background-color:#fafafa}table.ip-geo-block-dataTable.display tbody tr.selected>.sorting_1,table.ip-geo-block-dataTable.display tbody tr.selected>.sorting_2,table.ip-geo-block-dataTable.display tbody tr.selected>.sorting_3,table.ip-geo-block-dataTable.order-column tbody tr.selected>.sorting_1,table.ip-geo-block-dataTable.order-column tbody tr.selected>.sorting_2,table.ip-geo-block-dataTable.order-column tbody tr.selected>.sorting_3{background-color:#acbad5}table.ip-geo-block-dataTable.display tbody tr.odd>.sorting_1,table.ip-geo-block-dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.ip-geo-block-dataTable.display tbody tr.odd>.sorting_2,table.ip-geo-block-dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.ip-geo-block-dataTable.display tbody tr.odd>.sorting_3,table.ip-geo-block-dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:#f5f5f5}table.ip-geo-block-dataTable.display tbody tr.odd.selected>.sorting_1,table.ip-geo-block-dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.ip-geo-block-dataTable.display tbody tr.odd.selected>.sorting_2,table.ip-geo-block-dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.ip-geo-block-dataTable.display tbody tr.odd.selected>.sorting_3,table.ip-geo-block-dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.ip-geo-block-dataTable.display tbody tr.even>.sorting_1,table.ip-geo-block-dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.ip-geo-block-dataTable.display tbody tr.even>.sorting_2,table.ip-geo-block-dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.ip-geo-block-dataTable.display tbody tr.even>.sorting_3,table.ip-geo-block-dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.ip-geo-block-dataTable.display tbody tr.even.selected>.sorting_1,table.ip-geo-block-dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.ip-geo-block-dataTable.display tbody tr.even.selected>.sorting_2,table.ip-geo-block-dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.ip-geo-block-dataTable.display tbody tr.even.selected>.sorting_3,table.ip-geo-block-dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.ip-geo-block-dataTable.display tbody tr:hover>.sorting_1,table.ip-geo-block-dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.ip-geo-block-dataTable.display tbody tr:hover>.sorting_2,table.ip-geo-block-dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.ip-geo-block-dataTable.display tbody tr:hover>.sorting_3,table.ip-geo-block-dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.ip-geo-block-dataTable.display tbody tr:hover.selected>.sorting_1,table.ip-geo-block-dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.ip-geo-block-dataTable.display tbody tr:hover.selected>.sorting_2,table.ip-geo-block-dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.ip-geo-block-dataTable.display tbody tr:hover.selected>.sorting_3,table.ip-geo-block-dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.ip-geo-block-dataTable.no-footer{border-bottom:1px solid #111}table.ip-geo-block-dataTable.compact thead td,table.ip-geo-block-dataTable.compact thead th{padding:4px 17px 4px 4px}table.ip-geo-block-dataTable.compact tbody td,table.ip-geo-block-dataTable.compact tbody th,table.ip-geo-block-dataTable.compact tfoot td,table.ip-geo-block-dataTable.compact tfoot th{padding:4px}table.ip-geo-block-dataTable td.dt-left,table.ip-geo-block-dataTable th.dt-left{text-align:left}table.ip-geo-block-dataTable td.dataTables_empty,table.ip-geo-block-dataTable td.dt-center,table.ip-geo-block-dataTable th.dt-center{text-align:center}table.ip-geo-block-dataTable td.dt-right,table.ip-geo-block-dataTable th.dt-right{text-align:right}table.ip-geo-block-dataTable td.dt-justify,table.ip-geo-block-dataTable th.dt-justify{text-align:justify}table.ip-geo-block-dataTable tfoot td.dt-head-left,table.ip-geo-block-dataTable tfoot th.dt-head-left,table.ip-geo-block-dataTable thead td.dt-head-left,table.ip-geo-block-dataTable thead th.dt-head-left{text-align:left}table.ip-geo-block-dataTable tfoot td.dt-head-center,table.ip-geo-block-dataTable tfoot th.dt-head-center,table.ip-geo-block-dataTable thead td.dt-head-center,table.ip-geo-block-dataTable thead th.dt-head-center{text-align:center}table.ip-geo-block-dataTable tfoot td.dt-head-right,table.ip-geo-block-dataTable tfoot th.dt-head-right,table.ip-geo-block-dataTable thead td.dt-head-right,table.ip-geo-block-dataTable thead th.dt-head-right{text-align:right}table.ip-geo-block-dataTable tfoot td.dt-head-justify,table.ip-geo-block-dataTable tfoot th.dt-head-justify,table.ip-geo-block-dataTable thead td.dt-head-justify,table.ip-geo-block-dataTable thead th.dt-head-justify{text-align:justify}table.ip-geo-block-dataTable tbody td.dt-body-left,table.ip-geo-block-dataTable tbody th.dt-body-left{text-align:left}table.ip-geo-block-dataTable tbody td.dt-body-center,table.ip-geo-block-dataTable tbody th.dt-body-center{text-align:center}table.ip-geo-block-dataTable tbody td.dt-body-right,table.ip-geo-block-dataTable tbody th.dt-body-right{text-align:right}table.ip-geo-block-dataTable tbody td.dt-body-justify,table.ip-geo-block-dataTable tbody th.dt-body-justify{text-align:justify}table.ip-geo-block-dataTable,table.ip-geo-block-dataTable td,table.ip-geo-block-dataTable th{box-sizing:content-box}div[class*=ip-geo-block] .dataTables_wrapper{position:relative;clear:both;zoom:1}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_length{float:left}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_filter{float:right;text-align:right}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_filter input{margin-left:.5em}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:.755em}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:.25em}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:.5em 1em;margin-left:2px;text-align:center;text-decoration:none!important;cursor:pointer;color:#333!important;border:1px solid transparent;border-radius:2px}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate .paginate_button.current,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333!important;border:1px solid #979797;background-color:#fff;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(100%,#dcdcdc));background:-webkit-linear-gradient(top,#fff 0,#dcdcdc 100%);background:-moz-linear-gradient(top,#fff 0,#dcdcdc 100%);background:-ms-linear-gradient(top,#fff 0,#dcdcdc 100%);background:-o-linear-gradient(top,#fff 0,#dcdcdc 100%);background:linear-gradient(to bottom,#fff 0,#dcdcdc 100%)}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate .paginate_button.disabled,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover{cursor:default;color:#666!important;border:1px solid transparent;background:0 0;box-shadow:none}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:#fff!important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#585858),color-stop(100%,#111));background:-webkit-linear-gradient(top,#585858 0,#111 100%);background:-moz-linear-gradient(top,#585858 0,#111 100%);background:-ms-linear-gradient(top,#585858 0,#111 100%);background:-o-linear-gradient(top,#585858 0,#111 100%);background:linear-gradient(to bottom,#585858 0,#111 100%)}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:0;background-color:#2b2b2b;background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#2b2b2b),color-stop(100%,#0c0c0c));background:-webkit-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:-moz-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:-ms-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:-o-linear-gradient(top,#2b2b2b 0,#0c0c0c 100%);background:linear-gradient(to bottom,#2b2b2b 0,#0c0c0c 100%);box-shadow:inset 0 0 3px #111}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:#fff;background:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,0)),color-stop(25%,rgba(255,255,255,.9)),color-stop(75%,rgba(255,255,255,.9)),color-stop(100%,rgba(255,255,255,0)));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,.9) 25%,rgba(255,255,255,.9) 75%,rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,.9) 25%,rgba(255,255,255,.9) 75%,rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,.9) 25%,rgba(255,255,255,.9) 75%,rgba(255,255,255,0) 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,rgba(255,255,255,.9) 25%,rgba(255,255,255,.9) 75%,rgba(255,255,255,0) 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,rgba(255,255,255,.9) 25%,rgba(255,255,255,.9) 75%,rgba(255,255,255,0) 100%)}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_filter,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_info,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_length,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_processing{color:#333}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_scroll{clear:both}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{-webkit-overflow-scrolling:touch}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th{vertical-align:middle}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td>div.dataTables_sizing,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th>div.dataTables_sizing,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td>div.dataTables_sizing,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th>div.dataTables_sizing{height:0;overflow:hidden;margin:0!important;padding:0!important}div[class*=ip-geo-block] .dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}div[class*=ip-geo-block] .dataTables_wrapper.no-footer div.dataTables_scrollBody>table,div[class*=ip-geo-block] .dataTables_wrapper.no-footer div.dataTables_scrollHead table.ip-geo-block-dataTable{border-bottom:none}div[class*=ip-geo-block] .dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width:767px){div[class*=ip-geo-block] .dataTables_wrapper .dataTables_info,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate{float:none;text-align:center}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_paginate{margin-top:.5em}}@media screen and (max-width:640px){div[class*=ip-geo-block] .dataTables_wrapper .dataTables_filter,div[class*=ip-geo-block] .dataTables_wrapper .dataTables_length{float:none;text-align:center}div[class*=ip-geo-block] .dataTables_wrapper .dataTables_filter{margin-top:.5em}} + +/*! Responsive 2.1.1 + * 2014-2016 SpryMedia Ltd - datatables.net/license + */ +table.ip-geo-block-dataTable.dtr-inline.collapsed>tbody>tr>td.child,table.ip-geo-block-dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty,table.ip-geo-block-dataTable.dtr-inline.collapsed>tbody>tr>th.child{cursor:default!important}table.ip-geo-block-dataTable.dtr-inline.collapsed>tbody>tr>td.child:before,table.ip-geo-block-dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty:before,table.ip-geo-block-dataTable.dtr-inline.collapsed>tbody>tr>th.child:before{display:none!important}table.ip-geo-block-dataTable.dtr-inline.collapsed>tbody>tr>td:first-child,table.ip-geo-block-dataTable.dtr-inline.collapsed>tbody>tr>th:first-child{position:relative;padding-left:30px;cursor:pointer}table.ip-geo-block-dataTable.dtr-inline.collapsed>tbody>tr>td:first-child:before,table.ip-geo-block-dataTable.dtr-inline.collapsed>tbody>tr>th:first-child:before{top:9px;left:4px;height:14px;width:14px;display:block;position:absolute;color:#fff;border:2px solid #fff;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;font-family:'Courier New',Courier,monospace;line-height:14px;content:'+';background-color:#31b131}table.ip-geo-block-dataTable.dtr-inline.collapsed>tbody>tr.parent>td:first-child:before,table.ip-geo-block-dataTable.dtr-inline.collapsed>tbody>tr.parent>th:first-child:before{content:'-';background-color:#d33333}table.ip-geo-block-dataTable.dtr-inline.collapsed>tbody>tr.child td:before{display:none}table.ip-geo-block-dataTable.dtr-inline.collapsed.compact>tbody>tr>td:first-child,table.ip-geo-block-dataTable.dtr-inline.collapsed.compact>tbody>tr>th:first-child{padding-left:27px}table.ip-geo-block-dataTable.dtr-inline.collapsed.compact>tbody>tr>td:first-child:before,table.ip-geo-block-dataTable.dtr-inline.collapsed.compact>tbody>tr>th:first-child:before{top:5px;left:4px;height:14px;width:14px;border-radius:14px;line-height:14px;text-indent:3px}table.ip-geo-block-dataTable.dtr-column>tbody>tr>td.control,table.ip-geo-block-dataTable.dtr-column>tbody>tr>th.control{position:relative;cursor:pointer}table.ip-geo-block-dataTable.dtr-column>tbody>tr>td.control:before,table.ip-geo-block-dataTable.dtr-column>tbody>tr>th.control:before{top:50%;left:50%;height:16px;width:16px;margin-top:-10px;margin-left:-10px;display:block;position:absolute;color:#fff;border:2px solid #fff;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;font-family:'Courier New',Courier,monospace;line-height:14px;content:'+';background-color:#31b131}table.ip-geo-block-dataTable.dtr-column>tbody>tr.parent td.control:before,table.ip-geo-block-dataTable.dtr-column>tbody>tr.parent th.control:before{content:'-';background-color:#d33333}table.ip-geo-block-dataTable>tbody>tr.child{padding:.5em 1em}table.ip-geo-block-dataTable>tbody>tr.child:hover{background:0 0!important}table.ip-geo-block-dataTable>tbody>tr.child ul.dtr-details{display:inline-block;list-style-type:none;margin:0;padding:0}table.ip-geo-block-dataTable>tbody>tr.child ul.dtr-details li{border-bottom:1px solid #efefef;padding:.5em 0}table.ip-geo-block-dataTable>tbody>tr.child ul.dtr-details li:first-child{padding-top:0}table.ip-geo-block-dataTable>tbody>tr.child ul.dtr-details li:last-child{border-bottom:none}table.ip-geo-block-dataTable>tbody>tr.child span.dtr-title{display:inline-block;min-width:75px;font-weight:700}div.dtr-modal{position:fixed;box-sizing:border-box;top:0;left:0;height:100%;width:100%;z-index:100;padding:10em 1em}div.dtr-modal div.dtr-modal-display{position:absolute;top:0;left:0;bottom:0;right:0;width:50%;height:50%;margin:auto;z-index:102;overflow:auto;background-color:#f5f5f7;border:1px solid #000;border-radius:.5em;box-shadow:0 12px 30px rgba(0,0,0,.6)}div.dtr-modal div.dtr-modal-content{position:relative;padding:1em}div.dtr-modal div.dtr-modal-close{position:absolute;top:6px;right:6px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:12}div.dtr-modal div.dtr-modal-close:hover{background-color:#eaeaea}div.dtr-modal div.dtr-modal-background{position:fixed;top:0;left:0;right:0;bottom:0;z-index:101;background:rgba(0,0,0,.6)}@media screen and (max-width:767px){div.dtr-modal div.dtr-modal-display{width:95%}} + +/*! datatables.mark.js v2.0.1 + * Copyright (c) 2016-2017 Julian Motz + * https://github.com/julmot/datatables.mark.js/blob/master/LICENSE + */ +mark{background:orange;color:#000} diff --git a/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/datatables.mark.css b/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/datatables.mark.css new file mode 100644 index 00000000..15046205 --- /dev/null +++ b/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/datatables.mark.css @@ -0,0 +1,9 @@ +/*! datatables.mark.js v2.0.1 + * Copyright (c) 2016–2017 Julian Motz + * https://github.com/julmot/datatables.mark.js/blob/master/LICENSE + */ + +mark { + background: orange; + color: black; +} diff --git a/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/datatables.mark.min.css b/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/datatables.mark.min.css new file mode 100644 index 00000000..722870b7 --- /dev/null +++ b/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/datatables.mark.min.css @@ -0,0 +1 @@ +mark{background:orange;color:black;} diff --git a/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/jquery.dataTables.css b/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/jquery.dataTables.css new file mode 100644 index 00000000..8235019d --- /dev/null +++ b/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/jquery.dataTables.css @@ -0,0 +1,449 @@ +/*! DataTables 1.10.16 + * 2008-2017 SpryMedia Ltd - datatables.net/license + */ + +table.dataTable { + width: 100%; + margin: 0 auto; + clear: both; + border-collapse: separate; + border-spacing: 0; + /* + * Header and footer styles + */ + /* + * Body styles + */ +} +table.dataTable thead th, +table.dataTable tfoot th { + font-weight: bold; +} +table.dataTable thead th, +table.dataTable thead td { + padding: 10px 18px; + border-bottom: 1px solid #111; +} +table.dataTable thead th:active, +table.dataTable thead td:active { + outline: none; +} +table.dataTable tfoot th, +table.dataTable tfoot td { + padding: 10px 18px 6px 18px; + border-top: 1px solid #111; +} +table.dataTable thead .sorting, +table.dataTable thead .sorting_asc, +table.dataTable thead .sorting_desc, +table.dataTable thead .sorting_asc_disabled, +table.dataTable thead .sorting_desc_disabled { + cursor: pointer; + *cursor: hand; + background-repeat: no-repeat; + background-position: center right; +} +table.dataTable thead .sorting { + background-image: url("../images/sort_both.png"); +} +table.dataTable thead .sorting_asc { + background-image: url("../images/sort_asc.png"); +} +table.dataTable thead .sorting_desc { + background-image: url("../images/sort_desc.png"); +} +table.dataTable thead .sorting_asc_disabled { + background-image: url("../images/sort_asc_disabled.png"); +} +table.dataTable thead .sorting_desc_disabled { + background-image: url("../images/sort_desc_disabled.png"); +} +table.dataTable tbody tr { + background-color: #ffffff; +} +table.dataTable tbody tr.selected { + background-color: #B0BED9; +} +table.dataTable tbody th, +table.dataTable tbody td { + padding: 8px 10px; +} +table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td { + border-top: 1px solid #ddd; +} +table.dataTable.row-border tbody tr:first-child th, +table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th, +table.dataTable.display tbody tr:first-child td { + border-top: none; +} +table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td { + border-top: 1px solid #ddd; + border-right: 1px solid #ddd; +} +table.dataTable.cell-border tbody tr th:first-child, +table.dataTable.cell-border tbody tr td:first-child { + border-left: 1px solid #ddd; +} +table.dataTable.cell-border tbody tr:first-child th, +table.dataTable.cell-border tbody tr:first-child td { + border-top: none; +} +table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd { + background-color: #f9f9f9; +} +table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected { + background-color: #acbad4; +} +table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover { + background-color: #f6f6f6; +} +table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected { + background-color: #aab7d1; +} +table.dataTable.order-column tbody tr > .sorting_1, +table.dataTable.order-column tbody tr > .sorting_2, +table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1, +table.dataTable.display tbody tr > .sorting_2, +table.dataTable.display tbody tr > .sorting_3 { + background-color: #fafafa; +} +table.dataTable.order-column tbody tr.selected > .sorting_1, +table.dataTable.order-column tbody tr.selected > .sorting_2, +table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1, +table.dataTable.display tbody tr.selected > .sorting_2, +table.dataTable.display tbody tr.selected > .sorting_3 { + background-color: #acbad5; +} +table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 { + background-color: #f1f1f1; +} +table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 { + background-color: #f3f3f3; +} +table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 { + background-color: whitesmoke; +} +table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 { + background-color: #a6b4cd; +} +table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 { + background-color: #a8b5cf; +} +table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 { + background-color: #a9b7d1; +} +table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 { + background-color: #fafafa; +} +table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 { + background-color: #fcfcfc; +} +table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 { + background-color: #fefefe; +} +table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 { + background-color: #acbad5; +} +table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 { + background-color: #aebcd6; +} +table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 { + background-color: #afbdd8; +} +table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 { + background-color: #eaeaea; +} +table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 { + background-color: #ececec; +} +table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 { + background-color: #efefef; +} +table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 { + background-color: #a2aec7; +} +table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 { + background-color: #a3b0c9; +} +table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 { + background-color: #a5b2cb; +} +table.dataTable.no-footer { + border-bottom: 1px solid #111; +} +table.dataTable.nowrap th, table.dataTable.nowrap td { + white-space: nowrap; +} +table.dataTable.compact thead th, +table.dataTable.compact thead td { + padding: 4px 17px 4px 4px; +} +table.dataTable.compact tfoot th, +table.dataTable.compact tfoot td { + padding: 4px; +} +table.dataTable.compact tbody th, +table.dataTable.compact tbody td { + padding: 4px; +} +table.dataTable th.dt-left, +table.dataTable td.dt-left { + text-align: left; +} +table.dataTable th.dt-center, +table.dataTable td.dt-center, +table.dataTable td.dataTables_empty { + text-align: center; +} +table.dataTable th.dt-right, +table.dataTable td.dt-right { + text-align: right; +} +table.dataTable th.dt-justify, +table.dataTable td.dt-justify { + text-align: justify; +} +table.dataTable th.dt-nowrap, +table.dataTable td.dt-nowrap { + white-space: nowrap; +} +table.dataTable thead th.dt-head-left, +table.dataTable thead td.dt-head-left, +table.dataTable tfoot th.dt-head-left, +table.dataTable tfoot td.dt-head-left { + text-align: left; +} +table.dataTable thead th.dt-head-center, +table.dataTable thead td.dt-head-center, +table.dataTable tfoot th.dt-head-center, +table.dataTable tfoot td.dt-head-center { + text-align: center; +} +table.dataTable thead th.dt-head-right, +table.dataTable thead td.dt-head-right, +table.dataTable tfoot th.dt-head-right, +table.dataTable tfoot td.dt-head-right { + text-align: right; +} +table.dataTable thead th.dt-head-justify, +table.dataTable thead td.dt-head-justify, +table.dataTable tfoot th.dt-head-justify, +table.dataTable tfoot td.dt-head-justify { + text-align: justify; +} +table.dataTable thead th.dt-head-nowrap, +table.dataTable thead td.dt-head-nowrap, +table.dataTable tfoot th.dt-head-nowrap, +table.dataTable tfoot td.dt-head-nowrap { + white-space: nowrap; +} +table.dataTable tbody th.dt-body-left, +table.dataTable tbody td.dt-body-left { + text-align: left; +} +table.dataTable tbody th.dt-body-center, +table.dataTable tbody td.dt-body-center { + text-align: center; +} +table.dataTable tbody th.dt-body-right, +table.dataTable tbody td.dt-body-right { + text-align: right; +} +table.dataTable tbody th.dt-body-justify, +table.dataTable tbody td.dt-body-justify { + text-align: justify; +} +table.dataTable tbody th.dt-body-nowrap, +table.dataTable tbody td.dt-body-nowrap { + white-space: nowrap; +} + +table.dataTable, +table.dataTable th, +table.dataTable td { + box-sizing: content-box; +} + +/* + * Control feature layout + */ +.dataTables_wrapper { + position: relative; + clear: both; + *zoom: 1; + zoom: 1; +} +.dataTables_wrapper .dataTables_length { + float: left; +} +.dataTables_wrapper .dataTables_filter { + float: right; + text-align: right; +} +.dataTables_wrapper .dataTables_filter input { + margin-left: 0.5em; +} +.dataTables_wrapper .dataTables_info { + clear: both; + float: left; + padding-top: 0.755em; +} +.dataTables_wrapper .dataTables_paginate { + float: right; + text-align: right; + padding-top: 0.25em; +} +.dataTables_wrapper .dataTables_paginate .paginate_button { + box-sizing: border-box; + display: inline-block; + min-width: 1.5em; + padding: 0.5em 1em; + margin-left: 2px; + text-align: center; + text-decoration: none !important; + cursor: pointer; + *cursor: hand; + color: #333 !important; + border: 1px solid transparent; + border-radius: 2px; +} +.dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover { + color: #333 !important; + border: 1px solid #979797; + background-color: white; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dcdcdc)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, white 0%, #dcdcdc 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, white 0%, #dcdcdc 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, white 0%, #dcdcdc 100%); + /* IE10+ */ + background: -o-linear-gradient(top, white 0%, #dcdcdc 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, white 0%, #dcdcdc 100%); + /* W3C */ +} +.dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active { + cursor: default; + color: #666 !important; + border: 1px solid transparent; + background: transparent; + box-shadow: none; +} +.dataTables_wrapper .dataTables_paginate .paginate_button:hover { + color: white !important; + border: 1px solid #111; + background-color: #585858; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #585858 0%, #111 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, #585858 0%, #111 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, #585858 0%, #111 100%); + /* IE10+ */ + background: -o-linear-gradient(top, #585858 0%, #111 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, #585858 0%, #111 100%); + /* W3C */ +} +.dataTables_wrapper .dataTables_paginate .paginate_button:active { + outline: none; + background-color: #2b2b2b; + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + /* Chrome10+,Safari5.1+ */ + background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + /* FF3.6+ */ + background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + /* IE10+ */ + background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%); + /* Opera 11.10+ */ + background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%); + /* W3C */ + box-shadow: inset 0 0 3px #111; +} +.dataTables_wrapper .dataTables_paginate .ellipsis { + padding: 0 1em; +} +.dataTables_wrapper .dataTables_processing { + position: absolute; + top: 50%; + left: 50%; + width: 100%; + height: 40px; + margin-left: -50%; + margin-top: -25px; + padding-top: 20px; + text-align: center; + font-size: 1.2em; + background-color: white; + background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0))); + background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); + background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%); +} +.dataTables_wrapper .dataTables_length, +.dataTables_wrapper .dataTables_filter, +.dataTables_wrapper .dataTables_info, +.dataTables_wrapper .dataTables_processing, +.dataTables_wrapper .dataTables_paginate { + color: #333; +} +.dataTables_wrapper .dataTables_scroll { + clear: both; +} +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody { + *margin-top: -1px; + -webkit-overflow-scrolling: touch; +} +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td { + vertical-align: middle; +} +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > th > div.dataTables_sizing, +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > thead > tr > td > div.dataTables_sizing, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > th > div.dataTables_sizing, +.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody > table > tbody > tr > td > div.dataTables_sizing { + height: 0; + overflow: hidden; + margin: 0 !important; + padding: 0 !important; +} +.dataTables_wrapper.no-footer .dataTables_scrollBody { + border-bottom: 1px solid #111; +} +.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable, +.dataTables_wrapper.no-footer div.dataTables_scrollBody > table { + border-bottom: none; +} +.dataTables_wrapper:after { + visibility: hidden; + display: block; + content: ""; + clear: both; + height: 0; +} + +@media screen and (max-width: 767px) { + .dataTables_wrapper .dataTables_info, + .dataTables_wrapper .dataTables_paginate { + float: none; + text-align: center; + } + .dataTables_wrapper .dataTables_paginate { + margin-top: 0.5em; + } +} +@media screen and (max-width: 640px) { + .dataTables_wrapper .dataTables_length, + .dataTables_wrapper .dataTables_filter { + float: none; + text-align: center; + } + .dataTables_wrapper .dataTables_filter { + margin-top: 0.5em; + } +} diff --git a/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/jquery.dataTables.min.css b/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/jquery.dataTables.min.css new file mode 100644 index 00000000..6565b406 --- /dev/null +++ b/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/jquery.dataTables.min.css @@ -0,0 +1 @@ +table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;*cursor:hand;background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url("../images/sort_both.png")}table.dataTable thead .sorting_asc{background-image:url("../images/sort_asc.png")}table.dataTable thead .sorting_desc{background-image:url("../images/sort_desc.png")}table.dataTable thead .sorting_asc_disabled{background-image:url("../images/sort_asc_disabled.png")}table.dataTable thead .sorting_desc_disabled{background-image:url("../images/sort_desc_disabled.png")}table.dataTable tbody tr{background-color:#ffffff}table.dataTable tbody tr.selected{background-color:#B0BED9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#acbad4}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f6f6f6}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#aab7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad5}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:whitesmoke}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px 4px 4px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,.dataTables_wrapper.no-footer div.dataTables_scrollBody>table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:0.5em}} diff --git a/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/responsive.dataTables.css b/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/responsive.dataTables.css new file mode 100644 index 00000000..d9f36e94 --- /dev/null +++ b/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/responsive.dataTables.css @@ -0,0 +1,182 @@ +/*! Responsive 2.1.1 + * 2014-2016 SpryMedia Ltd - datatables.net/license + */ + +table.dataTable.dtr-inline.collapsed > tbody > tr > td.child, +table.dataTable.dtr-inline.collapsed > tbody > tr > th.child, +table.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty { + cursor: default !important; +} +table.dataTable.dtr-inline.collapsed > tbody > tr > td.child:before, +table.dataTable.dtr-inline.collapsed > tbody > tr > th.child:before, +table.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before { + display: none !important; +} +table.dataTable.dtr-inline.collapsed > tbody > tr > td:first-child, +table.dataTable.dtr-inline.collapsed > tbody > tr > th:first-child { + position: relative; + padding-left: 30px; + cursor: pointer; +} +table.dataTable.dtr-inline.collapsed > tbody > tr > td:first-child:before, +table.dataTable.dtr-inline.collapsed > tbody > tr > th:first-child:before { + top: 9px; + left: 4px; + height: 14px; + width: 14px; + display: block; + position: absolute; + color: white; + border: 2px solid white; + border-radius: 14px; + box-shadow: 0 0 3px #444; + box-sizing: content-box; + text-align: center; + font-family: 'Courier New', Courier, monospace; + line-height: 14px; + content: '+'; + background-color: #31b131; +} +table.dataTable.dtr-inline.collapsed > tbody > tr.parent > td:first-child:before, +table.dataTable.dtr-inline.collapsed > tbody > tr.parent > th:first-child:before { + content: '-'; + background-color: #d33333; +} +table.dataTable.dtr-inline.collapsed > tbody > tr.child td:before { + display: none; +} +table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td:first-child, +table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th:first-child { + padding-left: 27px; +} +table.dataTable.dtr-inline.collapsed.compact > tbody > tr > td:first-child:before, +table.dataTable.dtr-inline.collapsed.compact > tbody > tr > th:first-child:before { + top: 5px; + left: 4px; + height: 14px; + width: 14px; + border-radius: 14px; + line-height: 14px; + text-indent: 3px; +} +table.dataTable.dtr-column > tbody > tr > td.control, +table.dataTable.dtr-column > tbody > tr > th.control { + position: relative; + cursor: pointer; +} +table.dataTable.dtr-column > tbody > tr > td.control:before, +table.dataTable.dtr-column > tbody > tr > th.control:before { + top: 50%; + left: 50%; + height: 16px; + width: 16px; + margin-top: -10px; + margin-left: -10px; + display: block; + position: absolute; + color: white; + border: 2px solid white; + border-radius: 14px; + box-shadow: 0 0 3px #444; + box-sizing: content-box; + text-align: center; + font-family: 'Courier New', Courier, monospace; + line-height: 14px; + content: '+'; + background-color: #31b131; +} +table.dataTable.dtr-column > tbody > tr.parent td.control:before, +table.dataTable.dtr-column > tbody > tr.parent th.control:before { + content: '-'; + background-color: #d33333; +} +table.dataTable > tbody > tr.child { + padding: 0.5em 1em; +} +table.dataTable > tbody > tr.child:hover { + background: transparent !important; +} +table.dataTable > tbody > tr.child ul.dtr-details { + display: inline-block; + list-style-type: none; + margin: 0; + padding: 0; +} +table.dataTable > tbody > tr.child ul.dtr-details li { + border-bottom: 1px solid #efefef; + padding: 0.5em 0; +} +table.dataTable > tbody > tr.child ul.dtr-details li:first-child { + padding-top: 0; +} +table.dataTable > tbody > tr.child ul.dtr-details li:last-child { + border-bottom: none; +} +table.dataTable > tbody > tr.child span.dtr-title { + display: inline-block; + min-width: 75px; + font-weight: bold; +} + +div.dtr-modal { + position: fixed; + box-sizing: border-box; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: 100; + padding: 10em 1em; +} +div.dtr-modal div.dtr-modal-display { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + width: 50%; + height: 50%; + overflow: auto; + margin: auto; + z-index: 102; + overflow: auto; + background-color: #f5f5f7; + border: 1px solid black; + border-radius: 0.5em; + box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6); +} +div.dtr-modal div.dtr-modal-content { + position: relative; + padding: 1em; +} +div.dtr-modal div.dtr-modal-close { + position: absolute; + top: 6px; + right: 6px; + width: 22px; + height: 22px; + border: 1px solid #eaeaea; + background-color: #f9f9f9; + text-align: center; + border-radius: 3px; + cursor: pointer; + z-index: 12; +} +div.dtr-modal div.dtr-modal-close:hover { + background-color: #eaeaea; +} +div.dtr-modal div.dtr-modal-background { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 101; + background: rgba(0, 0, 0, 0.6); +} + +@media screen and (max-width: 767px) { + div.dtr-modal div.dtr-modal-display { + width: 95%; + } +} diff --git a/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/responsive.dataTables.min.css b/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/responsive.dataTables.min.css new file mode 100644 index 00000000..db2f7d9c --- /dev/null +++ b/wp/wp-content/plugins/ip-geo-block/admin/datatables/css/responsive.dataTables.min.css @@ -0,0 +1 @@ +table.dataTable.dtr-inline.collapsed>tbody>tr>td.child,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty{cursor:default !important}table.dataTable.dtr-inline.collapsed>tbody>tr>td.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty:before{display:none !important}table.dataTable.dtr-inline.collapsed>tbody>tr>td:first-child,table.dataTable.dtr-inline.collapsed>tbody>tr>th:first-child{position:relative;padding-left:30px;cursor:pointer}table.dataTable.dtr-inline.collapsed>tbody>tr>td:first-child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th:first-child:before{top:9px;left:4px;height:14px;width:14px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#31b131}table.dataTable.dtr-inline.collapsed>tbody>tr.parent>td:first-child:before,table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th:first-child:before{content:'-';background-color:#d33333}table.dataTable.dtr-inline.collapsed>tbody>tr.child td:before{display:none}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td:first-child,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th:first-child{padding-left:27px}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td:first-child:before,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th:first-child:before{top:5px;left:4px;height:14px;width:14px;border-radius:14px;line-height:14px;text-indent:3px}table.dataTable.dtr-column>tbody>tr>td.control,table.dataTable.dtr-column>tbody>tr>th.control{position:relative;cursor:pointer}table.dataTable.dtr-column>tbody>tr>td.control:before,table.dataTable.dtr-column>tbody>tr>th.control:before{top:50%;left:50%;height:16px;width:16px;margin-top:-10px;margin-left:-10px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#31b131}table.dataTable.dtr-column>tbody>tr.parent td.control:before,table.dataTable.dtr-column>tbody>tr.parent th.control:before{content:'-';background-color:#d33333}table.dataTable>tbody>tr.child{padding:0.5em 1em}table.dataTable>tbody>tr.child:hover{background:transparent !important}table.dataTable>tbody>tr.child ul.dtr-details{display:inline-block;list-style-type:none;margin:0;padding:0}table.dataTable>tbody>tr.child ul.dtr-details li{border-bottom:1px solid #efefef;padding:0.5em 0}table.dataTable>tbody>tr.child ul.dtr-details li:first-child{padding-top:0}table.dataTable>tbody>tr.child ul.dtr-details li:last-child{border-bottom:none}table.dataTable>tbody>tr.child span.dtr-title{display:inline-block;min-width:75px;font-weight:bold}div.dtr-modal{position:fixed;box-sizing:border-box;top:0;left:0;height:100%;width:100%;z-index:100;padding:10em 1em}div.dtr-modal div.dtr-modal-display{position:absolute;top:0;left:0;bottom:0;right:0;width:50%;height:50%;overflow:auto;margin:auto;z-index:102;overflow:auto;background-color:#f5f5f7;border:1px solid black;border-radius:0.5em;box-shadow:0 12px 30px rgba(0,0,0,0.6)}div.dtr-modal div.dtr-modal-content{position:relative;padding:1em}div.dtr-modal div.dtr-modal-close{position:absolute;top:6px;right:6px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:12}div.dtr-modal div.dtr-modal-close:hover{background-color:#eaeaea}div.dtr-modal div.dtr-modal-background{position:fixed;top:0;left:0;right:0;bottom:0;z-index:101;background:rgba(0,0,0,0.6)}@media screen and (max-width: 767px){div.dtr-modal div.dtr-modal-display{width:95%}} diff --git a/wp/wp-content/plugins/ip-geo-block/admin/datatables/images/Sorting icons.psd b/wp/wp-content/plugins/ip-geo-block/admin/datatables/images/Sorting icons.psd new file mode 100644 index 0000000000000000000000000000000000000000..53b2e06850767cb57c52b316f0b845b1a8e0ca0e GIT binary patch literal 27490 zcmeG^33yY*)^oGAX}T}$5K3uTx@2jaq_m}N($WHj(w42FkS4cnARAd|!3_{mfhUTH zY|1K#_&`w>abZmhao`qBLJ(pzsNq?Pf|62BSCWcgaLqBHCE&EOUv}>Xi$*(!wu`FiTD>VJ z{+AE7#EbO0ocN&`rQ%YHimuZaPq5Mz69!ajCydc5b@9D(1=$T*4MvNRwrfNUMuW+g z)sPdf(V461EPydOEnY-e>|=7`WvP->Ns2@wjn5T`M51h~t|qHoUF4F4R8D-I-EPTB zORKN1Ppy}wnys~I5~Wg^CYGj2r76IXVjFL=YZ_8awl0hkw;nZZ(^~ZwyWVUPVZEAa zv%{VfACEKgTuc#lT2DR}ht)uG(P`6Y18t;Dc3T=0GR>nLWV3bJtQxb`sIlj2EEa=a ztHHUXjWg*|NmWxVb!NNSR%fGR{uJrSU2qsXEr$0{>^FZqQgf#WvYoIcv?v zG$25c#lA%bWR}WGYwTugrP*xA&BtvbDsvZ9q^gjLhU!f^bGI#2 zx!pT4Hfx|&50)W)DOZx6b{o#C;)FJ=oVJ+_4&3*0B$)~ zF$4*~fLF+prOM1?nOKr6lPDl4lQX0cWKzI^9=R9-@XB#I1LzQB=`v}rf^>;GQ!SAw z)Y8n1LTRB?kzbUNAum)aRbsg$-)&)^lDUfgmyJ<$gZ?glfGM~80mf#P=^JRnFtr}~ zi4C`{M46p-M}n7;o9V;vCg??IDX20V%+?Bc+R@nYh%PTwOKu;F$ubq0>B;G0Wu}JT!^AScXGj>H^kgh0Co!}rv=(3>228plLrh|5O@N^-A%@nM%fL5q4Ezu) zajXDNh;d#r@Dv>5Tx8%uI0jjWi7fa}x+EQ_IEK@OP-$z z*2q+*H+%AKvYtw%9JQGGgG9g;Kq04yQ7|By$z-Xl#URGqDo{%8e~E?WP!UC(Ew}Fc$bb}2q$QFIthf3 zj$(9lAZdI~lu3tr(ha0sZ9M6Yqz;!zI+(-|xwHsK8cv;Jo+Rc}slamzl|>{k6P{v} zR#O8M1H?R+6oXkZZ@vd3C910+cJpKqOiD9`=)4AL1T}_w-RWYV#pF9toX&rThVv#S zL(qzBl49YU5Mu`d60DejTnb-|eQ^zNt?&umFv1f=FxX~*W92cy)f%{M5o&Iowm8YU z0uh#S$zYtxVKBfApYaW<*4XF)8Y5jOPZp!{+B!EKr+GFw4olmH82Z~FMfv2z zB{V=sLEw`_iP}pyzt(DYSbR`CvsDjgk7<*`2r|OL3alN@2?7q%p&EzX+=n*NRyc~P z0|crZZ=qex0)`o5Fr~y;D}vjDu0I>j54#NSGA?c!Ured3*4;P^4^LyTS88f~xWcqF z$k7e<5?gU)Y5!_Cvx}L7+-M)>;5xH)LcT#?>$X%lQ~6>y8YKBTx<=zL*Z~Y4M_cW8 zU?1W}`?7~r*OK!|UdD}N^cVE;5I_VCFq^QggY9O^K!@E%yB!151O{-V+pxlFvmG4j zHhc&)aa{{`(p$P=T}TLl>V1*GOuq^z=wcuh_t%@uEa)3Xlii9>MGYHXCF1Xco*E4O z4*XoBwOL9lig4dRaAHb?k4`a~NDNlKa+K*AU#1k7i9}ws`vD`h7AqK;Dg$Pj4i2FM zJOyAwz1@QGxYRM#V=&CZJub!y1q8S?hHDu(neZ@h9)@*B6Zkg^m)W8->M*<$;Ah7< zu-~)$13Yz{o~{S@Fu(~0hfxnO9v@?jvNSje{dzx|0lFc~tQW#s|S;T&!8CN|Ip^Z-?)cTudT*6|6 z!lxj#VZT>>;;_GXeUU&uJ^8qT-sE%e&`ZO=DCVUBgN$DT z5WV~siW!-TBKF51_Ro6|CprYNN4y3U%F}NBgNGp8^M-ah!}vYGKqs+J#F`07mQ7Ed z3P@F6DbhNu;}{kWzH#Ac9*$yA8`KeXLETUak|H_kh4N4#>Wc=#jB7Z01m;+E$OzBY zdh{5Ygr=hD=mqpLnvWKtPbl{1(iz`QvIoNYB)8Ds-;YngL;g5ikeQ%qUKXes8!TE)ce#nYBzO| z`kFdHouhuEZm`%aAuEQ}ftAQgV<}kqtbVLY*2An?)>zgA))dzBthubEthZPjSld`% zu#T`ASwFEZvk^Ol9mnp>PGKw9D)vBj6}yIQWk125#-77o%3j0X%-+TRlHJHY&%Vy# zaiTdQP70?NrL)6<_+hK<~_=r!F!drmbaC6kavoAna}69;rHa{ z@CWiWd^>+Ce;)rW{ucfr{%QWTppc+WLDHb2psFBK(Bz;wL2m|q9CRq?Owi5Xh~Tcl zS-}H?b;09m|v zT3B>gYFJ5_F6_y$1z{V)4uxF^4-W4do*({5_=NB|;qQj;4?iCf9FZ8IiqJ$n5wRfR z{fJ``mm{MiC6NOojgd1V-;CTHc{Yk4l^9hRrHh&pwJd5!)TwB8beCvVv^M&w=;hI$ zM4yh~#U#a)#Eg!a9`pB@eK8kfqhixzhr~9-E{OdowlR(!ml#(PXNa2_w=V8z+>KTp zTIIK*TRqomO{+t#uC{L1IwmsSoYFpp- zwYHzMJ>M>-U9Wc9cGKFeYxhliR{I|9%iBNNep&lH?Jsxe*r87cONV(Kc62!3F|K1? z$I%^Ucl@~HxlYlYay#ie&F-|N(~qK9QNG9^nk(8Vy4bmW=i<(e&PzJ)>wGglDSmML zbysvB)BV-%2YRr2Wb~-(v7pEPo~)jkJ@q|b z?RhYn3&+Jx$xD-ur3h2xaze#&YwbBLB!?I9Wk?cv?CfTp)J=5v**V4brh|Va@cqU_e#vhsTOl#(v z%yaSt`6&59`7uR|qD(PE@tKmVEKokF{7`v4D>KWUwJz(IUMaoC^m?<`+3cijI(vEc zshs#6P0o^>##~YEsNBW5jlDbf*7RQ5`($31JYC+3yfgXT^GD~um4Bf?TwpC&UvO2G zrFvYoRn1oSQBPCvD~u`}TsXh*`=a=w+M?A(7yD%Nd9=^gVs3H2;unjLm2@c4maHnd z*jL{7@xD9z3Hw#_o8Rwb{~rCV{Wq7gO8b_+RC;_s*8!#h8wa9+B?Dg?_+432+1RoV z2Jr@!4O%ehhjK~zW97RlqANyLyjgLjvY>Ki<+p>o4R#FPJ|uj|h#{+nTpg+&I%{a- zu(V;15Bp+x+u{1*o2vL#L#kF(U4E$Wp_d;zJtAYo)DcG?PI|cE;oXn4eZ=s{M&sbAKm^~=f@^JcH;5;$Co@oJyHF{_9weMIpxXI6Z=ejW0GLfm`Qsl zizm;T{QFZwpV~a7!<30rPCeb{>D5!irdp>Sd#2Yji=O2?tABRibF$~=J$GxGZrbP5 z#nb0ZZzc}?@{<{w#5uwd=N_6wg|c=c7?tA}38 zdu`344vVHQy0KWl_^Ty-mTXv>xOC1k-m-Daepo(a`L5R$udiCscE$7+f2=gEY<#2q zjh(CHt5&_){>_=IS*snZ&%HI`tpk5o|9#V%lr>A%#;u+HHhSCf_K)w3dgti6e(Scs zt9WOyMABhz76~3`!^j>9@u;^`{2iidLP>MrTWWH50@PN z;>ds_2agUu`qi-!#~Q!VeRcM0!`HulGwz$4-%dQvJwENbi0|fn-~Rih|LFdYwT+pL zADvL2*mJVtBn>iliSr8bvV{+|B(_RD3LzrSLz3LFJ6o2mN4AYC^l4%!{zaVf(0Q|OCqdn zvE9T7L~$rKi^Jmbc|lyZPzJyH2TPGh> z@w?8dxOn1Mtt}&N>AI&9)h|`*3b!w_XSO;t_$2+?yHj?2={R+%C~5Zcr{8;d=iz_; z{`&e)j-0+cq-NaIIV(1Ndh~}Y@;*ar>z{dL<;Gpd&RmT|EEbfOL(0VGaWhB}I!mHB zP=c}X(Ol`I7h`Y%Z;t1XrYhP2s ztdj1|1D6NKJ>K#7qGh{!p0>}bxLn@vbmgoH=hwssJA=<4SkZwt!L1RF@{taiQ8g^^ zh+yJd2e2K2jX)OQi2f4}5mKQFnA&2eCOO0dh^W-kQq%*0AjGGl$hs0VG~nC9ycn}0 zR86(>z@w>dE*@}tN&@fN2(^b`rKAMLJ?Z&p^kjtz%Pxm-012ADK?qh0UH5x@kqqI_ zjAe->SrWNO?D|d^s6gz+RCC!Dvpo8v7qgpT%m^2cf+;WDDOd&Yst47vxgJ!acRg5? zTL+cOYSvAZK?FUU*n!-!<-!+ZQqU-)8Nb`R^1>)sdw~Gzyf04*13GUCz=Vj`Eis$2{(pe4OO#ZG{aQtsSpL<1{L@+f}|gm=A3Ya%k{~hDTdeU=X?Y z6Ub=R$7=FPm+O4#l~$9@z1SV1(dkNEpK)~K1bEHAoYpzCw7VRUcrDCYiAxTvQg*A^ z;8Uo`=8CzuP zHNYC5&Rtuf$y}-8)ts3J{n(R_|@1^|*%0cEDOK|y6iV-$h;NINZIj)^R z>;Qb&&%qy1^i+UIF2#Z<$Y@K4-2%iRxMc))&8RWyOUjGNA$1<(^G#|zUhIL;oP+mX zBg!wTaJL*$QDiMK-Er^FEkzs?xX8X={*S8?uox(D_dnkqL$?%eP*h~|*&2krt?r#j zOa^+9)txu4vRiw9mB+h)3)ib0{2Ra^EQK#(gXIKlZ>+Jx&IuVGyz1;4OHue)7zPeI zZxUW6!lP+4o}|Hj072p1eGKCoPb@xO}Z42v7m+^=r`>R0}K6X5@f9e;wf&uh#(`TaAm;T0=FiF9#P3r}d^9{1!{B ziqm6EW8B?_$-`!;@unNJ2E2RhW3QS9s|9e_MlCPA3y$9s@HTIl%QAflQ#`Q@ykSBr z9_Q?38L%w5?%Og#wYlCTqD^?*$JNF9T-L$w9zvuBo796%MC9KP8hA-E0Myb#d@T1M zEtDs9I)B@La_OKQW1AEK>QKpX=O%)i%s-SL|MQ79DhlmUUi#Rl<;h_aP zx97r~Mu$O!s4X5GGYslJsCegLSRi7KabUa(u>JX#DAg}Z*|Y? zVD0*Teixkg^MhgVe?=Q=Afvt0S;ad+pdAQRVW3G2?Y#qlIe3s0H#sl0!vLD|DR zqISayHM#Ko5I<~N*zDR2-`^cLUb^PWc!->AWwHKYd0TAcPzPY=)!HkCK$=U231X{2~oTgP@Nq&5v<}={o$mV#5d6m7{_io(VQCqambK- Y16@Zf7?Q8!JB-NJ(KYBs*Ff|C0Zg4MIsgCw literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/ip-geo-block/admin/datatables/images/favicon.ico b/wp/wp-content/plugins/ip-geo-block/admin/datatables/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6eeaa2a0d393190ce748107222d9a026f992e4a7 GIT binary patch literal 894 zcmZQzU<5(|0R|u`!H~hsz#zuJz@P!dKp_SNAO?xUfG{@$0|>*weY}F;x;`B~@Mg`jC-vo5%k$%{OoKy1zkdA+(K2o3 zEDKGQQ~gcX+N!TtEj1|9e2tL(rheJva*5dKY#gZsIRxM zB;!h75Wi?9l5?>z>S-`t`=OAFp5C?(007k>qM(bnVuyja#;c*qL9N z(Q%=@`f7d2?T&^wySIHjy#MKh?rZrO7i!Bt-@f(!@WDrwB`uD&)%Eqcd3o(gVV7ri zp6ji@(BF7(+uE0x&)(R!?s#YIg_7JW1=-KHZv1@s(DSxD9<^am-%+f#!uU}z9=j>5*%b{WE2`20#tutPWS1# zz4s39d~xOMwaqJzOl{rMU%#oo=xj&xyY1WF&71o?Hs-LOkAD^4SRbV?yXz(e#efNwKXpT1J^s+yE;1`KXoe5&f?1A$tYso}un=1c3AzCL>B&D=RpqN3i1hL&lnclP!D`u*G0#bsJv!oAH) z-rc|T`^Wdkrw?7(xb)_p%`Y#WdAn`Pvz+W#0Rbo6-Ha3zp1gPgjDkZ)k6Gz!@9D0( zG^hL4?)Be4zWep#`{$>RUhUoaq@wgyfd9*oU{6tz+SXQhl3284sj;T&{L=I*bGxt4 z@4vfX%A<*$FN^a&MMa!gnPb zQo)$K!&zxT#Nl4)@@eaKRKFIxD0MA=SMcSM^3P$9Oy*ctFW>q)FZA%;zI(f$pBG-3 zcra-}mPXX3M|zCB?fv&MbDT3)>ro_ literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/ip-geo-block/admin/datatables/images/sort_both.png b/wp/wp-content/plugins/ip-geo-block/admin/datatables/images/sort_both.png new file mode 100644 index 0000000000000000000000000000000000000000..c4fbedfe341e57233f21936454bb4465217f6167 GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRx!3HE}ruUu)Qs$m6jv*C{$vcXl^SRDQWBb$o zkkRmgz16bSjQDs1IQRZncrTx`1JHH`Pgg&ebxsLQ05eBP761SM literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/ip-geo-block/admin/datatables/images/sort_desc_disabled.png b/wp/wp-content/plugins/ip-geo-block/admin/datatables/images/sort_desc_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..498436626ea8e73fa160d8ffd341307486b78840 GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRx!3HE}ruUu)Qo5cljv*C{$vcXl^SRD=#nvNb zkaeKmX~r}*0kf7D1_zeTT*qdxAbZ(r#xMRJ3?ZK_j;`e2{tKv)!PC{xWt~$(697L- BAHx6u literal 0 HcmV?d00001 diff --git a/wp/wp-content/plugins/ip-geo-block/admin/datatables/js/LICENSE b/wp/wp-content/plugins/ip-geo-block/admin/datatables/js/LICENSE new file mode 100644 index 00000000..605df390 --- /dev/null +++ b/wp/wp-content/plugins/ip-geo-block/admin/datatables/js/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016–2017 Julian Motz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/wp/wp-content/plugins/ip-geo-block/admin/datatables/js/dataTables.responsive.js b/wp/wp-content/plugins/ip-geo-block/admin/datatables/js/dataTables.responsive.js new file mode 100644 index 00000000..4abce0bd --- /dev/null +++ b/wp/wp-content/plugins/ip-geo-block/admin/datatables/js/dataTables.responsive.js @@ -0,0 +1,1255 @@ +/*! Responsive 2.1.1 + * 2014-2016 SpryMedia Ltd - datatables.net/license + */ + +/** + * @summary Responsive + * @description Responsive tables plug-in for DataTables + * @version 2.1.1 + * @file dataTables.responsive.js + * @author SpryMedia Ltd (www.sprymedia.co.uk) + * @contact www.sprymedia.co.uk/contact + * @copyright Copyright 2014-2016 SpryMedia Ltd. + * + * This source file is free software, available under the following license: + * MIT license - https://datatables.net/license/mit + * + * This source file is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. + * + * For details please refer to: https://www.datatables.net + */ +(function( factory ){ + if ( typeof define === 'function' && define.amd ) { + // AMD + define( ['jquery', 'datatables.net'], function ( $ ) { + return factory( $, window, document ); + } ); + } + else if ( typeof exports === 'object' ) { + // CommonJS + module.exports = function (root, $) { + if ( ! root ) { + root = window; + } + + if ( ! $ || ! $.fn.dataTable ) { + $ = require('datatables.net')(root, $).$; + } + + return factory( $, root, root.document ); + }; + } + else { + // Browser + factory( jQuery, window, document ); + } +}(function( $, window, document, undefined ) { +'use strict'; +var DataTable = $.fn.dataTable; + + +/** + * Responsive is a plug-in for the DataTables library that makes use of + * DataTables' ability to change the visibility of columns, changing the + * visibility of columns so the displayed columns fit into the table container. + * The end result is that complex tables will be dynamically adjusted to fit + * into the viewport, be it on a desktop, tablet or mobile browser. + * + * Responsive for DataTables has two modes of operation, which can used + * individually or combined: + * + * * Class name based control - columns assigned class names that match the + * breakpoint logic can be shown / hidden as required for each breakpoint. + * * Automatic control - columns are automatically hidden when there is no + * room left to display them. Columns removed from the right. + * + * In additional to column visibility control, Responsive also has built into + * options to use DataTables' child row display to show / hide the information + * from the table that has been hidden. There are also two modes of operation + * for this child row display: + * + * * Inline - when the control element that the user can use to show / hide + * child rows is displayed inside the first column of the table. + * * Column - where a whole column is dedicated to be the show / hide control. + * + * Initialisation of Responsive is performed by: + * + * * Adding the class `responsive` or `dt-responsive` to the table. In this case + * Responsive will automatically be initialised with the default configuration + * options when the DataTable is created. + * * Using the `responsive` option in the DataTables configuration options. This + * can also be used to specify the configuration options, or simply set to + * `true` to use the defaults. + * + * @class + * @param {object} settings DataTables settings object for the host table + * @param {object} [opts] Configuration options + * @requires jQuery 1.7+ + * @requires DataTables 1.10.3+ + * + * @example + * $('#example').DataTable( { + * responsive: true + * } ); + * } ); + */ +var Responsive = function ( settings, opts ) { + // Sanity check that we are using DataTables 1.10 or newer + if ( ! DataTable.versionCheck || ! DataTable.versionCheck( '1.10.3' ) ) { + throw 'DataTables Responsive requires DataTables 1.10.3 or newer'; + } + + this.s = { + dt: new DataTable.Api( settings ), + columns: [], + current: [] + }; + + // Check if responsive has already been initialised on this table + if ( this.s.dt.settings()[0].responsive ) { + return; + } + + // details is an object, but for simplicity the user can give it as a string + // or a boolean + if ( opts && typeof opts.details === 'string' ) { + opts.details = { type: opts.details }; + } + else if ( opts && opts.details === false ) { + opts.details = { type: false }; + } + else if ( opts && opts.details === true ) { + opts.details = { type: 'inline' }; + } + + this.c = $.extend( true, {}, Responsive.defaults, DataTable.defaults.responsive, opts ); + settings.responsive = this; + this._constructor(); +}; + +$.extend( Responsive.prototype, { + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Constructor + */ + + /** + * Initialise the Responsive instance + * + * @private + */ + _constructor: function () + { + var that = this; + var dt = this.s.dt; + var dtPrivateSettings = dt.settings()[0]; + var oldWindowWidth = $(window).width(); + + dt.settings()[0]._responsive = this; + + // Use DataTables' throttle function to avoid processor thrashing on + // resize + $(window).on( 'resize.dtr orientationchange.dtr', DataTable.util.throttle( function () { + // iOS has a bug whereby resize can fire when only scrolling + // See: https://stackoverflow.com/questions/8898412 + var width = $(window).width(); + + if ( width !== oldWindowWidth ) { + that._resize(); + oldWindowWidth = width; + } + } ) ); + + // DataTables doesn't currently trigger an event when a row is added, so + // we need to hook into its private API to enforce the hidden rows when + // new data is added + dtPrivateSettings.oApi._fnCallbackReg( dtPrivateSettings, 'aoRowCreatedCallback', function (tr, data, idx) { + if ( $.inArray( false, that.s.current ) !== -1 ) { + $('>td, >th', tr).each( function ( i ) { + var idx = dt.column.index( 'toData', i ); + + if ( that.s.current[idx] === false ) { + $(this).css('display', 'none'); + } + } ); + } + } ); + + // Destroy event handler + dt.on( 'destroy.dtr', function () { + dt.off( '.dtr' ); + $( dt.table().body() ).off( '.dtr' ); + $(window).off( 'resize.dtr orientationchange.dtr' ); + + // Restore the columns that we've hidden + $.each( that.s.current, function ( i, val ) { + if ( val === false ) { + that._setColumnVis( i, true ); + } + } ); + } ); + + // Reorder the breakpoints array here in case they have been added out + // of order + this.c.breakpoints.sort( function (a, b) { + return a.width < b.width ? 1 : + a.width > b.width ? -1 : 0; + } ); + + this._classLogic(); + this._resizeAuto(); + + // Details handler + var details = this.c.details; + + if ( details.type !== false ) { + that._detailsInit(); + + // DataTables will trigger this event on every column it shows and + // hides individually + dt.on( 'column-visibility.dtr', function (e, ctx, col, vis) { + that._classLogic(); + that._resizeAuto(); + that._resize(); + } ); + + // Redraw the details box on each draw which will happen if the data + // has changed. This is used until DataTables implements a native + // `updated` event for rows + dt.on( 'draw.dtr', function () { + that._redrawChildren(); + } ); + + $(dt.table().node()).addClass( 'dtr-'+details.type ); + } + + dt.on( 'column-reorder.dtr', function (e, settings, details) { + that._classLogic(); + that._resizeAuto(); + that._resize(); + } ); + + // Change in column sizes means we need to calc + dt.on( 'column-sizing.dtr', function () { + that._resizeAuto(); + that._resize(); + }); + + // On Ajax reload we want to reopen any child rows which are displayed + // by responsive + dt.on( 'preXhr.dtr', function () { + var rowIds = []; + dt.rows().every( function () { + if ( this.child.isShown() ) { + rowIds.push( this.id(true) ); + } + } ); + + dt.one( 'draw.dtr', function () { + dt.rows( rowIds ).every( function () { + that._detailsDisplay( this, false ); + } ); + } ); + }); + + dt.on( 'init.dtr', function (e, settings, details) { + that._resizeAuto(); + that._resize(); + + // If columns were hidden, then DataTables needs to adjust the + // column sizing + if ( $.inArray( false, that.s.current ) ) { + dt.columns.adjust(); + } + } ); + + // First pass - draw the table for the current viewport size + this._resize(); + }, + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Private methods + */ + + /** + * Calculate the visibility for the columns in a table for a given + * breakpoint. The result is pre-determined based on the class logic if + * class names are used to control all columns, but the width of the table + * is also used if there are columns which are to be automatically shown + * and hidden. + * + * @param {string} breakpoint Breakpoint name to use for the calculation + * @return {array} Array of boolean values initiating the visibility of each + * column. + * @private + */ + _columnsVisiblity: function ( breakpoint ) + { + var dt = this.s.dt; + var columns = this.s.columns; + var i, ien; + + // Create an array that defines the column ordering based first on the + // column's priority, and secondly the column index. This allows the + // columns to be removed from the right if the priority matches + var order = columns + .map( function ( col, idx ) { + return { + columnIdx: idx, + priority: col.priority + }; + } ) + .sort( function ( a, b ) { + if ( a.priority !== b.priority ) { + return a.priority - b.priority; + } + return a.columnIdx - b.columnIdx; + } ); + + // Class logic - determine which columns are in this breakpoint based + // on the classes. If no class control (i.e. `auto`) then `-` is used + // to indicate this to the rest of the function + var display = $.map( columns, function ( col ) { + return col.auto && col.minWidth === null ? + false : + col.auto === true ? + '-' : + $.inArray( breakpoint, col.includeIn ) !== -1; + } ); + + // Auto column control - first pass: how much width is taken by the + // ones that must be included from the non-auto columns + var requiredWidth = 0; + for ( i=0, ien=display.length ; i