3v4l.org

run code in 300+ PHP versions simultaneously
<?php function wp_insert_post( $postarr, $wp_error = false ) { global $wpdb; $user_id = get_current_user_id(); $defaults = array( 'post_author' => $user_id, 'post_content' => '', 'post_content_filtered' => '', 'post_title' => '', 'post_excerpt' => '', 'post_status' => 'draft', 'post_type' => 'post', 'comment_status' => '', 'ping_status' => '', 'post_password' => '', 'to_ping' => '', 'pinged' => '', 'post_parent' => 0, 'menu_order' => 0, 'guid' => '', 'import_id' => 0, 'context' => '', ); $postarr = wp_parse_args($postarr, $defaults); unset( $postarr[ 'filter' ] ); $postarr = sanitize_post($postarr, 'db'); // Are we updating or creating? $post_ID = 0; $update = false; $guid = $postarr['guid']; if ( ! empty( $postarr['ID'] ) ) { $update = true; // Get the post ID and GUID. $post_ID = $postarr['ID']; $post_before = get_post( $post_ID ); if ( is_null( $post_before ) ) { if ( $wp_error ) { return new WP_Error( 'invalid_post', __( 'Invalid post ID.' ) ); } return 0; } $guid = get_post_field( 'guid', $post_ID ); $previous_status = get_post_field('post_status', $post_ID ); } else { $previous_status = 'new'; } $post_type = empty( $postarr['post_type'] ) ? 'post' : $postarr['post_type']; $post_title = $postarr['post_title']; $post_content = $postarr['post_content']; $post_excerpt = $postarr['post_excerpt']; if ( isset( $postarr['post_name'] ) ) { $post_name = $postarr['post_name']; } $maybe_empty = 'attachment' !== $post_type && ! $post_content && ! $post_title && ! $post_excerpt && post_type_supports( $post_type, 'editor' ) && post_type_supports( $post_type, 'title' ) && post_type_supports( $post_type, 'excerpt' ); /** * Filter whether the post should be considered "empty". * * The post is considered "empty" if both: * 1. The post type supports the title, editor, and excerpt fields * 2. The title, editor, and excerpt fields are all empty * * Returning a truthy value to the filter will effectively short-circuit * the new post being inserted, returning 0. If $wp_error is true, a WP_Error * will be returned instead. * * @since 3.3.0 * * @param bool $maybe_empty Whether the post should be considered "empty". * @param array $postarr Array of post data. */ if ( apply_filters( 'wp_insert_post_empty_content', $maybe_empty, $postarr ) ) { if ( $wp_error ) { return new WP_Error( 'empty_content', __( 'Content, title, and excerpt are empty.' ) ); } else { return 0; } } $post_status = empty( $postarr['post_status'] ) ? 'draft' : $postarr['post_status']; if ( 'attachment' === $post_type && ! in_array( $post_status, array( 'inherit', 'private', 'trash' ) ) ) { $post_status = 'inherit'; } if ( ! empty( $postarr['post_category'] ) ) { // Filter out empty terms. $post_category = array_filter( $postarr['post_category'] ); } // Make sure we set a valid category. if ( empty( $post_category ) || 0 == count( $post_category ) || ! is_array( $post_category ) ) { // 'post' requires at least one category. if ( 'post' == $post_type && 'auto-draft' != $post_status ) { $post_category = array( get_option('default_category') ); } else { $post_category = array(); } } // Don't allow contributors to set the post slug for pending review posts. if ( 'pending' == $post_status && !current_user_can( 'publish_posts' ) ) { $post_name = ''; } /* * Create a valid post name. Drafts and pending posts are allowed to have * an empty post name. */ if ( empty($post_name) ) { if ( !in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) ) { $post_name = sanitize_title($post_title); } else { $post_name = ''; } } else { // On updates, we need to check to see if it's using the old, fixed sanitization context. $check_name = sanitize_title( $post_name, '', 'old-save' ); if ( $update && strtolower( urlencode( $post_name ) ) == $check_name && get_post_field( 'post_name', $post_ID ) == $check_name ) { $post_name = $check_name; } else { // new post, or slug has changed. $post_name = sanitize_title($post_name); } } /* * If the post date is empty (due to having been new or a draft) and status * is not 'draft' or 'pending', set date to now. */ if ( empty( $postarr['post_date'] ) || '0000-00-00 00:00:00' == $postarr['post_date'] ) { if ( empty( $postarr['post_date_gmt'] ) || '0000-00-00 00:00:00' == $postarr['post_date_gmt'] ) { $post_date = current_time( 'mysql' ); } else { $post_date = get_date_from_gmt( $postarr['post_date_gmt'] ); } } else { $post_date = $postarr['post_date']; } // Validate the date. $mm = substr( $post_date, 5, 2 ); $jj = substr( $post_date, 8, 2 ); $aa = substr( $post_date, 0, 4 ); $valid_date = wp_checkdate( $mm, $jj, $aa, $post_date ); if ( ! $valid_date ) { if ( $wp_error ) { return new WP_Error( 'invalid_date', __( 'Whoops, the provided date is invalid.' ) ); } else { return 0; } } if ( empty( $postarr['post_date_gmt'] ) || '0000-00-00 00:00:00' == $postarr['post_date_gmt'] ) { if ( ! in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) ) { $post_date_gmt = get_gmt_from_date( $post_date ); } else { $post_date_gmt = '0000-00-00 00:00:00'; } } else { $post_date_gmt = $postarr['post_date_gmt']; } if ( $update || '0000-00-00 00:00:00' == $post_date ) { $post_modified = current_time( 'mysql' ); $post_modified_gmt = current_time( 'mysql', 1 ); } else { $post_modified = $post_date; $post_modified_gmt = $post_date_gmt; } if ( 'attachment' !== $post_type ) { if ( 'publish' == $post_status ) { $now = gmdate('Y-m-d H:i:59'); if ( mysql2date('U', $post_date_gmt, false) > mysql2date('U', $now, false) ) { $post_status = 'future'; } } elseif ( 'future' == $post_status ) { $now = gmdate('Y-m-d H:i:59'); if ( mysql2date('U', $post_date_gmt, false) <= mysql2date('U', $now, false) ) { $post_status = 'publish'; } } } // Comment status. if ( empty( $postarr['comment_status'] ) ) { if ( $update ) { $comment_status = 'closed'; } else { $comment_status = get_default_comment_status( $post_type ); } } else { $comment_status = $postarr['comment_status']; } // These variables are needed by compact() later. $post_content_filtered = $postarr['post_content_filtered']; $post_author = isset( $postarr['post_author'] ) ? $postarr['post_author'] : $user_id; $ping_status = empty( $postarr['ping_status'] ) ? get_default_comment_status( $post_type, 'pingback' ) : $postarr['ping_status']; $to_ping = isset( $postarr['to_ping'] ) ? sanitize_trackback_urls( $postarr['to_ping'] ) : ''; $pinged = isset( $postarr['pinged'] ) ? $postarr['pinged'] : ''; $import_id = isset( $postarr['import_id'] ) ? $postarr['import_id'] : 0; /* * The 'wp_insert_post_parent' filter expects all variables to be present. * Previously, these variables would have already been extracted */ if ( isset( $postarr['menu_order'] ) ) { $menu_order = (int) $postarr['menu_order']; } else { $menu_order = 0; } $post_password = isset( $postarr['post_password'] ) ? $postarr['post_password'] : ''; if ( 'private' == $post_status ) { $post_password = ''; } if ( isset( $postarr['post_parent'] ) ) { $post_parent = (int) $postarr['post_parent']; } else { $post_parent = 0; } /** * Filter the post parent -- used to check for and prevent hierarchy loops. * * @since 3.1.0 * * @param int $post_parent Post parent ID. * @param int $post_ID Post ID. * @param array $new_postarr Array of parsed post data. * @param array $postarr Array of sanitized, but otherwise unmodified post data. */ $post_parent = apply_filters( 'wp_insert_post_parent', $post_parent, $post_ID, compact( array_keys( $postarr ) ), $postarr ); $post_name = wp_unique_post_slug( $post_name, $post_ID, $post_status, $post_type, $post_parent ); // Don't unslash. $post_mime_type = isset( $postarr['post_mime_type'] ) ? $postarr['post_mime_type'] : ''; // Expected_slashed (everything!). $data = compact( 'post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_content_filtered', 'post_title', 'post_excerpt', 'post_status', 'post_type', 'comment_status', 'ping_status', 'post_password', 'post_name', 'to_ping', 'pinged', 'post_modified', 'post_modified_gmt', 'post_parent', 'menu_order', 'post_mime_type', 'guid' ); $emoji_fields = array( 'post_title', 'post_content', 'post_excerpt' ); foreach ( $emoji_fields as $emoji_field ) { if ( isset( $data[ $emoji_field ] ) ) { $charset = $wpdb->get_col_charset( $wpdb->posts, $emoji_field ); if ( 'utf8' === $charset ) { $data[ $emoji_field ] = wp_encode_emoji( $data[ $emoji_field ] ); } } } if ( 'attachment' === $post_type ) { /** * Filter attachment post data before it is updated in or added to the database. * * @since 3.9.0 * * @param array $data An array of sanitized attachment post data. * @param array $postarr An array of unsanitized attachment post data. */ $data = apply_filters( 'wp_insert_attachment_data', $data, $postarr ); } else { /** * Filter slashed post data just before it is inserted into the database. * * @since 2.7.0 * * @param array $data An array of slashed post data. * @param array $postarr An array of sanitized, but otherwise unmodified post data. */ $data = apply_filters( 'wp_insert_post_data', $data, $postarr ); } $data = wp_unslash( $data ); $where = array( 'ID' => $post_ID ); if ( $update ) { /** * Fires immediately before an existing post is updated in the database. * * @since 2.5.0 * * @param int $post_ID Post ID. * @param array $data Array of unslashed post data. */ do_action( 'pre_post_update', $post_ID, $data ); if ( false === $wpdb->update( $wpdb->posts, $data, $where ) ) { if ( $wp_error ) { return new WP_Error('db_update_error', __('Could not update post in the database'), $wpdb->last_error); } else { return 0; } } } else { // If there is a suggested ID, use it if not already present. if ( ! empty( $import_id ) ) { $import_id = (int) $import_id; if ( ! $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE ID = %d", $import_id) ) ) { $data['ID'] = $import_id; } } if ( false === $wpdb->insert( $wpdb->posts, $data ) ) { if ( $wp_error ) { return new WP_Error('db_insert_error', __('Could not insert post into the database'), $wpdb->last_error); } else { return 0; } } $post_ID = (int) $wpdb->insert_id; // Use the newly generated $post_ID. $where = array( 'ID' => $post_ID ); } if ( empty( $data['post_name'] ) && ! in_array( $data['post_status'], array( 'draft', 'pending', 'auto-draft' ) ) ) { $data['post_name'] = wp_unique_post_slug( sanitize_title( $data['post_title'], $post_ID ), $post_ID, $data['post_status'], $post_type, $post_parent ); $wpdb->update( $wpdb->posts, array( 'post_name' => $data['post_name'] ), $where ); clean_post_cache( $post_ID ); } if ( is_object_in_taxonomy( $post_type, 'category' ) ) { wp_set_post_categories( $post_ID, $post_category ); } if ( isset( $postarr['tags_input'] ) && is_object_in_taxonomy( $post_type, 'post_tag' ) ) { wp_set_post_tags( $post_ID, $postarr['tags_input'] ); } // New-style support for all custom taxonomies. if ( ! empty( $postarr['tax_input'] ) ) { foreach ( $postarr['tax_input'] as $taxonomy => $tags ) { $taxonomy_obj = get_taxonomy($taxonomy); if ( ! $taxonomy_obj ) { /* translators: %s: taxonomy name */ _doing_it_wrong( __FUNCTION__, sprintf( __( 'Invalid taxonomy: %s.' ), $taxonomy ), '4.4.0' ); continue; } // array = hierarchical, string = non-hierarchical. if ( is_array( $tags ) ) { $tags = array_filter($tags); } if ( current_user_can( $taxonomy_obj->cap->assign_terms ) ) { wp_set_post_terms( $post_ID, $tags, $taxonomy ); } } } if ( ! empty( $postarr['meta_input'] ) ) { foreach ( $postarr['meta_input'] as $field => $value ) { update_post_meta( $post_ID, $field, $value ); } } $current_guid = get_post_field( 'guid', $post_ID ); // Set GUID. if ( ! $update && '' == $current_guid ) { $wpdb->update( $wpdb->posts, array( 'guid' => get_permalink( $post_ID ) ), $where ); } if ( 'attachment' === $postarr['post_type'] ) { if ( ! empty( $postarr['file'] ) ) { update_attached_file( $post_ID, $postarr['file'] ); } if ( ! empty( $postarr['context'] ) ) { add_post_meta( $post_ID, '_wp_attachment_context', $postarr['context'], true ); } } clean_post_cache( $post_ID ); $post = get_post( $post_ID ); if ( ! empty( $postarr['page_template'] ) && 'page' == $data['post_type'] ) { $post->page_template = $postarr['page_template']; $page_templates = wp_get_theme()->get_page_templates( $post ); if ( 'default' != $postarr['page_template'] && ! isset( $page_templates[ $postarr['page_template'] ] ) ) { if ( $wp_error ) { return new WP_Error('invalid_page_template', __('The page template is invalid.')); } update_post_meta( $post_ID, '_wp_page_template', 'default' ); } else { update_post_meta( $post_ID, '_wp_page_template', $postarr['page_template'] ); } } if ( 'attachment' !== $postarr['post_type'] ) { wp_transition_post_status( $data['post_status'], $previous_status, $post ); } else { if ( $update ) { /** * Fires once an existing attachment has been updated. * * @since 2.0.0 * * @param int $post_ID Attachment ID. */ do_action( 'edit_attachment', $post_ID ); $post_after = get_post( $post_ID ); /** * Fires once an existing attachment has been updated. * * @since 4.4.0 * * @param int $post_ID Post ID. * @param WP_Post $post_after Post object following the update. * @param WP_Post $post_before Post object before the update. */ do_action( 'attachment_updated', $post_ID, $post_after, $post_before ); } else { /** * Fires once an attachment has been added. * * @since 2.0.0 * * @param int $post_ID Attachment ID. */ do_action( 'add_attachment', $post_ID ); } return $post_ID; } if ( $update ) { /** * Fires once an existing post has been updated. * * @since 1.2.0 * * @param int $post_ID Post ID. * @param WP_Post $post Post object. */ do_action( 'edit_post', $post_ID, $post ); $post_after = get_post($post_ID); /** * Fires once an existing post has been updated. * * @since 3.0.0 * * @param int $post_ID Post ID. * @param WP_Post $post_after Post object following the update. * @param WP_Post $post_before Post object before the update. */ do_action( 'post_updated', $post_ID, $post_after, $post_before); } /** * Fires once a post has been saved. * * The dynamic portion of the hook name, `$post->post_type`, refers to * the post type slug. * * @since 3.7.0 * * @param int $post_ID Post ID. * @param WP_Post $post Post object. * @param bool $update Whether this is an existing post being updated or not. */ do_action( "save_post_{$post->post_type}", $post_ID, $post, $update ); /** * Fires once a post has been saved. * * @since 1.5.0 * * @param int $post_ID Post ID. * @param WP_Post $post Post object. * @param bool $update Whether this is an existing post being updated or not. */ do_action( 'save_post', $post_ID, $post, $update ); /** * Fires once a post has been saved. * * @since 2.0.0 * * @param int $post_ID Post ID. * @param WP_Post $post Post object. * @param bool $update Whether this is an existing post being updated or not. */ do_action( 'wp_insert_post', $post_ID, $post, $update ); return $post_ID; }

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.60.0040.01116.75
8.3.50.0150.00016.25
8.3.40.0060.01218.70
8.3.30.0070.00718.84
8.3.20.0040.00420.55
8.3.10.0050.00320.26
8.3.00.0080.00022.03
8.2.180.0160.00618.41
8.2.170.0070.00722.96
8.2.160.0070.00719.59
8.2.150.0080.00024.18
8.2.140.0080.00024.66
8.2.130.0040.00426.16
8.2.120.0100.01017.50
8.2.110.0060.00322.25
8.2.100.0030.00917.84
8.2.90.0050.00319.36
8.2.80.0000.00917.97
8.2.70.0000.00917.63
8.2.60.0060.00318.05
8.2.50.0080.00019.59
8.2.40.0080.00020.80
8.2.30.0000.00819.27
8.2.20.0000.00818.15
8.2.10.0040.00418.04
8.2.00.0050.00517.80
8.1.280.0090.00925.92
8.1.270.0070.00724.66
8.1.260.0080.00026.35
8.1.250.0040.00428.09
8.1.240.0070.01123.64
8.1.230.0040.00722.82
8.1.220.0060.00317.74
8.1.210.0060.00318.77
8.1.200.0050.00517.25
8.1.190.0080.00017.36
8.1.180.0000.00818.10
8.1.170.0070.00618.76
8.1.160.0040.00422.38
8.1.150.0030.00618.99
8.1.140.0030.00519.75
8.1.130.0000.00717.68
8.1.120.0000.00717.54
8.1.110.0050.00317.45
8.1.100.0000.00717.55
8.1.90.0040.00417.53
8.1.80.0070.00017.58
8.1.70.0030.00617.63
8.1.60.0000.00817.67
8.1.50.0030.00617.56
8.1.40.0030.00517.61
8.1.30.0030.00617.77
8.1.20.0050.00317.83
8.1.10.0040.00817.54
8.1.00.0040.00417.47
8.0.300.0000.00818.77
8.0.290.0060.00316.88
8.0.280.0040.00418.61
8.0.270.0000.00817.37
8.0.260.0030.00317.70
8.0.250.0080.00017.06
8.0.240.0000.00816.96
8.0.230.0000.00717.09
8.0.220.0030.00316.98
8.0.210.0030.00316.99
8.0.200.0000.00717.07
8.0.190.0030.00517.09
8.0.180.0040.00417.07
8.0.170.0040.00417.04
8.0.160.0030.00617.04
8.0.150.0080.00016.89
8.0.140.0040.00417.00
8.0.130.0060.00013.39
8.0.120.0050.00316.87
8.0.110.0000.00817.00
8.0.100.0000.00716.99
8.0.90.0000.00816.86
8.0.80.0090.00617.01
8.0.70.0030.00716.90
8.0.60.0030.00617.12
8.0.50.0040.00416.89
8.0.30.0060.01417.16
8.0.20.0090.01417.40
8.0.10.0000.00817.00
8.0.00.0130.00616.82
7.4.330.0030.00315.08
7.4.320.0030.00316.70
7.4.300.0000.00716.63
7.4.290.0000.00916.71
7.4.280.0060.00316.69
7.4.270.0030.00516.67
7.4.260.0040.00416.73
7.4.250.0000.00716.63
7.4.240.0000.00716.72
7.4.230.0040.00416.74
7.4.220.0130.01316.63
7.4.210.0060.00916.75
7.4.200.0070.00016.51
7.4.160.0080.00816.65
7.4.150.0120.00917.40
7.4.140.0160.00417.86
7.4.130.0170.00516.55
7.4.120.0110.00716.71
7.4.110.0090.01016.66
7.4.100.0070.01016.69
7.4.90.0120.00616.60
7.4.80.0100.01719.39
7.4.70.0090.00916.51
7.4.60.0090.00916.50
7.4.50.0070.00716.15
7.4.40.0090.01216.68
7.4.30.0120.00916.80
7.4.10.0040.01114.89
7.4.00.0060.00914.97
7.3.330.0050.00313.36
7.3.320.0030.00313.43
7.3.310.0000.00716.30
7.3.300.0030.00516.40
7.3.290.0070.00816.40
7.3.280.0080.00916.42
7.3.270.0200.02317.40
7.3.260.0110.00816.59
7.3.250.0100.00816.47
7.3.240.0080.01016.37
7.3.230.0100.01116.44
7.3.210.0030.01316.73
7.3.200.0290.01916.70
7.3.190.0070.01016.42
7.3.180.0040.01816.32
7.3.170.0090.01416.44
7.3.160.0030.01416.45
7.3.130.0040.01415.03
7.3.120.0070.01114.83
7.3.110.0130.00614.77
7.3.100.0070.00714.49
7.3.90.0030.01414.70
7.3.80.0040.00815.07
7.3.70.0110.00715.03
7.3.60.0000.00914.91
7.3.50.0040.01114.79
7.3.40.0060.00914.64
7.3.30.0030.00614.92
7.3.20.0100.00616.37
7.3.10.0080.00416.20
7.3.00.0070.00316.60
7.2.330.0090.00916.61
7.2.320.0160.00716.68
7.2.310.0110.00716.68
7.2.300.0070.01016.71
7.2.290.0030.01716.48
7.2.260.0080.00814.86
7.2.250.0060.00614.77
7.2.240.0030.01014.98
7.2.230.0040.01214.91
7.2.220.0070.01015.08
7.2.210.0120.00315.07
7.2.200.0060.01015.10
7.2.190.0030.01014.82
7.2.180.0000.01614.86
7.2.170.0070.00715.02
7.2.160.0060.00615.05
7.2.150.0070.01016.62
7.2.140.0070.01016.60
7.2.130.0070.00716.69
7.2.120.0040.00716.78
7.2.110.0100.00716.66
7.2.100.0060.01016.69
7.2.90.0060.00916.65
7.2.80.0070.01016.77
7.2.70.0120.00016.61
7.2.60.0050.01016.63
7.2.50.0040.00916.53
7.2.40.0180.00416.79
7.2.30.0100.00716.65
7.2.20.0030.01316.59
7.2.10.0130.00716.78
7.2.00.0050.00818.00
7.1.330.0030.01015.72
7.1.320.0120.00315.64
7.1.310.0060.00915.74
7.1.300.0090.00615.27
7.1.290.0090.00615.65
7.1.280.0000.01415.64
7.1.270.0000.01515.65
7.1.260.0030.01415.75
7.1.250.0000.01515.36
7.1.240.0000.01415.56
7.1.230.0090.00615.36
7.1.220.0030.01315.62
7.1.210.0060.00815.54
7.1.200.0060.00715.68
7.1.190.0080.00615.30
7.1.180.0030.01015.68
7.1.170.0040.01115.72
7.1.160.0030.01215.60
7.1.150.0060.00315.68
7.1.140.0030.01315.40
7.1.130.0070.00715.64
7.1.120.0060.00615.70
7.1.110.0060.00815.62
7.1.100.0090.00615.73
7.1.90.0070.00715.44
7.1.80.0040.01515.78
7.1.70.0050.00716.16
7.1.60.0010.00816.41
7.1.50.0030.01015.62
7.1.40.0100.00715.66
7.1.30.0070.00715.55
7.1.20.0030.01015.62
7.1.10.0070.00715.50
7.1.00.0020.04418.98
7.0.330.0040.01115.27
7.0.320.0100.00715.23
7.0.310.0080.00415.34
7.0.300.0060.00915.21
7.0.290.0030.00615.11
7.0.280.0030.01315.20
7.0.270.0040.00714.95
7.0.260.0070.00715.16
7.0.250.0030.00615.41
7.0.240.0090.00615.39
7.0.230.0060.01315.33
7.0.220.0040.01415.08
7.0.210.0050.00315.15
7.0.200.0180.01014.96
7.0.190.0090.00915.04
7.0.180.0040.01415.37
7.0.170.0040.01215.29
7.0.160.0030.01315.30
7.0.150.0040.00815.38
7.0.140.0040.01215.33
7.0.130.0040.00715.34
7.0.120.0000.01615.41
7.0.110.0250.02717.78
7.0.100.0190.03417.73
7.0.90.0220.04517.96
7.0.80.0250.03917.99
7.0.70.0180.03617.80
7.0.60.0200.03117.89
7.0.50.0370.03217.98
7.0.41.3950.03813.46
7.0.30.0340.03916.84
7.0.20.0170.03516.97
7.0.11.0360.03816.88
7.0.00.0190.03316.86
5.6.400.0030.01014.14
5.6.390.0120.00314.42
5.6.380.0060.01214.02
5.6.370.0030.01014.43
5.6.360.0090.01214.00
5.6.350.0070.00714.24
5.6.340.0100.00314.54
5.6.330.0090.00914.17
5.6.320.0060.00614.21
5.6.310.0090.00614.46
5.6.300.0060.00914.07
5.6.290.0060.00614.10
5.6.280.0040.01114.36
5.6.270.0060.00614.13
5.6.260.0130.02817.63
5.6.250.0090.03517.54
5.6.240.0090.03817.75
5.6.230.0140.03817.54
5.6.220.0080.03217.69
5.6.210.0150.04017.63
5.6.200.0070.04717.70
5.6.190.0050.05117.76
5.6.180.0070.03717.57
5.6.170.0130.03017.51
5.6.160.0070.03317.57
5.6.150.0110.04117.81
5.6.140.0070.03517.62
5.6.130.0030.03717.48
5.6.120.0070.03617.59
5.6.110.0050.03617.60
5.6.100.0090.03717.61
5.6.90.0120.03017.50
5.6.80.0110.02817.18
5.6.70.0130.02817.24
5.6.60.0110.03117.28
5.6.50.0170.02817.37
5.6.40.0130.04017.30
5.6.30.0140.02817.43
5.6.20.0030.03617.32
5.6.10.0120.03017.20
5.6.00.0130.03617.28

preferences:
65.61 ms | 401 KiB | 5 Q