diff --git a/admin/admin-ajax.php b/admin/admin-ajax.php index 103cf1c..88de236 100644 --- a/admin/admin-ajax.php +++ b/admin/admin-ajax.php @@ -18,13 +18,13 @@ switch( $action ) { case 'add': yourls_verify_nonce( 'add_url', $_REQUEST['nonce'], false, 'omg error' ); - $return = yourls_add_new_link( $_REQUEST['url'], $_REQUEST['keyword'] ); + $return = yourls_add_new_link( $_REQUEST['url'], $_REQUEST['keyword'], '', $_REQUEST['rowid'] ); echo json_encode($return); break; case 'edit_display': yourls_verify_nonce( 'edit-link_'.$_REQUEST['id'], $_REQUEST['nonce'], false, 'omg error' ); - $row = yourls_table_edit_row ( $_REQUEST['keyword'] ); + $row = yourls_table_edit_row ( $_REQUEST['keyword'], $_REQUEST['id'] ); echo json_encode( array('html' => $row) ); break; diff --git a/admin/index.php b/admin/index.php index 9a6d688..d1919ad 100644 --- a/admin/index.php +++ b/admin/index.php @@ -110,10 +110,10 @@ if ( isset( $_GET['u'] ) or isset( $_GET['up'] ) ) { // No sanitization needed here: everything happens in yourls_add_new_link() if( isset( $_GET['u'] ) ) { // Old school bookmarklet: ?u= - $url = urldecode( $_GET['u'] ); + $url = $_GET['u']; } else { // New style bookmarklet: ?up=&us=&ur= - $url = urldecode( $_GET['up'] . $_GET['us'] . $_GET['ur'] ); + $url = $_GET['up'] . $_GET['us'] . $_GET['ur']; } $keyword = ( isset( $_GET['k'] ) ? ( $_GET['k'] ) : '' ); $title = ( isset( $_GET['t'] ) ? ( $_GET['t'] ) : '' ); @@ -227,7 +227,7 @@ if ( isset( $_GET['u'] ) or isset( $_GET['up'] ) ) { $display_on_page = ( $offset + 1 ); } - // Determing Total Amount Of Pages + // Determine Total Amount Of Pages $total_pages = ceil( $total_items / $perpage ); } @@ -292,7 +292,7 @@ yourls_table_tbody_start(); // Main Query $where = yourls_apply_filter( 'admin_list_where', $where ); -$url_results = yourls_get_db()->fetchObjects( "SELECT * FROM `$table_url` WHERE 1=1 ${where['sql']} ORDER BY `$sort_by` $sort_order LIMIT $offset, $perpage;", $where['binds'] ); +$url_results = yourls_get_db()->fetchObjects( "SELECT * FROM `$table_url` WHERE 1=1 {$where['sql']} ORDER BY `$sort_by` $sort_order LIMIT $offset, $perpage;", $where['binds'] ); $found_rows = false; if( $url_results ) { $found_rows = true; diff --git a/admin/plugins.php b/admin/plugins.php index 2c3ca92..ad81339 100644 --- a/admin/plugins.php +++ b/admin/plugins.php @@ -47,7 +47,7 @@ if( isset( $_GET['action'] ) ) { yourls_add_notice( $result ); } -// Handle message upon succesfull (de)activation +// Handle message upon successful (de)activation if( isset( $_GET['success'] ) && ( ( $_GET['success'] == 'activated' ) OR ( $_GET['success'] == 'deactivated' ) ) ) { if( $_GET['success'] == 'activated' ) { $message = yourls__( 'Plugin has been activated' ); diff --git a/admin/tools.php b/admin/tools.php index accb8c1..fd1d167 100644 --- a/admin/tools.php +++ b/admin/tools.php @@ -98,7 +98,7 @@ STANDARD_SIMPLE; if (r.short_url) { prompt(r.message, r.short_url); } else { - alert('An error occured: ' + r.message); + alert('An error occurred: ' + r.message); } }; sc.src = '$base_bookmarklet' + p + '&jsonp=yourls'; @@ -166,7 +166,7 @@ CUSTOM_STANDARD; if (r.short_url) { prompt(r.message, r.short_url); } else { - alert('An error occured: ' + r.message); + alert('An error occurred: ' + r.message); } }; sc.src = '$base_bookmarklet' + p + '&k=' + k + '&jsonp=yourls'; @@ -247,7 +247,7 @@ TWITTER; ?> - + diff --git a/frontend/dist/styles.css b/frontend/dist/styles.css index db5d446..ea077b9 100644 --- a/frontend/dist/styles.css +++ b/frontend/dist/styles.css @@ -1,9 +1,10 @@ @charset "UTF-8"; - -@import "https://fonts.googleapis.com/css2?family=Montserrat:wght@700&family=Open+Sans&display=swap";/*!* Bootstrap v5.0.2 (https://getbootstrap.com/) +@import url("https://fonts.bunny.net/css?family=montserrat:700|open-sans"); +/*!* Bootstrap v5.0.2 (https://getbootstrap.com/) * Copyright 2011-2023 The Bootstrap Authors * Copyright 2011-2023 Twitter, Inc. (Fuck Elon) -* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)*/:root { +* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)*/ +:root { --bs-blue: #0d6efd; --bs-indigo: #6610f2; --bs-purple: #6f42c1; diff --git a/images/accept.png b/images/accept.png index 89c8129..a582102 100644 Binary files a/images/accept.png and b/images/accept.png differ diff --git a/images/asc.gif b/images/asc.gif index 3b30b3c..77b7ee4 100644 Binary files a/images/asc.gif and b/images/asc.gif differ diff --git a/images/bg.gif b/images/bg.gif index bf9446b..c781628 100644 Binary files a/images/bg.gif and b/images/bg.gif differ diff --git a/images/bg.svg b/images/bg.svg index c4506bf..5a00ab5 100644 --- a/images/bg.svg +++ b/images/bg.svg @@ -7,6 +7,9 @@ id="svg6" sodipodi:docname="bg.svg" inkscape:version="1.0 (4035a4fb49, 2020-05-01)" + inkscape:export-filename="bg.gif" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" diff --git a/images/cancel.png b/images/cancel.png index c149c2b..e95513d 100644 Binary files a/images/cancel.png and b/images/cancel.png differ diff --git a/images/cancel.svg b/images/cancel.svg index 62201c3..38ec9da 100644 --- a/images/cancel.svg +++ b/images/cancel.svg @@ -5,10 +5,6 @@ width="24" version="1.1" id="svg6" - sodipodi:docname="cancel.svg" - inkscape:version="1.0 (4035a4fb49, 2020-05-01)" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" @@ -27,30 +23,6 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/images/delete.png b/images/delete.png index 08f2493..7c67f4c 100644 Binary files a/images/delete.png and b/images/delete.png differ diff --git a/images/delete.svg b/images/delete.svg index ff43e7f..af977a1 100644 --- a/images/delete.svg +++ b/images/delete.svg @@ -1,14 +1,10 @@ - - image/svg+xml + id="defs41" /> + style="fill:#7289da;fill-opacity:1"> @@ -57,64 +29,19 @@ style="fill:#7289da;fill-opacity:1" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/images/filter.gif b/images/filter.gif index 68fe133..c471c6a 100644 Binary files a/images/filter.gif and b/images/filter.gif differ diff --git a/images/pencil.png b/images/pencil.png index 0bfecd5..b920882 100644 Binary files a/images/pencil.png and b/images/pencil.png differ diff --git a/images/pencil.svg b/images/pencil.svg index 11e0e41..70b122a 100644 --- a/images/pencil.svg +++ b/images/pencil.svg @@ -5,10 +5,6 @@ width="24" version="1.1" id="svg6" - sodipodi:docname="pencil.svg" - inkscape:version="1.0 (4035a4fb49, 2020-05-01)" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" @@ -27,30 +23,6 @@ - +board="1" + inkscape:deskcolor="#d1d1d1" /> +rboard="1" + inkscape:deskcolor="#d1d1d1" /> image/svg+xml + id="defs41" /> + style="fill:#7289da;fill-opacity:1" + transform="translate(4.0003259,-48.401114)"> @@ -74,7 +48,7 @@ diff --git a/images/yourls-logo.png b/images/yourls-logo.png index 91fc150..40dc298 100644 Binary files a/images/yourls-logo.png and b/images/yourls-logo.png differ diff --git a/includes/Config/Init.php b/includes/Config/Init.php index a0c50f2..d9f2012 100644 --- a/includes/Config/Init.php +++ b/includes/Config/Init.php @@ -57,7 +57,7 @@ class Init { $this->include_db_files(); } - // Allow early inclusion of a cache layer + // Allow early and unconditional inclusion of custom code if ($actions->include_cache === true) { $this->include_cache_files(); } @@ -145,22 +145,41 @@ class Init { * @return void */ public function include_db_files() { - // Allow drop-in replacement for the DB engine - if (file_exists(YOURLS_USERDIR.'/db.php')) { - require_once YOURLS_USERDIR.'/db.php'; - } else { - require_once YOURLS_INC.'/class-mysql.php'; + // Attempt to open drop-in replacement for the DB engine else default to core engine + $file = YOURLS_USERDIR . '/db.php'; + $attempt = false; + if(file_exists($file)) { + $attempt = yourls_include_file_sandbox( $file ); + // Check if we have an error to display + if ( is_string( $attempt ) ) { + yourls_add_notice( $attempt ); + } + } + + // Fallback to core DB engine + if ( $attempt !== true ) { + require_once YOURLS_INC . '/class-mysql.php'; yourls_db_connect(); } } /** + * Include custom extension file. + * + * "Cache" stands for "Custom Additional Code for Hazardous Extensions". + * * @since 1.7.3 * @return void */ public function include_cache_files() { - if (file_exists(YOURLS_USERDIR.'/cache.php')) { - require_once YOURLS_USERDIR.'/cache.php'; + $file = YOURLS_USERDIR . '/cache.php'; + $attempt = false; + if(file_exists($file)) { + $attempt = yourls_include_file_sandbox($file); + // Check if we have an error to display + if (is_string($attempt)) { + yourls_add_notice($attempt); + } } } diff --git a/includes/Database/YDB.php b/includes/Database/YDB.php index 091cb8a..f13e145 100644 --- a/includes/Database/YDB.php +++ b/includes/Database/YDB.php @@ -157,16 +157,18 @@ class YDB extends ExtendedPdo { */ public function dead_or_error(\Exception $exception) { // Use any /user/db_error.php file - if( file_exists( YOURLS_USERDIR . '/db_error.php' ) ) { - include_once( YOURLS_USERDIR . '/db_error.php' ); - die(); + $file = YOURLS_USERDIR . '/db_error.php'; + if(file_exists($file)) { + if(yourls_include_file_sandbox( $file ) === true) { + die(); + } } $message = yourls__( 'Incorrect DB config, or could not connect to DB' ); $message .= '
' . get_class($exception) .': ' . $exception->getMessage(); - yourls_die( yourls__( $message ), yourls__( 'Fatal error' ), 503 ); die(); + } /** diff --git a/includes/Views/AdminParams.php b/includes/Views/AdminParams.php index 868d47d..75de39e 100644 --- a/includes/Views/AdminParams.php +++ b/includes/Views/AdminParams.php @@ -222,7 +222,7 @@ class AdminParams public function get_click_limit() { // @hook Default link click threshold (unset) - return (isset($_GET['click_limit']) && intval($_GET['click_limit'])) ? + return (isset($_GET['click_limit']) && intval($_GET['click_limit']) >= 0) ? intval($_GET['click_limit']) : yourls_apply_filter('admin_view_click_limit', ''); } diff --git a/includes/auth.php b/includes/auth.php index d6b95a8..58e15c9 100644 --- a/includes/auth.php +++ b/includes/auth.php @@ -44,7 +44,7 @@ if ( isset( $_GET['dismiss'] ) && $_GET['dismiss'] == 'hasherror' ) { if ( yourls_maybe_hash_passwords() ) { $hash = yourls_hash_passwords_now( YOURLS_CONFIGFILE ); if ( $hash === true ) { - // Hashing succesful. Remove flag from DB if any. + // Hashing successful. Remove flag from DB if any. if( yourls_get_option( 'defer_hashing_error' ) ) yourls_delete_option( 'defer_hashing_error' ); } else { diff --git a/includes/functions-auth.php b/includes/functions-auth.php index 2fd76d9..f074c21 100644 --- a/includes/functions-auth.php +++ b/includes/functions-auth.php @@ -213,7 +213,7 @@ function yourls_hash_passwords_now( $config_file ) { // PHP would interpret $ as a variable, so replace it in storage. $hash = str_replace( '$', '!', $hash ); $quotes = "'" . '"'; - $pattern = "/[$quotes]${user}[$quotes]\s*=>\s*[$quotes]" . preg_quote( $password, '/' ) . "[$quotes]/"; + $pattern = "/[$quotes]" . preg_quote( $user, '/' ) . "[$quotes]\s*=>\s*[$quotes]" . preg_quote( $password, '/' ) . "[$quotes]/"; $replace = "'$user' => 'phpass:$hash' /* Password encrypted by YOURLS */ "; $count = 0; $configdata = preg_replace( $pattern, $replace, $configdata, -1, $count ); diff --git a/includes/functions-debug.php b/includes/functions-debug.php index 1aeee65..4e5a557 100644 --- a/includes/functions-debug.php +++ b/includes/functions-debug.php @@ -7,7 +7,7 @@ * Add a message to the debug log * * When in debug mode ( YOURLS_DEBUG == true ) the debug log is echoed in yourls_html_footer() - * Log messages are appended to $ydb->debug_log array, which is instanciated within class ezSQLcore_YOURLS + * Log messages are appended to $ydb->debug_log array, which is instanciated within class Database\YDB * * @since 1.7 * @param string $msg Message to add to the debug log @@ -17,7 +17,10 @@ function yourls_debug_log( $msg ) { yourls_do_action( 'debug_log', $msg ); // Get the DB object ($ydb), get its profiler (\Aura\Sql\Profiler\Profiler), its logger (\Aura\Sql\Profiler\MemoryLogger) and // pass it a unused argument (loglevel) and the message - yourls_get_db()->getProfiler()->getLogger()->log( 'debug', $msg); + // Check if function exists to allow usage of the function in very early stages + if(function_exists('yourls_debug_log')) { + yourls_get_db()->getProfiler()->getLogger()->log( 'debug', $msg); + } return $msg; } diff --git a/includes/functions-deprecated.php b/includes/functions-deprecated.php index bbc4f3c..3154c17 100644 --- a/includes/functions-deprecated.php +++ b/includes/functions-deprecated.php @@ -17,6 +17,19 @@ // @codeCoverageIgnoreStart +/** + * Plugin activation sandbox + * + * @since 1.8.3 + * @deprecated 1.9.2 + * @param string $pluginfile Plugin filename (full path) + * @return string|true string if error or true if success + */ +function yourls_activate_plugin_sandbox( $pluginfile ) { + yourls_deprecated_function( __FUNCTION__, '1.9.1', 'yourls_include_file_sandbox'); + return yourls_include_file_sandbox($pluginfile); +} + /** * Return current admin page, or null if not an admin page. Was not used anywhere. * diff --git a/includes/functions-formatting.php b/includes/functions-formatting.php index 83fc396..f7b034f 100644 --- a/includes/functions-formatting.php +++ b/includes/functions-formatting.php @@ -52,12 +52,16 @@ function yourls_string2int($string, $chars = null) { * Return a unique string to be used as a valid HTML id * * @since 1.8.3 - * @param string $prefix Optional prefix - * @return string The unique string + * @param string $prefix Optional prefix + * @param int $initial_val The initial counter value (defaults to one) + * @return string The unique string */ -function yourls_unique_element_id($prefix = 'yid') { - static $id_counter = 0; - return yourls_apply_filter( 'unique_element_id', $prefix . (string)++$id_counter ); +function yourls_unique_element_id($prefix = 'yid', $initial_val = 1) { + static $id_counter = 1; + if ($initial_val > 1) { + $id_counter = (int) $initial_val; + } + return yourls_apply_filter( 'unique_element_id', $prefix . (string) $id_counter++ ); } /** @@ -635,7 +639,7 @@ function yourls_normalize_uri( $url ) { $lower['host'] = mb_strtolower($parts['host']); /** * Convert IDN domains to their UTF8 form so that طارق.net and xn--mgbuq0c.net - * are considered the same. Explicitely mention option and variant to avoid notice + * are considered the same. Explicitly mention option and variant to avoid notice * on PHP 7.2 and 7.3 */ $lower['host'] = idn_to_utf8($lower['host'], IDNA_DEFAULT, INTL_IDNA_VARIANT_UTS46); diff --git a/includes/functions-html.php b/includes/functions-html.php index a619ffd..d633e70 100644 --- a/includes/functions-html.php +++ b/includes/functions-html.php @@ -503,11 +503,11 @@ function yourls_die( $message = '', $title = '', $header_code = 200 ) { * Return an "Edit" row for the main table * * @param string $keyword Keyword to edit + * @param string $id * @return string HTML of the edit row */ -function yourls_table_edit_row( $keyword ) { +function yourls_table_edit_row( $keyword, $id ) { $keyword = yourls_sanitize_keyword($keyword); - $id = yourls_unique_element_id(); $url = yourls_get_keyword_longurl( $keyword ); $title = htmlspecialchars( yourls_get_keyword_title( $keyword ) ); $safe_url = yourls_esc_attr( $url ); @@ -545,11 +545,12 @@ RETURN; * @param string $ip IP * @param string|int $clicks Number of clicks * @param string $timestamp Timestamp + * @param int $row_id Numeric value used to form row IDs, defaults to one * @return string HTML of the row */ -function yourls_table_add_row( $keyword, $url, $title, $ip, $clicks, $timestamp ) { +function yourls_table_add_row( $keyword, $url, $title, $ip, $clicks, $timestamp, $row_id = 1 ) { $keyword = yourls_sanitize_keyword($keyword); - $id = yourls_unique_element_id(); + $id = yourls_unique_element_id('yid', $row_id); $shorturl = yourls_link( $keyword ); $statlink = yourls_statlink( $keyword ); @@ -905,7 +906,10 @@ function yourls_page( $page ) { } yourls_do_action( 'pre_page', $page ); - include_once( YOURLS_PAGEDIR . "/$page.php" ); + $load = yourls_include_file_sandbox(YOURLS_PAGEDIR . "/$page.php"); + if (is_string($load)) { + yourls_die( $load, yourls__('Not found'), 404 ); + } yourls_do_action( 'post_page', $page ); } diff --git a/includes/functions-plugins.php b/includes/functions-plugins.php index dab4f96..5bf3561 100644 --- a/includes/functions-plugins.php +++ b/includes/functions-plugins.php @@ -595,7 +595,7 @@ function yourls_load_plugins() { $plugins = []; foreach ( $active_plugins as $key => $plugin ) { $file = YOURLS_PLUGINDIR . '/' . $plugin; - if ( yourls_is_a_plugin_file($file) && yourls_activate_plugin_sandbox( $file ) === true ) { + if ( yourls_is_a_plugin_file($file) && yourls_include_file_sandbox( $file ) === true ) { $plugins[] = $plugin; unset( $active_plugins[ $key ] ); } @@ -659,7 +659,7 @@ function yourls_activate_plugin( $plugin ) { } // attempt activation. - $attempt = yourls_activate_plugin_sandbox( $plugindir.'/'.$plugin ); + $attempt = yourls_include_file_sandbox( $plugindir.'/'.$plugin ); if( $attempt !== true ) { return yourls_s( 'Plugin generated unexpected output. Error was:
%s
', $attempt ); } @@ -673,22 +673,6 @@ function yourls_activate_plugin( $plugin ) { return true; } -/** - * Plugin activation sandbox - * - * @since 1.8.3 - * @param string $pluginfile Plugin filename (full path) - * @return string|true string if error or true if success - */ -function yourls_activate_plugin_sandbox( $pluginfile ) { - try { - include_once $pluginfile; - return true; - } catch ( \Throwable $e ) { - return $e->getMessage(); - } -} - /** * Deactivate a plugin * @@ -706,12 +690,16 @@ function yourls_deactivate_plugin( $plugin ) { // Check if we have an uninstall file - load if so $uninst_file = YOURLS_PLUGINDIR . '/' . dirname($plugin) . '/uninstall.php'; - if ( file_exists($uninst_file) ) { + $attempt = yourls_include_file_sandbox( $uninst_file ); + + // Check if we have an error to display + if ( is_string( $attempt ) ) { + $message = yourls_s( 'Loading %s generated unexpected output. Error was:
%s
', $uninst_file, $attempt ); + return( $message ); + } + + if ( $attempt === true ) { define('YOURLS_UNINSTALL_PLUGIN', true); - $attempt = yourls_activate_plugin_sandbox( $uninst_file ); - if( $attempt !== true ) { - return yourls_s( 'Plugin generated unexpected output. Error was:
%s
', $attempt ); - } } // Deactivate the plugin diff --git a/includes/functions-shorturls.php b/includes/functions-shorturls.php index 93dffb7..3fa74d9 100644 --- a/includes/functions-shorturls.php +++ b/includes/functions-shorturls.php @@ -26,9 +26,10 @@ * @param string $url URL to shorten * @param string $keyword optional "keyword" * @param string $title option title + * @param int $row_id used to form unique IDs in the generated HTML * @return array array with error/success state and short URL information */ -function yourls_add_new_link( $url, $keyword = '', $title = '' ) { +function yourls_add_new_link( $url, $keyword = '', $title = '', $row_id = 1 ) { // Allow plugins to short-circuit the whole function $pre = yourls_apply_filter( 'shunt_add_new_link', false, $url, $keyword, $title ); if ( false !== $pre ) { @@ -140,7 +141,7 @@ function yourls_add_new_link( $url, $keyword = '', $title = '' ) { $return['status'] = 'success'; $return['message'] = /* //translators: eg "http://someurl/ added to DB" */ yourls_s( '%s added to database', yourls_trim_long_string( $url ) ); $return['title'] = $title; - $return['html'] = yourls_table_add_row( $keyword, $url, $title, $ip, 0, time() ); + $return['html'] = yourls_table_add_row( $keyword, $url, $title, $ip, 0, time(), $row_id ); $return['shorturl'] = yourls_link($keyword); $return['statusCode'] = 200; // 200 OK } else { diff --git a/includes/functions-upgrade.php b/includes/functions-upgrade.php index 4b48145..af8c284 100644 --- a/includes/functions-upgrade.php +++ b/includes/functions-upgrade.php @@ -5,7 +5,7 @@ * * Note to devs : prefer update function names using the SQL version, eg yourls_update_to_506(), * rather than using the YOURLS version number, eg yourls_update_to_18(). This is to allow having - * multiple SQL update during the dev cycle of the same Y0URLS version + * multiple SQL update during the dev cycle of the same YOURLS version * * @param string|int $step * @param string $oldver @@ -406,7 +406,7 @@ function yourls_update_table_to_14() { if( $count != $queries ) { $success = false; $num = $count - $queries; - echo "

$num error(s) occured while updating the URL table :(

"; + echo "

$num error(s) occurred while updating the URL table :(

"; } if ( $count == $chunk ) { diff --git a/includes/functions.php b/includes/functions.php index 2f6725c..138746a 100644 --- a/includes/functions.php +++ b/includes/functions.php @@ -264,8 +264,7 @@ function yourls_redirect( $location, $code = 301 ) { * Redirect to an existing short URL * * Redirect client to an existing short URL (no check performed) and execute misc tasks: update - * clicks for short URL, update logs, and send a nocache header to prevent bots indexing short - * URLS (see #2202) + * clicks for short URL, update logs, and send an X-Robots-Tag header to control indexing of a page. * * @since 1.7.3 * @param string $url @@ -281,16 +280,36 @@ function yourls_redirect_shorturl($url, $keyword) { // Update detailed log for stats yourls_log_redirect( $keyword ); - // Tell (Google)bots not to index this short URL, see #2202 - if ( !headers_sent() ) { - header( "X-Robots-Tag: noindex", true ); - } + // Send an X-Robots-Tag header + yourls_robots_tag_header(); yourls_redirect( $url, 301 ); } /** - * Send headers to explicitely tell browser not to cache content or redirection + * Send an X-Robots-Tag header. See #3486 + * + * @since 1.9.2 + * @return void + */ +function yourls_robots_tag_header() { + // Allow plugins to short-circuit the whole function + $pre = yourls_apply_filter( 'shunt_robots_tag_header', false ); + if ( false !== $pre ) { + return $pre; + } + + // By default, we're sending a 'noindex' header + $tag = yourls_apply_filter( 'robots_tag_header', 'noindex' ); + $replace = yourls_apply_filter( 'robots_tag_header_replace', true ); + if ( !headers_sent() ) { + header( "X-Robots-Tag: $tag", $replace ); + } +} + + +/** + * Send headers to explicitly tell browser not to cache content or redirection * * @since 1.7.10 * @return void @@ -1014,6 +1033,10 @@ function yourls_get_request($yourls_site = '', $uri = '') { /** * Fix $_SERVER['REQUEST_URI'] variable for various setups. Stolen from WP. * + * We also strip $_COOKIE from $_REQUEST to allow our lazy using $_REQUEST without 3rd party cookie interfering. + * See #3383 for explanation. + * + * @since 1.5.1 * @return void */ function yourls_fix_request_uri() { @@ -1024,6 +1047,9 @@ function yourls_fix_request_uri() { ]; $_SERVER = array_merge( $default_server_values, $_SERVER ); + // Make $_REQUEST with only $_GET and $_POST, not $_COOKIE. See #3383. + $_REQUEST = array_merge( $_GET, $_POST ); + // Fix for IIS when running with PHP ISAPI if ( empty( $_SERVER[ 'REQUEST_URI' ] ) || ( php_sapi_name() != 'cgi-fcgi' && preg_match( '/^Microsoft-IIS\//', $_SERVER[ 'SERVER_SOFTWARE' ] ) ) ) { @@ -1065,30 +1091,32 @@ function yourls_fix_request_uri() { * @return void */ function yourls_check_maintenance_mode() { - $file = YOURLS_ABSPATH . '/.maintenance' ; + $dot_file = YOURLS_ABSPATH . '/.maintenance' ; - if ( !file_exists( $file ) || yourls_is_upgrading() || yourls_is_installing() ) { + if ( !file_exists( $dot_file ) || yourls_is_upgrading() || yourls_is_installing() ) { return; } global $maintenance_start; - include_once( $file ); + yourls_include_file_sandbox( $dot_file ); // If the $maintenance_start timestamp is older than 10 minutes, don't die. if ( ( time() - $maintenance_start ) >= 600 ) { return; } // Use any /user/maintenance.php file - if( file_exists( YOURLS_USERDIR.'/maintenance.php' ) ) { - include_once( YOURLS_USERDIR.'/maintenance.php' ); - die(); - } + $file = YOURLS_USERDIR . '/maintenance.php'; + if(file_exists($file)) { + if(yourls_include_file_sandbox( $file ) == true) { + die(); + } + } // Or use the default messages - $title = yourls__( 'Service temporarily unavailable' ); - $message = yourls__( 'Our service is currently undergoing scheduled maintenance.' ) . "

\n

" . - yourls__( 'Things should not last very long, thank you for your patience and please excuse the inconvenience' ); - yourls_die( $message, $title , 503 ); + $title = yourls__('Service temporarily unavailable'); + $message = yourls__('Our service is currently undergoing scheduled maintenance.') . "

\n

" . + yourls__('Things should not last very long, thank you for your patience and please excuse the inconvenience'); + yourls_die( $message, $title, 503 ); } /** @@ -1271,3 +1299,26 @@ function yourls_tell_if_new_version() { yourls_debug_log( 'Check for new version: '.( yourls_maybe_check_core_version() ? 'yes' : 'no' ) ); yourls_new_core_version_notice(YOURLS_VERSION); } + +/** + * File include sandbox + * + * Attempt to include a PHP file, fail with an error message if the file isn't valid PHP code. + * This function does not check first if the file exists : depending on use case, you may check first. + * + * @since 1.9.2 + * @param string $file filename (full path) + * @return string|bool string if error, true if success + */ +function yourls_include_file_sandbox($file) { + try { + if (is_readable( $file )) { + include_once $file; + yourls_debug_log("loaded $file"); + return true; + } + } catch ( \Throwable $e ) { + yourls_debug_log("could not load $file"); + return sprintf("%s (%s : %s)", $e->getMessage() , $e->getFile() , $e->getLine() ); + } +} diff --git a/includes/geo/COPYRIGHT.txt b/includes/geo/COPYRIGHT.txt index 1f9e44a..6a82b38 100644 --- a/includes/geo/COPYRIGHT.txt +++ b/includes/geo/COPYRIGHT.txt @@ -1 +1 @@ -Database and Contents Copyright (c) 2022 MaxMind, Inc. +Database and Contents Copyright (c) 2023 MaxMind, Inc. diff --git a/includes/geo/GeoLite2-Country.mmdb b/includes/geo/GeoLite2-Country.mmdb index 111261e..c818ebc 100644 Binary files a/includes/geo/GeoLite2-Country.mmdb and b/includes/geo/GeoLite2-Country.mmdb differ diff --git a/includes/vendor/autoload.php b/includes/vendor/autoload.php index 5659614..4767bb2 100644 --- a/includes/vendor/autoload.php +++ b/includes/vendor/autoload.php @@ -3,8 +3,21 @@ // autoload.php @generated by Composer if (PHP_VERSION_ID < 50600) { - echo 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL; - exit(1); + if (!headers_sent()) { + header('HTTP/1.1 500 Internal Server Error'); + } + $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL; + if (!ini_get('display_errors')) { + if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { + fwrite(STDERR, $err); + } elseif (!headers_sent()) { + echo $err; + } + } + trigger_error( + $err, + E_USER_ERROR + ); } require_once __DIR__ . '/composer/autoload_real.php'; diff --git a/includes/vendor/composer/InstalledVersions.php b/includes/vendor/composer/InstalledVersions.php index 41bc143..c6b54af 100644 --- a/includes/vendor/composer/InstalledVersions.php +++ b/includes/vendor/composer/InstalledVersions.php @@ -28,7 +28,7 @@ class InstalledVersions { /** * @var mixed[]|null - * @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array}|array{}|null + * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null */ private static $installed; @@ -39,7 +39,7 @@ class InstalledVersions /** * @var array[] - * @psalm-var array}> + * @psalm-var array}> */ private static $installedByVendor = array(); @@ -243,7 +243,7 @@ class InstalledVersions /** * @return array - * @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string} + * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} */ public static function getRootPackage() { @@ -257,7 +257,7 @@ class InstalledVersions * * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. * @return array[] - * @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} + * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} */ public static function getRawData() { @@ -280,7 +280,7 @@ class InstalledVersions * Returns the raw data of all installed.php which are currently loaded for custom implementations * * @return array[] - * @psalm-return list}> + * @psalm-return list}> */ public static function getAllRawData() { @@ -303,7 +303,7 @@ class InstalledVersions * @param array[] $data A vendor/composer/installed.php data set * @return void * - * @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array} $data + * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data */ public static function reload($data) { @@ -313,7 +313,7 @@ class InstalledVersions /** * @return array[] - * @psalm-return list}> + * @psalm-return list}> */ private static function getInstalled() { diff --git a/includes/vendor/composer/ca-bundle/res/cacert.pem b/includes/vendor/composer/ca-bundle/res/cacert.pem index 0bf312f..0c69f9f 100644 --- a/includes/vendor/composer/ca-bundle/res/cacert.pem +++ b/includes/vendor/composer/ca-bundle/res/cacert.pem @@ -1,7 +1,7 @@ ## ## Bundle of CA Root Certificates ## -## Certificate data from Mozilla as of: Tue Oct 26 03:12:05 2021 GMT +## Certificate data from Mozilla as of: Tue Oct 11 03:12:05 2022 GMT ## ## This is a bundle of X.509 certificates of public Certificate Authorities ## (CA). These were automatically extracted from Mozilla's root certificates @@ -13,8 +13,8 @@ ## 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.28. -## SHA256: bb36818a81feaa4cca61101e6d6276cd09e972efcb08112dfed846918ca41d7f +## Conversion done with mk-ca-bundle.pl version 1.29. +## SHA256: 3ff8bd209b5f2e739b9f2b96eacb694a774114685b02978257824f37ff528f71 ## @@ -39,28 +39,6 @@ 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----- - Entrust.net Premium 2048 Secure Server CA ========================================= -----BEGIN CERTIFICATE----- @@ -573,28 +551,6 @@ PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== -----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----- @@ -1037,60 +993,6 @@ 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----- @@ -1737,20 +1639,6 @@ 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----- @@ -2472,96 +2360,6 @@ AwMDaAAwZQIwJsdpW9zV57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtk AjEA2zQgMgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 -----END CERTIFICATE----- -GTS Root R1 -=========== ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG -EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv -b3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAG -A1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx -9vaMf/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7wCl7r -aKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjwTcLCeoiKu7rPWRnW -r4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0PfyblqAj+lug8aJRT7oM6iCsVlgmy4HqM -LnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly -4cpk9+aCEI3oncKKiPo4Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr -06zqkUspzBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92 -wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70paDPvOmbsB4om -3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrNVjzRlwW5y0vtOUucxD/SVRNu -JLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEM -BQADggIBADiWCu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1 -d5iyfNm9dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6ZXPYfcX3v73sv -fuo21pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZRgyFmxhE+885H7pwoHyXa/6xm -ld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3d8t5/Wk6kjftbjhlRn7pYL15iJdfOBL07q9b -gsiG1eGZbYwE8na6SfZu6W0eX6DvJ4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdljUEn2NIVq -4BjFbkerQUIpm/ZgDdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0dzpqPJeaAcWEr -tXvM+SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwlfnuzCdyyF62ARPBo -pY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9SQ98POyDGCBDTtWTurQ0 -sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdwsE3PYJ/HQcu51OyLemGhmW/HGY0dVHLql -CFF1pkgl ------END CERTIFICATE----- - -GTS Root R2 -=========== ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG -EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv -b3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAG -A1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTuk -k3LvCvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY6Dlo -7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAuMC6C/Pq8tBcKSOWI -m8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7kRXuJVfeKH2JShBKzwkCX44ofR5Gm -dFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbu -ak7MkogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscsz -cTJGr61K8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW -Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73Vululycsl -aVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy -5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEM -BQADggIBALZp8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JT -vhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiTz9D2PGcDFWEJ -+YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiApJiS4wGWAqoC7o87xdFtCjMw -c3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvbpxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3Da -WsYDQvTtN6LwG1BUSw7YhN4ZKJmBR64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5r -n/WkhLx3+WuXrD5RRaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56Gtmwfu -Nmsk0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC5AwiWVIQ -7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiFizoHCBy69Y9Vmhh1fuXs -gWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLnyOd/xCxgXS/Dr55FBcOEArf9LAhST4Ld -o/DUhgkC ------END CERTIFICATE----- - -GTS Root R3 -=========== ------BEGIN CERTIFICATE----- -MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV -UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg -UjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE -ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUU -Rout736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL24Cej -QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTB8Sa6oC2uhYHP -0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFukfCPAlaUs3L6JbyO5o91lAFJekazInXJ0 -glMLfalAvWhgxeG4VDvBNhcl2MG9AjEAnjWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOa -KaqW04MjyaR7YbPMAuhd ------END CERTIFICATE----- - -GTS Root R4 -=========== ------BEGIN CERTIFICATE----- -MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV -UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg -UjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE -ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa -6zzuhXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvRHYqj -QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSATNbrdP9JNqPV -2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0CMRw3J5QdCHojXohw0+WbhXRIjVhLfoI -N+4Zba3bssx9BzT1YBkstTTZbyACMANxsbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11x -zPKwTdb+mciUqXWi4w== ------END CERTIFICATE----- - UCA Global G2 Root ================== -----BEGIN CERTIFICATE----- @@ -3230,3 +3028,479 @@ ECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW rcJRQO9gcS3ujwLEXQNwSaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/Qw CZ61IygNnxS2PFOiTAZpffpskcYqSUXm7LcT4Tps -----END CERTIFICATE----- + +Autoridad de Certificacion Firmaprofesional CIF A62634068 +========================================================= +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIG3Dp0v+ubHEwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCRVMxQjBA +BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 +MjYzNDA2ODAeFw0xNDA5MjMxNTIyMDdaFw0zNjA1MDUxNTIyMDdaMFExCzAJBgNVBAYTAkVTMUIw +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+JIwuwIDAQABo4HvMIHsMB0GA1Ud +DgQWBBRlzeurNR4APn7VdMActHNHDhpkLzASBgNVHRMBAf8ECDAGAQH/AgEBMIGmBgNVHSAEgZ4w +gZswgZgGBFUdIAAwgY8wLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZmlybWFwcm9mZXNpb25hbC5j +b20vY3BzMFwGCCsGAQUFBwICMFAeTgBQAGEAcwBlAG8AIABkAGUAIABsAGEAIABCAG8AbgBhAG4A +bwB2AGEAIAA0ADcAIABCAGEAcgBjAGUAbABvAG4AYQAgADAAOAAwADEANzAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggIBAHSHKAIrdx9miWTtj3QuRhy7qPj4Cx2Dtjqn6EWKB7fgPiDL +4QjbEwj4KKE1soCzC1HA01aajTNFSa9J8OA9B3pFE1r/yJfY0xgsfZb43aJlQ3CTkBW6kN/oGbDb +LIpgD7dvlAceHabJhfa9NPhAeGIQcDq+fUs5gakQ1JZBu/hfHAsdCPKxsIl68veg4MSPi3i1O1il +I45PVf42O+AMt8oqMEEgtIDNrvx2ZnOorm7hfNoD6JQg5iKj0B+QXSBTFCZX2lSX3xZEEAEeiGaP +cjiT3SC3NL7X8e5jjkd5KAb881lFJWAiMxujX6i6KtoaPc1A6ozuBRWV1aUsIC+nmCjuRfzxuIgA +LI9C2lHVnOUTaHFFQ4ueCyE8S1wF3BqfmI7avSKecs2tCsvMo2ebKHTEm9caPARYpoKdrcd7b/+A +lun4jWq9GJAd/0kakFI3ky88Al2CdgtR5xbHV/g4+afNmyJU72OwFW1TZQNKXkqgsqeOSQBZONXH +9IBk9W6VULgRfhVwOEqwf9DEMnDAGf/JOC0ULGb0QkTmVXYbgBVX/8Cnp6o5qtjTcNAuuuuUavpf +NIbnYrX9ivAwhZTJryQCL2/W3Wf+47BVTwSYT6RBVuKT0Gro1vP7ZeDOdcQxWQzugsgMYDNKGbqE +ZycPvEJdvSRUDewdcAZfpLz6IHxV +-----END CERTIFICATE----- + +vTrus ECC Root CA +================= +-----BEGIN CERTIFICATE----- +MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMwRzELMAkGA1UE +BhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBS +b290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDczMTA3MjY0NFowRzELMAkGA1UEBhMCQ04xHDAa +BgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBSb290IENBMHYw +EAYHKoZIzj0CAQYFK4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9JpRCux3NCNtzslt188+c +ToL0v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A2MMrMudwpremIFUde4BdS49n +TPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHbH88wDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIwV53dVvHH4+m4SVBrm2nDb+zDfSXkV5UT +QJtS0zvzQBm8JsctBp61ezaf9SXUY2sAAjEA6dPGnlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQL +YgmRWAD5Tfs0aNoJrSEGGJTO +-----END CERTIFICATE----- + +vTrus Root CA +============= +-----BEGIN CERTIFICATE----- +MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQELBQAwQzELMAkG +A1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xFjAUBgNVBAMTDXZUcnVzIFJv +b3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMxMDcyNDA1WjBDMQswCQYDVQQGEwJDTjEcMBoG +A1UEChMTaVRydXNDaGluYSBDby4sTHRkLjEWMBQGA1UEAxMNdlRydXMgUm9vdCBDQTCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB6ksDXhA/kFocizuwZots +SKYcIrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoRuBLpDLvPbmyAhykUAyyNJJrI +ZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6WTEN+VRS+GrPSbcKvdmaVayqwlHeF +XgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z98Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KA +YPxMvDVTAWqXcoKv8R1w6Jz1717CbMdHflqUhSZNO7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70 +kLJrxLT5ZOrpGgrIDajtJ8nU57O5q4IikCc9Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2 +AXPKBlim0zvc+gRGE1WKyURHuFE5Gi7oNOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZNpGvu +/9ROutW04o5IWgAZCfEF2c6Rsffr6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQUqqzApVg+QxMaPnu +1RcN+HFXtSXkKe5lXa/R7jwXC1pDxaWG6iSe4gUH3DRCEpHWOXSuTEGC2/KmSNGzm/MzqvOmwMVO +9fSddmPmAsYiS8GVP1BkLFTltvA8Kc9XAgMBAAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYg +scasGrz2iTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOC +AgEAKbqSSaet8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWd +nxEt/Hlk3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1jbhd47F18iMjr +jld22VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvMKar5CKXiNxTKsbhm7xqC5PD4 +8acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIivTDUHKgLKeBRtRytAVunLKmChZwOgzoy8sHJn +xDHO2zTlJQNgJXtxmOTAGytfdELSS8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVTsMo554Wg +icEFOwE30z9J4nfrI8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7IdMakLXogqzu4 +sEb9b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9mK5S4fNBUvupLnKW +nyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1PTi07NEPhmg4NpGaXutIc +SkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929vensBxXVsFy6K2ir40zSbofitzmdHxghm+H +l3s= +-----END CERTIFICATE----- + +ISRG Root X2 +============ +-----BEGIN CERTIFICATE----- +MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQswCQYDVQQGEwJV +UzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElT +UkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVT +MSkwJwYDVQQKEyBJbnRlcm5ldCBTZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNS +RyBSb290IFgyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0H +ttwW+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9ItgKbppb +d9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZIzj0EAwMDaAAwZQIwe3lORlCEwkSHRhtF +cP9Ymd70/aTSVaYgLXTWNLxBo1BfASdWtL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5 +U6VR5CmD1/iQMVtCnwr1/q4AaOeMSQ+2b1tbFfLn +-----END CERTIFICATE----- + +HiPKI Root CA - G1 +================== +-----BEGIN CERTIFICATE----- +MIIFajCCA1KgAwIBAgIQLd2szmKXlKFD6LDNdmpeYDANBgkqhkiG9w0BAQsFADBPMQswCQYDVQQG +EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xGzAZBgNVBAMMEkhpUEtJ +IFJvb3QgQ0EgLSBHMTAeFw0xOTAyMjIwOTQ2MDRaFw0zNzEyMzExNTU5NTlaME8xCzAJBgNVBAYT +AlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEbMBkGA1UEAwwSSGlQS0kg +Um9vdCBDQSAtIEcxMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9B5/UnMyDHPkvRN0 +o9QwqNCuS9i233VHZvR85zkEHmpwINJaR3JnVfSl6J3VHiGh8Ge6zCFovkRTv4354twvVcg3Px+k +wJyz5HdcoEb+d/oaoDjq7Zpy3iu9lFc6uux55199QmQ5eiY29yTw1S+6lZgRZq2XNdZ1AYDgr/SE +YYwNHl98h5ZeQa/rh+r4XfEuiAU+TCK72h8q3VJGZDnzQs7ZngyzsHeXZJzA9KMuH5UHsBffMNsA +GJZMoYFL3QRtU6M9/Aes1MU3guvklQgZKILSQjqj2FPseYlgSGDIcpJQ3AOPgz+yQlda22rpEZfd +hSi8MEyr48KxRURHH+CKFgeW0iEPU8DtqX7UTuybCeyvQqww1r/REEXgphaypcXTT3OUM3ECoWqj +1jOXTyFjHluP2cFeRXF3D4FdXyGarYPM+l7WjSNfGz1BryB1ZlpK9p/7qxj3ccC2HTHsOyDry+K4 +9a6SsvfhhEvyovKTmiKe0xRvNlS9H15ZFblzqMF8b3ti6RZsR1pl8w4Rm0bZ/W3c1pzAtH2lsN0/ +Vm+h+fbkEkj9Bn8SV7apI09bA8PgcSojt/ewsTu8mL3WmKgMa/aOEmem8rJY5AIJEzypuxC00jBF +8ez3ABHfZfjcK0NVvxaXxA/VLGGEqnKG/uY6fsI/fe78LxQ+5oXdUG+3Se0CAwEAAaNCMEAwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ncX+l6o/vY9cdVouslGDDjYr7AwDgYDVR0PAQH/BAQD +AgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBQUfB13HAE4/+qddRxosuej6ip0691x1TPOhwEmSKsxBHi +7zNKpiMdDg1H2DfHb680f0+BazVP6XKlMeJ45/dOlBhbQH3PayFUhuaVevvGyuqcSE5XCV0vrPSl +tJczWNWseanMX/mF+lLFjfiRFOs6DRfQUsJ748JzjkZ4Bjgs6FzaZsT0pPBWGTMpWmWSBUdGSquE +wx4noR8RkpkndZMPvDY7l1ePJlsMu5wP1G4wB9TcXzZoZjmDlicmisjEOf6aIW/Vcobpf2Lll07Q +JNBAsNB1CI69aO4I1258EHBGG3zgiLKecoaZAeO/n0kZtCW+VmWuF2PlHt/o/0elv+EmBYTksMCv +5wiZqAxeJoBF1PhoL5aPruJKHJwWDBNvOIf2u8g0X5IDUXlwpt/L9ZlNec1OvFefQ05rLisY+Gpz +jLrFNe85akEez3GoorKGB1s6yeHvP2UEgEcyRHCVTjFnanRbEEV16rCf0OY1/k6fi8wrkkVbbiVg +hUbN0aqwdmaTd5a+g744tiROJgvM7XpWGuDpWsZkrUx6AEhEL7lAuxM+vhV4nYWBSipX3tUZQ9rb +yltHhoMLP7YNdnhzeSJesYAfz77RP1YQmCuVh6EfnWQUYDksswBVLuT1sw5XxJFBAJw/6KXf6vb/ +yPCtbVKoF6ubYfwSUTXkJf2vqmqGOQ== +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R4 +=========================== +-----BEGIN CERTIFICATE----- +MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYDVQQLExtHbG9i +YWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds +b2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgwMTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9i +YWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds +b2JhbFNpZ24wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkW +ymOxuYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNVHQ8BAf8E +BAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/+wpu+74zyTyjhNUwCgYI +KoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147bmF0774BxL4YSFlhgjICICadVGNA3jdg +UM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm +-----END CERTIFICATE----- + +GTS Root R1 +=========== +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQGEwJV +UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg +UjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE +ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaM +f/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7wCl7raKb0 +xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjwTcLCeoiKu7rPWRnWr4+w +B7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0PfyblqAj+lug8aJRT7oM6iCsVlgmy4HqMLnXW +nOunVmSPlk9orj2XwoSPwLxAwAtcvfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk +9+aCEI3oncKKiPo4Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zq +kUspzBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92wO1A +K/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70paDPvOmbsB4om3xPX +V2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrNVjzRlwW5y0vtOUucxD/SVRNuJLDW +cfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQAD +ggIBAJ+qQibbC5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe +QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuyh6f88/qBVRRi +ClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM47HLwEXWdyzRSjeZ2axfG34ar +J45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8JZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYci +NuaCp+0KueIHoI17eko8cdLiA6EfMgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5me +LMFrUKTX5hgUvYU/Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJF +fbdT6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ0E6yove+ +7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm2tIMPNuzjsmhDYAPexZ3 +FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bbbP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3 +gm3c +-----END CERTIFICATE----- + +GTS Root R2 +=========== +-----BEGIN CERTIFICATE----- +MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQGEwJV +UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg +UjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE +ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3Lv +CvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY6Dlo7JUl +e3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAuMC6C/Pq8tBcKSOWIm8Wb +a96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7kRXuJVfeKH2JShBKzwkCX44ofR5GmdFrS ++LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7M +kogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJG +r61K8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RWIr9q +S34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73VululycslaVNV +J1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy5okL +dWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQAD +ggIBAB/Kzt3HvqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM8 +0mJhwQTtzuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyCB19m3H0Q/gxh +swWV7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2uNmSRXbBoGOqKYcl3qJfEycel +/FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMgyALOWr7Z6v2yTcQvG99fevX4i8buMTolUVVn +jWQye+mew4K6Ki3pHrTgSAai/GevHyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFenTgCR2y5 +9PYjJbigapordwj6xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGoo7z7GJa7Um8M +7YNRTOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCMElv924SgJPFI/2R8 +0L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV7LXTWtiBmelDGDfrs7vR +WGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl6WLAYv7YTVWW4tAR+kg0Eeye7QUd5MjW +HYbL +-----END CERTIFICATE----- + +GTS Root R3 +=========== +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJVUzEi +MCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMw +HhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZ +R29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjO +PQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout +736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL24CejQjBA +MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTB8Sa6oC2uhYHP0/Eq +Er24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azT +L818+FsuVbu/3ZL3pAzcMeGiAjEA/JdmZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV +11RZt+cRLInUue4X +-----END CERTIFICATE----- + +GTS Root R4 +=========== +-----BEGIN CERTIFICATE----- +MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJVUzEi +MCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQw +HhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZ +R29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjO +PQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzu +hXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvRHYqjQjBA +MA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSATNbrdP9JNqPV2Py1 +PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/C +r8deVl5c1RxYIigL9zC2L7F8AjEA8GE8p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh +4rsUecrNIdSUtUlD +-----END CERTIFICATE----- + +Telia Root CA v2 +================ +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIPAWdfJ9b+euPkrL4JWwWeMA0GCSqGSIb3DQEBCwUAMEQxCzAJBgNVBAYT +AkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2 +MjAeFw0xODExMjkxMTU1NTRaFw00MzExMjkxMTU1NTRaMEQxCzAJBgNVBAYTAkZJMRowGAYDVQQK +DBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2MjCCAiIwDQYJKoZI +hvcNAQEBBQADggIPADCCAgoCggIBALLQPwe84nvQa5n44ndp586dpAO8gm2h/oFlH0wnrI4AuhZ7 +6zBqAMCzdGh+sq/H1WKzej9Qyow2RCRj0jbpDIX2Q3bVTKFgcmfiKDOlyzG4OiIjNLh9vVYiQJ3q +9HsDrWj8soFPmNB06o3lfc1jw6P23pLCWBnglrvFxKk9pXSW/q/5iaq9lRdU2HhE8Qx3FZLgmEKn +pNaqIJLNwaCzlrI6hEKNfdWV5Nbb6WLEWLN5xYzTNTODn3WhUidhOPFZPY5Q4L15POdslv5e2QJl +tI5c0BE0312/UqeBAMN/mUWZFdUXyApT7GPzmX3MaRKGwhfwAZ6/hLzRUssbkmbOpFPlob/E2wnW +5olWK8jjfN7j/4nlNW4o6GwLI1GpJQXrSPjdscr6bAhR77cYbETKJuFzxokGgeWKrLDiKca5JLNr +RBH0pUPCTEPlcDaMtjNXepUugqD0XBCzYYP2AgWGLnwtbNwDRm41k9V6lS/eINhbfpSQBGq6WT0E +BXWdN6IOLj3rwaRSg/7Qa9RmjtzG6RJOHSpXqhC8fF6CfaamyfItufUXJ63RDolUK5X6wK0dmBR4 +M0KGCqlztft0DbcbMBnEWg4cJ7faGND/isgFuvGqHKI3t+ZIpEYslOqodmJHixBTB0hXbOKSTbau +BcvcwUpej6w9GU7C7WB1K9vBykLVAgMBAAGjYzBhMB8GA1UdIwQYMBaAFHKs5DN5qkWH9v2sHZ7W +xy+G2CQ5MB0GA1UdDgQWBBRyrOQzeapFh/b9rB2e1scvhtgkOTAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAoDtZpwmUPjaE0n4vOaWWl/oRrfxn83EJ +8rKJhGdEr7nv7ZbsnGTbMjBvZ5qsfl+yqwE2foH65IRe0qw24GtixX1LDoJt0nZi0f6X+J8wfBj5 +tFJ3gh1229MdqfDBmgC9bXXYfef6xzijnHDoRnkDry5023X4blMMA8iZGok1GTzTyVR8qPAs5m4H +eW9q4ebqkYJpCh3DflminmtGFZhb069GHWLIzoBSSRE/yQQSwxN8PzuKlts8oB4KtItUsiRnDe+C +y748fdHif64W1lZYudogsYMVoe+KTTJvQS8TUoKU1xrBeKJR3Stwbbca+few4GeXVtt8YVMJAygC +QMez2P2ccGrGKMOF6eLtGpOg3kuYooQ+BXcBlj37tCAPnHICehIv1aO6UXivKitEZU61/Qrowc15 +h2Er3oBXRb9n8ZuRXqWk7FlIEA04x7D6w0RtBPV4UBySllva9bguulvP5fBqnUsvWHMtTy3EHD70 +sz+rFQ47GUGKpMFXEmZxTPpT41frYpUJnlTd0cI8Vzy9OK2YZLe4A5pTVmBds9hCG1xLEooc6+t9 +xnppxyd/pPiL8uSUZodL6ZQHCRJ5irLrdATczvREWeAWysUsWNc8e89ihmpQfTU2Zqf7N+cox9jQ +raVplI/owd8k+BsHMYeB2F326CjYSlKArBPuUBQemMc= +-----END CERTIFICATE----- + +D-TRUST BR Root CA 1 2020 +========================= +-----BEGIN CERTIFICATE----- +MIIC2zCCAmCgAwIBAgIQfMmPK4TX3+oPyWWa00tNljAKBggqhkjOPQQDAzBIMQswCQYDVQQGEwJE +RTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRSVVNUIEJSIFJvb3QgQ0EgMSAy +MDIwMB4XDTIwMDIxMTA5NDUwMFoXDTM1MDIxMTA5NDQ1OVowSDELMAkGA1UEBhMCREUxFTATBgNV +BAoTDEQtVHJ1c3QgR21iSDEiMCAGA1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDEgMjAyMDB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABMbLxyjR+4T1mu9CFCDhQ2tuda38KwOE1HaTJddZO0Flax7mNCq7 +dPYSzuht56vkPE4/RAiLzRZxy7+SmfSk1zxQVFKQhYN4lGdnoxwJGT11NIXe7WB9xwy0QVK5buXu +QqOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHOREKv/VbNafAkl1bK6CKBrqx9t +MA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6gPKA6hjhodHRwOi8vY3JsLmQtdHJ1c3Qu +bmV0L2NybC9kLXRydXN0X2JyX3Jvb3RfY2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwQlIlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxP +PUQtVHJ1c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjOPQQD +AwNpADBmAjEAlJAtE/rhY/hhY+ithXhUkZy4kzg+GkHaQBZTQgjKL47xPoFWwKrY7RjEsK70Pvom +AjEA8yjixtsrmfu3Ubgko6SUeho/5jbiA1czijDLgsfWFBHVdWNbFJWcHwHP2NVypw87 +-----END CERTIFICATE----- + +D-TRUST EV Root CA 1 2020 +========================= +-----BEGIN CERTIFICATE----- +MIIC2zCCAmCgAwIBAgIQXwJB13qHfEwDo6yWjfv/0DAKBggqhkjOPQQDAzBIMQswCQYDVQQGEwJE +RTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRSVVNUIEVWIFJvb3QgQ0EgMSAy +MDIwMB4XDTIwMDIxMTEwMDAwMFoXDTM1MDIxMTA5NTk1OVowSDELMAkGA1UEBhMCREUxFTATBgNV +BAoTDEQtVHJ1c3QgR21iSDEiMCAGA1UEAxMZRC1UUlVTVCBFViBSb290IENBIDEgMjAyMDB2MBAG +ByqGSM49AgEGBSuBBAAiA2IABPEL3YZDIBnfl4XoIkqbz52Yv7QFJsnL46bSj8WeeHsxiamJrSc8 +ZRCC/N/DnU7wMyPE0jL1HLDfMxddxfCxivnvubcUyilKwg+pf3VlSSowZ/Rk99Yad9rDwpdhQntJ +raOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFH8QARY3OqQo5FD4pPfsazK2/umL +MA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6gPKA6hjhodHRwOi8vY3JsLmQtdHJ1c3Qu +bmV0L2NybC9kLXRydXN0X2V2X3Jvb3RfY2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwRVYlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxP +PUQtVHJ1c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjOPQQD +AwNpADBmAjEAyjzGKnXCXnViOTYAYFqLwZOZzNnbQTs7h5kXO9XMT8oi96CAy/m0sRtW9XLS/BnR +AjEAkfcwkz8QRitxpNA7RJvAKQIFskF3UfN5Wp6OFKBOQtJbgfM0agPnIjhQW+0ZT0MW +-----END CERTIFICATE----- + +DigiCert TLS ECC P384 Root G5 +============================= +-----BEGIN CERTIFICATE----- +MIICGTCCAZ+gAwIBAgIQCeCTZaz32ci5PhwLBCou8zAKBggqhkjOPQQDAzBOMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJjAkBgNVBAMTHURpZ2lDZXJ0IFRMUyBFQ0MgUDM4 +NCBSb290IEc1MB4XDTIxMDExNTAwMDAwMFoXDTQ2MDExNDIzNTk1OVowTjELMAkGA1UEBhMCVVMx +FzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMSYwJAYDVQQDEx1EaWdpQ2VydCBUTFMgRUNDIFAzODQg +Um9vdCBHNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMFEoc8Rl1Ca3iOCNQfN0MsYndLxf3c1Tzvd +lHJS7cI7+Oz6e2tYIOyZrsn8aLN1udsJ7MgT9U7GCh1mMEy7H0cKPGEQQil8pQgO4CLp0zVozptj +n4S1mU1YoI71VOeVyaNCMEAwHQYDVR0OBBYEFMFRRVBZqz7nLFr6ICISB4CIfBFqMA4GA1UdDwEB +/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQCJao1H5+z8blUD2Wds +Jk6Dxv3J+ysTvLd6jLRl0mlpYxNjOyZQLgGheQaRnUi/wr4CMEfDFXuxoJGZSZOoPHzoRgaLLPIx +AJSdYsiJvRmEFOml+wG4DXZDjC5Ty3zfDBeWUA== +-----END CERTIFICATE----- + +DigiCert TLS RSA4096 Root G5 +============================ +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCPm0eKj6ftpqMzeJ3nzPijANBgkqhkiG9w0BAQwFADBNMQswCQYDVQQG +EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMTHERpZ2lDZXJ0IFRMUyBSU0E0 +MDk2IFJvb3QgRzUwHhcNMjEwMTE1MDAwMDAwWhcNNDYwMTE0MjM1OTU5WjBNMQswCQYDVQQGEwJV +UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMTHERpZ2lDZXJ0IFRMUyBSU0E0MDk2 +IFJvb3QgRzUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz0PTJeRGd/fxmgefM1eS8 +7IE+ajWOLrfn3q/5B03PMJ3qCQuZvWxX2hhKuHisOjmopkisLnLlvevxGs3npAOpPxG02C+JFvuU +AT27L/gTBaF4HI4o4EXgg/RZG5Wzrn4DReW+wkL+7vI8toUTmDKdFqgpwgscONyfMXdcvyej/Ces +tyu9dJsXLfKB2l2w4SMXPohKEiPQ6s+d3gMXsUJKoBZMpG2T6T867jp8nVid9E6P/DsjyG244gXa +zOvswzH016cpVIDPRFtMbzCe88zdH5RDnU1/cHAN1DrRN/BsnZvAFJNY781BOHW8EwOVfH/jXOnV +DdXifBBiqmvwPXbzP6PosMH976pXTayGpxi0KcEsDr9kvimM2AItzVwv8n/vFfQMFawKsPHTDU9q +TXeXAaDxZre3zu/O7Oyldcqs4+Fj97ihBMi8ez9dLRYiVu1ISf6nL3kwJZu6ay0/nTvEF+cdLvvy +z6b84xQslpghjLSR6Rlgg/IwKwZzUNWYOwbpx4oMYIwo+FKbbuH2TbsGJJvXKyY//SovcfXWJL5/ +MZ4PbeiPT02jP/816t9JXkGPhvnxd3lLG7SjXi/7RgLQZhNeXoVPzthwiHvOAbWWl9fNff2C+MIk +wcoBOU+NosEUQB+cZtUMCUbW8tDRSHZWOkPLtgoRObqME2wGtZ7P6wIDAQABo0IwQDAdBgNVHQ4E +FgQUUTMc7TZArxfTJc1paPKvTiM+s0EwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8w +DQYJKoZIhvcNAQEMBQADggIBAGCmr1tfV9qJ20tQqcQjNSH/0GEwhJG3PxDPJY7Jv0Y02cEhJhxw +GXIeo8mH/qlDZJY6yFMECrZBu8RHANmfGBg7sg7zNOok992vIGCukihfNudd5N7HPNtQOa27PShN +lnx2xlv0wdsUpasZYgcYQF+Xkdycx6u1UQ3maVNVzDl92sURVXLFO4uJ+DQtpBflF+aZfTCIITfN +MBc9uPK8qHWgQ9w+iUuQrm0D4ByjoJYJu32jtyoQREtGBzRj7TG5BO6jm5qu5jF49OokYTurWGT/ +u4cnYiWB39yhL/btp/96j1EuMPikAdKFOV8BmZZvWltwGUb+hmA+rYAQCd05JS9Yf7vSdPD3Rh9G +OUrYU9DzLjtxpdRv/PNn5AeP3SYZ4Y1b+qOTEZvpyDrDVWiakuFSdjjo4bq9+0/V77PnSIMx8IIh +47a+p6tv75/fTM8BuGJqIz3nCU2AG3swpMPdB380vqQmsvZB6Akd4yCYqjdP//fx4ilwMUc/dNAU +FvohigLVigmUdy7yWSiLfFCSCmZ4OIN1xLVaqBHG5cGdZlXPU8Sv13WFqUITVuwhd4GTWgzqltlJ +yqEI8pc7bZsEGCREjnwB8twl2F6GmrE52/WRMmrRpnCKovfepEWFJqgejF0pW8hL2JpqA15w8oVP +bEtoL8pU9ozaMv7Da4M/OMZ+ +-----END CERTIFICATE----- + +Certainly Root R1 +================= +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIRAI4P+UuQcWhlM1T01EQ5t+AwDQYJKoZIhvcNAQELBQAwPTELMAkGA1UE +BhMCVVMxEjAQBgNVBAoTCUNlcnRhaW5seTEaMBgGA1UEAxMRQ2VydGFpbmx5IFJvb3QgUjEwHhcN +MjEwNDAxMDAwMDAwWhcNNDYwNDAxMDAwMDAwWjA9MQswCQYDVQQGEwJVUzESMBAGA1UEChMJQ2Vy +dGFpbmx5MRowGAYDVQQDExFDZXJ0YWlubHkgUm9vdCBSMTCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBANA21B/q3avk0bbm+yLA3RMNansiExyXPGhjZjKcA7WNpIGD2ngwEc/csiu+kr+O +5MQTvqRoTNoCaBZ0vrLdBORrKt03H2As2/X3oXyVtwxwhi7xOu9S98zTm/mLvg7fMbedaFySpvXl +8wo0tf97ouSHocavFwDvA5HtqRxOcT3Si2yJ9HiG5mpJoM610rCrm/b01C7jcvk2xusVtyWMOvwl +DbMicyF0yEqWYZL1LwsYpfSt4u5BvQF5+paMjRcCMLT5r3gajLQ2EBAHBXDQ9DGQilHFhiZ5shGI +XsXwClTNSaa/ApzSRKft43jvRl5tcdF5cBxGX1HpyTfcX35pe0HfNEXgO4T0oYoKNp43zGJS4YkN +KPl6I7ENPT2a/Z2B7yyQwHtETrtJ4A5KVpK8y7XdeReJkd5hiXSSqOMyhb5OhaRLWcsrxXiOcVTQ +AjeZjOVJ6uBUcqQRBi8LjMFbvrWhsFNunLhgkR9Za/kt9JQKl7XsxXYDVBtlUrpMklZRNaBA2Cnb +rlJ2Oy0wQJuK0EJWtLeIAaSHO1OWzaMWj/Nmqhexx2DgwUMFDO6bW2BvBlyHWyf5QBGenDPBt+U1 +VwV/J84XIIwc/PH72jEpSe31C4SnT8H2TsIonPru4K8H+zMReiFPCyEQtkA6qyI6BJyLm4SGcprS +p6XEtHWRqSsjAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBTgqj8ljZ9EXME66C6ud0yEPmcM9DANBgkqhkiG9w0BAQsFAAOCAgEAuVevuBLaV4OPaAsz +HQNTVfSVcOQrPbA56/qJYv331hgELyE03fFo8NWWWt7CgKPBjcZq91l3rhVkz1t5BXdm6ozTaw3d +8VkswTOlMIAVRQdFGjEitpIAq5lNOo93r6kiyi9jyhXWx8bwPWz8HA2YEGGeEaIi1wrykXprOQ4v +MMM2SZ/g6Q8CRFA3lFV96p/2O7qUpUzpvD5RtOjKkjZUbVwlKNrdrRT90+7iIgXr0PK3aBLXWopB +GsaSpVo7Y0VPv+E6dyIvXL9G+VoDhRNCX8reU9ditaY1BMJH/5n9hN9czulegChB8n3nHpDYT3Y+ +gjwN/KUD+nsa2UUeYNrEjvn8K8l7lcUq/6qJ34IxD3L/DCfXCh5WAFAeDJDBlrXYFIW7pw0WwfgH +JBu6haEaBQmAupVjyTrsJZ9/nbqkRxWbRHDxakvWOF5D8xh+UG7pWijmZeZ3Gzr9Hb4DJqPb1OG7 +fpYnKx3upPvaJVQTA945xsMfTZDsjxtK0hzthZU4UHlG1sGQUDGpXJpuHfUzVounmdLyyCwzk5Iw +x06MZTMQZBf9JBeW0Y3COmor6xOLRPIh80oat3df1+2IpHLlOR+Vnb5nwXARPbv0+Em34yaXOp/S +X3z7wJl8OSngex2/DaeP0ik0biQVy96QXr8axGbqwua6OV+KmalBWQewLK8= +-----END CERTIFICATE----- + +Certainly Root E1 +================= +-----BEGIN CERTIFICATE----- +MIIB9zCCAX2gAwIBAgIQBiUzsUcDMydc+Y2aub/M+DAKBggqhkjOPQQDAzA9MQswCQYDVQQGEwJV +UzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0YWlubHkgUm9vdCBFMTAeFw0yMTA0 +MDEwMDAwMDBaFw00NjA0MDEwMDAwMDBaMD0xCzAJBgNVBAYTAlVTMRIwEAYDVQQKEwlDZXJ0YWlu +bHkxGjAYBgNVBAMTEUNlcnRhaW5seSBSb290IEUxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE3m/4 +fxzf7flHh4axpMCK+IKXgOqPyEpeKn2IaKcBYhSRJHpcnqMXfYqGITQYUBsQ3tA3SybHGWCA6TS9 +YBk2QNYphwk8kXr2vBMj3VlOBF7PyAIcGFPBMdjaIOlEjeR2o0IwQDAOBgNVHQ8BAf8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ygYy2R17ikq6+2uI1g4hevIIgcwCgYIKoZIzj0E +AwMDaAAwZQIxALGOWiDDshliTd6wT99u0nCK8Z9+aozmut6Dacpps6kFtZaSF4fC0urQe87YQVt8 +rgIwRt7qy12a7DLCZRawTDBcMPPaTnOGBtjOiQRINzf43TNRnXCve1XYAS59BWQOhriR +-----END CERTIFICATE----- + +E-Tugra Global Root CA RSA v3 +============================= +-----BEGIN CERTIFICATE----- +MIIF8zCCA9ugAwIBAgIUDU3FzRYilZYIfrgLfxUGNPt5EDQwDQYJKoZIhvcNAQELBQAwgYAxCzAJ +BgNVBAYTAlRSMQ8wDQYDVQQHEwZBbmthcmExGTAXBgNVBAoTEEUtVHVncmEgRUJHIEEuUy4xHTAb +BgNVBAsTFEUtVHVncmEgVHJ1c3QgQ2VudGVyMSYwJAYDVQQDEx1FLVR1Z3JhIEdsb2JhbCBSb290 +IENBIFJTQSB2MzAeFw0yMDAzMTgwOTA3MTdaFw00NTAzMTIwOTA3MTdaMIGAMQswCQYDVQQGEwJU +UjEPMA0GA1UEBxMGQW5rYXJhMRkwFwYDVQQKExBFLVR1Z3JhIEVCRyBBLlMuMR0wGwYDVQQLExRF +LVR1Z3JhIFRydXN0IENlbnRlcjEmMCQGA1UEAxMdRS1UdWdyYSBHbG9iYWwgUm9vdCBDQSBSU0Eg +djMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCiZvCJt3J77gnJY9LTQ91ew6aEOErx +jYG7FL1H6EAX8z3DeEVypi6Q3po61CBxyryfHUuXCscxuj7X/iWpKo429NEvx7epXTPcMHD4QGxL +sqYxYdE0PD0xesevxKenhOGXpOhL9hd87jwH7eKKV9y2+/hDJVDqJ4GohryPUkqWOmAalrv9c/SF +/YP9f4RtNGx/ardLAQO/rWm31zLZ9Vdq6YaCPqVmMbMWPcLzJmAy01IesGykNz709a/r4d+ABs8q +QedmCeFLl+d3vSFtKbZnwy1+7dZ5ZdHPOrbRsV5WYVB6Ws5OUDGAA5hH5+QYfERaxqSzO8bGwzrw +bMOLyKSRBfP12baqBqG3q+Sx6iEUXIOk/P+2UNOMEiaZdnDpwA+mdPy70Bt4znKS4iicvObpCdg6 +04nmvi533wEKb5b25Y08TVJ2Glbhc34XrD2tbKNSEhhw5oBOM/J+JjKsBY04pOZ2PJ8QaQ5tndLB +eSBrW88zjdGUdjXnXVXHt6woq0bM5zshtQoK5EpZ3IE1S0SVEgpnpaH/WwAH0sDM+T/8nzPyAPiM +bIedBi3x7+PmBvrFZhNb/FAHnnGGstpvdDDPk1Po3CLW3iAfYY2jLqN4MpBs3KwytQXk9TwzDdbg +h3cXTJ2w2AmoDVf3RIXwyAS+XF1a4xeOVGNpf0l0ZAWMowIDAQABo2MwYTAPBgNVHRMBAf8EBTAD +AQH/MB8GA1UdIwQYMBaAFLK0ruYt9ybVqnUtdkvAG1Mh0EjvMB0GA1UdDgQWBBSytK7mLfcm1ap1 +LXZLwBtTIdBI7zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAImocn+M684uGMQQ +gC0QDP/7FM0E4BQ8Tpr7nym/Ip5XuYJzEmMmtcyQ6dIqKe6cLcwsmb5FJ+Sxce3kOJUxQfJ9emN4 +38o2Fi+CiJ+8EUdPdk3ILY7r3y18Tjvarvbj2l0Upq7ohUSdBm6O++96SmotKygY/r+QLHUWnw/q +ln0F7psTpURs+APQ3SPh/QMSEgj0GDSz4DcLdxEBSL9htLX4GdnLTeqjjO/98Aa1bZL0SmFQhO3s +SdPkvmjmLuMxC1QLGpLWgti2omU8ZgT5Vdps+9u1FGZNlIM7zR6mK7L+d0CGq+ffCsn99t2HVhjY +sCxVYJb6CH5SkPVLpi6HfMsg2wY+oF0Dd32iPBMbKaITVaA9FCKvb7jQmhty3QUBjYZgv6Rn7rWl +DdF/5horYmbDB7rnoEgcOMPpRfunf/ztAmgayncSd6YAVSgU7NbHEqIbZULpkejLPoeJVF3Zr52X +nGnnCv8PWniLYypMfUeUP95L6VPQMPHF9p5J3zugkaOj/s1YzOrfr28oO6Bpm4/srK4rVJ2bBLFH +IK+WEj5jlB0E5y67hscMmoi/dkfv97ALl2bSRM9gUgfh1SxKOidhd8rXj+eHDjD/DLsE4mHDosiX +YY60MGo8bcIHX0pzLz/5FooBZu+6kcpSV3uu1OYP3Qt6f4ueJiDPO++BcYNZ +-----END CERTIFICATE----- + +E-Tugra Global Root CA ECC v3 +============================= +-----BEGIN CERTIFICATE----- +MIICpTCCAiqgAwIBAgIUJkYZdzHhT28oNt45UYbm1JeIIsEwCgYIKoZIzj0EAwMwgYAxCzAJBgNV +BAYTAlRSMQ8wDQYDVQQHEwZBbmthcmExGTAXBgNVBAoTEEUtVHVncmEgRUJHIEEuUy4xHTAbBgNV +BAsTFEUtVHVncmEgVHJ1c3QgQ2VudGVyMSYwJAYDVQQDEx1FLVR1Z3JhIEdsb2JhbCBSb290IENB +IEVDQyB2MzAeFw0yMDAzMTgwOTQ2NThaFw00NTAzMTIwOTQ2NThaMIGAMQswCQYDVQQGEwJUUjEP +MA0GA1UEBxMGQW5rYXJhMRkwFwYDVQQKExBFLVR1Z3JhIEVCRyBBLlMuMR0wGwYDVQQLExRFLVR1 +Z3JhIFRydXN0IENlbnRlcjEmMCQGA1UEAxMdRS1UdWdyYSBHbG9iYWwgUm9vdCBDQSBFQ0MgdjMw +djAQBgcqhkjOPQIBBgUrgQQAIgNiAASOmCm/xxAeJ9urA8woLNheSBkQKczLWYHMjLiSF4mDKpL2 +w6QdTGLVn9agRtwcvHbB40fQWxPa56WzZkjnIZpKT4YKfWzqTTKACrJ6CZtpS5iB4i7sAnCWH/31 +Rs7K3IKjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU/4Ixcj75xGZsrTie0bBRiKWQ +zPUwHQYDVR0OBBYEFP+CMXI++cRmbK04ntGwUYilkMz1MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjO +PQQDAwNpADBmAjEA5gVYaWHlLcoNy/EZCL3W/VGSGn5jVASQkZo1kTmZ+gepZpO6yGjUij/67W4W +Aie3AjEA3VoXK3YdZUKWpqxdinlW2Iob35reX8dQj7FbcQwm32pAAOwzkSFxvmjkI6TZraE3 +-----END CERTIFICATE----- + +Security Communication RootCA3 +============================== +-----BEGIN CERTIFICATE----- +MIIFfzCCA2egAwIBAgIJAOF8N0D9G/5nMA0GCSqGSIb3DQEBDAUAMF0xCzAJBgNVBAYTAkpQMSUw +IwYDVQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMScwJQYDVQQDEx5TZWN1cml0eSBD +b21tdW5pY2F0aW9uIFJvb3RDQTMwHhcNMTYwNjE2MDYxNzE2WhcNMzgwMTE4MDYxNzE2WjBdMQsw +CQYDVQQGEwJKUDElMCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UE +AxMeU2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEA48lySfcw3gl8qUCBWNO0Ot26YQ+TUG5pPDXC7ltzkBtnTCHsXzW7OT4rCmDvu20r +hvtxosis5FaU+cmvsXLUIKx00rgVrVH+hXShuRD+BYD5UpOzQD11EKzAlrenfna84xtSGc4RHwsE +NPXY9Wk8d/Nk9A2qhd7gCVAEF5aEt8iKvE1y/By7z/MGTfmfZPd+pmaGNXHIEYBMwXFAWB6+oHP2 +/D5Q4eAvJj1+XCO1eXDe+uDRpdYMQXF79+qMHIjH7Iv10S9VlkZ8WjtYO/u62C21Jdp6Ts9EriGm +npjKIG58u4iFW/vAEGK78vknR+/RiTlDxN/e4UG/VHMgly1s2vPUB6PmudhvrvyMGS7TZ2crldtY +XLVqAvO4g160a75BflcJdURQVc1aEWEhCmHCqYj9E7wtiS/NYeCVvsq1e+F7NGcLH7YMx3weGVPK +p7FKFSBWFHA9K4IsD50VHUeAR/94mQ4xr28+j+2GaR57GIgUssL8gjMunEst+3A7caoreyYn8xrC +3PsXuKHqy6C0rtOUfnrQq8PsOC0RLoi/1D+tEjtCrI8Cbn3M0V9hvqG8OmpI6iZVIhZdXw3/JzOf +GAN0iltSIEdrRU0id4xVJ/CvHozJgyJUt5rQT9nO/NkuHJYosQLTA70lUhw0Zk8jq/R3gpYd0Vcw +CBEF/VfR2ccCAwEAAaNCMEAwHQYDVR0OBBYEFGQUfPxYchamCik0FW8qy7z8r6irMA4GA1UdDwEB +/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBDAUAA4ICAQDcAiMI4u8hOscNtybS +YpOnpSNyByCCYN8Y11StaSWSntkUz5m5UoHPrmyKO1o5yGwBQ8IibQLwYs1OY0PAFNr0Y/Dq9HHu +Tofjcan0yVflLl8cebsjqodEV+m9NU1Bu0soo5iyG9kLFwfl9+qd9XbXv8S2gVj/yP9kaWJ5rW4O +H3/uHWnlt3Jxs/6lATWUVCvAUm2PVcTJ0rjLyjQIUYWg9by0F1jqClx6vWPGOi//lkkZhOpn2ASx +YfQAW0q3nHE3GYV5v4GwxxMOdnE+OoAGrgYWp421wsTL/0ClXI2lyTrtcoHKXJg80jQDdwj98ClZ +XSEIx2C/pHF7uNkegr4Jr2VvKKu/S7XuPghHJ6APbw+LP6yVGPO5DtxnVW5inkYO0QR4ynKudtml ++LLfiAlhi+8kTtFZP1rUPcmTPCtk9YENFpb3ksP+MW/oKjJ0DvRMmEoYDjBU1cXrvMUVnuiZIesn +KwkK2/HmcBhWuwzkvvnoEKQTkrgc4NtnHVMDpCKn3F2SEDzq//wbEBrD2NCcnWXL0CsnMQMeNuE9 +dnUM/0Umud1RvCPHX9jYhxBAEg09ODfnRDwYwFMJZI//1ZqmfHAuc1Uh6N//g7kdPjIe1qZ9LPFm +6Vwdp6POXiUyK+OVrCoHzrQoeIY8LaadTdJ0MN1kURXbg4NR16/9M51NZg== +-----END CERTIFICATE----- + +Security Communication ECC RootCA1 +================================== +-----BEGIN CERTIFICATE----- +MIICODCCAb6gAwIBAgIJANZdm7N4gS7rMAoGCCqGSM49BAMDMGExCzAJBgNVBAYTAkpQMSUwIwYD +VQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMSswKQYDVQQDEyJTZWN1cml0eSBDb21t +dW5pY2F0aW9uIEVDQyBSb290Q0ExMB4XDTE2MDYxNjA1MTUyOFoXDTM4MDExODA1MTUyOFowYTEL +MAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKzApBgNV +BAMTIlNlY3VyaXR5IENvbW11bmljYXRpb24gRUNDIFJvb3RDQTEwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAASkpW9gAwPDvTH00xecK4R1rOX9PVdu12O/5gSJko6BnOPpR27KkBLIE+CnnfdldB9sELLo +5OnvbYUymUSxXv3MdhDYW72ixvnWQuRXdtyQwjWpS4g8EkdtXP9JTxpKULGjQjBAMB0GA1UdDgQW +BBSGHOf+LaVKiwj+KBH6vqNm+GBZLzAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAK +BggqhkjOPQQDAwNoADBlAjAVXUI9/Lbu9zuxNuie9sRGKEkz0FhDKmMpzE2xtHqiuQ04pV1IKv3L +snNdo4gIxwwCMQDAqy0Obe0YottT6SXbVQjgUMzfRGEWgqtJsLKB7HOHeLRMsmIbEvoWTSVLY70e +N9k= +-----END CERTIFICATE----- diff --git a/includes/vendor/composer/installed.json b/includes/vendor/composer/installed.json index 88a7e87..9598e03 100644 --- a/includes/vendor/composer/installed.json +++ b/includes/vendor/composer/installed.json @@ -62,17 +62,17 @@ }, { "name": "composer/ca-bundle", - "version": "1.3.1", - "version_normalized": "1.3.1.0", + "version": "1.3.4", + "version_normalized": "1.3.4.0", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b" + "reference": "69098eca243998b53eed7a48d82dedd28b447cd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b", - "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/69098eca243998b53eed7a48d82dedd28b447cd5", + "reference": "69098eca243998b53eed7a48d82dedd28b447cd5", "shasum": "" }, "require": { @@ -86,7 +86,7 @@ "symfony/phpunit-bridge": "^4.2 || ^5", "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0" }, - "time": "2021-10-28T20:44:15+00:00", + "time": "2022-10-12T12:08:29+00:00", "type": "library", "extra": { "branch-alias": { @@ -121,7 +121,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.3.1" + "source": "https://github.com/composer/ca-bundle/tree/1.3.4" }, "funding": [ { @@ -141,17 +141,17 @@ }, { "name": "geoip2/geoip2", - "version": "v2.12.2", - "version_normalized": "2.12.2.0", + "version": "v2.13.0", + "version_normalized": "2.13.0.0", "source": { "type": "git", - "url": "https://github.com/maxmind/GeoIP2-php.git", - "reference": "83adb44ac4b9553d36b579a14673ed124583082f" + "url": "git@github.com:maxmind/GeoIP2-php.git", + "reference": "6a41d8fbd6b90052bc34dff3b4252d0f88067b23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/83adb44ac4b9553d36b579a14673ed124583082f", - "reference": "83adb44ac4b9553d36b579a14673ed124583082f", + "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/6a41d8fbd6b90052bc34dff3b4252d0f88067b23", + "reference": "6a41d8fbd6b90052bc34dff3b4252d0f88067b23", "shasum": "" }, "require": { @@ -166,7 +166,7 @@ "phpunit/phpunit": "^8.0 || ^9.0", "squizlabs/php_codesniffer": "3.*" }, - "time": "2021-11-30T18:15:25+00:00", + "time": "2022-08-05T20:32:58+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -194,10 +194,6 @@ "geolocation", "maxmind" ], - "support": { - "issues": "https://github.com/maxmind/GeoIP2-php/issues", - "source": "https://github.com/maxmind/GeoIP2-php/tree/v2.12.2" - }, "install-path": "../geoip2/geoip2" }, { @@ -360,23 +356,23 @@ }, { "name": "ozh/bookmarkletgen", - "version": "1.2", - "version_normalized": "1.2.0.0", + "version": "1.2.2", + "version_normalized": "1.2.2.0", "source": { "type": "git", "url": "https://github.com/ozh/bookmarkletgen.git", - "reference": "3319b53c493a1474a03d1cc4e087617652284c20" + "reference": "65fffa64bb11f70470d398d7baf6d9bb84411cfc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ozh/bookmarkletgen/zipball/3319b53c493a1474a03d1cc4e087617652284c20", - "reference": "3319b53c493a1474a03d1cc4e087617652284c20", + "url": "https://api.github.com/repos/ozh/bookmarkletgen/zipball/65fffa64bb11f70470d398d7baf6d9bb84411cfc", + "reference": "65fffa64bb11f70470d398d7baf6d9bb84411cfc", "shasum": "" }, "require": { - "php": ">=5.3" + "php": ">=7.2" }, - "time": "2017-05-18T12:46:21+00:00", + "time": "2022-05-04T13:05:16+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -400,31 +396,35 @@ "bookmarklet", "javascript" ], + "support": { + "issues": "https://github.com/ozh/bookmarkletgen/issues", + "source": "https://github.com/ozh/bookmarkletgen/tree/1.2.2" + }, "install-path": "../ozh/bookmarkletgen" }, { "name": "pomo/pomo", - "version": "v1.4.1", - "version_normalized": "1.4.1.0", + "version": "v1.5.0", + "version_normalized": "1.5.0.0", "source": { "type": "git", "url": "https://github.com/LeoColomb/pomo.git", - "reference": "1594bd1f90c89a45ffc3da2ee6d5d582bfac7542" + "reference": "b1e53a997850496369634d574fa6b508091fc353" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/LeoColomb/pomo/zipball/1594bd1f90c89a45ffc3da2ee6d5d582bfac7542", - "reference": "1594bd1f90c89a45ffc3da2ee6d5d582bfac7542", + "url": "https://api.github.com/repos/LeoColomb/pomo/zipball/b1e53a997850496369634d574fa6b508091fc353", + "reference": "b1e53a997850496369634d574fa6b508091fc353", "shasum": "" }, "require": { "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": ">=4.0", - "squizlabs/php_codesniffer": "^3.0 || ^2.9.1" + "phpunit/phpunit": "^4.0 || ^7.0", + "squizlabs/php_codesniffer": "^3.0" }, - "time": "2018-12-20T14:55:38+00:00", + "time": "2023-01-06T01:05:43+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -448,7 +448,7 @@ "role": "Maintainer" } ], - "description": "Gettext library to translate with I18n", + "description": "Gettext library to translate with i18n", "homepage": "https://github.com/LeoColomb/pomo", "keywords": [ "gettext", @@ -457,6 +457,20 @@ "localization", "translation" ], + "support": { + "issues": "https://github.com/LeoColomb/pomo/issues", + "source": "https://github.com/LeoColomb/pomo/tree/v1.5.0" + }, + "funding": [ + { + "url": "https://github.com/LeoColomb", + "type": "github" + }, + { + "url": "https://www.patreon.com/LeoColomb", + "type": "patreon" + } + ], "install-path": "../pomo/pomo" }, { @@ -514,17 +528,17 @@ }, { "name": "rmccue/requests", - "version": "2.0.2", - "version_normalized": "2.0.2.0", + "version": "v2.0.5", + "version_normalized": "2.0.5.0", "source": { "type": "git", "url": "https://github.com/WordPress/Requests.git", - "reference": "b01ce7c91657d604f298751686d7f5eec87b9493" + "reference": "b717f1d2f4ef7992ec0c127747ed8b7e170c2f49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/WordPress/Requests/zipball/b01ce7c91657d604f298751686d7f5eec87b9493", - "reference": "b01ce7c91657d604f298751686d7f5eec87b9493", + "url": "https://api.github.com/repos/WordPress/Requests/zipball/b717f1d2f4ef7992ec0c127747ed8b7e170c2f49", + "reference": "b717f1d2f4ef7992ec0c127747ed8b7e170c2f49", "shasum": "" }, "require": { @@ -542,7 +556,7 @@ "wp-coding-standards/wpcs": "^2.0", "yoast/phpunit-polyfills": "^1.0.0" }, - "time": "2022-03-28T15:37:07+00:00", + "time": "2022-10-11T08:15:28+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -598,17 +612,17 @@ }, { "name": "spatie/array-to-xml", - "version": "2.16.0", - "version_normalized": "2.16.0.0", + "version": "2.17.1", + "version_normalized": "2.17.1.0", "source": { "type": "git", "url": "https://github.com/spatie/array-to-xml.git", - "reference": "db39308c5236b69b89cadc3f44f191704814eae2" + "reference": "5cbec9c6ab17e320c58a259f0cebe88bde4a7c46" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/db39308c5236b69b89cadc3f44f191704814eae2", - "reference": "db39308c5236b69b89cadc3f44f191704814eae2", + "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/5cbec9c6ab17e320c58a259f0cebe88bde4a7c46", + "reference": "5cbec9c6ab17e320c58a259f0cebe88bde4a7c46", "shasum": "" }, "require": { @@ -617,10 +631,11 @@ }, "require-dev": { "mockery/mockery": "^1.2", + "pestphp/pest": "^1.21", "phpunit/phpunit": "^9.0", - "spatie/phpunit-snapshot-assertions": "^4.2" + "spatie/pest-plugin-snapshots": "^1.1" }, - "time": "2020-11-18T22:03:17+00:00", + "time": "2022-12-26T08:22:07+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -648,8 +663,7 @@ "xml" ], "support": { - "issues": "https://github.com/spatie/array-to-xml/issues", - "source": "https://github.com/spatie/array-to-xml/tree/2.16.0" + "source": "https://github.com/spatie/array-to-xml/tree/2.17.1" }, "funding": [ { @@ -665,17 +679,17 @@ }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.25.0", - "version_normalized": "1.25.0.0", + "version": "v1.27.0", + "version_normalized": "1.27.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44" + "reference": "639084e360537a19f9ee352433b84ce831f3d2da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44", - "reference": "749045c69efb97c70d25d7463abba812e91f3a44", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da", "shasum": "" }, "require": { @@ -686,11 +700,11 @@ "suggest": { "ext-intl": "For best performance" }, - "time": "2021-09-14T14:02:44+00:00", + "time": "2022-11-03T14:55:06+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -735,7 +749,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" }, "funding": [ { @@ -755,17 +769,17 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.25.0", - "version_normalized": "1.25.0.0", + "version": "v1.27.0", + "version_normalized": "1.27.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", "shasum": "" }, "require": { @@ -774,11 +788,11 @@ "suggest": { "ext-intl": "For best performance" }, - "time": "2021-02-19T12:13:01+00:00", + "time": "2022-11-03T14:55:06+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -822,7 +836,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" }, "funding": [ { @@ -842,17 +856,17 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.25.0", - "version_normalized": "1.25.0.0", + "version": "v1.27.0", + "version_normalized": "1.27.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", "shasum": "" }, "require": { @@ -864,11 +878,11 @@ "suggest": { "ext-mbstring": "For best performance" }, - "time": "2021-11-30T18:21:41+00:00", + "time": "2022-11-03T14:55:06+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -908,7 +922,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" }, "funding": [ { @@ -928,27 +942,27 @@ }, { "name": "symfony/polyfill-php72", - "version": "v1.25.0", - "version_normalized": "1.25.0.0", + "version": "v1.27.0", + "version_normalized": "1.27.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", "shasum": "" }, "require": { "php": ">=7.1" }, - "time": "2021-05-27T09:17:38+00:00", + "time": "2022-11-03T14:55:06+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -987,7 +1001,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.25.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" }, "funding": [ { diff --git a/includes/vendor/composer/installed.php b/includes/vendor/composer/installed.php index bbfbb2a..4358d2d 100644 --- a/includes/vendor/composer/installed.php +++ b/includes/vendor/composer/installed.php @@ -1,157 +1,157 @@ array( + 'name' => 'yourls/yourls', 'pretty_version' => 'dev-master', 'version' => 'dev-master', + 'reference' => '9f7806c525ef266bb74bdd501463799e45fe2be5', 'type' => 'project', 'install_path' => __DIR__ . '/../../../', 'aliases' => array(), - 'reference' => '59464102ee27cb5c808625c92448a48cebefda6f', - 'name' => 'yourls/yourls', 'dev' => true, ), 'versions' => array( 'aura/sql' => array( 'pretty_version' => '3.1.0', 'version' => '3.1.0.0', + 'reference' => '88d8b8ed1bcfd588a649fdc7e7ac89ec047abbca', 'type' => 'library', 'install_path' => __DIR__ . '/../aura/sql', 'aliases' => array(), - 'reference' => '88d8b8ed1bcfd588a649fdc7e7ac89ec047abbca', 'dev_requirement' => false, ), 'composer/ca-bundle' => array( - 'pretty_version' => '1.3.1', - 'version' => '1.3.1.0', + 'pretty_version' => '1.3.4', + 'version' => '1.3.4.0', + 'reference' => '69098eca243998b53eed7a48d82dedd28b447cd5', 'type' => 'library', 'install_path' => __DIR__ . '/./ca-bundle', 'aliases' => array(), - 'reference' => '4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b', 'dev_requirement' => false, ), 'geoip2/geoip2' => array( - 'pretty_version' => 'v2.12.2', - 'version' => '2.12.2.0', + 'pretty_version' => 'v2.13.0', + 'version' => '2.13.0.0', + 'reference' => '6a41d8fbd6b90052bc34dff3b4252d0f88067b23', 'type' => 'library', 'install_path' => __DIR__ . '/../geoip2/geoip2', 'aliases' => array(), - 'reference' => '83adb44ac4b9553d36b579a14673ed124583082f', 'dev_requirement' => false, ), 'jakeasmith/http_build_url' => array( 'pretty_version' => '1.0.1', 'version' => '1.0.1.0', + 'reference' => '93c273e77cb1edead0cf8bcf8cd2003428e74e37', 'type' => 'library', 'install_path' => __DIR__ . '/../jakeasmith/http_build_url', 'aliases' => array(), - 'reference' => '93c273e77cb1edead0cf8bcf8cd2003428e74e37', 'dev_requirement' => false, ), 'maxmind-db/reader' => array( 'pretty_version' => 'v1.11.0', 'version' => '1.11.0.0', + 'reference' => 'b1f3c0699525336d09cc5161a2861268d9f2ae5b', 'type' => 'library', 'install_path' => __DIR__ . '/../maxmind-db/reader', 'aliases' => array(), - 'reference' => 'b1f3c0699525336d09cc5161a2861268d9f2ae5b', 'dev_requirement' => false, ), 'maxmind/web-service-common' => array( 'pretty_version' => 'v0.9.0', 'version' => '0.9.0.0', + 'reference' => '4dc5a3e8df38aea4ca3b1096cee3a038094e9b53', 'type' => 'library', 'install_path' => __DIR__ . '/../maxmind/web-service-common', 'aliases' => array(), - 'reference' => '4dc5a3e8df38aea4ca3b1096cee3a038094e9b53', 'dev_requirement' => false, ), 'ozh/bookmarkletgen' => array( - 'pretty_version' => '1.2', - 'version' => '1.2.0.0', + 'pretty_version' => '1.2.2', + 'version' => '1.2.2.0', + 'reference' => '65fffa64bb11f70470d398d7baf6d9bb84411cfc', 'type' => 'library', 'install_path' => __DIR__ . '/../ozh/bookmarkletgen', 'aliases' => array(), - 'reference' => '3319b53c493a1474a03d1cc4e087617652284c20', 'dev_requirement' => false, ), 'pomo/pomo' => array( - 'pretty_version' => 'v1.4.1', - 'version' => '1.4.1.0', + 'pretty_version' => 'v1.5.0', + 'version' => '1.5.0.0', + 'reference' => 'b1e53a997850496369634d574fa6b508091fc353', 'type' => 'library', 'install_path' => __DIR__ . '/../pomo/pomo', 'aliases' => array(), - 'reference' => '1594bd1f90c89a45ffc3da2ee6d5d582bfac7542', 'dev_requirement' => false, ), 'psr/log' => array( 'pretty_version' => '1.1.4', 'version' => '1.1.4.0', + 'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/log', 'aliases' => array(), - 'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11', 'dev_requirement' => false, ), 'rmccue/requests' => array( - 'pretty_version' => '2.0.2', - 'version' => '2.0.2.0', + 'pretty_version' => 'v2.0.5', + 'version' => '2.0.5.0', + 'reference' => 'b717f1d2f4ef7992ec0c127747ed8b7e170c2f49', 'type' => 'library', 'install_path' => __DIR__ . '/../rmccue/requests', 'aliases' => array(), - 'reference' => 'b01ce7c91657d604f298751686d7f5eec87b9493', 'dev_requirement' => false, ), 'spatie/array-to-xml' => array( - 'pretty_version' => '2.16.0', - 'version' => '2.16.0.0', + 'pretty_version' => '2.17.1', + 'version' => '2.17.1.0', + 'reference' => '5cbec9c6ab17e320c58a259f0cebe88bde4a7c46', 'type' => 'library', 'install_path' => __DIR__ . '/../spatie/array-to-xml', 'aliases' => array(), - 'reference' => 'db39308c5236b69b89cadc3f44f191704814eae2', 'dev_requirement' => false, ), 'symfony/polyfill-intl-idn' => array( - 'pretty_version' => 'v1.25.0', - 'version' => '1.25.0.0', + 'pretty_version' => 'v1.27.0', + 'version' => '1.27.0.0', + 'reference' => '639084e360537a19f9ee352433b84ce831f3d2da', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-intl-idn', 'aliases' => array(), - 'reference' => '749045c69efb97c70d25d7463abba812e91f3a44', 'dev_requirement' => false, ), 'symfony/polyfill-intl-normalizer' => array( - 'pretty_version' => 'v1.25.0', - 'version' => '1.25.0.0', + 'pretty_version' => 'v1.27.0', + 'version' => '1.27.0.0', + 'reference' => '19bd1e4fcd5b91116f14d8533c57831ed00571b6', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-intl-normalizer', 'aliases' => array(), - 'reference' => '8590a5f561694770bdcd3f9b5c69dde6945028e8', 'dev_requirement' => false, ), 'symfony/polyfill-mbstring' => array( - 'pretty_version' => 'v1.25.0', - 'version' => '1.25.0.0', + 'pretty_version' => 'v1.27.0', + 'version' => '1.27.0.0', + 'reference' => '8ad114f6b39e2c98a8b0e3bd907732c207c2b534', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', 'aliases' => array(), - 'reference' => '0abb51d2f102e00a4eefcf46ba7fec406d245825', 'dev_requirement' => false, ), 'symfony/polyfill-php72' => array( - 'pretty_version' => 'v1.25.0', - 'version' => '1.25.0.0', + 'pretty_version' => 'v1.27.0', + 'version' => '1.27.0.0', + 'reference' => '869329b1e9894268a8a61dabb69153029b7a8c97', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php72', 'aliases' => array(), - 'reference' => '9a142215a36a3888e30d0a9eeea9766764e96976', 'dev_requirement' => false, ), 'yourls/yourls' => array( 'pretty_version' => 'dev-master', 'version' => 'dev-master', + 'reference' => '9f7806c525ef266bb74bdd501463799e45fe2be5', 'type' => 'project', 'install_path' => __DIR__ . '/../../../', 'aliases' => array(), - 'reference' => '59464102ee27cb5c808625c92448a48cebefda6f', 'dev_requirement' => false, ), ), diff --git a/includes/vendor/geoip2/geoip2/README.md b/includes/vendor/geoip2/geoip2/README.md index 9d92e6f..ea08e27 100644 --- a/includes/vendor/geoip2/geoip2/README.md +++ b/includes/vendor/geoip2/geoip2/README.md @@ -258,6 +258,18 @@ print($record->network . "\n"); // '128.101.101.101/32' ``` +## Database Updates ## + +You can keep your databases up to date with our +[GeoIP Update program](https://github.com/maxmind/geoipupdate/releases). +[Learn more about GeoIP Update on our developer +portal.](https://dev.maxmind.com/geoip/updating-databases?lang=en) + +There is also a third-party tool for updating databases using PHP and +Composer. MaxMind does not offer support for this tool or maintain it. +[Learn more about the Geoip2 Update tool for PHP and Composer on its +GitHub page.](https://github.com/tronovav/geoip2-update) + ## Web Service Client ## ### Usage ### @@ -274,7 +286,8 @@ specifies the language preferences when using the `->name` method on the model classes that this client creates. The fourth argument is additional options such as `host` and `timeout`. -For instance, to call the GeoLite2 web service instead of GeoIP2 Precision: +For instance, to call the GeoLite2 web service instead of the GeoIP2 web +service: ```php $client = new Client(42, 'abcdef123456', ['en'], ['host' => 'geolite.info']); @@ -305,7 +318,8 @@ use GeoIp2\WebService\Client; // This creates a Client object that can be reused across requests. // Replace "42" with your account ID and "license_key" with your license // key. Set the "host" to "geolite.info" in the fourth argument options -// array to use the GeoLite2 web service instead of GeoIP2 Precision. +// array to use the GeoLite2 web service instead of the GeoIP2 web +// service. $client = new Client(42, 'abcdef123456'); // Replace "city" with the method corresponding to the web service that @@ -355,7 +369,7 @@ 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/docs/web-services?lang=en) +[GeoIP2 web service docs](https://dev.maxmind.com/geoip/docs/web-services?lang=en) for details on what data each end point may return. The only piece of data which is always returned is the `ipAddress` diff --git a/includes/vendor/geoip2/geoip2/src/Database/Reader.php b/includes/vendor/geoip2/geoip2/src/Database/Reader.php index 266f7ed..4dabc5d 100644 --- a/includes/vendor/geoip2/geoip2/src/Database/Reader.php +++ b/includes/vendor/geoip2/geoip2/src/Database/Reader.php @@ -6,6 +6,14 @@ namespace GeoIp2\Database; use GeoIp2\Exception\AddressNotFoundException; use GeoIp2\Model\AbstractModel; +use GeoIp2\Model\AnonymousIp; +use GeoIp2\Model\Asn; +use GeoIp2\Model\City; +use GeoIp2\Model\ConnectionType; +use GeoIp2\Model\Country; +use GeoIp2\Model\Domain; +use GeoIp2\Model\Enterprise; +use GeoIp2\Model\Isp; use GeoIp2\ProviderInterface; use MaxMind\Db\Reader as DbReader; use MaxMind\Db\Reader\InvalidDatabaseException; @@ -40,10 +48,12 @@ class Reader implements ProviderInterface * @var DbReader */ private $dbReader; + /** * @var string */ private $dbType; + /** * @var array */ @@ -78,10 +88,10 @@ class Reader implements ProviderInterface * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database * is corrupt or invalid */ - public function city(string $ipAddress): \GeoIp2\Model\City + public function city(string $ipAddress): City { // @phpstan-ignore-next-line - return $this->modelFor('City', 'City', $ipAddress); + return $this->modelFor(City::class, 'City', $ipAddress); } /** @@ -94,10 +104,10 @@ class Reader implements ProviderInterface * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database * is corrupt or invalid */ - public function country(string $ipAddress): \GeoIp2\Model\Country + public function country(string $ipAddress): Country { // @phpstan-ignore-next-line - return $this->modelFor('Country', 'Country', $ipAddress); + return $this->modelFor(Country::class, 'Country', $ipAddress); } /** @@ -110,11 +120,11 @@ class Reader implements ProviderInterface * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database * is corrupt or invalid */ - public function anonymousIp(string $ipAddress): \GeoIp2\Model\AnonymousIp + public function anonymousIp(string $ipAddress): AnonymousIp { // @phpstan-ignore-next-line return $this->flatModelFor( - 'AnonymousIp', + AnonymousIp::class, 'GeoIP2-Anonymous-IP', $ipAddress ); @@ -130,11 +140,11 @@ class Reader implements ProviderInterface * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database * is corrupt or invalid */ - public function asn(string $ipAddress): \GeoIp2\Model\Asn + public function asn(string $ipAddress): Asn { // @phpstan-ignore-next-line return $this->flatModelFor( - 'Asn', + Asn::class, 'GeoLite2-ASN', $ipAddress ); @@ -150,11 +160,11 @@ class Reader implements ProviderInterface * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database * is corrupt or invalid */ - public function connectionType(string $ipAddress): \GeoIp2\Model\ConnectionType + public function connectionType(string $ipAddress): ConnectionType { // @phpstan-ignore-next-line return $this->flatModelFor( - 'ConnectionType', + ConnectionType::class, 'GeoIP2-Connection-Type', $ipAddress ); @@ -170,11 +180,11 @@ class Reader implements ProviderInterface * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database * is corrupt or invalid */ - public function domain(string $ipAddress): \GeoIp2\Model\Domain + public function domain(string $ipAddress): Domain { // @phpstan-ignore-next-line return $this->flatModelFor( - 'Domain', + Domain::class, 'GeoIP2-Domain', $ipAddress ); @@ -190,10 +200,10 @@ class Reader implements ProviderInterface * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database * is corrupt or invalid */ - public function enterprise(string $ipAddress): \GeoIp2\Model\Enterprise + public function enterprise(string $ipAddress): Enterprise { // @phpstan-ignore-next-line - return $this->modelFor('Enterprise', 'Enterprise', $ipAddress); + return $this->modelFor(Enterprise::class, 'Enterprise', $ipAddress); } /** @@ -206,11 +216,11 @@ class Reader implements ProviderInterface * @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database * is corrupt or invalid */ - public function isp(string $ipAddress): \GeoIp2\Model\Isp + public function isp(string $ipAddress): Isp { // @phpstan-ignore-next-line return $this->flatModelFor( - 'Isp', + Isp::class, 'GeoIP2-ISP', $ipAddress ); @@ -223,8 +233,6 @@ class Reader implements ProviderInterface $record['traits']['ip_address'] = $ipAddress; $record['traits']['prefix_len'] = $prefixLen; - $class = 'GeoIp2\\Model\\' . $class; - return new $class($record, $this->locales); } @@ -234,7 +242,6 @@ class Reader implements ProviderInterface $record['ip_address'] = $ipAddress; $record['prefix_len'] = $prefixLen; - $class = 'GeoIp2\\Model\\' . $class; return new $class($record); } @@ -242,7 +249,7 @@ class Reader implements ProviderInterface private function getRecord(string $class, string $type, string $ipAddress): array { if (strpos($this->dbType, $type) === false) { - $method = lcfirst($class); + $method = lcfirst((new \ReflectionClass($class))->getShortName()); throw new \BadMethodCallException( "The $method method cannot be used to open a {$this->dbType} database" diff --git a/includes/vendor/geoip2/geoip2/src/Model/AnonymousIp.php b/includes/vendor/geoip2/geoip2/src/Model/AnonymousIp.php index 9cb616b..5586bd0 100644 --- a/includes/vendor/geoip2/geoip2/src/Model/AnonymousIp.php +++ b/includes/vendor/geoip2/geoip2/src/Model/AnonymousIp.php @@ -35,30 +35,37 @@ class AnonymousIp extends AbstractModel * @var bool */ protected $isAnonymous; + /** * @var bool */ protected $isAnonymousVpn; + /** * @var bool */ protected $isHostingProvider; + /** * @var bool */ protected $isPublicProxy; + /** * @var bool */ protected $isResidentialProxy; + /** * @var bool */ protected $isTorExitNode; + /** * @var string */ protected $ipAddress; + /** * @var string */ diff --git a/includes/vendor/geoip2/geoip2/src/Model/Asn.php b/includes/vendor/geoip2/geoip2/src/Model/Asn.php index 8b75830..f05177e 100644 --- a/includes/vendor/geoip2/geoip2/src/Model/Asn.php +++ b/includes/vendor/geoip2/geoip2/src/Model/Asn.php @@ -26,14 +26,17 @@ class Asn extends AbstractModel * @var int|null */ protected $autonomousSystemNumber; + /** * @var string|null */ protected $autonomousSystemOrganization; + /** * @var string */ protected $ipAddress; + /** * @var string */ diff --git a/includes/vendor/geoip2/geoip2/src/Model/City.php b/includes/vendor/geoip2/geoip2/src/Model/City.php index 016c195..b2e81dc 100644 --- a/includes/vendor/geoip2/geoip2/src/Model/City.php +++ b/includes/vendor/geoip2/geoip2/src/Model/City.php @@ -5,11 +5,11 @@ declare(strict_types=1); namespace GeoIp2\Model; /** - * Model class for the data returned by GeoIP2 City web service and database. + * Model class for the data returned by City Plus web service and City + * database. * - * The only difference between the City and Insights model classes is which - * fields in each record may be populated. See - * https://dev.maxmind.com/geoip/docs/web-services?lang=en for more details. + * See https://dev.maxmind.com/geoip/docs/web-services?lang=en for more + * details. * * @property-read \GeoIp2\Record\City $city City data for the requested IP * address. @@ -37,18 +37,21 @@ class City extends Country * @var \GeoIp2\Record\City */ protected $city; + /** * @ignore * * @var \GeoIp2\Record\Location */ protected $location; + /** * @ignore * * @var \GeoIp2\Record\Postal */ protected $postal; + /** * @ignore * diff --git a/includes/vendor/geoip2/geoip2/src/Model/ConnectionType.php b/includes/vendor/geoip2/geoip2/src/Model/ConnectionType.php index 4f948d8..36d4529 100644 --- a/includes/vendor/geoip2/geoip2/src/Model/ConnectionType.php +++ b/includes/vendor/geoip2/geoip2/src/Model/ConnectionType.php @@ -24,10 +24,12 @@ class ConnectionType extends AbstractModel * @var string|null */ protected $connectionType; + /** * @var string */ protected $ipAddress; + /** * @var string */ diff --git a/includes/vendor/geoip2/geoip2/src/Model/Country.php b/includes/vendor/geoip2/geoip2/src/Model/Country.php index f76dbe3..fdffc63 100644 --- a/includes/vendor/geoip2/geoip2/src/Model/Country.php +++ b/includes/vendor/geoip2/geoip2/src/Model/Country.php @@ -7,9 +7,7 @@ namespace GeoIp2\Model; /** * Model class for the data returned by GeoIP2 Country web service and database. * - * The only difference between the City and Insights model classes is which - * fields in each record may be populated. See - * https://dev.maxmind.com/geoip/docs/web-services?lang=en for more details. + * See https://dev.maxmind.com/geoip/docs/web-services?lang=en for more details. * * @property-read \GeoIp2\Record\Continent $continent Continent data for the * requested IP address. @@ -36,26 +34,32 @@ class Country extends AbstractModel * @var \GeoIp2\Record\Continent */ protected $continent; + /** * @var \GeoIp2\Record\Country */ protected $country; + /** * @var array */ protected $locales; + /** * @var \GeoIp2\Record\MaxMind */ protected $maxmind; + /** * @var \GeoIp2\Record\Country */ protected $registeredCountry; + /** * @var \GeoIp2\Record\RepresentedCountry */ protected $representedCountry; + /** * @var \GeoIp2\Record\Traits */ diff --git a/includes/vendor/geoip2/geoip2/src/Model/Domain.php b/includes/vendor/geoip2/geoip2/src/Model/Domain.php index dad71ff..067a507 100644 --- a/includes/vendor/geoip2/geoip2/src/Model/Domain.php +++ b/includes/vendor/geoip2/geoip2/src/Model/Domain.php @@ -24,10 +24,12 @@ class Domain extends AbstractModel * @var string|null */ protected $domain; + /** * @var string */ protected $ipAddress; + /** * @var string */ diff --git a/includes/vendor/geoip2/geoip2/src/Model/Enterprise.php b/includes/vendor/geoip2/geoip2/src/Model/Enterprise.php index 80ad091..c63469b 100644 --- a/includes/vendor/geoip2/geoip2/src/Model/Enterprise.php +++ b/includes/vendor/geoip2/geoip2/src/Model/Enterprise.php @@ -7,9 +7,8 @@ namespace GeoIp2\Model; /** * Model class for the data returned by GeoIP2 Enterprise database lookups. * - * The only difference between the City and Enterprise model classes is which - * fields in each record may be populated. See - * https://dev.maxmind.com/geoip/docs/web-services?lang=en for more details. + * See https://dev.maxmind.com/geoip/docs/web-services?lang=en for more + * details. */ class Enterprise extends City { diff --git a/includes/vendor/geoip2/geoip2/src/Model/Insights.php b/includes/vendor/geoip2/geoip2/src/Model/Insights.php index f3813ad..351c7a5 100644 --- a/includes/vendor/geoip2/geoip2/src/Model/Insights.php +++ b/includes/vendor/geoip2/geoip2/src/Model/Insights.php @@ -5,11 +5,10 @@ declare(strict_types=1); namespace GeoIp2\Model; /** - * Model class for the data returned by GeoIP2 Precision: Insights web service. + * Model class for the data returned by GeoIP2 Insights web service. * - * The only difference between the City and Insights model classes is which - * fields in each record may be populated. See - * https://dev.maxmind.com/geoip/docs/web-services?lang=en for more details. + * See https://dev.maxmind.com/geoip/docs/web-services?lang=en for + * more details. */ class Insights extends City { diff --git a/includes/vendor/geoip2/geoip2/src/Model/Isp.php b/includes/vendor/geoip2/geoip2/src/Model/Isp.php index 9968f37..f54efd9 100644 --- a/includes/vendor/geoip2/geoip2/src/Model/Isp.php +++ b/includes/vendor/geoip2/geoip2/src/Model/Isp.php @@ -36,30 +36,37 @@ class Isp extends AbstractModel * @var int|null */ protected $autonomousSystemNumber; + /** * @var string|null */ protected $autonomousSystemOrganization; + /** * @var string|null */ protected $isp; + /** * @var string|null */ protected $mobileCountryCode; + /** * @var string|null */ protected $mobileNetworkCode; + /** * @var string|null */ protected $organization; + /** * @var string */ protected $ipAddress; + /** * @var string */ diff --git a/includes/vendor/geoip2/geoip2/src/Record/AbstractPlaceRecord.php b/includes/vendor/geoip2/geoip2/src/Record/AbstractPlaceRecord.php index 3f81c44..684ab8c 100644 --- a/includes/vendor/geoip2/geoip2/src/Record/AbstractPlaceRecord.php +++ b/includes/vendor/geoip2/geoip2/src/Record/AbstractPlaceRecord.php @@ -57,7 +57,6 @@ abstract class AbstractPlaceRecord extends AbstractRecord private function firstSetNameLocale(): ?string { foreach ($this->locales as $locale) { - // @phpstan-ignore-next-line if (isset($this->names[$locale])) { return $locale; } diff --git a/includes/vendor/geoip2/geoip2/src/Record/City.php b/includes/vendor/geoip2/geoip2/src/Record/City.php index 68b3166..f25dcb3 100644 --- a/includes/vendor/geoip2/geoip2/src/Record/City.php +++ b/includes/vendor/geoip2/geoip2/src/Record/City.php @@ -18,7 +18,7 @@ namespace GeoIp2\Record; * @property-read string|null $name The name of the city based on the locales list * passed to the constructor. This attribute is returned by all location * services and databases. - * @property-read array|null $names A array map where the keys are locale codes + * @property-read array|null $names An array map where the keys are locale codes * and the values are names. This attribute is returned by all location * services and databases. */ diff --git a/includes/vendor/geoip2/geoip2/src/Record/Traits.php b/includes/vendor/geoip2/geoip2/src/Record/Traits.php index cbe6b59..8000d50 100644 --- a/includes/vendor/geoip2/geoip2/src/Record/Traits.php +++ b/includes/vendor/geoip2/geoip2/src/Record/Traits.php @@ -14,13 +14,13 @@ use GeoIp2\Util; * @property-read int|null $autonomousSystemNumber The autonomous system number * associated with the IP address. See * https://en.wikipedia.org/wiki/Autonomous_system_(Internet%29. This attribute - * is only available from the City and Insights web service and the GeoIP2 - * Enterprise database. + * is only available from the City Plus and Insights web services and the + * GeoIP2 Enterprise database. * @property-read string|null $autonomousSystemOrganization The organization * associated with the registered autonomous system number for the IP address. * See https://en.wikipedia.org/wiki/Autonomous_system_(Internet%29. This - * attribute is only available from the City and Insights web service and the - * GeoIP2 Enterprise database. + * attribute is only available from the City Plus and Insights web services and + * the GeoIP2 Enterprise database. * @property-read string|null $connectionType The connection type may take the * following values: "Dialup", "Cable/DSL", "Corporate", "Cellular". * Additional values may be added in the future. This attribute is only @@ -28,7 +28,7 @@ use GeoIp2\Util; * @property-read string|null $domain The second level domain associated with the * IP address. This will be something like "example.com" or "example.co.uk", * not "foo.example.com". This attribute is only available from the - * City and Insights web service and the GeoIP2 Enterprise + * City Plus and Insights web services and the GeoIP2 Enterprise * database. * @property-read string $ipAddress The IP address that the data in the model * is for. If you performed a "me" lookup against the web service, this @@ -38,7 +38,7 @@ use GeoIp2\Util; * points. * @property-read bool $isAnonymous This is true if the IP address belongs to * any sort of anonymous network. This property is only available from GeoIP2 - * Precision Insights. + * Insights. * @property-read bool $isAnonymousProxy *Deprecated.* Please see our GeoIP2 * Anonymous IP database * (https://www.maxmind.com/en/geoip2-anonymous-ip-database) to determine @@ -47,50 +47,49 @@ use GeoIp2\Util; * registered to an anonymous VPN provider. If a VPN provider does not register * subnets under names associated with them, we will likely only flag their IP * ranges using the isHostingProvider property. This property is only available - * from GeoIP2 Precision Insights. + * from GeoIP2 Insights. * @property-read bool $isHostingProvider This is true if the IP address belongs * to a hosting or VPN provider (see description of isAnonymousVpn property). - * This property is only available from GeoIP2 Precision Insights. + * This property is only available from GeoIP2 Insights. * @property-read bool $isLegitimateProxy This attribute is true if MaxMind * believes this IP address to be a legitimate proxy, such as an internal * VPN used by a corporation. This attribute is only available in the GeoIP2 * Enterprise database. * @property-read bool $isPublicProxy This is true if the IP address belongs to - * a public proxy. This property is only available from GeoIP2 Precision - * Insights. + * a public proxy. This property is only available from GeoIP2 Insights. * @property-read bool $isResidentialProxy This is true if the IP address is * on a suspected anonymizing network and belongs to a residential ISP. This - * property is only available from GeoIP2 Precision Insights. + * property is only available from GeoIP2 Insights. * @property-read bool $isSatelliteProvider *Deprecated.* Due to the * increased coverage by mobile carriers, very few satellite providers now * serve multiple countries. As a result, the output does not provide * sufficiently relevant data for us to maintain it. * @property-read bool $isTorExitNode This is true if the IP address is a Tor - * exit node. This property is only available from GeoIP2 Precision Insights. + * exit node. This property is only available from GeoIP2 Insights. * @property-read string|null $isp The name of the ISP associated with the IP - * address. This attribute is only available from the City and Insights web - * services and the GeoIP2 Enterprise database. + * address. This attribute is only available from the City Plus and Insights + * web services and the GeoIP2 Enterprise database. * @property-read string $network The network in CIDR notation associated with * the record. In particular, this is the largest network where all of the * fields besides $ipAddress have the same value. - * @property-read string|null $organization The name of the organization associated - * with the IP address. This attribute is only available from the City and - * Insights web services and the GeoIP2 Enterprise database. + * @property-read string|null $organization The name of the organization + * associated with the IP address. This attribute is only available from the + * City Plus and Insights web services and the GeoIP2 Enterprise database. * @property-read string|null $mobileCountryCode The [mobile country code * (MCC)](https://en.wikipedia.org/wiki/Mobile_country_code) associated with - * the IP address and ISP. This property is available from the City and + * the IP address and ISP. This property is available from the City Plus and * Insights web services and the GeoIP2 Enterprise database. * @property-read string|null $mobileNetworkCode The [mobile network code * (MNC)](https://en.wikipedia.org/wiki/Mobile_country_code) associated with - * the IP address and ISP. This property is available from the City and + * the IP address and ISP. This property is available from the City Plus and * Insights web services and the GeoIP2 Enterprise database. * @property-read float|null $staticIpScore An indicator of how static or * dynamic an IP address is. This property is only available from GeoIP2 - * Precision Insights. + * Insights. * @property-read int|null $userCount The estimated number of users sharing * the IP/network during the past 24 hours. For IPv4, the count is for the * individual IP. For IPv6, the count is for the /64 network. This property is - * only available from GeoIP2 Precision Insights. + * only available from GeoIP2 Insights. * @property-read string|null $userType

The user type associated with the IP * address. This can be one of the following values:

*
    @@ -98,6 +97,7 @@ use GeoIp2\Util; *
  • cafe *
  • cellular *
  • college + *
  • consumer_privacy_network *
  • content_delivery_network *
  • dialup *
  • government diff --git a/includes/vendor/geoip2/geoip2/src/WebService/Client.php b/includes/vendor/geoip2/geoip2/src/WebService/Client.php index 72c4895..18d979d 100644 --- a/includes/vendor/geoip2/geoip2/src/WebService/Client.php +++ b/includes/vendor/geoip2/geoip2/src/WebService/Client.php @@ -17,9 +17,9 @@ use GeoIp2\ProviderInterface; use MaxMind\WebService\Client as WsClient; /** - * This class provides a client API for all the GeoIP2 Precision web services. - * The services are Country, City, and Insights. Each service returns a - * different set of data about an IP address, with Country returning the + * This class provides a client API for all the GeoIP2 web services. + * The services are Country, City Plus, and Insights. Each service returns + * a different set of data about an IP address, with Country returning the * least data and Insights the most. * * Each web service is represented by a different model class, and these model @@ -52,16 +52,18 @@ class Client implements ProviderInterface * @var array */ private $locales; + /** * @var WsClient */ private $client; + /** * @var string */ private static $basePath = '/geoip/v2.1'; - public const VERSION = 'v2.12.2'; + public const VERSION = 'v2.13.0'; /** * Constructor. @@ -71,9 +73,10 @@ class Client implements ProviderInterface * @param array $locales list of locale codes to use in name property * from most preferred to least preferred * @param array $options array of options. Valid options include: - * * `host` - The host to use when querying the web service. To - * query the GeoLite2 web service instead of GeoIP2 Precision, - * set the host to `geolite.info`. + * * `host` - The host to use when querying the web + * service. To query the GeoLite2 web service + * instead of the GeoIP2 web service, set the + * host to `geolite.info`. * * `timeout` - Timeout in seconds. * * `connectTimeout` - Initial connection timeout in seconds. * * `proxy` - The HTTP proxy to use. May include a schema, port, @@ -110,7 +113,7 @@ class Client implements ProviderInterface } /** - * This method calls the City service. + * This method calls the City Plus service. * * @param string $ipAddress IPv4 or IPv6 address as a string. If no * address is provided, the address that the web service is called @@ -136,7 +139,7 @@ class Client implements ProviderInterface public function city(string $ipAddress = 'me'): City { // @phpstan-ignore-next-line - return $this->responseFor('city', 'City', $ipAddress); + return $this->responseFor('city', City::class, $ipAddress); } /** @@ -165,12 +168,12 @@ class Client implements ProviderInterface */ public function country(string $ipAddress = 'me'): Country { - return $this->responseFor('country', 'Country', $ipAddress); + return $this->responseFor('country', Country::class, $ipAddress); } /** - * This method calls the Insights service. Insights is only supported by GeoIP2 - * Precision. The GeoLite2 web service does not support it. + * This method calls the Insights service. Insights is only supported by + * the GeoIP2 web service. The GeoLite2 web service does not support it. * * @param string $ipAddress IPv4 or IPv6 address as a string. If no * address is provided, the address that the web service is called @@ -196,7 +199,7 @@ class Client implements ProviderInterface public function insights(string $ipAddress = 'me'): Insights { // @phpstan-ignore-next-line - return $this->responseFor('insights', 'Insights', $ipAddress); + return $this->responseFor('insights', Insights::class, $ipAddress); } private function responseFor(string $endpoint, string $class, string $ipAddress): Country @@ -204,7 +207,8 @@ class Client implements ProviderInterface $path = implode('/', [self::$basePath, $endpoint, $ipAddress]); try { - $body = $this->client->get('GeoIP2 ' . $class, $path); + $service = (new \ReflectionClass($class))->getShortName(); + $body = $this->client->get('GeoIP2 ' . $service, $path); } catch (\MaxMind\Exception\IpAddressNotFoundException $ex) { throw new AddressNotFoundException( $ex->getMessage(), @@ -246,8 +250,6 @@ class Client implements ProviderInterface ); } - $class = 'GeoIp2\\Model\\' . $class; - return new $class($body, $this->locales); } } diff --git a/includes/vendor/pomo/pomo/README.md b/includes/vendor/pomo/pomo/README.md index eb54264..2ed0786 100644 --- a/includes/vendor/pomo/pomo/README.md +++ b/includes/vendor/pomo/pomo/README.md @@ -1,14 +1,15 @@ -POMO -==== +# POMO + +> Gettext library to translate with i18n + [![Latest Release](https://img.shields.io/packagist/v/pomo/pomo.svg)](https://packagist.org/packages/pomo/pomo) -[![Build Status](https://travis-ci.org/LeoColomb/pomo.svg?branch=master)](https://travis-ci.org/LeoColomb/pomo) -[![Code Climate](https://img.shields.io/codeclimate/github/LeoColomb/pomo.svg)](https://codeclimate.com/github/LeoColomb/pomo) -**Gettext library to translate with I18n**. -[Why use it](http://codex.wordpress.org/I18n_for_WordPress_Developers). +## About + +[Why use it](https://codex.wordpress.org/I18n_for_WordPress_Developers). + +## Usage -Usage ------ ```php import_from_file($the_mo_filepath); $translations->translate($text); ``` -Installation ------------- -The easiest way to install POMO is via [composer](http://getcomposer.org/). -Create the following `composer.json` file and run the `php composer.phar install` command to install it. +## Installation -```json -{ - "require": { - "pomo/pomo": "*" - } -} +The easiest way to install POMO is via [composer](http://getcomposer.org/). + +```console +composer require pomo/pomo ``` ```php is_resource()) { + + if (! $reader->is_resource()) { return false; } @@ -58,18 +64,16 @@ class MO extends GettextTranslations /** * @param string $filename - * * @return bool */ public function export_to_file($filename) { $fh = fopen($filename, 'wb'); - if (!$fh) { + if (! $fh) { return false; } $res = $this->export_to_file_handle($fh); fclose($fh); - return $res; } @@ -79,12 +83,11 @@ class MO extends GettextTranslations public function export() { $tmp_fh = fopen('php://temp', 'r+'); - if (!$tmp_fh) { + if (! $tmp_fh) { return false; } $this->export_to_file_handle($tmp_fh); rewind($tmp_fh); - return stream_get_contents($tmp_fh); } @@ -99,7 +102,7 @@ class MO extends GettextTranslations return false; } - if (!array_filter($entry->translations)) { + if (! array_filter($entry->translations)) { return false; } @@ -108,69 +111,63 @@ class MO extends GettextTranslations /** * @param resource $fh - * * @return true */ public function export_to_file_handle($fh) { - $entries = array_filter( - $this->entries, - array($this, 'is_entry_good_for_export') - ); + $entries = array_filter($this->entries, array($this, 'is_entry_good_for_export')); ksort($entries); - $magic = 0x950412de; - $revision = 0; - $total = count($entries) + 1; // all the headers are one entry - $originals_lenghts_addr = 28; - $translations_lenghts_addr = $originals_lenghts_addr + 8 * $total; - $size_of_hash = 0; - $hash_addr = $translations_lenghts_addr + 8 * $total; - $current_addr = $hash_addr; - fwrite($fh, pack( - 'V*', - $magic, - $revision, - $total, - $originals_lenghts_addr, - $translations_lenghts_addr, - $size_of_hash, - $hash_addr - )); - fseek($fh, $originals_lenghts_addr); + $magic = 0x950412de; + $revision = 0; + $total = count($entries) + 1; // All the headers are one entry. + $originals_lengths_addr = 28; + $translations_lengths_addr = $originals_lengths_addr + 8 * $total; + $size_of_hash = 0; + $hash_addr = $translations_lengths_addr + 8 * $total; + $current_addr = $hash_addr; + fwrite( + $fh, + pack( + 'V*', + $magic, + $revision, + $total, + $originals_lengths_addr, + $translations_lengths_addr, + $size_of_hash, + $hash_addr + ) + ); + fseek($fh, $originals_lengths_addr); - // headers' msgid is an empty string + // Headers' msgid is an empty string. fwrite($fh, pack('VV', 0, $current_addr)); $current_addr++; - $originals_table = chr(0); + $originals_table = "\0"; $reader = new NOOPReader(); foreach ($entries as $entry) { - $originals_table .= $this->export_original($entry).chr(0); - $length = $reader->strlen($this->export_original($entry)); + $originals_table .= $this->export_original($entry) . "\0"; + $length = $reader->strlen($this->export_original($entry)); fwrite($fh, pack('VV', $length, $current_addr)); - $current_addr += $length + 1; // account for the NULL byte after + $current_addr += $length + 1; // Account for the NULL byte after. } $exported_headers = $this->export_headers(); - fwrite($fh, pack( - 'VV', - $reader->strlen($exported_headers), - $current_addr - )); - $current_addr += strlen($exported_headers) + 1; - $translations_table = $exported_headers.chr(0); + fwrite($fh, pack('VV', $reader->strlen($exported_headers), $current_addr)); + $current_addr += strlen($exported_headers) + 1; + $translations_table = $exported_headers . "\0"; foreach ($entries as $entry) { - $translations_table .= $this->export_translations($entry).chr(0); - $length = $reader->strlen($this->export_translations($entry)); + $translations_table .= $this->export_translations($entry) . "\0"; + $length = $reader->strlen($this->export_translations($entry)); fwrite($fh, pack('VV', $length, $current_addr)); $current_addr += $length + 1; } fwrite($fh, $originals_table); fwrite($fh, $translations_table); - return true; } @@ -181,15 +178,14 @@ class MO extends GettextTranslations */ public function export_original(EntryTranslations $entry) { - //TODO: warnings for control characters + // TODO: Warnings for control characters. $exported = $entry->singular; if ($entry->is_plural) { - $exported .= chr(0).$entry->plural; + $exported .= "\0" . $entry->plural; } - if (!is_null($entry->context)) { - $exported = $entry->context.chr(4).$exported; + if ($entry->context) { + $exported = $entry->context . "\4" . $exported; } - return $exported; } @@ -200,8 +196,8 @@ class MO extends GettextTranslations */ public function export_translations(EntryTranslations $entry) { - //TODO: warnings for control characters - return $entry->is_plural ? implode(chr(0), $entry->translations) : $entry->translations[0]; + // TODO: Warnings for control characters. + return $entry->is_plural ? implode("\0", $entry->translations) : $entry->translations[0]; } /** @@ -213,22 +209,22 @@ class MO extends GettextTranslations foreach ($this->headers as $header => $value) { $exported .= "$header: $value\n"; } - return $exported; } /** * @param int $magic - * * @return string|false */ public function get_byteorder($magic) { - // The magic is 0x950412de - $magic_little = (int) -1794895138; + // The magic is 0x950412de. + + // bug in PHP 5.0.2, see https://savannah.nongnu.org/bugs/?func=detailitem&item_id=10565 + $magic_little = (int) - 1794895138; $magic_little_64 = (int) 2500072158; // 0xde120495 - $magic_big = ((int) -569244523) & 0xFFFFFFFF; + $magic_big = ((int) - 569244523) & 0xFFFFFFFF; if ($magic_little == $magic || $magic_little_64 == $magic) { return 'little'; } elseif ($magic_big == $magic) { @@ -240,8 +236,7 @@ class MO extends GettextTranslations /** * @param FileReader $reader - * - * @return bool + * @return bool True if the import was successful, otherwise false. */ public function import_from_reader(FileReader $reader) { @@ -251,29 +246,29 @@ class MO extends GettextTranslations } $reader->setEndian($endian_string); - $endian = ('big' == $endian_string) ? 'N' : 'V'; + $endian = ('big' === $endian_string) ? 'N' : 'V'; $header = $reader->read(24); if ($reader->strlen($header) != 24) { return false; } - // parse header - $header = unpack("{$endian}revision/{$endian}total/{$endian}originals_lenghts_addr/{$endian}translations_lenghts_addr/{$endian}hash_length/{$endian}hash_addr", $header); - if (!is_array($header)) { + // Parse header. + $header = unpack("{$endian}revision/{$endian}total/{$endian}originals_lengths_addr/{$endian}translations_lengths_addr/{$endian}hash_length/{$endian}hash_addr", $header); + if (! is_array($header)) { return false; } - // support revision 0 of MO format specs, only - if ($header['revision'] != 0) { + // Support revision 0 of MO format specs, only. + if (0 != $header['revision']) { return false; } - // seek to data blocks - $reader->seekto($header['originals_lenghts_addr']); + // Seek to data blocks. + $reader->seekto($header['originals_lengths_addr']); - // read originals' indices - $originals_lengths_length = $header['translations_lenghts_addr'] - $header['originals_lenghts_addr']; + // Read originals' indices. + $originals_lengths_length = $header['translations_lengths_addr'] - $header['originals_lengths_addr']; if ($originals_lengths_length != $header['total'] * 8) { return false; } @@ -283,22 +278,22 @@ class MO extends GettextTranslations return false; } - // read translations' indices - $translations_lenghts_length = $header['hash_addr'] - $header['translations_lenghts_addr']; - if ($translations_lenghts_length != $header['total'] * 8) { + // Read translations' indices. + $translations_lengths_length = $header['hash_addr'] - $header['translations_lengths_addr']; + if ($translations_lengths_length != $header['total'] * 8) { return false; } - $translations = $reader->read($translations_lenghts_length); - if ($reader->strlen($translations) != $translations_lenghts_length) { + $translations = $reader->read($translations_lengths_length); + if ($reader->strlen($translations) != $translations_lengths_length) { return false; } - // transform raw data into set of indices - $originals = $reader->str_split($originals, 8); + // Transform raw data into set of indices. + $originals = $reader->str_split($originals, 8); $translations = $reader->str_split($translations, 8); - // skip hash table + // Skip hash table. $strings_addr = $header['hash_addr'] + $header['hash_length'] * 4; $reader->seekto($strings_addr); @@ -307,67 +302,63 @@ class MO extends GettextTranslations $reader->close(); for ($i = 0; $i < $header['total']; $i++) { - $o = unpack("{$endian}length/{$endian}pos", $originals[$i]); - $t = unpack("{$endian}length/{$endian}pos", $translations[$i]); - if (!$o || !$t) { + $o = unpack("{$endian}length/{$endian}pos", $originals[ $i ]); + $t = unpack("{$endian}length/{$endian}pos", $translations[ $i ]); + if (! $o || ! $t) { return false; } - // adjust offset due to reading strings to separate space before + // Adjust offset due to reading strings to separate space before. $o['pos'] -= $strings_addr; $t['pos'] -= $strings_addr; - $original = $reader->substr($strings, $o['pos'], $o['length']); + $original = $reader->substr($strings, $o['pos'], $o['length']); $translation = $reader->substr($strings, $t['pos'], $t['length']); if ('' === $original) { $this->set_headers($this->make_headers($translation)); } else { - $entry = &static::make_entry($original, $translation); - $this->entries[$entry->key()] = &$entry; + $entry = &static::make_entry($original, $translation); + $this->entries[ $entry->key() ] = &$entry; } } - return true; } /** - * Build a from original string and translation strings, - * found in a MO file. + * Build a EntryTranslations from original string and translation strings, + * found in a MO file * - * @param string $original original string to translate from MO file. - * Might contain 0x04 as context separator or - * 0x00 as singular/plural separator - * @param string $translation translation string from MO file.Might contain - * 0x00 as a plural translations separator - * - * @return EntryTranslations New entry + * @static + * @param string $original original string to translate from MO file. Might contain + * 0x04 as context separator or 0x00 as singular/plural separator + * @param string $translation translation string from MO file. Might contain + * 0x00 as a plural translations separator + * @return EntryTranslations Entry instance. */ public static function &make_entry($original, $translation) { $entry = new EntryTranslations(); - // look for context - $parts = explode(chr(4), $original); + // Look for context, separated by \4. + $parts = explode("\4", $original); if (isset($parts[1])) { - $original = $parts[1]; + $original = $parts[1]; $entry->context = $parts[0]; } - // look for plural original - $parts = explode(chr(0), $original); + // Look for plural original. + $parts = explode("\0", $original); $entry->singular = $parts[0]; if (isset($parts[1])) { $entry->is_plural = true; - $entry->plural = $parts[1]; + $entry->plural = $parts[1]; } - // plural translations are also separated by \0 - $entry->translations = explode(chr(0), $translation); - + // Plural translations are also separated by \0. + $entry->translations = explode("\0", $translation); return $entry; } /** * @param int $count - * * @return string */ public function select_plural_form($count) diff --git a/includes/vendor/pomo/pomo/src/PO.php b/includes/vendor/pomo/pomo/src/PO.php index 27d7c97..278e065 100644 --- a/includes/vendor/pomo/pomo/src/PO.php +++ b/includes/vendor/pomo/pomo/src/PO.php @@ -1,4 +1,5 @@ comments_before_headers) { - $before_headers = self::prepend_each_line( - rtrim($this->comments_before_headers)."\n", - '# ' - ); + $before_headers = self::prepend_each_line(rtrim($this->comments_before_headers) . "\n", '# '); } else { $before_headers = ''; } - return rtrim("{$before_headers}msgid \"\"\nmsgstr $poified"); } /** - * Exports all entries to PO format. + * Exports all entries to PO format * - * @return string sequence of mgsgid/msgstr PO strings, doesn't containt - * newline at the end + * @return string sequence of mgsgid/msgstr PO strings, doesn't containt newline at the end */ public function export_entries() { - //TODO: sorting - return implode("\n\n", array_map( - array(__NAMESPACE__.'\PO', 'export_entry'), - $this->entries - )); + // TODO: Sorting. + return implode("\n\n", array_map(array(__NAMESPACE__ . '\PO', 'export_entry'), $this->entries)); } /** - * Exports the whole PO file as a string. + * Exports the whole PO file as a string * - * @param bool $include_headers whether to include the headers in the - * export - * - * @return string ready for inclusion in PO file string for headers and all - * the enrtries + * @param bool $include_headers whether to include the headers in the export + * @return string ready for inclusion in PO file string for headers and all the enrtries */ public function export($include_headers = true) { @@ -79,17 +68,14 @@ class PO extends GettextTranslations $res .= "\n\n"; } $res .= $this->export_entries(); - return $res; } /** - * Same as {@link export}, but writes the result to a file. - * - * @param string $filename where to write the PO string - * @param bool $include_headers whether to include tje headers in the - * export + * Same as {@link export}, but writes the result to a file * + * @param string $filename Where to write the PO string. + * @param bool $include_headers Whether to include the headers in the export. * @return bool true on success, false on error */ public function export_to_file($filename, $include_headers = true) @@ -99,7 +85,7 @@ class PO extends GettextTranslations return false; } $export = $this->export($include_headers); - $res = fwrite($fh, $export); + $res = fwrite($fh, $export); if (false === $res) { return false; } @@ -108,12 +94,11 @@ class PO extends GettextTranslations } /** - * Text to include as a comment before the start of the PO contents. + * Text to include as a comment before the start of the PO contents * - * Doesn't need to include # in the beginning of lines, these are added - * automatically + * Doesn't need to include # in the beginning of lines, these are added automatically * - * @param string $text Comment text + * @param string $text Text to include as a comment. */ public function set_comment_before_headers($text) { @@ -121,120 +106,114 @@ class PO extends GettextTranslations } /** - * Formats a string in PO-style. - * - * @param string $string the string to format + * Formats a string in PO-style * + * @param string $input_string the string to format * @return string the poified string */ - public static function poify($string) + public static function poify($input_string) { - $quote = '"'; - $slash = '\\'; + $quote = '"'; + $slash = '\\'; $newline = "\n"; $replaces = array( - "$slash" => "$slash$slash", - "$quote" => "$slash$quote", - "\t" => '\t', + "$slash" => "$slash$slash", + "$quote" => "$slash$quote", + "\t" => '\t', ); - $string = str_replace( - array_keys($replaces), - array_values($replaces), - $string - ); + $input_string = str_replace(array_keys($replaces), array_values($replaces), $input_string); - $po = $quote.implode( - "${slash}n$quote$newline$quote", - explode($newline, $string) - ).$quote; - // add empty string on first line for readbility - if (false !== strpos($string, $newline) && - (substr_count($string, $newline) > 1 || - !($newline === substr($string, -strlen($newline))))) { + $po = $quote . implode("{$slash}n{$quote}{$newline}{$quote}", explode($newline, $input_string)) . $quote; + // Add empty string on first line for readbility. + if ( + false !== strpos($input_string, $newline) && + (substr_count($input_string, $newline) > 1 || substr($input_string, -strlen($newline)) !== $newline) + ) { $po = "$quote$quote$newline$po"; } - // remove empty strings + // Remove empty strings. $po = str_replace("$newline$quote$quote", '', $po); - return $po; } /** - * Gives back the original string from a PO-formatted string. - * - * @param string $string PO-formatted string + * Gives back the original string from a PO-formatted string * + * @param string $input_string PO-formatted string * @return string enascaped string */ - public static function unpoify($string) + public static function unpoify($input_string) { - $escapes = array('t' => "\t", 'n' => "\n", 'r' => "\r", '\\' => '\\'); - $lines = array_map('trim', explode("\n", $string)); - $lines = array_map(array(__NAMESPACE__.'\PO', 'trim_quotes'), $lines); - $unpoified = ''; + $escapes = array( + 't' => "\t", + 'n' => "\n", + 'r' => "\r", + '\\' => '\\', + ); + $lines = array_map('trim', explode("\n", $input_string)); + $lines = array_map(array(__NAMESPACE__ . '\PO', 'trim_quotes'), $lines); + $unpoified = ''; $previous_is_backslash = false; foreach ($lines as $line) { preg_match_all('/./u', $line, $chars); $chars = $chars[0]; foreach ($chars as $char) { - if (!$previous_is_backslash) { - if ('\\' == $char) { + if (! $previous_is_backslash) { + if ('\\' === $char) { $previous_is_backslash = true; } else { $unpoified .= $char; } } else { $previous_is_backslash = false; - $unpoified .= isset($escapes[$char]) ? $escapes[$char] : $char; + $unpoified .= isset($escapes[ $char ]) ? $escapes[ $char ] : $char; } } } - // Standardise the line endings on imported content, technically PO files shouldn't contain \r + // Standardize the line endings on imported content, technically PO files shouldn't contain \r. $unpoified = str_replace(array("\r\n", "\r"), "\n", $unpoified); return $unpoified; } /** - * Inserts $with in the beginning of every new line of $string and - * returns the modified string. + * Inserts $with in the beginning of every new line of $input_string and + * returns the modified string * - * @param string $string prepend lines in this string - * @param string $with prepend lines with this string - * - * @return string The modified string + * @param string $input_string prepend lines in this string + * @param string $with prepend lines with this string */ - public static function prepend_each_line($string, $with) + public static function prepend_each_line($input_string, $with) { - $lines = explode("\n", $string); + $lines = explode("\n", $input_string); $append = ''; - if ("\n" === substr($string, -1) && '' === end($lines)) { - // Last line might be empty because $string was terminated - // with a newline, remove it from the $lines array, - // we'll restore state by re-terminating the string at the end + if ("\n" === substr($input_string, -1) && '' === end($lines)) { + /* + * Last line might be empty because $input_string was terminated + * with a newline, remove it from the $lines array, + * we'll restore state by re-terminating the string at the end. + */ array_pop($lines); $append = "\n"; } foreach ($lines as &$line) { - $line = $with.$line; + $line = $with . $line; } unset($line); - return implode("\n", $lines).$append; + return implode("\n", $lines) . $append; } /** * Prepare a text as a comment -- wraps the lines and prepends # - * and a special character to each line. + * and a special character to each line * * @param string $text the comment text * @param string $char character to denote a special PO comment, - * like :, default is a space - * - * @return string The modified string + * like :, default is a space */ private static function comment_block($text, $char = ' ') { @@ -244,14 +223,11 @@ class PO extends GettextTranslations } /** - * Builds a string from the entry for inclusion in PO file. + * Builds a string from the entry for inclusion in PO file * - * @static - * - * @param EntryTranslations &$entry the entry to convert to po string - * - * @return false|string PO-style formatted string for the entry or - * false if the entry is empty + * @param EntryTranslations $entry the entry to convert to po string. + * @return string|false PO-style formatted string for the entry or + * false if the entry is empty */ public static function export_entry(EntryTranslations &$entry) { @@ -259,67 +235,58 @@ class PO extends GettextTranslations return false; } $po = array(); - if (!empty($entry->translator_comments)) { + if (! empty($entry->translator_comments)) { $po[] = self::comment_block($entry->translator_comments); } - if (!empty($entry->extracted_comments)) { + if (! empty($entry->extracted_comments)) { $po[] = self::comment_block($entry->extracted_comments, '.'); } - if (!empty($entry->references)) { + if (! empty($entry->references)) { $po[] = self::comment_block(implode(' ', $entry->references), ':'); } - if (!empty($entry->flags)) { + if (! empty($entry->flags)) { $po[] = self::comment_block(implode(', ', $entry->flags), ','); } - if (!is_null($entry->context)) { - $po[] = 'msgctxt '.self::poify($entry->context); + if ($entry->context) { + $po[] = 'msgctxt ' . self::poify($entry->context); } - $po[] = 'msgid '.self::poify($entry->singular); - if (!$entry->is_plural) { - $translation = empty($entry->translations) ? - '' : - $entry->translations[0]; + $po[] = 'msgid ' . self::poify($entry->singular); + if (! $entry->is_plural) { + $translation = empty($entry->translations) ? '' : $entry->translations[0]; $translation = self::match_begin_and_end_newlines($translation, $entry->singular); - $po[] = 'msgstr '.self::poify($translation); + $po[] = 'msgstr ' . self::poify($translation); } else { - $po[] = 'msgid_plural '.self::poify($entry->plural); - $translations = empty($entry->translations) ? - array('', '') : - $entry->translations; + $po[] = 'msgid_plural ' . self::poify($entry->plural); + $translations = empty($entry->translations) ? array( '', '' ) : $entry->translations; foreach ($translations as $i => $translation) { $translation = self::match_begin_and_end_newlines($translation, $entry->plural); - $po[] = "msgstr[$i] ".self::poify($translation); + $po[] = "msgstr[$i] " . self::poify($translation); } } - return implode("\n", $po); } - /** - * @param $translation - * @param $original - * - * @return string - */ public static function match_begin_and_end_newlines($translation, $original) { if ('' === $translation) { return $translation; } - $original_begin = "\n" === substr($original, 0, 1); - $original_end = "\n" === substr($original, -1); + $original_begin = "\n" === substr($original, 0, 1); + $original_end = "\n" === substr($original, -1); $translation_begin = "\n" === substr($translation, 0, 1); - $translation_end = "\n" === substr($translation, -1); + $translation_end = "\n" === substr($translation, -1); + if ($original_begin) { - if (!$translation_begin) { - $translation = "\n".$translation; + if (! $translation_begin) { + $translation = "\n" . $translation; } } elseif ($translation_begin) { $translation = ltrim($translation, "\n"); } + if ($original_end) { - if (!$translation_end) { + if (! $translation_end) { $translation .= "\n"; } } elseif ($translation_end) { @@ -337,20 +304,17 @@ class PO extends GettextTranslations public function import_from_file($filename) { $f = fopen($filename, 'r'); - if (!$f) { + if (! $f) { return false; } $lineno = 0; - $res = false; while (true) { $res = $this->read_entry($f, $lineno); - if (!$res) { + if (! $res) { break; } - if ($res['entry']->singular == '') { - $this->set_headers( - $this->make_headers($res['entry']->translations[0]) - ); + if ('' === $res['entry']->singular) { + $this->set_headers($this->make_headers($res['entry']->translations[0])); } else { $this->add_entry($res['entry']); } @@ -359,47 +323,44 @@ class PO extends GettextTranslations if (false === $res) { return false; } - if (!$this->headers && !$this->entries) { + if (! $this->headers && ! $this->entries) { return false; } - return true; } /** - * Helper function for read_entry. + * Helper function for read_entry * * @param string $context - * * @return bool */ protected static function is_final($context) { - return ($context === 'msgstr') || ($context === 'msgstr_plural'); + return ('msgstr' === $context) || ('msgstr_plural' === $context); } /** * @param resource $f * @param int $lineno - * * @return null|false|array */ public function read_entry($f, $lineno = 0) { $entry = new EntryTranslations(); - // where were we in the last step - // can be: comment, msgctxt, msgid, msgid_plural, msgstr, msgstr_plural - $context = ''; + // Where were we in the last step. + // Can be: comment, msgctxt, msgid, msgid_plural, msgstr, msgstr_plural. + $context = ''; $msgstr_index = 0; while (true) { $lineno++; $line = self::read_line($f); - if (!$line) { + if (! $line) { if (feof($f)) { if (self::is_final($context)) { break; - } elseif (!$context) { // we haven't read a line and eof came - return; + } elseif (! $context) { // We haven't read a line and EOF came. + return null; } else { return false; } @@ -407,23 +368,22 @@ class PO extends GettextTranslations return false; } } - if ($line == "\n") { + if ("\n" === $line) { continue; } - $line = trim($line); if (preg_match('/^#/', $line, $m)) { - // the comment is the start of a new entry + // The comment is the start of a new entry. if (self::is_final($context)) { self::read_line($f, 'put-back'); $lineno--; break; } - // comments have to be at the beginning - if ($context && $context != 'comment') { + // Comments have to be at the beginning. + if ($context && 'comment' !== $context) { return false; } - // add comment + // Add comment. $this->add_comment_to_entry($entry, $line); } elseif (preg_match('/^msgctxt\s+(".*")/', $line, $m)) { if (self::is_final($context)) { @@ -431,10 +391,10 @@ class PO extends GettextTranslations $lineno--; break; } - if ($context && $context != 'comment') { + if ($context && 'comment' !== $context) { return false; } - $context = 'msgctxt'; + $context = 'msgctxt'; $entry->context .= self::unpoify($m[1]); } elseif (preg_match('/^msgid\s+(".*")/', $line, $m)) { if (self::is_final($context)) { @@ -442,32 +402,30 @@ class PO extends GettextTranslations $lineno--; break; } - if ($context && - $context != 'msgctxt' && - $context != 'comment') { + if ($context && 'msgctxt' !== $context && 'comment' !== $context) { return false; } - $context = 'msgid'; + $context = 'msgid'; $entry->singular .= self::unpoify($m[1]); } elseif (preg_match('/^msgid_plural\s+(".*")/', $line, $m)) { - if ($context != 'msgid') { + if ('msgid' !== $context) { return false; } - $context = 'msgid_plural'; + $context = 'msgid_plural'; $entry->is_plural = true; - $entry->plural .= self::unpoify($m[1]); + $entry->plural .= self::unpoify($m[1]); } elseif (preg_match('/^msgstr\s+(".*")/', $line, $m)) { - if ($context != 'msgid') { + if ('msgid' !== $context) { return false; } - $context = 'msgstr'; + $context = 'msgstr'; $entry->translations = array(self::unpoify($m[1])); } elseif (preg_match('/^msgstr\[(\d+)\]\s+(".*")/', $line, $m)) { - if ($context != 'msgid_plural' && $context != 'msgstr_plural') { + if ('msgid_plural' !== $context && 'msgstr_plural' !== $context) { return false; } - $context = 'msgstr_plural'; - $msgstr_index = $m[1]; + $context = 'msgstr_plural'; + $msgstr_index = $m[1]; $entry->translations[$m[1]] = self::unpoify($m[2]); } elseif (preg_match('/^".*"$/', $line)) { $unpoified = self::unpoify($line); @@ -506,36 +464,33 @@ class PO extends GettextTranslations $entry->translations = array(); } - return array('entry' => $entry, 'lineno' => $lineno); + return array( + 'entry' => $entry, + 'lineno' => $lineno, + ); } /** * @param resource $f * @param string $action - * * @return bool */ public static function read_line($f, $action = 'read') { - static $last_line = ''; + static $last_line = ''; static $use_last_line = false; - if ('clear' == $action) { + if ('clear' === $action) { $last_line = ''; - return true; } - if ('put-back' == $action) { + if ('put-back' === $action) { $use_last_line = true; - return true; } - $line = $use_last_line ? $last_line : fgets($f); - $line = ("\r\n" == substr($line, -2)) ? - rtrim($line, "\r\n")."\n" : - $line; - $last_line = $line; + $line = $use_last_line ? $last_line : fgets($f); + $line = ("\r\n" === substr($line, -2)) ? rtrim($line, "\r\n") . "\n" : $line; + $last_line = $line; $use_last_line = false; - return $line; } @@ -546,42 +501,30 @@ class PO extends GettextTranslations public function add_comment_to_entry(EntryTranslations &$entry, $po_comment_line) { $first_two = substr($po_comment_line, 0, 2); - $comment = trim(substr($po_comment_line, 2)); - if ('#:' == $first_two) { - $entry->references = array_merge( - $entry->references, - preg_split('/\s+/', $comment) - ); - } elseif ('#.' == $first_two) { - $entry->extracted_comments = trim( - $entry->extracted_comments."\n".$comment - ); - } elseif ('#,' == $first_two) { - $entry->flags = array_merge( - $entry->flags, - preg_split('/,\s*/', $comment) - ); + $comment = trim(substr($po_comment_line, 2)); + if ('#:' === $first_two) { + $entry->references = array_merge($entry->references, preg_split('/\s+/', $comment)); + } elseif ('#.' === $first_two) { + $entry->extracted_comments = trim($entry->extracted_comments . "\n" . $comment); + } elseif ('#,' === $first_two) { + $entry->flags = array_merge($entry->flags, preg_split('/,\s*/', $comment)); } else { - $entry->translator_comments = trim( - $entry->translator_comments."\n".$comment - ); + $entry->translator_comments = trim($entry->translator_comments . "\n" . $comment); } } /** * @param string $s - * * @return string */ public static function trim_quotes($s) { - if (substr($s, 0, 1) == '"') { + if ('"' === substr($s, 0, 1)) { $s = substr($s, 1); } - if (substr($s, -1, 1) == '"') { + if ('"' === substr($s, -1, 1)) { $s = substr($s, 0, -1); } - return $s; } } diff --git a/includes/vendor/pomo/pomo/src/Parser/PluralForms.php b/includes/vendor/pomo/pomo/src/Parser/PluralForms.php index 867ac20..8995196 100644 --- a/includes/vendor/pomo/pomo/src/Parser/PluralForms.php +++ b/includes/vendor/pomo/pomo/src/Parser/PluralForms.php @@ -1,4 +1,5 @@ */ class CachedFileReader extends StringReader implements StreamInterface { diff --git a/includes/vendor/pomo/pomo/src/Streams/CachedIntFileReader.php b/includes/vendor/pomo/pomo/src/Streams/CachedIntFileReader.php index fe6c67a..4817041 100644 --- a/includes/vendor/pomo/pomo/src/Streams/CachedIntFileReader.php +++ b/includes/vendor/pomo/pomo/src/Streams/CachedIntFileReader.php @@ -1,4 +1,5 @@ _f = fopen($filename, 'rb'); } + /** + * @param int $bytes + * @return string|false Returns read string, otherwise false. + */ public function read($bytes) { return fread($this->_f, $bytes); } + /** + * @param int $pos + * @return bool + */ public function seekto($pos) { if (-1 == fseek($this->_f, $pos, SEEK_SET)) { return false; } $this->_pos = $pos; - return true; } + /** + * @return bool + */ public function is_resource() { return is_resource($this->_f); @@ -51,18 +69,19 @@ class FileReader extends Reader implements StreamInterface return feof($this->_f); } + /** + * @return bool + */ public function close() { return fclose($this->_f); } + /** + * @return string + */ public function read_all() { - $all = ''; - while (!$this->feof()) { - $all .= $this->read(4096); - } - - return $all; + return stream_get_contents($this->_f); } } diff --git a/includes/vendor/pomo/pomo/src/Streams/NOOPReader.php b/includes/vendor/pomo/pomo/src/Streams/NOOPReader.php index 3d9b799..0476c02 100644 --- a/includes/vendor/pomo/pomo/src/Streams/NOOPReader.php +++ b/includes/vendor/pomo/pomo/src/Streams/NOOPReader.php @@ -1,4 +1,5 @@ */ +#[AllowDynamicProperties] abstract class Reader implements StreamInterface { public $endian = 'little'; - public $_post = ''; + public $_pos; + public $is_overloaded; public function __construct() { - $this->is_overloaded = ((ini_get('mbstring.func_overload') & 2) != 0) && - function_exists('mb_substr'); + if ( + function_exists('mb_substr') + && ((int) ini_get('mbstring.func_overload') & 2) // phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.mbstring_func_overloadDeprecated + ) { + $this->is_overloaded = true; + } else { + $this->is_overloaded = false; + } + $this->_pos = 0; } - public function setEndian($endian) + /** + * Sets the endianness of the file. + * + * @param string $endian Set the endianness of the file. Accepts 'big', or 'little'. + */ + public function setEndian($endian) // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.MethodNameInvalid { $this->endian = $endian; } + /** + * Reads a 32bit Integer from the Stream + * + * @return mixed The integer, corresponding to the next 32 bits from + * the stream of false if there are not enough bytes or on error + */ public function readint32() { $bytes = $this->read(4); if (4 != $this->strlen($bytes)) { return false; } - $endian_letter = ('big' == $this->endian) ? 'N' : 'V'; - $int = unpack($endian_letter, $bytes); - + $endian_letter = ('big' === $this->endian) ? 'N' : 'V'; + $int = unpack($endian_letter, $bytes); return reset($int); } + /** + * Reads an array of 32-bit Integers from the Stream + * + * @param int $count How many elements should be read + * @return mixed Array of integers or false if there isn't + * enough data or on error + */ public function readint32array($count) { $bytes = $this->read(4 * $count); if (4 * $count != $this->strlen($bytes)) { return false; } - $endian_letter = ('big' == $this->endian) ? 'N' : 'V'; - - return unpack($endian_letter.$count, $bytes); + $endian_letter = ('big' === $this->endian) ? 'N' : 'V'; + return unpack($endian_letter . $count, $bytes); } - public function substr($string, $start, $length) + /** + * @param string $input_string + * @param int $start + * @param int $length + * @return string + */ + public function substr($input_string, $start, $length) { if ($this->is_overloaded) { - return mb_substr($string, $start, $length, 'ascii'); + return mb_substr($input_string, $start, $length, 'ascii'); } else { - return substr($string, $start, $length); + return substr($input_string, $start, $length); } } - public function strlen($string) + /** + * @param string $input_string + * @return int + */ + public function strlen($input_string) { if ($this->is_overloaded) { - return mb_strlen($string, 'ascii'); + return mb_strlen($input_string, 'ascii'); } else { - return strlen($string); + return strlen($input_string); } } - public function str_split($string, $chunk_size) + /** + * @param string $input_string + * @param int $chunk_size + * @return array + */ + public function str_split($input_string, $chunk_size) { - if (!function_exists('str_split')) { - $length = $this->strlen($string); - $out = array(); + if (! function_exists('str_split')) { + $length = $this->strlen($input_string); + $out = array(); for ($i = 0; $i < $length; $i += $chunk_size) { - $out[] = $this->substr($string, $i, $chunk_size); + $out[] = $this->substr($input_string, $i, $chunk_size); } - return $out; } else { - return str_split($string, $chunk_size); + return str_split($input_string, $chunk_size); } } + /** + * @return int + */ public function pos() { return $this->_pos; } + /** + * @return true + */ public function is_resource() { return true; } + /** + * @return true + */ public function close() { return true; diff --git a/includes/vendor/pomo/pomo/src/Streams/StreamInterface.php b/includes/vendor/pomo/pomo/src/Streams/StreamInterface.php index 012b2c4..07f18bf 100644 --- a/includes/vendor/pomo/pomo/src/Streams/StreamInterface.php +++ b/includes/vendor/pomo/pomo/src/Streams/StreamInterface.php @@ -1,4 +1,5 @@ - */ + /** + * Provides file-like methods for manipulating a string instead + * of a physical file. + */ class StringReader extends Reader implements StreamInterface { public $_str = ''; @@ -22,24 +21,30 @@ class StringReader extends Reader implements StreamInterface $this->_pos = 0; } + /** + * @param string $bytes + * @return string + */ public function read($bytes) { - $data = $this->substr($this->_str, $this->_pos, $bytes); + $data = $this->substr($this->_str, $this->_pos, $bytes); $this->_pos += $bytes; if ($this->strlen($this->_str) < $this->_pos) { $this->_pos = $this->strlen($this->_str); } - return $data; } + /** + * @param int $pos + * @return int + */ public function seekto($pos) { $this->_pos = $pos; if ($this->strlen($this->_str) < $this->_pos) { $this->_pos = $this->strlen($this->_str); } - return $this->_pos; } @@ -51,12 +56,11 @@ class StringReader extends Reader implements StreamInterface return $this->strlen($this->_str); } + /** + * @return string + */ public function read_all() { - return $this->substr( - $this->_str, - $this->_pos, - $this->strlen($this->_str) - ); + return $this->substr($this->_str, $this->_pos, $this->strlen($this->_str)); } } diff --git a/includes/vendor/pomo/pomo/src/Translations/EntryTranslations.php b/includes/vendor/pomo/pomo/src/Translations/EntryTranslations.php index 730df67..1c6c9b8 100644 --- a/includes/vendor/pomo/pomo/src/Translations/EntryTranslations.php +++ b/includes/vendor/pomo/pomo/src/Translations/EntryTranslations.php @@ -1,4 +1,5 @@ $value) { $this->$varname = $value; } if (isset($args['plural']) && $args['plural']) { $this->is_plural = true; } - if (!is_array($this->translations)) { + if (! is_array($this->translations)) { $this->translations = array(); } - if (!is_array($this->references)) { + if (! is_array($this->references)) { $this->references = array(); } - if (!is_array($this->flags)) { + if (! is_array($this->flags)) { $this->flags = array(); } } @@ -68,18 +77,18 @@ class EntryTranslations /** * Generates a unique key for this entry. * - * @return string|bool the key or false if the entry is empty + * @return string|false The key or false if the entry is null. */ public function key() { - if (null === $this->singular || '' === $this->singular) { + if (null === $this->singular) { return false; } - // Prepend context and EOT, like in MO files - $key = !$this->context ? $this->singular : $this->context.chr(4).$this->singular; - // Standardize on \n line endings - $key = str_replace(array("\r\n", "\r"), "\n", $key); + // Prepend context and EOT, like in MO files. + $key = ! $this->context ? $this->singular : $this->context . "\4" . $this->singular; + // Standardize on \n line endings. + $key = str_replace(array( "\r\n", "\r" ), "\n", $key); return $key; } @@ -89,7 +98,7 @@ class EntryTranslations */ public function merge_with(&$other) { - $this->flags = array_unique(array_merge($this->flags, $other->flags)); + $this->flags = array_unique(array_merge($this->flags, $other->flags)); $this->references = array_unique(array_merge($this->references, $other->references)); if ($this->extracted_comments != $other->extracted_comments) { $this->extracted_comments .= $other->extracted_comments; diff --git a/includes/vendor/pomo/pomo/src/Translations/GettextTranslations.php b/includes/vendor/pomo/pomo/src/Translations/GettextTranslations.php index 11b2a79..dd4ca5a 100644 --- a/includes/vendor/pomo/pomo/src/Translations/GettextTranslations.php +++ b/includes/vendor/pomo/pomo/src/Translations/GettextTranslations.php @@ -1,4 +1,5 @@ _gettext_select_plural_form) - || is_null($this->_gettext_select_plural_form)) { + if ( + !isset($this->_gettext_select_plural_form) + || is_null($this->_gettext_select_plural_form) + ) { list($nplurals, $expression) = $this->nplurals_and_expression_from_header($this->get_header('Plural-Forms')); $this->_nplurals = $nplurals; $this->_gettext_select_plural_form = $this->make_plural_form_function($nplurals, $expression); @@ -103,7 +117,7 @@ class GettextTranslations extends Translations implements TranslationsInterface $res .= ') : ('; break; case ';': - $res .= str_repeat(')', $depth).';'; + $res .= str_repeat(')', $depth) . ';'; $depth = 0; break; default: diff --git a/includes/vendor/pomo/pomo/src/Translations/NOOPTranslations.php b/includes/vendor/pomo/pomo/src/Translations/NOOPTranslations.php index 2c0d995..90388cf 100644 --- a/includes/vendor/pomo/pomo/src/Translations/NOOPTranslations.php +++ b/includes/vendor/pomo/pomo/src/Translations/NOOPTranslations.php @@ -1,4 +1,5 @@ translate_entry($entry); $index = $this->select_plural_form($count); $total_plural_forms = $this->get_plural_forms_count(); - if ($translated && 0 <= $index && $index < $total_plural_forms && + if ( + $translated && 0 <= $index && $index < $total_plural_forms && is_array($translated->translations) && - isset($translated->translations[$index])) { + isset($translated->translations[$index]) + ) { return $translated->translations[$index]; } else { return 1 == $count ? $singular : $plural; diff --git a/includes/vendor/pomo/pomo/src/Translations/TranslationsInterface.php b/includes/vendor/pomo/pomo/src/Translations/TranslationsInterface.php index e65c93e..a14aa2f 100644 --- a/includes/vendor/pomo/pomo/src/Translations/TranslationsInterface.php +++ b/includes/vendor/pomo/pomo/src/Translations/TranslationsInterface.php @@ -1,4 +1,5 @@ ](https://supportukrainenow.org) + # Convert an array to xml [![Latest Version](https://img.shields.io/github/release/spatie/array-to-xml.svg?style=flat-square)](https://github.com/spatie/array-to-xml/releases) @@ -360,7 +363,7 @@ This will result in: estacet first-tag - second-tag + second-tag @@ -477,23 +480,43 @@ This will result in: soap:value ``` +### Adding processing instructions + +Call `$arrayToXml->addProcessingInstruction($target, $data)` method on ArrayToXml object to prepend a processing instruction before the root element. + +Example: + +```php +$arrayToXml = new ArrayToXml($array); +$arrayToXml->addProcessingInstruction('xml-stylesheet', 'type="text/xsl" href="base.xsl"'); +$result = $arrayToXml->toXml(); +``` + +This will result in: + +```xml + + +Luke SkywalkerLightsaberSauronEvil Eye +``` + ## Testing ```bash vendor/bin/phpunit ``` -### Changelog +## Changelog -Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently. +Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently. ## Contributing -Please see [CONTRIBUTING](CONTRIBUTING.md) for details. +Please see [CONTRIBUTING](https://github.com/spatie/.github/blob/main/CONTRIBUTING.md) for details. -## Security +## Security Vulnerabilities -If you discover any security related issues, please email freek@spatie.be instead of using the issue tracker. +Please review [our security policy](../../security/policy) on how to report security vulnerabilities. ## Postcardware diff --git a/includes/vendor/spatie/array-to-xml/src/ArrayToXml.php b/includes/vendor/spatie/array-to-xml/src/ArrayToXml.php index 66eb49e..4a0a457 100644 --- a/includes/vendor/spatie/array-to-xml/src/ArrayToXml.php +++ b/includes/vendor/spatie/array-to-xml/src/ArrayToXml.php @@ -26,7 +26,7 @@ class ArrayToXml $domProperties = [], $xmlStandalone = null ) { - $this->document = new DOMDocument($xmlVersion, $xmlEncoding); + $this->document = new DOMDocument($xmlVersion, $xmlEncoding ?? ''); if (! is_null($xmlStandalone)) { $this->document->xmlStandalone = $xmlStandalone; @@ -38,7 +38,7 @@ class ArrayToXml $this->replaceSpacesByUnderScoresInKeyNames = $replaceSpacesByUnderScoresInKeyNames; - if ($this->isArrayAllKeySequential($array) && ! empty($array)) { + if (! empty($array) && $this->isArrayAllKeySequential($array)) { throw new DOMException('Invalid Character Error'); } @@ -78,11 +78,9 @@ class ArrayToXml public function toXml(): string { - if ($this->addXmlDeclaration === false) { - return $this->document->saveXml($this->document->documentElement); - } - - return $this->document->saveXML(); + return $this->addXmlDeclaration + ? $this->document->saveXML() + : $this->document->saveXml($this->document->documentElement); } public function toDom(): DOMDocument @@ -94,7 +92,7 @@ class ArrayToXml { foreach ($domProperties as $key => $value) { if (! property_exists($this->document, $key)) { - throw new Exception($key.' is not a valid property of DOMDocument'); + throw new Exception("{$key} is not a valid property of DOMDocument"); } } } @@ -125,12 +123,25 @@ class ArrayToXml return $this; } + public function addProcessingInstruction($target, $data) + { + $elements = $this->document->getElementsByTagName('*'); + + $rootElement = $elements->count() > 0 ? $elements->item(0) : null; + + $processingInstruction = $this->document->createProcessingInstruction($target, $data); + + $this->document->insertBefore($processingInstruction, $rootElement); + + return $this; + } + private function convertElement(DOMElement $element, $value) { $sequential = $this->isArrayAllKeySequential($value); if (! is_array($value)) { - $value = htmlspecialchars($value); + $value = htmlspecialchars($value ?? ''); $value = $this->removeControlCharacters($value); @@ -205,7 +216,7 @@ class ArrayToXml return; } - $child = new DOMElement($element->tagName); + $child = $this->document->createElement($element->tagName); $child->nodeValue = htmlspecialchars($value); $element->parentNode->appendChild($child); } @@ -230,7 +241,7 @@ class ArrayToXml protected function addAttributes(DOMElement $element, array $data) { foreach ($data as $attrKey => $attrVal) { - $element->setAttribute($attrKey, $attrVal); + $element->setAttribute($attrKey, $attrVal ?? ''); } } diff --git a/includes/vendor/symfony/polyfill-intl-idn/Idn.php b/includes/vendor/symfony/polyfill-intl-idn/Idn.php index fee3026..86710b9 100644 --- a/includes/vendor/symfony/polyfill-intl-idn/Idn.php +++ b/includes/vendor/symfony/polyfill-intl-idn/Idn.php @@ -723,7 +723,7 @@ final class Idn $qMinusT = $q - $t; $baseMinusT = self::BASE - $t; - $output .= self::encodeDigit($t + ($qMinusT) % ($baseMinusT), false); + $output .= self::encodeDigit($t + $qMinusT % $baseMinusT, false); ++$out; $q = intdiv($qMinusT, $baseMinusT); } diff --git a/includes/vendor/symfony/polyfill-intl-idn/README.md b/includes/vendor/symfony/polyfill-intl-idn/README.md index 2e75f2e..cae5517 100644 --- a/includes/vendor/symfony/polyfill-intl-idn/README.md +++ b/includes/vendor/symfony/polyfill-intl-idn/README.md @@ -4,7 +4,7 @@ Symfony Polyfill / Intl: Idn This component provides [`idn_to_ascii`](https://php.net/idn-to-ascii) and [`idn_to_utf8`](https://php.net/idn-to-utf8) functions to users who run php versions without the [Intl](https://php.net/intl) extension. More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). +[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). License ======= diff --git a/includes/vendor/symfony/polyfill-intl-idn/composer.json b/includes/vendor/symfony/polyfill-intl-idn/composer.json index c5a2a46..105e3d0 100644 --- a/includes/vendor/symfony/polyfill-intl-idn/composer.json +++ b/includes/vendor/symfony/polyfill-intl-idn/composer.json @@ -34,7 +34,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", diff --git a/includes/vendor/symfony/polyfill-intl-normalizer/Normalizer.php b/includes/vendor/symfony/polyfill-intl-normalizer/Normalizer.php index 4443c23..81704ab 100644 --- a/includes/vendor/symfony/polyfill-intl-normalizer/Normalizer.php +++ b/includes/vendor/symfony/polyfill-intl-normalizer/Normalizer.php @@ -90,7 +90,7 @@ class Normalizer self::$cC = self::getData('combiningClass'); } - if (null !== $mbEncoding = (2 /* MB_OVERLOAD_STRING */ & (int) ini_get('mbstring.func_overload')) ? mb_internal_encoding() : null) { + if (null !== $mbEncoding = (2 /* MB_OVERLOAD_STRING */ & (int) \ini_get('mbstring.func_overload')) ? mb_internal_encoding() : null) { mb_internal_encoding('8bit'); } diff --git a/includes/vendor/symfony/polyfill-intl-normalizer/README.md b/includes/vendor/symfony/polyfill-intl-normalizer/README.md index 15060c5..b9b762e 100644 --- a/includes/vendor/symfony/polyfill-intl-normalizer/README.md +++ b/includes/vendor/symfony/polyfill-intl-normalizer/README.md @@ -6,7 +6,7 @@ This component provides a fallback implementation for the by the [Intl](https://php.net/intl) extension. More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). +[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). License ======= diff --git a/includes/vendor/symfony/polyfill-intl-normalizer/composer.json b/includes/vendor/symfony/polyfill-intl-normalizer/composer.json index 393edf7..65f72d6 100644 --- a/includes/vendor/symfony/polyfill-intl-normalizer/composer.json +++ b/includes/vendor/symfony/polyfill-intl-normalizer/composer.json @@ -29,7 +29,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", diff --git a/includes/vendor/symfony/polyfill-mbstring/Mbstring.php b/includes/vendor/symfony/polyfill-mbstring/Mbstring.php index b65c54a..bce5c4a 100644 --- a/includes/vendor/symfony/polyfill-mbstring/Mbstring.php +++ b/includes/vendor/symfony/polyfill-mbstring/Mbstring.php @@ -80,7 +80,7 @@ final class Mbstring public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null) { - if (\is_array($fromEncoding) || ($fromEncoding !== null && false !== strpos($fromEncoding, ','))) { + if (\is_array($fromEncoding) || (null !== $fromEncoding && false !== strpos($fromEncoding, ','))) { $fromEncoding = self::mb_detect_encoding($s, $fromEncoding); } else { $fromEncoding = self::getEncoding($fromEncoding); @@ -102,7 +102,7 @@ final class Mbstring $fromEncoding = 'Windows-1252'; } if ('UTF-8' !== $fromEncoding) { - $s = \iconv($fromEncoding, 'UTF-8//IGNORE', $s); + $s = iconv($fromEncoding, 'UTF-8//IGNORE', $s); } return preg_replace_callback('/[\x80-\xFF]+/', [__CLASS__, 'html_encoding_callback'], $s); @@ -113,7 +113,7 @@ final class Mbstring $fromEncoding = 'UTF-8'; } - return \iconv($fromEncoding, $toEncoding.'//IGNORE', $s); + return iconv($fromEncoding, $toEncoding.'//IGNORE', $s); } public static function mb_convert_variables($toEncoding, $fromEncoding, &...$vars) @@ -130,7 +130,7 @@ final class Mbstring public static function mb_decode_mimeheader($s) { - return \iconv_mime_decode($s, 2, self::$internalEncoding); + return iconv_mime_decode($s, 2, self::$internalEncoding); } public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null) @@ -140,7 +140,7 @@ final class Mbstring public static function mb_decode_numericentity($s, $convmap, $encoding = null) { - if (null !== $s && !is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) { + if (null !== $s && !\is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) { trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING); return null; @@ -150,7 +150,7 @@ final class Mbstring return false; } - if (null !== $encoding && !is_scalar($encoding)) { + if (null !== $encoding && !\is_scalar($encoding)) { trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING); return ''; // Instead of null (cf. mb_encode_numericentity). @@ -166,10 +166,10 @@ final class Mbstring if ('UTF-8' === $encoding) { $encoding = null; if (!preg_match('//u', $s)) { - $s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s); + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); } } else { - $s = \iconv($encoding, 'UTF-8//IGNORE', $s); + $s = iconv($encoding, 'UTF-8//IGNORE', $s); } $cnt = floor(\count($convmap) / 4) * 4; @@ -195,12 +195,12 @@ final class Mbstring return $s; } - return \iconv('UTF-8', $encoding.'//IGNORE', $s); + return iconv('UTF-8', $encoding.'//IGNORE', $s); } public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false) { - if (null !== $s && !is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) { + if (null !== $s && !\is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) { trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING); return null; @@ -210,13 +210,13 @@ final class Mbstring return false; } - if (null !== $encoding && !is_scalar($encoding)) { + if (null !== $encoding && !\is_scalar($encoding)) { trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING); return null; // Instead of '' (cf. mb_decode_numericentity). } - if (null !== $is_hex && !is_scalar($is_hex)) { + if (null !== $is_hex && !\is_scalar($is_hex)) { trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', \E_USER_WARNING); return null; @@ -232,10 +232,10 @@ final class Mbstring if ('UTF-8' === $encoding) { $encoding = null; if (!preg_match('//u', $s)) { - $s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s); + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); } } else { - $s = \iconv($encoding, 'UTF-8//IGNORE', $s); + $s = iconv($encoding, 'UTF-8//IGNORE', $s); } static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4]; @@ -265,7 +265,7 @@ final class Mbstring return $result; } - return \iconv('UTF-8', $encoding.'//IGNORE', $result); + return iconv('UTF-8', $encoding.'//IGNORE', $result); } public static function mb_convert_case($s, $mode, $encoding = null) @@ -280,10 +280,10 @@ final class Mbstring if ('UTF-8' === $encoding) { $encoding = null; if (!preg_match('//u', $s)) { - $s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s); + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); } } else { - $s = \iconv($encoding, 'UTF-8//IGNORE', $s); + $s = iconv($encoding, 'UTF-8//IGNORE', $s); } if (\MB_CASE_TITLE == $mode) { @@ -343,7 +343,7 @@ final class Mbstring return $s; } - return \iconv('UTF-8', $encoding.'//IGNORE', $s); + return iconv('UTF-8', $encoding.'//IGNORE', $s); } public static function mb_internal_encoding($encoding = null) @@ -354,7 +354,7 @@ final class Mbstring $normalizedEncoding = self::getEncoding($encoding); - if ('UTF-8' === $normalizedEncoding || false !== @\iconv($normalizedEncoding, $normalizedEncoding, ' ')) { + if ('UTF-8' === $normalizedEncoding || false !== @iconv($normalizedEncoding, $normalizedEncoding, ' ')) { self::$internalEncoding = $normalizedEncoding; return true; @@ -413,7 +413,7 @@ final class Mbstring $encoding = self::$internalEncoding; } - return self::mb_detect_encoding($var, [$encoding]) || false !== @\iconv($encoding, $encoding, $var); + return self::mb_detect_encoding($var, [$encoding]) || false !== @iconv($encoding, $encoding, $var); } public static function mb_detect_encoding($str, $encodingList = null, $strict = false) @@ -488,7 +488,7 @@ final class Mbstring return \strlen($s); } - return @\iconv_strlen($s, $encoding); + return @iconv_strlen($s, $encoding); } public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null) @@ -509,7 +509,7 @@ final class Mbstring return 0; } - return \iconv_strpos($haystack, $needle, $offset, $encoding); + return iconv_strpos($haystack, $needle, $offset, $encoding); } public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null) @@ -533,7 +533,7 @@ final class Mbstring } $pos = '' !== $needle || 80000 > \PHP_VERSION_ID - ? \iconv_strrpos($haystack, $needle, $encoding) + ? iconv_strrpos($haystack, $needle, $encoding) : self::mb_strlen($haystack, $encoding); return false !== $pos ? $offset + $pos : false; @@ -541,7 +541,7 @@ final class Mbstring public static function mb_str_split($string, $split_length = 1, $encoding = null) { - if (null !== $string && !is_scalar($string) && !(\is_object($string) && method_exists($string, '__toString'))) { + if (null !== $string && !\is_scalar($string) && !(\is_object($string) && method_exists($string, '__toString'))) { trigger_error('mb_str_split() expects parameter 1 to be string, '.\gettype($string).' given', \E_USER_WARNING); return null; @@ -550,6 +550,7 @@ final class Mbstring if (1 > $split_length = (int) $split_length) { if (80000 > \PHP_VERSION_ID) { trigger_error('The length of each segment must be greater than zero', \E_USER_WARNING); + return false; } @@ -568,7 +569,7 @@ final class Mbstring } $rx .= '.{'.$split_length.'})/us'; - return preg_split($rx, $string, null, \PREG_SPLIT_DELIM_CAPTURE | \PREG_SPLIT_NO_EMPTY); + return preg_split($rx, $string, -1, \PREG_SPLIT_DELIM_CAPTURE | \PREG_SPLIT_NO_EMPTY); } $result = []; @@ -617,7 +618,7 @@ final class Mbstring } if ($start < 0) { - $start = \iconv_strlen($s, $encoding) + $start; + $start = iconv_strlen($s, $encoding) + $start; if ($start < 0) { $start = 0; } @@ -626,13 +627,13 @@ final class Mbstring if (null === $length) { $length = 2147483647; } elseif ($length < 0) { - $length = \iconv_strlen($s, $encoding) + $length - $start; + $length = iconv_strlen($s, $encoding) + $length - $start; if ($length < 0) { return ''; } } - return (string) \iconv_substr($s, $start, $length, $encoding); + return (string) iconv_substr($s, $start, $length, $encoding); } public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) @@ -657,7 +658,7 @@ final class Mbstring $pos = strrpos($haystack, $needle); } else { $needle = self::mb_substr($needle, 0, 1, $encoding); - $pos = \iconv_strrpos($haystack, $needle, $encoding); + $pos = iconv_strrpos($haystack, $needle, $encoding); } return self::getSubpart($pos, $part, $haystack, $encoding); @@ -736,12 +737,12 @@ final class Mbstring $encoding = self::getEncoding($encoding); if ('UTF-8' !== $encoding) { - $s = \iconv($encoding, 'UTF-8//IGNORE', $s); + $s = iconv($encoding, 'UTF-8//IGNORE', $s); } $s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide); - return ($wide << 1) + \iconv_strlen($s, 'UTF-8'); + return ($wide << 1) + iconv_strlen($s, 'UTF-8'); } public static function mb_substr_count($haystack, $needle, $encoding = null) diff --git a/includes/vendor/symfony/polyfill-mbstring/README.md b/includes/vendor/symfony/polyfill-mbstring/README.md index 4efb599..478b40d 100644 --- a/includes/vendor/symfony/polyfill-mbstring/README.md +++ b/includes/vendor/symfony/polyfill-mbstring/README.md @@ -5,7 +5,7 @@ This component provides a partial, native PHP implementation for the [Mbstring](https://php.net/mbstring) extension. More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). +[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). License ======= diff --git a/includes/vendor/symfony/polyfill-mbstring/composer.json b/includes/vendor/symfony/polyfill-mbstring/composer.json index 1fa21ca..4489553 100644 --- a/includes/vendor/symfony/polyfill-mbstring/composer.json +++ b/includes/vendor/symfony/polyfill-mbstring/composer.json @@ -31,7 +31,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", diff --git a/includes/vendor/symfony/polyfill-php72/Php72.php b/includes/vendor/symfony/polyfill-php72/Php72.php index 5e20d5b..7bf96c9 100644 --- a/includes/vendor/symfony/polyfill-php72/Php72.php +++ b/includes/vendor/symfony/polyfill-php72/Php72.php @@ -83,7 +83,7 @@ final class Php72 'SunOS' => 'Solaris', ]; - return isset($map[\PHP_OS]) ? $map[\PHP_OS] : 'Unknown'; + return $map[\PHP_OS] ?? 'Unknown'; } public static function spl_object_id($object) @@ -96,7 +96,7 @@ final class Php72 } // On 32-bit systems, PHP_INT_SIZE is 4, - return self::$hashMask ^ hexdec(substr($hash, 16 - (\PHP_INT_SIZE * 2 - 1), (\PHP_INT_SIZE * 2 - 1))); + return self::$hashMask ^ hexdec(substr($hash, 16 - (\PHP_INT_SIZE * 2 - 1), \PHP_INT_SIZE * 2 - 1)); } public static function sapi_windows_vt100_support($stream, $enable = null) @@ -167,7 +167,7 @@ final class Php72 self::$hashMask = (int) substr(ob_get_clean(), 17); } - self::$hashMask ^= hexdec(substr(spl_object_hash($obj), 16 - (\PHP_INT_SIZE * 2 - 1), (\PHP_INT_SIZE * 2 - 1))); + self::$hashMask ^= hexdec(substr(spl_object_hash($obj), 16 - (\PHP_INT_SIZE * 2 - 1), \PHP_INT_SIZE * 2 - 1)); } public static function mb_chr($code, $encoding = null) diff --git a/includes/vendor/symfony/polyfill-php72/README.md b/includes/vendor/symfony/polyfill-php72/README.md index 59dec8a..ed19050 100644 --- a/includes/vendor/symfony/polyfill-php72/README.md +++ b/includes/vendor/symfony/polyfill-php72/README.md @@ -6,6 +6,12 @@ This component provides functions added to PHP 7.2 core: - [`spl_object_id`](https://php.net/spl_object_id) - [`stream_isatty`](https://php.net/stream_isatty) +And also functions added to PHP 7.2 mbstring: + +- [`mb_ord`](https://php.net/mb_ord) +- [`mb_chr`](https://php.net/mb_chr) +- [`mb_scrub`](https://php.net/mb_scrub) + On Windows only: - [`sapi_windows_vt100_support`](https://php.net/sapi_windows_vt100_support) @@ -16,11 +22,12 @@ Moved to core since 7.2 (was in the optional XML extension earlier): - [`utf8_decode`](https://php.net/utf8_decode) Also, it provides constants added to PHP 7.2: + - [`PHP_FLOAT_*`](https://php.net/reserved.constants#constant.php-float-dig) - [`PHP_OS_FAMILY`](https://php.net/reserved.constants#constant.php-os-family) More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). +[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). License ======= diff --git a/includes/vendor/symfony/polyfill-php72/composer.json b/includes/vendor/symfony/polyfill-php72/composer.json index c96c844..5f17af3 100644 --- a/includes/vendor/symfony/polyfill-php72/composer.json +++ b/includes/vendor/symfony/polyfill-php72/composer.json @@ -25,7 +25,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", diff --git a/includes/version.php b/includes/version.php index 48a95e5..7c89903 100644 --- a/includes/version.php +++ b/includes/version.php @@ -9,7 +9,7 @@ * MAJOR.MINOR.PATCH-SOMETHING (1.8.1-donotuse) * */ -define( 'YOURLS_VERSION', '1.9.1' ); +define( 'YOURLS_VERSION', '1.9.2' ); /** * YOURLS DB version. Increments when changes are made to the DB schema, to trigger a DB update diff --git a/js/insert.js b/js/insert.js index 8298f7f..03e004e 100644 --- a/js/insert.js +++ b/js/insert.js @@ -35,10 +35,11 @@ function add_link() { return; } var keyword = $("#add-keyword").val(); + var nextid = parseInt($('#main_table tbody tr[id^="id-"]').length) + 1; add_loading("#add-button"); $.getJSON( ajaxurl, - {action:'add', url: newurl, keyword: keyword, nonce: nonce}, + {action:'add', url: newurl, keyword: keyword, nonce: nonce, rowid: nextid}, function(data){ if(data.status == 'success') { $('#main_table tbody').prepend( data.html ).trigger("update");