├── comments.php ├── screenshot-1.png ├── screenshot-2.png ├── .github ├── dependabot.yml └── workflows │ ├── code-style.yml │ └── phpcs-fix.yml ├── .gitignore ├── composer.json ├── .php_cs.dist ├── phpcs.xml ├── README.md ├── remove-comments-absolute.php ├── LICENSE └── composer.lock /comments.php: -------------------------------------------------------------------------------- 1 | =5.3" 22 | }, 23 | "require-dev": { 24 | "dealerdirect/phpcodesniffer-composer-installer": "*", 25 | "friendsofphp/php-cs-fixer": "*", 26 | "phpcompatibility/phpcompatibility-wp": "*", 27 | "wp-coding-standards/wpcs": "*" 28 | }, 29 | "scripts": { 30 | "ci": "vendor/bin/phpcs", 31 | "cf": "vendor/bin/php-cs-fixer fix --diff --dry-run -vvv" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /.php_cs.dist: -------------------------------------------------------------------------------- 1 | exclude('.github') 10 | ->in(__DIR__) 11 | ; 12 | 13 | return PhpCsFixer\Config::create() 14 | ->setRules([ 15 | 'single_quote' => true, 16 | 'indentation_type' => true, 17 | 'array_indentation' => true, 18 | 'trailing_comma_in_multiline_array' => [ 19 | 'after_heredoc' => true 20 | ], 21 | 'braces' => [ 22 | 'position_after_functions_and_oop_constructs' => 'same' 23 | ], 24 | 'class_attributes_separation' => [ 25 | 'elements' => [ 26 | 'const', 27 | 'property', 28 | ], 29 | ], 30 | 'elseif' => true, 31 | 'full_opening_tag' => true, 32 | 'no_trailing_whitespace' => true, 33 | 'no_trailing_whitespace_in_comment' => true, 34 | 'no_blank_lines_after_phpdoc' => true, 35 | 'no_extra_blank_lines' => ['extra'], 36 | 'no_closing_tag' => true, 37 | 'not_operator_with_successor_space' => true, 38 | 'ternary_operator_spaces' => true, 39 | 'unary_operator_spaces' => true, 40 | 'binary_operator_spaces' => true, 41 | 'switch_case_space' => true, 42 | 'whitespace_after_comma_in_array' => true, 43 | 'method_argument_space' => true, 44 | 'cast_spaces' => [ 45 | 'space' => 'single' 46 | ], 47 | 'no_spaces_after_function_name' => true, 48 | 'no_spaces_inside_parenthesis' => false, 49 | ]) 50 | ->setIndent("\t") 51 | ->setLineEnding("\r\n") 52 | ->setUsingCache(false) 53 | ->setFinder($finder) 54 | ; 55 | -------------------------------------------------------------------------------- /phpcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Rules for the WordPress project 4 | 5 | 6 | . 7 | 9 | ./vendor/ 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 19 | 20 | 22 | 23 | 25 | 26 | 27 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Remove Comments Absolutely 2 | Deactivate comments functions and remove areas absolutely from the WordPress install 3 | 4 | ## Note 5 | Remove Comments Absolutely is abandoned. Please use https://github.com/inpsyde/disable-comments instead. This plugin supports all new features, like Gutenberg blocks to remove all comments features. 6 | 7 | ## Description 8 | The comment feature in WordPress is an essential component of blogs - but not in all cases it's needed, 9 | especially if you use it as a traditional CMS. 10 | 11 | Sure, you can just leave out the comment form while you are creating a theme and disable the comment options 12 | in your backend. But this is not the best way for everyone. In such a case, I turn the comments off completely, 13 | making sure that the posts can not have that option and also remove the fields for the comments in the backend. 14 | That way the user gets exactly what he needs. Meanwhile, I have needed this so often that I created a small 15 | Plugin and I'm able to immediately „switch off“ the functions and comment areas. 16 | 17 | Also see the [post](http://wpengineer.com/2230/removing-comments-absolutely-wordpress/) 18 | about the idea. 19 | 20 | ### Screenshots 21 | 1. [Different areas on the dashboard, there will be removed](https://raw.github.com/bueltge/Remove-Comments-Absolutely/master/screenshot-1.png) 22 | 2. [Remove commets areas in edit post page](https://raw.github.com/bueltge/Remove-Comments-Absolutely/master/screenshot-2.png) 23 | 24 | ## Other Notes 25 | ### Bugs, technical hints or contribute 26 | Please give me feedback, contribute and file technical bugs on this 27 | [GitHub Repo](https://github.com/bueltge/Remove-Comments-Absolutely/issues), use Issues. 28 | 29 | ### License 30 | Good news, this plugin is free for everyone! Since it's released under the GPL, 31 | you can use it free of charge on your personal or commercial blog. But if you enjoy this plugin, 32 | you can thank me and leave a 33 | [small donation](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=6069955 "Paypal Donate link") 34 | for the time I've spent writing and supporting this plugin. 35 | And I really don't want to know how many hours of my life this plugin has already eaten ;) 36 | 37 | ### Contact & Feedback 38 | The plugin is designed and developed by me ([Frank Bültge](https://bueltge.de)) 39 | The plugin was also maintained about the last time with the help from [barryceelen](https://github.com/barryceelen) - Thanks a lot. 40 | 41 | Please let me know if you like the plugin or you hate it or whatever ... 42 | Please fork it, add an issue for ideas and bugs. 43 | 44 | ### Disclaimer 45 | I'm German and my English might be gruesome here and there. 46 | So please be patient with me and let me know of typos or grammatical farts. Thanks 47 | -------------------------------------------------------------------------------- /remove-comments-absolute.php: -------------------------------------------------------------------------------- 1 | to empty string. 98 | add_filter( 'post_comments_feed_link', '__return_empty_string' ); 99 | 100 | // Set content of to empty string. 101 | add_filter( 'get_comments_number', '__return_zero' ); 102 | 103 | // Return empty string for post comment link, which takes care of . 104 | add_filter( 'get_comments_link', '__return_empty_string' ); 105 | 106 | // Remove comments popup. 107 | add_filter( 'query_vars', array( $this, 'filter_query_vars' ) ); 108 | 109 | // Remove 'Discussion Settings' help tab from post edit screen. 110 | add_action( 'admin_head-post.php', array( $this, 'remove_help_tabs' ), 10, 3 ); 111 | 112 | // Remove rewrite rules used for comment feed archives. 113 | add_filter( 'comments_rewrite_rules', '__return_empty_array', 99 ); 114 | // Remove rewrite rules for the legacy comment feed and post type comment pages. 115 | add_filter( 'rewrite_rules_array', array( $this, 'filter_rewrite_rules_array' ), 99 ); 116 | 117 | // Return an object with each comment stat set to zero. 118 | add_filter( 'wp_count_comments', array( $this, 'filter_count_comments' ) ); 119 | } 120 | 121 | /** 122 | * Handler for the action 'init'. Instantiates this class. 123 | * 124 | * @access public 125 | * @since 0.0.1 126 | * @return null|Remove_Comments_Absolute $classobj object 127 | */ 128 | public static function get_object() { 129 | if ( null === self::$classobj ) { 130 | self::$classobj = new self; 131 | } 132 | 133 | return self::$classobj; 134 | } 135 | 136 | /** 137 | * Disable plugin update notifications. 138 | * 139 | * @since 1.0.0 04/02/2012 140 | * @link http://dd32.id.au/2011/03/01/disable-plugin-update-notification-for-a-specific-plugin-in-wordpress-3-1/ 141 | * 142 | * @param array|string $value 143 | * 144 | * @return array|string $value 145 | */ 146 | public function remove_update_nag( $value ) { 147 | if ( isset( $value->response[ plugin_basename( __FILE__ ) ] ) 148 | && ! empty( $value->response[ plugin_basename( __FILE__ ) ] ) 149 | ) { 150 | unset( $value->response[ plugin_basename( __FILE__ ) ] ); 151 | } 152 | 153 | return $value; 154 | } 155 | 156 | /** 157 | * Set the status on posts and pages - is_singular(). 158 | * 159 | * @access public 160 | * @since 0.0.1 161 | * @uses is_singular 162 | * 163 | * @param WP_Post[] $posts 164 | * 165 | * @return WP_Post[] $posts Possibly empty array of post objects. 166 | */ 167 | public function set_comment_status( $posts ) { 168 | 169 | // 1. if no posts at all 170 | if ( empty( $posts ) ) { 171 | return $posts; 172 | } 173 | 174 | // 2. if not a WP_Post, we can act on 175 | if ( isset( $posts[ 0 ] ) && ! is_a( $posts[ 0 ], 'WP_Post') ) { 176 | return $posts; 177 | } 178 | 179 | // 3. if comments aren't supported at all by that post_type 180 | if ( ! post_type_supports( get_post_type( $posts[ 0 ] ), 'comments' ) ) { 181 | return $posts; 182 | } 183 | 184 | // x. if is_singular() 185 | if ( ! is_singular() ) { 186 | return $posts; 187 | } 188 | 189 | $posts[ 0 ]->comment_status = 'closed'; 190 | $posts[ 0 ]->ping_status = 'closed'; 191 | 192 | return $posts; 193 | } 194 | 195 | /** 196 | * Close comments, if open. 197 | * 198 | * @access public 199 | * @since 0.0.1 200 | * 201 | * @param string|boolean $open 202 | * @param string|integer $post_id 203 | * 204 | * @return bool|string $open 205 | */ 206 | public function close_comments( $open, $post_id ) { 207 | 208 | // If not open, than back. 209 | if ( ! $open ) { 210 | return $open; 211 | } 212 | 213 | $post = get_post( $post_id ); 214 | // For all post types. 215 | if ( $post->post_type ) { 216 | return false; 217 | } // 'closed' don`t work; @see http://codex.wordpress.org/Option_Reference#Discussion 218 | 219 | return $open; 220 | } 221 | 222 | /** 223 | * Return default closed comment status. 224 | * 225 | * @since 04/08/2013 226 | * @return string 227 | */ 228 | public function return_closed() { 229 | return 'closed'; 230 | } 231 | 232 | /** 233 | * Change options for don't use comments. 234 | * 235 | * Remove meta boxes on edit pages. 236 | * Remove support on all post types for comments. 237 | * Remove menu-entries. 238 | * Disallow comments pages direct access. 239 | * 240 | * @access public 241 | * @since 0.0.1 242 | * @return void 243 | */ 244 | public function remove_comments() { 245 | global $pagenow; 246 | 247 | // For integer values. 248 | foreach ( array( 'comments_notify', 'default_pingback_flag' ) as $option ) { 249 | add_filter( 'pre_option_' . $option, '__return_zero' ); 250 | } 251 | // For string false. 252 | foreach ( array( 'default_comment_status', 'default_ping_status' ) as $option ) { 253 | add_filter( 'pre_option_' . $option, array( $this, 'return_closed' ) ); 254 | } 255 | // For all post types. 256 | // As alternative define an array( 'post', 'page' ). 257 | foreach ( get_post_types() as $post_type ) { 258 | // Remove the comments and comments status meta box. 259 | remove_meta_box( 'commentstatusdiv', $post_type, 'normal' ); 260 | remove_meta_box( 'commentsdiv', $post_type, 'normal' ); 261 | // Remove the trackbacks meta box. 262 | remove_meta_box( 'trackbacksdiv', $post_type, 'normal' ); 263 | // Remove all comments/trackbacks from tables. 264 | if ( post_type_supports( $post_type, 'comments' ) ) { 265 | remove_post_type_support( $post_type, 'comments' ); 266 | remove_post_type_support( $post_type, 'trackbacks' ); 267 | } 268 | } 269 | // Filter for different pages. 270 | if ( in_array( $pagenow, self::$comment_pages, false ) ) { 271 | wp_die( 272 | esc_html__( 'Comments are disabled on this site.', 'remove_comments_absolute' ), 273 | '', 274 | array( 'response' => 403 ) 275 | ); 276 | exit(); 277 | } 278 | 279 | // Remove dashboard meta box for recents comments. 280 | remove_meta_box( 'dashboard_recent_comments', 'dashboard', 'normal' ); 281 | } 282 | 283 | /** 284 | * Remove menu-entries. 285 | * 286 | * @access public 287 | * @since 0.0.3 288 | * @uses remove_meta_box, remove_post_type_support 289 | * @return void 290 | */ 291 | public function remove_menu_items() { 292 | remove_menu_page( 'edit-comments.php' ); 293 | remove_submenu_page( 'options-general.php', 'options-discussion.php' ); 294 | } 295 | 296 | /** 297 | * Add class for last menu entry with no 20. 298 | * 299 | * @access public 300 | * @since 0.0.1 301 | * 302 | * @param array|string $menu 303 | * 304 | * @return array|string $menu 305 | */ 306 | public function add_menu_classes( $menu ) { 307 | if ( isset( $menu[ 20 ][ 4 ] ) ) { 308 | $menu[ 20 ][ 4 ] .= ' menu-top-last'; 309 | } 310 | 311 | return $menu; 312 | } 313 | 314 | /** 315 | * Remove comment related elements from the admin dashboard via JS. 316 | * 317 | * @access public 318 | * @since 0.0.1 319 | * $return string with js 320 | */ 321 | public function remove_dashboard_comments_areas() { 322 | ?> 323 | 337 | remove_node( 'blog-' . $GLOBALS['blog_id'] . '-c' ); 358 | } 359 | // Remove entry in admin bar. 360 | $wp_admin_bar->remove_node( 'comments' ); 361 | } 362 | 363 | /** 364 | * Remove comments item on network admin bar. 365 | * 366 | * @since 04/08/2013 367 | * @internal param Array $wp_admin_bar 368 | * @return void 369 | */ 370 | public function remove_network_comment_items() { 371 | if ( ! is_admin_bar_showing() ) { 372 | return null; 373 | } 374 | 375 | global $wp_admin_bar; 376 | 377 | if ( ! function_exists( 'is_plugin_active_for_network' ) ) { 378 | require_once( ABSPATH . '/wp-admin/includes/plugin.php' ); 379 | } 380 | 381 | if ( is_multisite() && is_plugin_active_for_network( plugin_basename( __FILE__ ) ) ) { 382 | foreach ( (array) $wp_admin_bar->user->blogs as $blog ) { 383 | $wp_admin_bar->remove_node( 'blog-' . $blog->userblog_id . '-c' ); 384 | } 385 | } 386 | } 387 | 388 | /** 389 | * Display the links to the general feeds, without comments. 390 | * 391 | * @access public 392 | * @since 0.0.4 393 | * @uses current_theme_supports, wp_parse_args, feed_content_type, get_bloginfo, esc_attr, get_feed_link, _x, __ 394 | * 395 | * @param array $args Optional arguments 396 | * 397 | * @return string 398 | */ 399 | public function feed_links( $args ) { 400 | if ( ! current_theme_supports( 'automatic-feed-links' ) ) { 401 | return null; 402 | } 403 | 404 | $defaults = array( 405 | // Translators: Separator between blog name and feed type in feed links. 406 | 'separator' => _x( 407 | '»', 408 | 'feed link', 409 | 'remove_comments_absolute' 410 | ), 411 | // Translators: 1: blog title, 2: separator (raquo). 412 | 'feedtitle' => __( '%1$s %2$s Feed', 'remove_comments_absolute' ), 413 | ); 414 | 415 | $args = wp_parse_args( $args, $defaults ); 416 | 417 | echo '' . "\n"; 425 | } 426 | 427 | /** 428 | * Display the links to the extra feeds such as category feeds. 429 | * 430 | * Copy from WP default, but without comment feed; no filter available. 431 | * 432 | * @since 04/08/2013 433 | * 434 | * @param array $args Optional argument. 435 | */ 436 | public function feed_links_extra( $args ) { 437 | $defaults = array( 438 | /* Translators: Separator between blog name and feed type in feed links. */ 439 | 'separator' => _x( '»', 'feed link' ), 440 | /* Translators: 1: blog name, 2: separator(raquo), 3: category name. */ 441 | 'cattitle' => __( '%1$s %2$s %3$s Category Feed' ), 442 | /* Translators: 1: blog name, 2: separator(raquo), 3: tag name. */ 443 | 'tagtitle' => __( '%1$s %2$s %3$s Tag Feed' ), 444 | /* Translators: 1: blog name, 2: separator(raquo), 3: author name. */ 445 | 'authortitle' => __( '%1$s %2$s Posts by %3$s Feed' ), 446 | /* Translators: 1: blog name, 2: separator(raquo), 3: search phrase. */ 447 | 'searchtitle' => __( '%1$s %2$s Search Results for “%3$s” Feed' ), 448 | /* Translators: 1: blog name, 2: separator(raquo), 3: post type name. */ 449 | 'posttypetitle' => __( '%1$s %2$s %3$s Feed' ), 450 | ); 451 | 452 | $args = wp_parse_args( $args, $defaults ); 453 | 454 | if ( is_category() ) { 455 | $term = get_queried_object(); 456 | 457 | if ( $term && is_object($term) ) { 458 | $title = sprintf( $args['cattitle' ], get_bloginfo( 'name' ), $args['separator' ], $term->name ); 459 | $href = get_category_feed_link( $term->term_id ); 460 | } 461 | } elseif ( is_tag() ) { 462 | $term = get_queried_object(); 463 | 464 | if ( $term && is_object($term) ) { 465 | $title = sprintf( $args['tagtitle' ], get_bloginfo( 'name' ), $args['separator' ], $term->name ); 466 | $href = get_tag_feed_link( $term->term_id ); 467 | } 468 | } elseif ( is_author() ) { 469 | $author_id = (int) get_query_var( 'author' ); 470 | 471 | $title = sprintf( 472 | $args['authortitle' ], get_bloginfo( 'name' ), $args['separator' ], 473 | get_the_author_meta( 'display_name', $author_id ) 474 | ); 475 | $href = get_author_feed_link( $author_id ); 476 | } elseif ( is_search() ) { 477 | $title = sprintf( 478 | $args['searchtitle' ], get_bloginfo( 'name' ), $args['separator' ], get_search_query( false ) 479 | ); 480 | $href = get_search_feed_link(); 481 | } elseif ( is_post_type_archive() ) { 482 | $title = sprintf( 483 | $args['posttypetitle' ], get_bloginfo( 'name' ), $args['separator' ], 484 | post_type_archive_title( '', false ) 485 | ); 486 | $href = get_post_type_archive_feed_link( get_queried_object()->name ); 487 | } 488 | 489 | if ( isset( $title, $href ) ) { 490 | echo '' . "\n"; 493 | } 494 | } 495 | 496 | /** 497 | * Redirect on comment feed, set status 301. 498 | * 499 | * @since 04/08/2013 500 | * @return null 501 | */ 502 | public function filter_query() { 503 | if ( ! is_comment_feed() ) { 504 | return null; 505 | } 506 | 507 | if ( isset( $_GET['feed'] ) ) { 508 | wp_safe_redirect( remove_query_arg( 'feed' ), 301 ); 509 | exit(); 510 | } 511 | // Redirect_canonical will do the rest. 512 | set_query_var( 'feed', '' ); 513 | } 514 | 515 | /** 516 | * Unset additional HTTP headers for pingback. 517 | * 518 | * @since 04/07/2013 519 | * 520 | * @param array $headers 521 | * 522 | * @return array $headers 523 | */ 524 | public function filter_wp_headers( $headers ) { 525 | unset( $headers['X-Pingback'] ); 526 | 527 | return $headers; 528 | } 529 | 530 | /** 531 | * Unregister default comment widget. 532 | * 533 | * @since 07/16/2012 534 | */ 535 | public function unregister_default_wp_widgets() { 536 | unregister_widget( 'WP_Widget_Recent_Comments' ); 537 | } 538 | 539 | /** 540 | * Remove options for Keyboard Shortcuts on profile page. 541 | * 542 | * @since 09/03/2012 543 | * 544 | * @return void 545 | */ 546 | public function remove_profile_items() { 547 | ?> 548 | 555 | get_help_tab( 'discussion-settings' ) ) { 643 | $current_screen->remove_help_tab( 'discussion-settings' ); 644 | } 645 | } 646 | 647 | /** 648 | * Remove rewrite rules for the legacy comment feed and post type comment pages. 649 | * 650 | * @since 2016-02-16 651 | * 652 | * @param array $rules The compiled array of rewrite rules. 653 | * 654 | * @return array The filtered array of rewrite rules. 655 | */ 656 | public function filter_rewrite_rules_array( $rules ) { 657 | if ( is_array( $rules ) ) { 658 | 659 | // Remove the legacy comment feed rule. 660 | foreach ( $rules as $k => $v ) { 661 | if ( false !== strpos( $k, '|commentsrss2' ) ) { 662 | $new_k = str_replace( '|commentsrss2', '', $k ); 663 | unset( $rules[ $k ] ); 664 | $rules[ $new_k ] = $v; 665 | } 666 | } 667 | 668 | // Remove all other comment related rules. 669 | foreach ( $rules as $k => $v ) { 670 | if ( false !== strpos( $k, 'comment-page-' ) ) { 671 | unset( $rules[ $k ] ); 672 | } 673 | } 674 | } 675 | 676 | return $rules; 677 | } 678 | 679 | /** 680 | * Return an object with each comment stat set to zero. 681 | * 682 | * Prevents 'wp_count_comments' form performing a database query. 683 | * 684 | * @since 2016-08-29 685 | * @see wp_count_comments 686 | * @return object Comment stats. 687 | */ 688 | public function filter_count_comments() { 689 | return (object) array( 'approved' => 0, 690 | 'spam' => 0, 691 | 'trash' => 0, 692 | 'post-trashed' => 0, 693 | 'total_comments' => 0, 694 | 'all' => 0, 695 | 'moderated' => 0, 696 | ); 697 | } 698 | } // end class 699 | } // end if class exists 700 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "3451d5d0d1fcd8501494ed7b28ca3125", 8 | "packages": [], 9 | "packages-dev": [ 10 | { 11 | "name": "composer/semver", 12 | "version": "3.2.6", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/composer/semver.git", 16 | "reference": "83e511e247de329283478496f7a1e114c9517506" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/composer/semver/zipball/83e511e247de329283478496f7a1e114c9517506", 21 | "reference": "83e511e247de329283478496f7a1e114c9517506", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "php": "^5.3.2 || ^7.0 || ^8.0" 26 | }, 27 | "require-dev": { 28 | "phpstan/phpstan": "^0.12.54", 29 | "symfony/phpunit-bridge": "^4.2 || ^5" 30 | }, 31 | "type": "library", 32 | "extra": { 33 | "branch-alias": { 34 | "dev-main": "3.x-dev" 35 | } 36 | }, 37 | "autoload": { 38 | "psr-4": { 39 | "Composer\\Semver\\": "src" 40 | } 41 | }, 42 | "notification-url": "https://packagist.org/downloads/", 43 | "license": [ 44 | "MIT" 45 | ], 46 | "authors": [ 47 | { 48 | "name": "Nils Adermann", 49 | "email": "naderman@naderman.de", 50 | "homepage": "http://www.naderman.de" 51 | }, 52 | { 53 | "name": "Jordi Boggiano", 54 | "email": "j.boggiano@seld.be", 55 | "homepage": "http://seld.be" 56 | }, 57 | { 58 | "name": "Rob Bast", 59 | "email": "rob.bast@gmail.com", 60 | "homepage": "http://robbast.nl" 61 | } 62 | ], 63 | "description": "Semver library that offers utilities, version constraint parsing and validation.", 64 | "keywords": [ 65 | "semantic", 66 | "semver", 67 | "validation", 68 | "versioning" 69 | ], 70 | "funding": [ 71 | { 72 | "url": "https://packagist.com", 73 | "type": "custom" 74 | }, 75 | { 76 | "url": "https://github.com/composer", 77 | "type": "github" 78 | }, 79 | { 80 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 81 | "type": "tidelift" 82 | } 83 | ], 84 | "time": "2021-10-25T11:34:17+00:00" 85 | }, 86 | { 87 | "name": "composer/xdebug-handler", 88 | "version": "2.0.2", 89 | "source": { 90 | "type": "git", 91 | "url": "https://github.com/composer/xdebug-handler.git", 92 | "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339" 93 | }, 94 | "dist": { 95 | "type": "zip", 96 | "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/84674dd3a7575ba617f5a76d7e9e29a7d3891339", 97 | "reference": "84674dd3a7575ba617f5a76d7e9e29a7d3891339", 98 | "shasum": "" 99 | }, 100 | "require": { 101 | "php": "^5.3.2 || ^7.0 || ^8.0", 102 | "psr/log": "^1 || ^2 || ^3" 103 | }, 104 | "require-dev": { 105 | "phpstan/phpstan": "^0.12.55", 106 | "symfony/phpunit-bridge": "^4.2 || ^5" 107 | }, 108 | "type": "library", 109 | "autoload": { 110 | "psr-4": { 111 | "Composer\\XdebugHandler\\": "src" 112 | } 113 | }, 114 | "notification-url": "https://packagist.org/downloads/", 115 | "license": [ 116 | "MIT" 117 | ], 118 | "authors": [ 119 | { 120 | "name": "John Stevenson", 121 | "email": "john-stevenson@blueyonder.co.uk" 122 | } 123 | ], 124 | "description": "Restarts a process without Xdebug.", 125 | "keywords": [ 126 | "Xdebug", 127 | "performance" 128 | ], 129 | "funding": [ 130 | { 131 | "url": "https://packagist.com", 132 | "type": "custom" 133 | }, 134 | { 135 | "url": "https://github.com/composer", 136 | "type": "github" 137 | }, 138 | { 139 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 140 | "type": "tidelift" 141 | } 142 | ], 143 | "time": "2021-07-31T17:03:58+00:00" 144 | }, 145 | { 146 | "name": "dealerdirect/phpcodesniffer-composer-installer", 147 | "version": "v1.0.0", 148 | "source": { 149 | "type": "git", 150 | "url": "https://github.com/PHPCSStandards/composer-installer.git", 151 | "reference": "4be43904336affa5c2f70744a348312336afd0da" 152 | }, 153 | "dist": { 154 | "type": "zip", 155 | "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/4be43904336affa5c2f70744a348312336afd0da", 156 | "reference": "4be43904336affa5c2f70744a348312336afd0da", 157 | "shasum": "" 158 | }, 159 | "require": { 160 | "composer-plugin-api": "^1.0 || ^2.0", 161 | "php": ">=5.4", 162 | "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" 163 | }, 164 | "require-dev": { 165 | "composer/composer": "*", 166 | "ext-json": "*", 167 | "ext-zip": "*", 168 | "php-parallel-lint/php-parallel-lint": "^1.3.1", 169 | "phpcompatibility/php-compatibility": "^9.0", 170 | "yoast/phpunit-polyfills": "^1.0" 171 | }, 172 | "type": "composer-plugin", 173 | "extra": { 174 | "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" 175 | }, 176 | "autoload": { 177 | "psr-4": { 178 | "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" 179 | } 180 | }, 181 | "notification-url": "https://packagist.org/downloads/", 182 | "license": [ 183 | "MIT" 184 | ], 185 | "authors": [ 186 | { 187 | "name": "Franck Nijhof", 188 | "email": "franck.nijhof@dealerdirect.com", 189 | "homepage": "http://www.frenck.nl", 190 | "role": "Developer / IT Manager" 191 | }, 192 | { 193 | "name": "Contributors", 194 | "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors" 195 | } 196 | ], 197 | "description": "PHP_CodeSniffer Standards Composer Installer Plugin", 198 | "homepage": "http://www.dealerdirect.com", 199 | "keywords": [ 200 | "PHPCodeSniffer", 201 | "PHP_CodeSniffer", 202 | "code quality", 203 | "codesniffer", 204 | "composer", 205 | "installer", 206 | "phpcbf", 207 | "phpcs", 208 | "plugin", 209 | "qa", 210 | "quality", 211 | "standard", 212 | "standards", 213 | "style guide", 214 | "stylecheck", 215 | "tests" 216 | ], 217 | "time": "2023-01-05T11:28:13+00:00" 218 | }, 219 | { 220 | "name": "doctrine/annotations", 221 | "version": "v1.4.0", 222 | "source": { 223 | "type": "git", 224 | "url": "https://github.com/doctrine/annotations.git", 225 | "reference": "54cacc9b81758b14e3ce750f205a393d52339e97" 226 | }, 227 | "dist": { 228 | "type": "zip", 229 | "url": "https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97", 230 | "reference": "54cacc9b81758b14e3ce750f205a393d52339e97", 231 | "shasum": "" 232 | }, 233 | "require": { 234 | "doctrine/lexer": "1.*", 235 | "php": "^5.6 || ^7.0" 236 | }, 237 | "require-dev": { 238 | "doctrine/cache": "1.*", 239 | "phpunit/phpunit": "^5.7" 240 | }, 241 | "type": "library", 242 | "extra": { 243 | "branch-alias": { 244 | "dev-master": "1.4.x-dev" 245 | } 246 | }, 247 | "autoload": { 248 | "psr-4": { 249 | "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" 250 | } 251 | }, 252 | "notification-url": "https://packagist.org/downloads/", 253 | "license": [ 254 | "MIT" 255 | ], 256 | "authors": [ 257 | { 258 | "name": "Roman Borschel", 259 | "email": "roman@code-factory.org" 260 | }, 261 | { 262 | "name": "Benjamin Eberlei", 263 | "email": "kontakt@beberlei.de" 264 | }, 265 | { 266 | "name": "Guilherme Blanco", 267 | "email": "guilhermeblanco@gmail.com" 268 | }, 269 | { 270 | "name": "Jonathan Wage", 271 | "email": "jonwage@gmail.com" 272 | }, 273 | { 274 | "name": "Johannes Schmitt", 275 | "email": "schmittjoh@gmail.com" 276 | } 277 | ], 278 | "description": "Docblock Annotations Parser", 279 | "homepage": "http://www.doctrine-project.org", 280 | "keywords": [ 281 | "annotations", 282 | "docblock", 283 | "parser" 284 | ], 285 | "time": "2017-02-24T16:22:25+00:00" 286 | }, 287 | { 288 | "name": "doctrine/lexer", 289 | "version": "1.0.2", 290 | "source": { 291 | "type": "git", 292 | "url": "https://github.com/doctrine/lexer.git", 293 | "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8" 294 | }, 295 | "dist": { 296 | "type": "zip", 297 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8", 298 | "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8", 299 | "shasum": "" 300 | }, 301 | "require": { 302 | "php": ">=5.3.2" 303 | }, 304 | "require-dev": { 305 | "phpunit/phpunit": "^4.5" 306 | }, 307 | "type": "library", 308 | "extra": { 309 | "branch-alias": { 310 | "dev-master": "1.0.x-dev" 311 | } 312 | }, 313 | "autoload": { 314 | "psr-4": { 315 | "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" 316 | } 317 | }, 318 | "notification-url": "https://packagist.org/downloads/", 319 | "license": [ 320 | "MIT" 321 | ], 322 | "authors": [ 323 | { 324 | "name": "Roman Borschel", 325 | "email": "roman@code-factory.org" 326 | }, 327 | { 328 | "name": "Guilherme Blanco", 329 | "email": "guilhermeblanco@gmail.com" 330 | }, 331 | { 332 | "name": "Johannes Schmitt", 333 | "email": "schmittjoh@gmail.com" 334 | } 335 | ], 336 | "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", 337 | "homepage": "https://www.doctrine-project.org/projects/lexer.html", 338 | "keywords": [ 339 | "annotations", 340 | "docblock", 341 | "lexer", 342 | "parser", 343 | "php" 344 | ], 345 | "time": "2019-06-08T11:03:04+00:00" 346 | }, 347 | { 348 | "name": "friendsofphp/php-cs-fixer", 349 | "version": "v2.19.3", 350 | "source": { 351 | "type": "git", 352 | "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", 353 | "reference": "75ac86f33fab4714ea5a39a396784d83ae3b5ed8" 354 | }, 355 | "dist": { 356 | "type": "zip", 357 | "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/75ac86f33fab4714ea5a39a396784d83ae3b5ed8", 358 | "reference": "75ac86f33fab4714ea5a39a396784d83ae3b5ed8", 359 | "shasum": "" 360 | }, 361 | "require": { 362 | "composer/semver": "^1.4 || ^2.0 || ^3.0", 363 | "composer/xdebug-handler": "^1.2 || ^2.0", 364 | "doctrine/annotations": "^1.2", 365 | "ext-json": "*", 366 | "ext-tokenizer": "*", 367 | "php": "^5.6 || ^7.0 || ^8.0", 368 | "php-cs-fixer/diff": "^1.3", 369 | "symfony/console": "^3.4.43 || ^4.1.6 || ^5.0", 370 | "symfony/event-dispatcher": "^3.0 || ^4.0 || ^5.0", 371 | "symfony/filesystem": "^3.0 || ^4.0 || ^5.0", 372 | "symfony/finder": "^3.0 || ^4.0 || ^5.0", 373 | "symfony/options-resolver": "^3.0 || ^4.0 || ^5.0", 374 | "symfony/polyfill-php70": "^1.0", 375 | "symfony/polyfill-php72": "^1.4", 376 | "symfony/process": "^3.0 || ^4.0 || ^5.0", 377 | "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0" 378 | }, 379 | "require-dev": { 380 | "justinrainbow/json-schema": "^5.0", 381 | "keradus/cli-executor": "^1.4", 382 | "mikey179/vfsstream": "^1.6", 383 | "php-coveralls/php-coveralls": "^2.4.2", 384 | "php-cs-fixer/accessible-object": "^1.0", 385 | "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", 386 | "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", 387 | "phpspec/prophecy-phpunit": "^1.1 || ^2.0", 388 | "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.13 || ^9.5", 389 | "phpunitgoodpractices/polyfill": "^1.5", 390 | "phpunitgoodpractices/traits": "^1.9.1", 391 | "sanmai/phpunit-legacy-adapter": "^6.4 || ^8.2.1", 392 | "symfony/phpunit-bridge": "^5.2.1", 393 | "symfony/yaml": "^3.0 || ^4.0 || ^5.0" 394 | }, 395 | "suggest": { 396 | "ext-dom": "For handling output formats in XML", 397 | "ext-mbstring": "For handling non-UTF8 characters.", 398 | "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.", 399 | "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.", 400 | "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." 401 | }, 402 | "bin": [ 403 | "php-cs-fixer" 404 | ], 405 | "type": "application", 406 | "extra": { 407 | "branch-alias": { 408 | "dev-master": "2.19-dev" 409 | } 410 | }, 411 | "autoload": { 412 | "psr-4": { 413 | "PhpCsFixer\\": "src/" 414 | }, 415 | "classmap": [ 416 | "tests/Test/AbstractFixerTestCase.php", 417 | "tests/Test/AbstractIntegrationCaseFactory.php", 418 | "tests/Test/AbstractIntegrationTestCase.php", 419 | "tests/Test/Assert/AssertTokensTrait.php", 420 | "tests/Test/IntegrationCase.php", 421 | "tests/Test/IntegrationCaseFactory.php", 422 | "tests/Test/IntegrationCaseFactoryInterface.php", 423 | "tests/Test/InternalIntegrationCaseFactory.php", 424 | "tests/Test/IsIdenticalConstraint.php", 425 | "tests/Test/TokensWithObservedTransformers.php", 426 | "tests/TestCase.php" 427 | ] 428 | }, 429 | "notification-url": "https://packagist.org/downloads/", 430 | "license": [ 431 | "MIT" 432 | ], 433 | "authors": [ 434 | { 435 | "name": "Fabien Potencier", 436 | "email": "fabien@symfony.com" 437 | }, 438 | { 439 | "name": "Dariusz Rumiński", 440 | "email": "dariusz.ruminski@gmail.com" 441 | } 442 | ], 443 | "description": "A tool to automatically fix PHP code style", 444 | "funding": [ 445 | { 446 | "url": "https://github.com/keradus", 447 | "type": "github" 448 | } 449 | ], 450 | "time": "2021-11-15T17:17:55+00:00" 451 | }, 452 | { 453 | "name": "paragonie/random_compat", 454 | "version": "v2.0.20", 455 | "source": { 456 | "type": "git", 457 | "url": "https://github.com/paragonie/random_compat.git", 458 | "reference": "0f1f60250fccffeaf5dda91eea1c018aed1adc2a" 459 | }, 460 | "dist": { 461 | "type": "zip", 462 | "url": "https://api.github.com/repos/paragonie/random_compat/zipball/0f1f60250fccffeaf5dda91eea1c018aed1adc2a", 463 | "reference": "0f1f60250fccffeaf5dda91eea1c018aed1adc2a", 464 | "shasum": "" 465 | }, 466 | "require": { 467 | "php": ">=5.2.0" 468 | }, 469 | "require-dev": { 470 | "phpunit/phpunit": "4.*|5.*" 471 | }, 472 | "suggest": { 473 | "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." 474 | }, 475 | "type": "library", 476 | "autoload": { 477 | "files": [ 478 | "lib/random.php" 479 | ] 480 | }, 481 | "notification-url": "https://packagist.org/downloads/", 482 | "license": [ 483 | "MIT" 484 | ], 485 | "authors": [ 486 | { 487 | "name": "Paragon Initiative Enterprises", 488 | "email": "security@paragonie.com", 489 | "homepage": "https://paragonie.com" 490 | } 491 | ], 492 | "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", 493 | "keywords": [ 494 | "csprng", 495 | "polyfill", 496 | "pseudorandom", 497 | "random" 498 | ], 499 | "time": "2021-04-17T09:33:01+00:00" 500 | }, 501 | { 502 | "name": "php-cs-fixer/diff", 503 | "version": "v1.3.1", 504 | "source": { 505 | "type": "git", 506 | "url": "https://github.com/PHP-CS-Fixer/diff.git", 507 | "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759" 508 | }, 509 | "dist": { 510 | "type": "zip", 511 | "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/dbd31aeb251639ac0b9e7e29405c1441907f5759", 512 | "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759", 513 | "shasum": "" 514 | }, 515 | "require": { 516 | "php": "^5.6 || ^7.0 || ^8.0" 517 | }, 518 | "require-dev": { 519 | "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", 520 | "symfony/process": "^3.3" 521 | }, 522 | "type": "library", 523 | "autoload": { 524 | "classmap": [ 525 | "src/" 526 | ] 527 | }, 528 | "notification-url": "https://packagist.org/downloads/", 529 | "license": [ 530 | "BSD-3-Clause" 531 | ], 532 | "authors": [ 533 | { 534 | "name": "Sebastian Bergmann", 535 | "email": "sebastian@phpunit.de" 536 | }, 537 | { 538 | "name": "Kore Nordmann", 539 | "email": "mail@kore-nordmann.de" 540 | }, 541 | { 542 | "name": "SpacePossum" 543 | } 544 | ], 545 | "description": "sebastian/diff v2 backport support for PHP5.6", 546 | "homepage": "https://github.com/PHP-CS-Fixer", 547 | "keywords": [ 548 | "diff" 549 | ], 550 | "abandoned": true, 551 | "time": "2020-10-14T08:39:05+00:00" 552 | }, 553 | { 554 | "name": "phpcompatibility/php-compatibility", 555 | "version": "9.3.5", 556 | "source": { 557 | "type": "git", 558 | "url": "https://github.com/PHPCompatibility/PHPCompatibility.git", 559 | "reference": "9fb324479acf6f39452e0655d2429cc0d3914243" 560 | }, 561 | "dist": { 562 | "type": "zip", 563 | "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9fb324479acf6f39452e0655d2429cc0d3914243", 564 | "reference": "9fb324479acf6f39452e0655d2429cc0d3914243", 565 | "shasum": "" 566 | }, 567 | "require": { 568 | "php": ">=5.3", 569 | "squizlabs/php_codesniffer": "^2.3 || ^3.0.2" 570 | }, 571 | "conflict": { 572 | "squizlabs/php_codesniffer": "2.6.2" 573 | }, 574 | "require-dev": { 575 | "phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0" 576 | }, 577 | "suggest": { 578 | "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.", 579 | "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." 580 | }, 581 | "type": "phpcodesniffer-standard", 582 | "notification-url": "https://packagist.org/downloads/", 583 | "license": [ 584 | "LGPL-3.0-or-later" 585 | ], 586 | "authors": [ 587 | { 588 | "name": "Wim Godden", 589 | "homepage": "https://github.com/wimg", 590 | "role": "lead" 591 | }, 592 | { 593 | "name": "Juliette Reinders Folmer", 594 | "homepage": "https://github.com/jrfnl", 595 | "role": "lead" 596 | }, 597 | { 598 | "name": "Contributors", 599 | "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors" 600 | } 601 | ], 602 | "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.", 603 | "homepage": "http://techblog.wimgodden.be/tag/codesniffer/", 604 | "keywords": [ 605 | "compatibility", 606 | "phpcs", 607 | "standards" 608 | ], 609 | "time": "2019-12-27T09:44:58+00:00" 610 | }, 611 | { 612 | "name": "phpcompatibility/phpcompatibility-paragonie", 613 | "version": "1.3.2", 614 | "source": { 615 | "type": "git", 616 | "url": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie.git", 617 | "reference": "bba5a9dfec7fcfbd679cfaf611d86b4d3759da26" 618 | }, 619 | "dist": { 620 | "type": "zip", 621 | "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/bba5a9dfec7fcfbd679cfaf611d86b4d3759da26", 622 | "reference": "bba5a9dfec7fcfbd679cfaf611d86b4d3759da26", 623 | "shasum": "" 624 | }, 625 | "require": { 626 | "phpcompatibility/php-compatibility": "^9.0" 627 | }, 628 | "require-dev": { 629 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7", 630 | "paragonie/random_compat": "dev-master", 631 | "paragonie/sodium_compat": "dev-master" 632 | }, 633 | "suggest": { 634 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.", 635 | "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." 636 | }, 637 | "type": "phpcodesniffer-standard", 638 | "notification-url": "https://packagist.org/downloads/", 639 | "license": [ 640 | "LGPL-3.0-or-later" 641 | ], 642 | "authors": [ 643 | { 644 | "name": "Wim Godden", 645 | "role": "lead" 646 | }, 647 | { 648 | "name": "Juliette Reinders Folmer", 649 | "role": "lead" 650 | } 651 | ], 652 | "description": "A set of rulesets for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by the Paragonie polyfill libraries.", 653 | "homepage": "http://phpcompatibility.com/", 654 | "keywords": [ 655 | "compatibility", 656 | "paragonie", 657 | "phpcs", 658 | "polyfill", 659 | "standards", 660 | "static analysis" 661 | ], 662 | "time": "2022-10-25T01:46:02+00:00" 663 | }, 664 | { 665 | "name": "phpcompatibility/phpcompatibility-wp", 666 | "version": "2.1.4", 667 | "source": { 668 | "type": "git", 669 | "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git", 670 | "reference": "b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5" 671 | }, 672 | "dist": { 673 | "type": "zip", 674 | "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5", 675 | "reference": "b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5", 676 | "shasum": "" 677 | }, 678 | "require": { 679 | "phpcompatibility/php-compatibility": "^9.0", 680 | "phpcompatibility/phpcompatibility-paragonie": "^1.0" 681 | }, 682 | "require-dev": { 683 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7" 684 | }, 685 | "suggest": { 686 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.", 687 | "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." 688 | }, 689 | "type": "phpcodesniffer-standard", 690 | "notification-url": "https://packagist.org/downloads/", 691 | "license": [ 692 | "LGPL-3.0-or-later" 693 | ], 694 | "authors": [ 695 | { 696 | "name": "Wim Godden", 697 | "role": "lead" 698 | }, 699 | { 700 | "name": "Juliette Reinders Folmer", 701 | "role": "lead" 702 | } 703 | ], 704 | "description": "A ruleset for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by WordPress.", 705 | "homepage": "http://phpcompatibility.com/", 706 | "keywords": [ 707 | "compatibility", 708 | "phpcs", 709 | "standards", 710 | "static analysis", 711 | "wordpress" 712 | ], 713 | "time": "2022-10-24T09:00:36+00:00" 714 | }, 715 | { 716 | "name": "psr/log", 717 | "version": "1.1.4", 718 | "source": { 719 | "type": "git", 720 | "url": "https://github.com/php-fig/log.git", 721 | "reference": "d49695b909c3b7628b6289db5479a1c204601f11" 722 | }, 723 | "dist": { 724 | "type": "zip", 725 | "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", 726 | "reference": "d49695b909c3b7628b6289db5479a1c204601f11", 727 | "shasum": "" 728 | }, 729 | "require": { 730 | "php": ">=5.3.0" 731 | }, 732 | "type": "library", 733 | "extra": { 734 | "branch-alias": { 735 | "dev-master": "1.1.x-dev" 736 | } 737 | }, 738 | "autoload": { 739 | "psr-4": { 740 | "Psr\\Log\\": "Psr/Log/" 741 | } 742 | }, 743 | "notification-url": "https://packagist.org/downloads/", 744 | "license": [ 745 | "MIT" 746 | ], 747 | "authors": [ 748 | { 749 | "name": "PHP-FIG", 750 | "homepage": "https://www.php-fig.org/" 751 | } 752 | ], 753 | "description": "Common interface for logging libraries", 754 | "homepage": "https://github.com/php-fig/log", 755 | "keywords": [ 756 | "log", 757 | "psr", 758 | "psr-3" 759 | ], 760 | "time": "2021-05-03T11:20:27+00:00" 761 | }, 762 | { 763 | "name": "squizlabs/php_codesniffer", 764 | "version": "3.7.1", 765 | "source": { 766 | "type": "git", 767 | "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", 768 | "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619" 769 | }, 770 | "dist": { 771 | "type": "zip", 772 | "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/1359e176e9307e906dc3d890bcc9603ff6d90619", 773 | "reference": "1359e176e9307e906dc3d890bcc9603ff6d90619", 774 | "shasum": "" 775 | }, 776 | "require": { 777 | "ext-simplexml": "*", 778 | "ext-tokenizer": "*", 779 | "ext-xmlwriter": "*", 780 | "php": ">=5.4.0" 781 | }, 782 | "require-dev": { 783 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" 784 | }, 785 | "bin": [ 786 | "bin/phpcs", 787 | "bin/phpcbf" 788 | ], 789 | "type": "library", 790 | "extra": { 791 | "branch-alias": { 792 | "dev-master": "3.x-dev" 793 | } 794 | }, 795 | "notification-url": "https://packagist.org/downloads/", 796 | "license": [ 797 | "BSD-3-Clause" 798 | ], 799 | "authors": [ 800 | { 801 | "name": "Greg Sherwood", 802 | "role": "lead" 803 | } 804 | ], 805 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", 806 | "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", 807 | "keywords": [ 808 | "phpcs", 809 | "standards" 810 | ], 811 | "time": "2022-06-18T07:21:10+00:00" 812 | }, 813 | { 814 | "name": "symfony/console", 815 | "version": "v3.4.47", 816 | "source": { 817 | "type": "git", 818 | "url": "https://github.com/symfony/console.git", 819 | "reference": "a10b1da6fc93080c180bba7219b5ff5b7518fe81" 820 | }, 821 | "dist": { 822 | "type": "zip", 823 | "url": "https://api.github.com/repos/symfony/console/zipball/a10b1da6fc93080c180bba7219b5ff5b7518fe81", 824 | "reference": "a10b1da6fc93080c180bba7219b5ff5b7518fe81", 825 | "shasum": "" 826 | }, 827 | "require": { 828 | "php": "^5.5.9|>=7.0.8", 829 | "symfony/debug": "~2.8|~3.0|~4.0", 830 | "symfony/polyfill-mbstring": "~1.0" 831 | }, 832 | "conflict": { 833 | "symfony/dependency-injection": "<3.4", 834 | "symfony/process": "<3.3" 835 | }, 836 | "provide": { 837 | "psr/log-implementation": "1.0" 838 | }, 839 | "require-dev": { 840 | "psr/log": "~1.0", 841 | "symfony/config": "~3.3|~4.0", 842 | "symfony/dependency-injection": "~3.4|~4.0", 843 | "symfony/event-dispatcher": "~2.8|~3.0|~4.0", 844 | "symfony/lock": "~3.4|~4.0", 845 | "symfony/process": "~3.3|~4.0" 846 | }, 847 | "suggest": { 848 | "psr/log": "For using the console logger", 849 | "symfony/event-dispatcher": "", 850 | "symfony/lock": "", 851 | "symfony/process": "" 852 | }, 853 | "type": "library", 854 | "autoload": { 855 | "psr-4": { 856 | "Symfony\\Component\\Console\\": "" 857 | }, 858 | "exclude-from-classmap": [ 859 | "/Tests/" 860 | ] 861 | }, 862 | "notification-url": "https://packagist.org/downloads/", 863 | "license": [ 864 | "MIT" 865 | ], 866 | "authors": [ 867 | { 868 | "name": "Fabien Potencier", 869 | "email": "fabien@symfony.com" 870 | }, 871 | { 872 | "name": "Symfony Community", 873 | "homepage": "https://symfony.com/contributors" 874 | } 875 | ], 876 | "description": "Symfony Console Component", 877 | "homepage": "https://symfony.com", 878 | "funding": [ 879 | { 880 | "url": "https://symfony.com/sponsor", 881 | "type": "custom" 882 | }, 883 | { 884 | "url": "https://github.com/fabpot", 885 | "type": "github" 886 | }, 887 | { 888 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 889 | "type": "tidelift" 890 | } 891 | ], 892 | "time": "2020-10-24T10:57:07+00:00" 893 | }, 894 | { 895 | "name": "symfony/debug", 896 | "version": "v3.4.47", 897 | "source": { 898 | "type": "git", 899 | "url": "https://github.com/symfony/debug.git", 900 | "reference": "ab42889de57fdfcfcc0759ab102e2fd4ea72dcae" 901 | }, 902 | "dist": { 903 | "type": "zip", 904 | "url": "https://api.github.com/repos/symfony/debug/zipball/ab42889de57fdfcfcc0759ab102e2fd4ea72dcae", 905 | "reference": "ab42889de57fdfcfcc0759ab102e2fd4ea72dcae", 906 | "shasum": "" 907 | }, 908 | "require": { 909 | "php": "^5.5.9|>=7.0.8", 910 | "psr/log": "~1.0" 911 | }, 912 | "conflict": { 913 | "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" 914 | }, 915 | "require-dev": { 916 | "symfony/http-kernel": "~2.8|~3.0|~4.0" 917 | }, 918 | "type": "library", 919 | "autoload": { 920 | "psr-4": { 921 | "Symfony\\Component\\Debug\\": "" 922 | }, 923 | "exclude-from-classmap": [ 924 | "/Tests/" 925 | ] 926 | }, 927 | "notification-url": "https://packagist.org/downloads/", 928 | "license": [ 929 | "MIT" 930 | ], 931 | "authors": [ 932 | { 933 | "name": "Fabien Potencier", 934 | "email": "fabien@symfony.com" 935 | }, 936 | { 937 | "name": "Symfony Community", 938 | "homepage": "https://symfony.com/contributors" 939 | } 940 | ], 941 | "description": "Symfony Debug Component", 942 | "homepage": "https://symfony.com", 943 | "funding": [ 944 | { 945 | "url": "https://symfony.com/sponsor", 946 | "type": "custom" 947 | }, 948 | { 949 | "url": "https://github.com/fabpot", 950 | "type": "github" 951 | }, 952 | { 953 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 954 | "type": "tidelift" 955 | } 956 | ], 957 | "abandoned": "symfony/error-handler", 958 | "time": "2020-10-24T10:57:07+00:00" 959 | }, 960 | { 961 | "name": "symfony/event-dispatcher", 962 | "version": "v3.4.47", 963 | "source": { 964 | "type": "git", 965 | "url": "https://github.com/symfony/event-dispatcher.git", 966 | "reference": "31fde73757b6bad247c54597beef974919ec6860" 967 | }, 968 | "dist": { 969 | "type": "zip", 970 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/31fde73757b6bad247c54597beef974919ec6860", 971 | "reference": "31fde73757b6bad247c54597beef974919ec6860", 972 | "shasum": "" 973 | }, 974 | "require": { 975 | "php": "^5.5.9|>=7.0.8" 976 | }, 977 | "conflict": { 978 | "symfony/dependency-injection": "<3.3" 979 | }, 980 | "require-dev": { 981 | "psr/log": "~1.0", 982 | "symfony/config": "~2.8|~3.0|~4.0", 983 | "symfony/debug": "~3.4|~4.4", 984 | "symfony/dependency-injection": "~3.3|~4.0", 985 | "symfony/expression-language": "~2.8|~3.0|~4.0", 986 | "symfony/stopwatch": "~2.8|~3.0|~4.0" 987 | }, 988 | "suggest": { 989 | "symfony/dependency-injection": "", 990 | "symfony/http-kernel": "" 991 | }, 992 | "type": "library", 993 | "autoload": { 994 | "psr-4": { 995 | "Symfony\\Component\\EventDispatcher\\": "" 996 | }, 997 | "exclude-from-classmap": [ 998 | "/Tests/" 999 | ] 1000 | }, 1001 | "notification-url": "https://packagist.org/downloads/", 1002 | "license": [ 1003 | "MIT" 1004 | ], 1005 | "authors": [ 1006 | { 1007 | "name": "Fabien Potencier", 1008 | "email": "fabien@symfony.com" 1009 | }, 1010 | { 1011 | "name": "Symfony Community", 1012 | "homepage": "https://symfony.com/contributors" 1013 | } 1014 | ], 1015 | "description": "Symfony EventDispatcher Component", 1016 | "homepage": "https://symfony.com", 1017 | "funding": [ 1018 | { 1019 | "url": "https://symfony.com/sponsor", 1020 | "type": "custom" 1021 | }, 1022 | { 1023 | "url": "https://github.com/fabpot", 1024 | "type": "github" 1025 | }, 1026 | { 1027 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1028 | "type": "tidelift" 1029 | } 1030 | ], 1031 | "time": "2020-10-24T10:57:07+00:00" 1032 | }, 1033 | { 1034 | "name": "symfony/filesystem", 1035 | "version": "v3.4.47", 1036 | "source": { 1037 | "type": "git", 1038 | "url": "https://github.com/symfony/filesystem.git", 1039 | "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3" 1040 | }, 1041 | "dist": { 1042 | "type": "zip", 1043 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/e58d7841cddfed6e846829040dca2cca0ebbbbb3", 1044 | "reference": "e58d7841cddfed6e846829040dca2cca0ebbbbb3", 1045 | "shasum": "" 1046 | }, 1047 | "require": { 1048 | "php": "^5.5.9|>=7.0.8", 1049 | "symfony/polyfill-ctype": "~1.8" 1050 | }, 1051 | "type": "library", 1052 | "autoload": { 1053 | "psr-4": { 1054 | "Symfony\\Component\\Filesystem\\": "" 1055 | }, 1056 | "exclude-from-classmap": [ 1057 | "/Tests/" 1058 | ] 1059 | }, 1060 | "notification-url": "https://packagist.org/downloads/", 1061 | "license": [ 1062 | "MIT" 1063 | ], 1064 | "authors": [ 1065 | { 1066 | "name": "Fabien Potencier", 1067 | "email": "fabien@symfony.com" 1068 | }, 1069 | { 1070 | "name": "Symfony Community", 1071 | "homepage": "https://symfony.com/contributors" 1072 | } 1073 | ], 1074 | "description": "Symfony Filesystem Component", 1075 | "homepage": "https://symfony.com", 1076 | "funding": [ 1077 | { 1078 | "url": "https://symfony.com/sponsor", 1079 | "type": "custom" 1080 | }, 1081 | { 1082 | "url": "https://github.com/fabpot", 1083 | "type": "github" 1084 | }, 1085 | { 1086 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1087 | "type": "tidelift" 1088 | } 1089 | ], 1090 | "time": "2020-10-24T10:57:07+00:00" 1091 | }, 1092 | { 1093 | "name": "symfony/finder", 1094 | "version": "v3.4.47", 1095 | "source": { 1096 | "type": "git", 1097 | "url": "https://github.com/symfony/finder.git", 1098 | "reference": "b6b6ad3db3edb1b4b1c1896b1975fb684994de6e" 1099 | }, 1100 | "dist": { 1101 | "type": "zip", 1102 | "url": "https://api.github.com/repos/symfony/finder/zipball/b6b6ad3db3edb1b4b1c1896b1975fb684994de6e", 1103 | "reference": "b6b6ad3db3edb1b4b1c1896b1975fb684994de6e", 1104 | "shasum": "" 1105 | }, 1106 | "require": { 1107 | "php": "^5.5.9|>=7.0.8" 1108 | }, 1109 | "type": "library", 1110 | "autoload": { 1111 | "psr-4": { 1112 | "Symfony\\Component\\Finder\\": "" 1113 | }, 1114 | "exclude-from-classmap": [ 1115 | "/Tests/" 1116 | ] 1117 | }, 1118 | "notification-url": "https://packagist.org/downloads/", 1119 | "license": [ 1120 | "MIT" 1121 | ], 1122 | "authors": [ 1123 | { 1124 | "name": "Fabien Potencier", 1125 | "email": "fabien@symfony.com" 1126 | }, 1127 | { 1128 | "name": "Symfony Community", 1129 | "homepage": "https://symfony.com/contributors" 1130 | } 1131 | ], 1132 | "description": "Symfony Finder Component", 1133 | "homepage": "https://symfony.com", 1134 | "funding": [ 1135 | { 1136 | "url": "https://symfony.com/sponsor", 1137 | "type": "custom" 1138 | }, 1139 | { 1140 | "url": "https://github.com/fabpot", 1141 | "type": "github" 1142 | }, 1143 | { 1144 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1145 | "type": "tidelift" 1146 | } 1147 | ], 1148 | "time": "2020-11-16T17:02:08+00:00" 1149 | }, 1150 | { 1151 | "name": "symfony/options-resolver", 1152 | "version": "v3.4.47", 1153 | "source": { 1154 | "type": "git", 1155 | "url": "https://github.com/symfony/options-resolver.git", 1156 | "reference": "c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744" 1157 | }, 1158 | "dist": { 1159 | "type": "zip", 1160 | "url": "https://api.github.com/repos/symfony/options-resolver/zipball/c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744", 1161 | "reference": "c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744", 1162 | "shasum": "" 1163 | }, 1164 | "require": { 1165 | "php": "^5.5.9|>=7.0.8" 1166 | }, 1167 | "type": "library", 1168 | "autoload": { 1169 | "psr-4": { 1170 | "Symfony\\Component\\OptionsResolver\\": "" 1171 | }, 1172 | "exclude-from-classmap": [ 1173 | "/Tests/" 1174 | ] 1175 | }, 1176 | "notification-url": "https://packagist.org/downloads/", 1177 | "license": [ 1178 | "MIT" 1179 | ], 1180 | "authors": [ 1181 | { 1182 | "name": "Fabien Potencier", 1183 | "email": "fabien@symfony.com" 1184 | }, 1185 | { 1186 | "name": "Symfony Community", 1187 | "homepage": "https://symfony.com/contributors" 1188 | } 1189 | ], 1190 | "description": "Symfony OptionsResolver Component", 1191 | "homepage": "https://symfony.com", 1192 | "keywords": [ 1193 | "config", 1194 | "configuration", 1195 | "options" 1196 | ], 1197 | "funding": [ 1198 | { 1199 | "url": "https://symfony.com/sponsor", 1200 | "type": "custom" 1201 | }, 1202 | { 1203 | "url": "https://github.com/fabpot", 1204 | "type": "github" 1205 | }, 1206 | { 1207 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1208 | "type": "tidelift" 1209 | } 1210 | ], 1211 | "time": "2020-10-24T10:57:07+00:00" 1212 | }, 1213 | { 1214 | "name": "symfony/polyfill-ctype", 1215 | "version": "v1.19.0", 1216 | "source": { 1217 | "type": "git", 1218 | "url": "https://github.com/symfony/polyfill-ctype.git", 1219 | "reference": "aed596913b70fae57be53d86faa2e9ef85a2297b" 1220 | }, 1221 | "dist": { 1222 | "type": "zip", 1223 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/aed596913b70fae57be53d86faa2e9ef85a2297b", 1224 | "reference": "aed596913b70fae57be53d86faa2e9ef85a2297b", 1225 | "shasum": "" 1226 | }, 1227 | "require": { 1228 | "php": ">=5.3.3" 1229 | }, 1230 | "suggest": { 1231 | "ext-ctype": "For best performance" 1232 | }, 1233 | "type": "library", 1234 | "extra": { 1235 | "branch-alias": { 1236 | "dev-main": "1.19-dev" 1237 | }, 1238 | "thanks": { 1239 | "name": "symfony/polyfill", 1240 | "url": "https://github.com/symfony/polyfill" 1241 | } 1242 | }, 1243 | "autoload": { 1244 | "files": [ 1245 | "bootstrap.php" 1246 | ], 1247 | "psr-4": { 1248 | "Symfony\\Polyfill\\Ctype\\": "" 1249 | } 1250 | }, 1251 | "notification-url": "https://packagist.org/downloads/", 1252 | "license": [ 1253 | "MIT" 1254 | ], 1255 | "authors": [ 1256 | { 1257 | "name": "Gert de Pagter", 1258 | "email": "BackEndTea@gmail.com" 1259 | }, 1260 | { 1261 | "name": "Symfony Community", 1262 | "homepage": "https://symfony.com/contributors" 1263 | } 1264 | ], 1265 | "description": "Symfony polyfill for ctype functions", 1266 | "homepage": "https://symfony.com", 1267 | "keywords": [ 1268 | "compatibility", 1269 | "ctype", 1270 | "polyfill", 1271 | "portable" 1272 | ], 1273 | "funding": [ 1274 | { 1275 | "url": "https://symfony.com/sponsor", 1276 | "type": "custom" 1277 | }, 1278 | { 1279 | "url": "https://github.com/fabpot", 1280 | "type": "github" 1281 | }, 1282 | { 1283 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1284 | "type": "tidelift" 1285 | } 1286 | ], 1287 | "time": "2020-10-23T09:01:57+00:00" 1288 | }, 1289 | { 1290 | "name": "symfony/polyfill-mbstring", 1291 | "version": "v1.19.0", 1292 | "source": { 1293 | "type": "git", 1294 | "url": "https://github.com/symfony/polyfill-mbstring.git", 1295 | "reference": "b5f7b932ee6fa802fc792eabd77c4c88084517ce" 1296 | }, 1297 | "dist": { 1298 | "type": "zip", 1299 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b5f7b932ee6fa802fc792eabd77c4c88084517ce", 1300 | "reference": "b5f7b932ee6fa802fc792eabd77c4c88084517ce", 1301 | "shasum": "" 1302 | }, 1303 | "require": { 1304 | "php": ">=5.3.3" 1305 | }, 1306 | "suggest": { 1307 | "ext-mbstring": "For best performance" 1308 | }, 1309 | "type": "library", 1310 | "extra": { 1311 | "branch-alias": { 1312 | "dev-main": "1.19-dev" 1313 | }, 1314 | "thanks": { 1315 | "name": "symfony/polyfill", 1316 | "url": "https://github.com/symfony/polyfill" 1317 | } 1318 | }, 1319 | "autoload": { 1320 | "files": [ 1321 | "bootstrap.php" 1322 | ], 1323 | "psr-4": { 1324 | "Symfony\\Polyfill\\Mbstring\\": "" 1325 | } 1326 | }, 1327 | "notification-url": "https://packagist.org/downloads/", 1328 | "license": [ 1329 | "MIT" 1330 | ], 1331 | "authors": [ 1332 | { 1333 | "name": "Nicolas Grekas", 1334 | "email": "p@tchwork.com" 1335 | }, 1336 | { 1337 | "name": "Symfony Community", 1338 | "homepage": "https://symfony.com/contributors" 1339 | } 1340 | ], 1341 | "description": "Symfony polyfill for the Mbstring extension", 1342 | "homepage": "https://symfony.com", 1343 | "keywords": [ 1344 | "compatibility", 1345 | "mbstring", 1346 | "polyfill", 1347 | "portable", 1348 | "shim" 1349 | ], 1350 | "funding": [ 1351 | { 1352 | "url": "https://symfony.com/sponsor", 1353 | "type": "custom" 1354 | }, 1355 | { 1356 | "url": "https://github.com/fabpot", 1357 | "type": "github" 1358 | }, 1359 | { 1360 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1361 | "type": "tidelift" 1362 | } 1363 | ], 1364 | "time": "2020-10-23T09:01:57+00:00" 1365 | }, 1366 | { 1367 | "name": "symfony/polyfill-php70", 1368 | "version": "v1.19.0", 1369 | "source": { 1370 | "type": "git", 1371 | "url": "https://github.com/symfony/polyfill-php70.git", 1372 | "reference": "3fe414077251a81a1b15b1c709faf5c2fbae3d4e" 1373 | }, 1374 | "dist": { 1375 | "type": "zip", 1376 | "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/3fe414077251a81a1b15b1c709faf5c2fbae3d4e", 1377 | "reference": "3fe414077251a81a1b15b1c709faf5c2fbae3d4e", 1378 | "shasum": "" 1379 | }, 1380 | "require": { 1381 | "paragonie/random_compat": "~1.0|~2.0|~9.99", 1382 | "php": ">=5.3.3" 1383 | }, 1384 | "type": "library", 1385 | "extra": { 1386 | "branch-alias": { 1387 | "dev-main": "1.19-dev" 1388 | }, 1389 | "thanks": { 1390 | "name": "symfony/polyfill", 1391 | "url": "https://github.com/symfony/polyfill" 1392 | } 1393 | }, 1394 | "autoload": { 1395 | "files": [ 1396 | "bootstrap.php" 1397 | ], 1398 | "psr-4": { 1399 | "Symfony\\Polyfill\\Php70\\": "" 1400 | }, 1401 | "classmap": [ 1402 | "Resources/stubs" 1403 | ] 1404 | }, 1405 | "notification-url": "https://packagist.org/downloads/", 1406 | "license": [ 1407 | "MIT" 1408 | ], 1409 | "authors": [ 1410 | { 1411 | "name": "Nicolas Grekas", 1412 | "email": "p@tchwork.com" 1413 | }, 1414 | { 1415 | "name": "Symfony Community", 1416 | "homepage": "https://symfony.com/contributors" 1417 | } 1418 | ], 1419 | "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", 1420 | "homepage": "https://symfony.com", 1421 | "keywords": [ 1422 | "compatibility", 1423 | "polyfill", 1424 | "portable", 1425 | "shim" 1426 | ], 1427 | "funding": [ 1428 | { 1429 | "url": "https://symfony.com/sponsor", 1430 | "type": "custom" 1431 | }, 1432 | { 1433 | "url": "https://github.com/fabpot", 1434 | "type": "github" 1435 | }, 1436 | { 1437 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1438 | "type": "tidelift" 1439 | } 1440 | ], 1441 | "time": "2020-10-23T09:01:57+00:00" 1442 | }, 1443 | { 1444 | "name": "symfony/polyfill-php72", 1445 | "version": "v1.19.0", 1446 | "source": { 1447 | "type": "git", 1448 | "url": "https://github.com/symfony/polyfill-php72.git", 1449 | "reference": "beecef6b463b06954638f02378f52496cb84bacc" 1450 | }, 1451 | "dist": { 1452 | "type": "zip", 1453 | "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/beecef6b463b06954638f02378f52496cb84bacc", 1454 | "reference": "beecef6b463b06954638f02378f52496cb84bacc", 1455 | "shasum": "" 1456 | }, 1457 | "require": { 1458 | "php": ">=5.3.3" 1459 | }, 1460 | "type": "library", 1461 | "extra": { 1462 | "branch-alias": { 1463 | "dev-main": "1.19-dev" 1464 | }, 1465 | "thanks": { 1466 | "name": "symfony/polyfill", 1467 | "url": "https://github.com/symfony/polyfill" 1468 | } 1469 | }, 1470 | "autoload": { 1471 | "files": [ 1472 | "bootstrap.php" 1473 | ], 1474 | "psr-4": { 1475 | "Symfony\\Polyfill\\Php72\\": "" 1476 | } 1477 | }, 1478 | "notification-url": "https://packagist.org/downloads/", 1479 | "license": [ 1480 | "MIT" 1481 | ], 1482 | "authors": [ 1483 | { 1484 | "name": "Nicolas Grekas", 1485 | "email": "p@tchwork.com" 1486 | }, 1487 | { 1488 | "name": "Symfony Community", 1489 | "homepage": "https://symfony.com/contributors" 1490 | } 1491 | ], 1492 | "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", 1493 | "homepage": "https://symfony.com", 1494 | "keywords": [ 1495 | "compatibility", 1496 | "polyfill", 1497 | "portable", 1498 | "shim" 1499 | ], 1500 | "funding": [ 1501 | { 1502 | "url": "https://symfony.com/sponsor", 1503 | "type": "custom" 1504 | }, 1505 | { 1506 | "url": "https://github.com/fabpot", 1507 | "type": "github" 1508 | }, 1509 | { 1510 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1511 | "type": "tidelift" 1512 | } 1513 | ], 1514 | "time": "2020-10-23T09:01:57+00:00" 1515 | }, 1516 | { 1517 | "name": "symfony/process", 1518 | "version": "v3.4.47", 1519 | "source": { 1520 | "type": "git", 1521 | "url": "https://github.com/symfony/process.git", 1522 | "reference": "b8648cf1d5af12a44a51d07ef9bf980921f15fca" 1523 | }, 1524 | "dist": { 1525 | "type": "zip", 1526 | "url": "https://api.github.com/repos/symfony/process/zipball/b8648cf1d5af12a44a51d07ef9bf980921f15fca", 1527 | "reference": "b8648cf1d5af12a44a51d07ef9bf980921f15fca", 1528 | "shasum": "" 1529 | }, 1530 | "require": { 1531 | "php": "^5.5.9|>=7.0.8" 1532 | }, 1533 | "type": "library", 1534 | "autoload": { 1535 | "psr-4": { 1536 | "Symfony\\Component\\Process\\": "" 1537 | }, 1538 | "exclude-from-classmap": [ 1539 | "/Tests/" 1540 | ] 1541 | }, 1542 | "notification-url": "https://packagist.org/downloads/", 1543 | "license": [ 1544 | "MIT" 1545 | ], 1546 | "authors": [ 1547 | { 1548 | "name": "Fabien Potencier", 1549 | "email": "fabien@symfony.com" 1550 | }, 1551 | { 1552 | "name": "Symfony Community", 1553 | "homepage": "https://symfony.com/contributors" 1554 | } 1555 | ], 1556 | "description": "Symfony Process Component", 1557 | "homepage": "https://symfony.com", 1558 | "funding": [ 1559 | { 1560 | "url": "https://symfony.com/sponsor", 1561 | "type": "custom" 1562 | }, 1563 | { 1564 | "url": "https://github.com/fabpot", 1565 | "type": "github" 1566 | }, 1567 | { 1568 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1569 | "type": "tidelift" 1570 | } 1571 | ], 1572 | "time": "2020-10-24T10:57:07+00:00" 1573 | }, 1574 | { 1575 | "name": "symfony/stopwatch", 1576 | "version": "v3.4.47", 1577 | "source": { 1578 | "type": "git", 1579 | "url": "https://github.com/symfony/stopwatch.git", 1580 | "reference": "298b81faad4ce60e94466226b2abbb8c9bca7462" 1581 | }, 1582 | "dist": { 1583 | "type": "zip", 1584 | "url": "https://api.github.com/repos/symfony/stopwatch/zipball/298b81faad4ce60e94466226b2abbb8c9bca7462", 1585 | "reference": "298b81faad4ce60e94466226b2abbb8c9bca7462", 1586 | "shasum": "" 1587 | }, 1588 | "require": { 1589 | "php": "^5.5.9|>=7.0.8" 1590 | }, 1591 | "type": "library", 1592 | "autoload": { 1593 | "psr-4": { 1594 | "Symfony\\Component\\Stopwatch\\": "" 1595 | }, 1596 | "exclude-from-classmap": [ 1597 | "/Tests/" 1598 | ] 1599 | }, 1600 | "notification-url": "https://packagist.org/downloads/", 1601 | "license": [ 1602 | "MIT" 1603 | ], 1604 | "authors": [ 1605 | { 1606 | "name": "Fabien Potencier", 1607 | "email": "fabien@symfony.com" 1608 | }, 1609 | { 1610 | "name": "Symfony Community", 1611 | "homepage": "https://symfony.com/contributors" 1612 | } 1613 | ], 1614 | "description": "Symfony Stopwatch Component", 1615 | "homepage": "https://symfony.com", 1616 | "funding": [ 1617 | { 1618 | "url": "https://symfony.com/sponsor", 1619 | "type": "custom" 1620 | }, 1621 | { 1622 | "url": "https://github.com/fabpot", 1623 | "type": "github" 1624 | }, 1625 | { 1626 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1627 | "type": "tidelift" 1628 | } 1629 | ], 1630 | "time": "2020-10-24T10:57:07+00:00" 1631 | }, 1632 | { 1633 | "name": "wp-coding-standards/wpcs", 1634 | "version": "2.3.0", 1635 | "source": { 1636 | "type": "git", 1637 | "url": "https://github.com/WordPress/WordPress-Coding-Standards.git", 1638 | "reference": "7da1894633f168fe244afc6de00d141f27517b62" 1639 | }, 1640 | "dist": { 1641 | "type": "zip", 1642 | "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/7da1894633f168fe244afc6de00d141f27517b62", 1643 | "reference": "7da1894633f168fe244afc6de00d141f27517b62", 1644 | "shasum": "" 1645 | }, 1646 | "require": { 1647 | "php": ">=5.4", 1648 | "squizlabs/php_codesniffer": "^3.3.1" 1649 | }, 1650 | "require-dev": { 1651 | "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || ^0.6", 1652 | "phpcompatibility/php-compatibility": "^9.0", 1653 | "phpcsstandards/phpcsdevtools": "^1.0", 1654 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" 1655 | }, 1656 | "suggest": { 1657 | "dealerdirect/phpcodesniffer-composer-installer": "^0.6 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically." 1658 | }, 1659 | "type": "phpcodesniffer-standard", 1660 | "notification-url": "https://packagist.org/downloads/", 1661 | "license": [ 1662 | "MIT" 1663 | ], 1664 | "authors": [ 1665 | { 1666 | "name": "Contributors", 1667 | "homepage": "https://github.com/WordPress/WordPress-Coding-Standards/graphs/contributors" 1668 | } 1669 | ], 1670 | "description": "PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions", 1671 | "keywords": [ 1672 | "phpcs", 1673 | "standards", 1674 | "wordpress" 1675 | ], 1676 | "time": "2020-05-13T23:57:56+00:00" 1677 | } 1678 | ], 1679 | "aliases": [], 1680 | "minimum-stability": "stable", 1681 | "stability-flags": [], 1682 | "prefer-stable": false, 1683 | "prefer-lowest": false, 1684 | "platform": { 1685 | "php": ">=5.3" 1686 | }, 1687 | "platform-dev": [], 1688 | "plugin-api-version": "1.1.0" 1689 | } 1690 | --------------------------------------------------------------------------------