From f45d75478ff9fbf403c3d5677de59c62d50cc747 Mon Sep 17 00:00:00 2001 From: Leonardo Freitas Gomes Date: Sat, 11 Apr 2015 02:57:20 +0200 Subject: [PATCH] Add HTTP/2 Netty tiles example MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Motivation: Adding an example that showcases Netty’s HTTP/2 codec and that is slightly more complex than the existing hello-world example. It is based on the Gopher tiles example available here: https://http2.golang.org/gophertiles?latency=0 Modifications: Moved current http2 example to http2/helloworld. Added http2 tiles example under http2/tiles. Result: A Netty tiles example is available. --- .../netty/example/http2/Http2ExampleUtil.java | 55 ++++++++ .../{ => helloworld}/client/Http2Client.java | 2 +- .../client/Http2ClientInitializer.java | 2 +- .../client/Http2SettingsHandler.java | 2 +- .../client/HttpResponseHandler.java | 2 +- .../server/HelloWorldHttp1Handler.java | 2 +- .../server/HelloWorldHttp2Handler.java | 2 +- .../server/Http2OrHttpHandler.java | 2 +- .../{ => helloworld}/server/Http2Server.java | 10 +- .../server/Http2ServerInitializer.java | 2 +- .../http2/tiles/FallbackRequestHandler.java | 74 +++++++++++ .../io/netty/example/http2/tiles/Html.java | 79 ++++++++++++ .../http2/tiles/Http1RequestHandler.java | 62 +++++++++ .../http2/tiles/Http2OrHttpHandler.java | 77 +++++++++++ .../http2/tiles/Http2RequestHandler.java | 122 ++++++++++++++++++ .../example/http2/tiles/Http2Server.java | 87 +++++++++++++ .../netty/example/http2/tiles/HttpServer.java | 68 ++++++++++ .../netty/example/http2/tiles/ImageCache.java | 63 +++++++++ .../netty/example/http2/tiles/Launcher.java | 54 ++++++++ .../netty/example/http2/tiles/tile-0-0.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-0-1.jpeg | Bin 0 -> 647 bytes .../netty/example/http2/tiles/tile-0-10.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-0-11.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-0-12.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-0-13.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-0-14.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-0-15.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-0-16.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-0-17.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-0-18.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-0-19.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-0-2.jpeg | Bin 0 -> 743 bytes .../netty/example/http2/tiles/tile-0-3.jpeg | Bin 0 -> 764 bytes .../netty/example/http2/tiles/tile-0-4.jpeg | Bin 0 -> 767 bytes .../netty/example/http2/tiles/tile-0-5.jpeg | Bin 0 -> 825 bytes .../netty/example/http2/tiles/tile-0-6.jpeg | Bin 0 -> 795 bytes .../netty/example/http2/tiles/tile-0-7.jpeg | Bin 0 -> 715 bytes .../netty/example/http2/tiles/tile-0-8.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-0-9.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-1-0.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-1-1.jpeg | Bin 0 -> 757 bytes .../netty/example/http2/tiles/tile-1-10.jpeg | Bin 0 -> 665 bytes .../netty/example/http2/tiles/tile-1-11.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-1-12.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-1-13.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-1-14.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-1-15.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-1-16.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-1-17.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-1-18.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-1-19.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-1-2.jpeg | Bin 0 -> 725 bytes .../netty/example/http2/tiles/tile-1-3.jpeg | Bin 0 -> 726 bytes .../netty/example/http2/tiles/tile-1-4.jpeg | Bin 0 -> 748 bytes .../netty/example/http2/tiles/tile-1-5.jpeg | Bin 0 -> 760 bytes .../netty/example/http2/tiles/tile-1-6.jpeg | Bin 0 -> 700 bytes .../netty/example/http2/tiles/tile-1-7.jpeg | Bin 0 -> 759 bytes .../netty/example/http2/tiles/tile-1-8.jpeg | Bin 0 -> 716 bytes .../netty/example/http2/tiles/tile-1-9.jpeg | Bin 0 -> 661 bytes .../netty/example/http2/tiles/tile-2-0.jpeg | Bin 0 -> 715 bytes .../netty/example/http2/tiles/tile-2-1.jpeg | Bin 0 -> 705 bytes .../netty/example/http2/tiles/tile-2-10.jpeg | Bin 0 -> 721 bytes .../netty/example/http2/tiles/tile-2-11.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-2-12.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-2-13.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-2-14.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-2-15.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-2-16.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-2-17.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-2-18.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-2-19.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-2-2.jpeg | Bin 0 -> 685 bytes .../netty/example/http2/tiles/tile-2-3.jpeg | Bin 0 -> 740 bytes .../netty/example/http2/tiles/tile-2-4.jpeg | Bin 0 -> 654 bytes .../netty/example/http2/tiles/tile-2-5.jpeg | Bin 0 -> 824 bytes .../netty/example/http2/tiles/tile-2-6.jpeg | Bin 0 -> 682 bytes .../netty/example/http2/tiles/tile-2-7.jpeg | Bin 0 -> 673 bytes .../netty/example/http2/tiles/tile-2-8.jpeg | Bin 0 -> 794 bytes .../netty/example/http2/tiles/tile-2-9.jpeg | Bin 0 -> 698 bytes .../netty/example/http2/tiles/tile-3-0.jpeg | Bin 0 -> 734 bytes .../netty/example/http2/tiles/tile-3-1.jpeg | Bin 0 -> 686 bytes .../netty/example/http2/tiles/tile-3-10.jpeg | Bin 0 -> 722 bytes .../netty/example/http2/tiles/tile-3-11.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-3-12.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-3-13.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-3-14.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-3-15.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-3-16.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-3-17.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-3-18.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-3-19.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-3-2.jpeg | Bin 0 -> 685 bytes .../netty/example/http2/tiles/tile-3-3.jpeg | Bin 0 -> 710 bytes .../netty/example/http2/tiles/tile-3-4.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-3-5.jpeg | Bin 0 -> 772 bytes .../netty/example/http2/tiles/tile-3-6.jpeg | Bin 0 -> 669 bytes .../netty/example/http2/tiles/tile-3-7.jpeg | Bin 0 -> 666 bytes .../netty/example/http2/tiles/tile-3-8.jpeg | Bin 0 -> 751 bytes .../netty/example/http2/tiles/tile-3-9.jpeg | Bin 0 -> 806 bytes .../netty/example/http2/tiles/tile-4-0.jpeg | Bin 0 -> 728 bytes .../netty/example/http2/tiles/tile-4-1.jpeg | Bin 0 -> 698 bytes .../netty/example/http2/tiles/tile-4-10.jpeg | Bin 0 -> 652 bytes .../netty/example/http2/tiles/tile-4-11.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-4-12.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-4-13.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-4-14.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-4-15.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-4-16.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-4-17.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-4-18.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-4-19.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-4-2.jpeg | Bin 0 -> 706 bytes .../netty/example/http2/tiles/tile-4-3.jpeg | Bin 0 -> 692 bytes .../netty/example/http2/tiles/tile-4-4.jpeg | Bin 0 -> 704 bytes .../netty/example/http2/tiles/tile-4-5.jpeg | Bin 0 -> 664 bytes .../netty/example/http2/tiles/tile-4-6.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-4-7.jpeg | Bin 0 -> 667 bytes .../netty/example/http2/tiles/tile-4-8.jpeg | Bin 0 -> 695 bytes .../netty/example/http2/tiles/tile-4-9.jpeg | Bin 0 -> 927 bytes .../netty/example/http2/tiles/tile-5-0.jpeg | Bin 0 -> 754 bytes .../netty/example/http2/tiles/tile-5-1.jpeg | Bin 0 -> 712 bytes .../netty/example/http2/tiles/tile-5-10.jpeg | Bin 0 -> 863 bytes .../netty/example/http2/tiles/tile-5-11.jpeg | Bin 0 -> 651 bytes .../netty/example/http2/tiles/tile-5-12.jpeg | Bin 0 -> 759 bytes .../netty/example/http2/tiles/tile-5-13.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-5-14.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-5-15.jpeg | Bin 0 -> 683 bytes .../netty/example/http2/tiles/tile-5-16.jpeg | Bin 0 -> 669 bytes .../netty/example/http2/tiles/tile-5-17.jpeg | Bin 0 -> 672 bytes .../netty/example/http2/tiles/tile-5-18.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-5-19.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-5-2.jpeg | Bin 0 -> 705 bytes .../netty/example/http2/tiles/tile-5-3.jpeg | Bin 0 -> 744 bytes .../netty/example/http2/tiles/tile-5-4.jpeg | Bin 0 -> 729 bytes .../netty/example/http2/tiles/tile-5-5.jpeg | Bin 0 -> 656 bytes .../netty/example/http2/tiles/tile-5-6.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-5-7.jpeg | Bin 0 -> 664 bytes .../netty/example/http2/tiles/tile-5-8.jpeg | Bin 0 -> 729 bytes .../netty/example/http2/tiles/tile-5-9.jpeg | Bin 0 -> 908 bytes .../netty/example/http2/tiles/tile-6-0.jpeg | Bin 0 -> 766 bytes .../netty/example/http2/tiles/tile-6-1.jpeg | Bin 0 -> 726 bytes .../netty/example/http2/tiles/tile-6-10.jpeg | Bin 0 -> 817 bytes .../netty/example/http2/tiles/tile-6-11.jpeg | Bin 0 -> 793 bytes .../netty/example/http2/tiles/tile-6-12.jpeg | Bin 0 -> 761 bytes .../netty/example/http2/tiles/tile-6-13.jpeg | Bin 0 -> 771 bytes .../netty/example/http2/tiles/tile-6-14.jpeg | Bin 0 -> 795 bytes .../netty/example/http2/tiles/tile-6-15.jpeg | Bin 0 -> 791 bytes .../netty/example/http2/tiles/tile-6-16.jpeg | Bin 0 -> 751 bytes .../netty/example/http2/tiles/tile-6-17.jpeg | Bin 0 -> 760 bytes .../netty/example/http2/tiles/tile-6-18.jpeg | Bin 0 -> 687 bytes .../netty/example/http2/tiles/tile-6-19.jpeg | Bin 0 -> 712 bytes .../netty/example/http2/tiles/tile-6-2.jpeg | Bin 0 -> 710 bytes .../netty/example/http2/tiles/tile-6-3.jpeg | Bin 0 -> 709 bytes .../netty/example/http2/tiles/tile-6-4.jpeg | Bin 0 -> 789 bytes .../netty/example/http2/tiles/tile-6-5.jpeg | Bin 0 -> 824 bytes .../netty/example/http2/tiles/tile-6-6.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-6-7.jpeg | Bin 0 -> 670 bytes .../netty/example/http2/tiles/tile-6-8.jpeg | Bin 0 -> 889 bytes .../netty/example/http2/tiles/tile-6-9.jpeg | Bin 0 -> 750 bytes .../netty/example/http2/tiles/tile-7-0.jpeg | Bin 0 -> 668 bytes .../netty/example/http2/tiles/tile-7-1.jpeg | Bin 0 -> 808 bytes .../netty/example/http2/tiles/tile-7-10.jpeg | Bin 0 -> 762 bytes .../netty/example/http2/tiles/tile-7-11.jpeg | Bin 0 -> 871 bytes .../netty/example/http2/tiles/tile-7-12.jpeg | Bin 0 -> 771 bytes .../netty/example/http2/tiles/tile-7-13.jpeg | Bin 0 -> 870 bytes .../netty/example/http2/tiles/tile-7-14.jpeg | Bin 0 -> 765 bytes .../netty/example/http2/tiles/tile-7-15.jpeg | Bin 0 -> 928 bytes .../netty/example/http2/tiles/tile-7-16.jpeg | Bin 0 -> 709 bytes .../netty/example/http2/tiles/tile-7-17.jpeg | Bin 0 -> 710 bytes .../netty/example/http2/tiles/tile-7-18.jpeg | Bin 0 -> 712 bytes .../netty/example/http2/tiles/tile-7-19.jpeg | Bin 0 -> 753 bytes .../netty/example/http2/tiles/tile-7-2.jpeg | Bin 0 -> 752 bytes .../netty/example/http2/tiles/tile-7-3.jpeg | Bin 0 -> 752 bytes .../netty/example/http2/tiles/tile-7-4.jpeg | Bin 0 -> 803 bytes .../netty/example/http2/tiles/tile-7-5.jpeg | Bin 0 -> 800 bytes .../netty/example/http2/tiles/tile-7-6.jpeg | Bin 0 -> 825 bytes .../netty/example/http2/tiles/tile-7-7.jpeg | Bin 0 -> 755 bytes .../netty/example/http2/tiles/tile-7-8.jpeg | Bin 0 -> 872 bytes .../netty/example/http2/tiles/tile-7-9.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-8-0.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-8-1.jpeg | Bin 0 -> 680 bytes .../netty/example/http2/tiles/tile-8-10.jpeg | Bin 0 -> 767 bytes .../netty/example/http2/tiles/tile-8-11.jpeg | Bin 0 -> 756 bytes .../netty/example/http2/tiles/tile-8-12.jpeg | Bin 0 -> 890 bytes .../netty/example/http2/tiles/tile-8-13.jpeg | Bin 0 -> 885 bytes .../netty/example/http2/tiles/tile-8-14.jpeg | Bin 0 -> 746 bytes .../netty/example/http2/tiles/tile-8-15.jpeg | Bin 0 -> 842 bytes .../netty/example/http2/tiles/tile-8-16.jpeg | Bin 0 -> 795 bytes .../netty/example/http2/tiles/tile-8-17.jpeg | Bin 0 -> 753 bytes .../netty/example/http2/tiles/tile-8-18.jpeg | Bin 0 -> 865 bytes .../netty/example/http2/tiles/tile-8-19.jpeg | Bin 0 -> 864 bytes .../netty/example/http2/tiles/tile-8-2.jpeg | Bin 0 -> 817 bytes .../netty/example/http2/tiles/tile-8-3.jpeg | Bin 0 -> 783 bytes .../netty/example/http2/tiles/tile-8-4.jpeg | Bin 0 -> 667 bytes .../netty/example/http2/tiles/tile-8-5.jpeg | Bin 0 -> 650 bytes .../netty/example/http2/tiles/tile-8-6.jpeg | Bin 0 -> 826 bytes .../netty/example/http2/tiles/tile-8-7.jpeg | Bin 0 -> 917 bytes .../netty/example/http2/tiles/tile-8-8.jpeg | Bin 0 -> 661 bytes .../netty/example/http2/tiles/tile-8-9.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-9-0.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-9-1.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-9-10.jpeg | Bin 0 -> 690 bytes .../netty/example/http2/tiles/tile-9-11.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-9-12.jpeg | Bin 0 -> 711 bytes .../netty/example/http2/tiles/tile-9-13.jpeg | Bin 0 -> 691 bytes .../netty/example/http2/tiles/tile-9-14.jpeg | Bin 0 -> 721 bytes .../netty/example/http2/tiles/tile-9-15.jpeg | Bin 0 -> 663 bytes .../netty/example/http2/tiles/tile-9-16.jpeg | Bin 0 -> 689 bytes .../netty/example/http2/tiles/tile-9-17.jpeg | Bin 0 -> 693 bytes .../netty/example/http2/tiles/tile-9-18.jpeg | Bin 0 -> 760 bytes .../netty/example/http2/tiles/tile-9-19.jpeg | Bin 0 -> 928 bytes .../netty/example/http2/tiles/tile-9-2.jpeg | Bin 0 -> 671 bytes .../netty/example/http2/tiles/tile-9-3.jpeg | Bin 0 -> 735 bytes .../netty/example/http2/tiles/tile-9-4.jpeg | Bin 0 -> 723 bytes .../netty/example/http2/tiles/tile-9-5.jpeg | Bin 0 -> 736 bytes .../netty/example/http2/tiles/tile-9-6.jpeg | Bin 0 -> 713 bytes .../netty/example/http2/tiles/tile-9-7.jpeg | Bin 0 -> 658 bytes .../netty/example/http2/tiles/tile-9-8.jpeg | Bin 0 -> 643 bytes .../netty/example/http2/tiles/tile-9-9.jpeg | Bin 0 -> 643 bytes run-example.sh | 5 +- 220 files changed, 756 insertions(+), 16 deletions(-) rename example/src/main/java/io/netty/example/http2/{ => helloworld}/client/Http2Client.java (99%) rename example/src/main/java/io/netty/example/http2/{ => helloworld}/client/Http2ClientInitializer.java (99%) rename example/src/main/java/io/netty/example/http2/{ => helloworld}/client/Http2SettingsHandler.java (97%) rename example/src/main/java/io/netty/example/http2/{ => helloworld}/client/HttpResponseHandler.java (98%) rename example/src/main/java/io/netty/example/http2/{ => helloworld}/server/HelloWorldHttp1Handler.java (98%) rename example/src/main/java/io/netty/example/http2/{ => helloworld}/server/HelloWorldHttp2Handler.java (99%) rename example/src/main/java/io/netty/example/http2/{ => helloworld}/server/Http2OrHttpHandler.java (97%) rename example/src/main/java/io/netty/example/http2/{ => helloworld}/server/Http2Server.java (93%) rename example/src/main/java/io/netty/example/http2/{ => helloworld}/server/Http2ServerInitializer.java (98%) create mode 100644 example/src/main/java/io/netty/example/http2/tiles/FallbackRequestHandler.java create mode 100644 example/src/main/java/io/netty/example/http2/tiles/Html.java create mode 100644 example/src/main/java/io/netty/example/http2/tiles/Http1RequestHandler.java create mode 100644 example/src/main/java/io/netty/example/http2/tiles/Http2OrHttpHandler.java create mode 100644 example/src/main/java/io/netty/example/http2/tiles/Http2RequestHandler.java create mode 100644 example/src/main/java/io/netty/example/http2/tiles/Http2Server.java create mode 100644 example/src/main/java/io/netty/example/http2/tiles/HttpServer.java create mode 100644 example/src/main/java/io/netty/example/http2/tiles/ImageCache.java create mode 100644 example/src/main/java/io/netty/example/http2/tiles/Launcher.java create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-0-0.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-0-1.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-0-10.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-0-11.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-0-12.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-0-13.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-0-14.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-0-15.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-0-16.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-0-17.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-0-18.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-0-19.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-0-2.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-0-3.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-0-4.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-0-5.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-0-6.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-0-7.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-0-8.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-0-9.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-1-0.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-1-1.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-1-10.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-1-11.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-1-12.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-1-13.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-1-14.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-1-15.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-1-16.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-1-17.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-1-18.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-1-19.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-1-2.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-1-3.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-1-4.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-1-5.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-1-6.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-1-7.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-1-8.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-1-9.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-2-0.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-2-1.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-2-10.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-2-11.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-2-12.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-2-13.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-2-14.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-2-15.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-2-16.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-2-17.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-2-18.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-2-19.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-2-2.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-2-3.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-2-4.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-2-5.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-2-6.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-2-7.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-2-8.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-2-9.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-3-0.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-3-1.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-3-10.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-3-11.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-3-12.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-3-13.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-3-14.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-3-15.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-3-16.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-3-17.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-3-18.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-3-19.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-3-2.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-3-3.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-3-4.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-3-5.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-3-6.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-3-7.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-3-8.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-3-9.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-4-0.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-4-1.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-4-10.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-4-11.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-4-12.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-4-13.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-4-14.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-4-15.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-4-16.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-4-17.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-4-18.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-4-19.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-4-2.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-4-3.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-4-4.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-4-5.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-4-6.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-4-7.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-4-8.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-4-9.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-5-0.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-5-1.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-5-10.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-5-11.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-5-12.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-5-13.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-5-14.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-5-15.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-5-16.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-5-17.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-5-18.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-5-19.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-5-2.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-5-3.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-5-4.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-5-5.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-5-6.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-5-7.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-5-8.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-5-9.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-6-0.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-6-1.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-6-10.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-6-11.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-6-12.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-6-13.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-6-14.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-6-15.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-6-16.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-6-17.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-6-18.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-6-19.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-6-2.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-6-3.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-6-4.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-6-5.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-6-6.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-6-7.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-6-8.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-6-9.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-7-0.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-7-1.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-7-10.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-7-11.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-7-12.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-7-13.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-7-14.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-7-15.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-7-16.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-7-17.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-7-18.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-7-19.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-7-2.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-7-3.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-7-4.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-7-5.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-7-6.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-7-7.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-7-8.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-7-9.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-8-0.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-8-1.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-8-10.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-8-11.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-8-12.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-8-13.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-8-14.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-8-15.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-8-16.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-8-17.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-8-18.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-8-19.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-8-2.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-8-3.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-8-4.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-8-5.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-8-6.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-8-7.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-8-8.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-8-9.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-9-0.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-9-1.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-9-10.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-9-11.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-9-12.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-9-13.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-9-14.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-9-15.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-9-16.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-9-17.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-9-18.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-9-19.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-9-2.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-9-3.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-9-4.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-9-5.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-9-6.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-9-7.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-9-8.jpeg create mode 100755 example/src/main/resources/io/netty/example/http2/tiles/tile-9-9.jpeg diff --git a/example/src/main/java/io/netty/example/http2/Http2ExampleUtil.java b/example/src/main/java/io/netty/example/http2/Http2ExampleUtil.java index 98cf022db6..e749ef1ea2 100644 --- a/example/src/main/java/io/netty/example/http2/Http2ExampleUtil.java +++ b/example/src/main/java/io/netty/example/http2/Http2ExampleUtil.java @@ -14,6 +14,15 @@ */ package io.netty.example.http2; +import static io.netty.util.internal.ObjectUtil.checkNotNull; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.handler.codec.http.QueryStringDecoder; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + /** * Utility methods used by the example client and server. */ @@ -24,5 +33,51 @@ public final class Http2ExampleUtil { */ public static final String UPGRADE_RESPONSE_HEADER = "Http-To-Http2-Upgrade"; + /** + * Size of the block to be read from the input stream. + */ + private static final int BLOCK_SIZE = 1024; + private Http2ExampleUtil() { } + + /** + * @param string the string to be converted to an integer. + * @param defaultValue the default value + * @return the integer value of a string or the default value, if the string is either null or empty. + */ + public static int toInt(String string, int defaultValue) { + if (string != null && !string.isEmpty()) { + return Integer.valueOf(string); + } + return defaultValue; + } + + /** + * Reads an InputStream into a byte array. + * @param input the InputStream. + * @return a byte array representation of the InputStream. + * @throws IOException if an I/O exception of some sort happens while reading the InputStream. + */ + public static ByteBuf toByteBuf(InputStream input) throws IOException { + ByteBuf buf = Unpooled.buffer(); + int n = 0; + do { + n = buf.writeBytes(input, BLOCK_SIZE); + } while (n > 0); + return buf; + } + + /** + * @param query the decoder of query string + * @param key the key to lookup + * @return the first occurrence of that key in the string parameters + */ + public static String firstValue(QueryStringDecoder query, String key) { + checkNotNull(query, "Query can't be null!"); + List values = query.parameters().get(key); + if (values == null || values.isEmpty()) { + return null; + } + return values.get(0); + } } diff --git a/example/src/main/java/io/netty/example/http2/client/Http2Client.java b/example/src/main/java/io/netty/example/http2/helloworld/client/Http2Client.java similarity index 99% rename from example/src/main/java/io/netty/example/http2/client/Http2Client.java rename to example/src/main/java/io/netty/example/http2/helloworld/client/Http2Client.java index 7abe39a44c..34d5ab3d10 100644 --- a/example/src/main/java/io/netty/example/http2/client/Http2Client.java +++ b/example/src/main/java/io/netty/example/http2/helloworld/client/Http2Client.java @@ -12,7 +12,7 @@ * or implied. See the License for the specific language governing permissions and limitations under * the License. */ -package io.netty.example.http2.client; +package io.netty.example.http2.helloworld.client; import io.netty.bootstrap.Bootstrap; import io.netty.buffer.Unpooled; diff --git a/example/src/main/java/io/netty/example/http2/client/Http2ClientInitializer.java b/example/src/main/java/io/netty/example/http2/helloworld/client/Http2ClientInitializer.java similarity index 99% rename from example/src/main/java/io/netty/example/http2/client/Http2ClientInitializer.java rename to example/src/main/java/io/netty/example/http2/helloworld/client/Http2ClientInitializer.java index 842ea7184b..91621bd91a 100644 --- a/example/src/main/java/io/netty/example/http2/client/Http2ClientInitializer.java +++ b/example/src/main/java/io/netty/example/http2/helloworld/client/Http2ClientInitializer.java @@ -12,7 +12,7 @@ * or implied. See the License for the specific language governing permissions and limitations under * the License. */ -package io.netty.example.http2.client; +package io.netty.example.http2.helloworld.client; import static io.netty.handler.logging.LogLevel.INFO; diff --git a/example/src/main/java/io/netty/example/http2/client/Http2SettingsHandler.java b/example/src/main/java/io/netty/example/http2/helloworld/client/Http2SettingsHandler.java similarity index 97% rename from example/src/main/java/io/netty/example/http2/client/Http2SettingsHandler.java rename to example/src/main/java/io/netty/example/http2/helloworld/client/Http2SettingsHandler.java index 9f17ea6f48..065476ffa6 100644 --- a/example/src/main/java/io/netty/example/http2/client/Http2SettingsHandler.java +++ b/example/src/main/java/io/netty/example/http2/helloworld/client/Http2SettingsHandler.java @@ -12,7 +12,7 @@ * or implied. See the License for the specific language governing permissions and limitations under * the License. */ -package io.netty.example.http2.client; +package io.netty.example.http2.helloworld.client; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelPromise; diff --git a/example/src/main/java/io/netty/example/http2/client/HttpResponseHandler.java b/example/src/main/java/io/netty/example/http2/helloworld/client/HttpResponseHandler.java similarity index 98% rename from example/src/main/java/io/netty/example/http2/client/HttpResponseHandler.java rename to example/src/main/java/io/netty/example/http2/helloworld/client/HttpResponseHandler.java index d803896bfd..617e131bd3 100644 --- a/example/src/main/java/io/netty/example/http2/client/HttpResponseHandler.java +++ b/example/src/main/java/io/netty/example/http2/helloworld/client/HttpResponseHandler.java @@ -12,7 +12,7 @@ * or implied. See the License for the specific language governing permissions and limitations under * the License. */ -package io.netty.example.http2.client; +package io.netty.example.http2.helloworld.client; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; diff --git a/example/src/main/java/io/netty/example/http2/server/HelloWorldHttp1Handler.java b/example/src/main/java/io/netty/example/http2/helloworld/server/HelloWorldHttp1Handler.java similarity index 98% rename from example/src/main/java/io/netty/example/http2/server/HelloWorldHttp1Handler.java rename to example/src/main/java/io/netty/example/http2/helloworld/server/HelloWorldHttp1Handler.java index aa8f1d2949..fa652d671a 100644 --- a/example/src/main/java/io/netty/example/http2/server/HelloWorldHttp1Handler.java +++ b/example/src/main/java/io/netty/example/http2/helloworld/server/HelloWorldHttp1Handler.java @@ -13,7 +13,7 @@ * License for the specific language governing permissions and limitations * under the License. */ -package io.netty.example.http2.server; +package io.netty.example.http2.helloworld.server; import static io.netty.util.internal.ObjectUtil.checkNotNull; import io.netty.buffer.ByteBuf; diff --git a/example/src/main/java/io/netty/example/http2/server/HelloWorldHttp2Handler.java b/example/src/main/java/io/netty/example/http2/helloworld/server/HelloWorldHttp2Handler.java similarity index 99% rename from example/src/main/java/io/netty/example/http2/server/HelloWorldHttp2Handler.java rename to example/src/main/java/io/netty/example/http2/helloworld/server/HelloWorldHttp2Handler.java index f0ae73fd6e..d6c14d0a04 100644 --- a/example/src/main/java/io/netty/example/http2/server/HelloWorldHttp2Handler.java +++ b/example/src/main/java/io/netty/example/http2/helloworld/server/HelloWorldHttp2Handler.java @@ -13,7 +13,7 @@ * the License. */ -package io.netty.example.http2.server; +package io.netty.example.http2.helloworld.server; import static io.netty.buffer.Unpooled.copiedBuffer; import static io.netty.buffer.Unpooled.unreleasableBuffer; diff --git a/example/src/main/java/io/netty/example/http2/server/Http2OrHttpHandler.java b/example/src/main/java/io/netty/example/http2/helloworld/server/Http2OrHttpHandler.java similarity index 97% rename from example/src/main/java/io/netty/example/http2/server/Http2OrHttpHandler.java rename to example/src/main/java/io/netty/example/http2/helloworld/server/Http2OrHttpHandler.java index e07dec2486..96af05b560 100644 --- a/example/src/main/java/io/netty/example/http2/server/Http2OrHttpHandler.java +++ b/example/src/main/java/io/netty/example/http2/helloworld/server/Http2OrHttpHandler.java @@ -12,7 +12,7 @@ * or implied. See the License for the specific language governing permissions and limitations under * the License. */ -package io.netty.example.http2.server; +package io.netty.example.http2.helloworld.server; import io.netty.channel.ChannelHandler; import io.netty.handler.codec.http2.Http2ConnectionHandler; diff --git a/example/src/main/java/io/netty/example/http2/server/Http2Server.java b/example/src/main/java/io/netty/example/http2/helloworld/server/Http2Server.java similarity index 93% rename from example/src/main/java/io/netty/example/http2/server/Http2Server.java rename to example/src/main/java/io/netty/example/http2/helloworld/server/Http2Server.java index 31f0a8b490..26a10ccb7a 100644 --- a/example/src/main/java/io/netty/example/http2/server/Http2Server.java +++ b/example/src/main/java/io/netty/example/http2/helloworld/server/Http2Server.java @@ -14,7 +14,7 @@ * under the License. */ -package io.netty.example.http2.server; +package io.netty.example.http2.helloworld.server; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Channel; @@ -71,12 +71,11 @@ public final class Http2Server { sslCtx = null; } // Configure the server. - EventLoopGroup bossGroup = new NioEventLoopGroup(1); - EventLoopGroup workerGroup = new NioEventLoopGroup(); + EventLoopGroup group = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); b.option(ChannelOption.SO_BACKLOG, 1024); - b.group(bossGroup, workerGroup) + b.group(group) .channel(NioServerSocketChannel.class) .handler(new LoggingHandler(LogLevel.INFO)) .childHandler(new Http2ServerInitializer(sslCtx)); @@ -88,8 +87,7 @@ public final class Http2Server { ch.closeFuture().sync(); } finally { - bossGroup.shutdownGracefully(); - workerGroup.shutdownGracefully(); + group.shutdownGracefully(); } } } diff --git a/example/src/main/java/io/netty/example/http2/server/Http2ServerInitializer.java b/example/src/main/java/io/netty/example/http2/helloworld/server/Http2ServerInitializer.java similarity index 98% rename from example/src/main/java/io/netty/example/http2/server/Http2ServerInitializer.java rename to example/src/main/java/io/netty/example/http2/helloworld/server/Http2ServerInitializer.java index cc5a7f31ad..cd5cd1efa2 100644 --- a/example/src/main/java/io/netty/example/http2/server/Http2ServerInitializer.java +++ b/example/src/main/java/io/netty/example/http2/helloworld/server/Http2ServerInitializer.java @@ -14,7 +14,7 @@ * under the License. */ -package io.netty.example.http2.server; +package io.netty.example.http2.helloworld.server; import io.netty.channel.ChannelHandlerAdapter; import io.netty.channel.ChannelHandlerContext; diff --git a/example/src/main/java/io/netty/example/http2/tiles/FallbackRequestHandler.java b/example/src/main/java/io/netty/example/http2/tiles/FallbackRequestHandler.java new file mode 100644 index 0000000000..d0c88b42f7 --- /dev/null +++ b/example/src/main/java/io/netty/example/http2/tiles/FallbackRequestHandler.java @@ -0,0 +1,74 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.example.http2.tiles; + +import static io.netty.buffer.Unpooled.copiedBuffer; +import static io.netty.buffer.Unpooled.unmodifiableBuffer; +import static io.netty.buffer.Unpooled.unreleasableBuffer; +import static io.netty.handler.codec.http.HttpHeaderNames.CONTENT_LENGTH; +import static io.netty.handler.codec.http.HttpHeaderNames.CONTENT_TYPE; +import static io.netty.handler.codec.http.HttpResponseStatus.CONTINUE; +import static io.netty.handler.codec.http.HttpResponseStatus.OK; +import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1; +import static io.netty.util.CharsetUtil.UTF_8; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.handler.codec.http.DefaultFullHttpResponse; +import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpHeaderUtil; +import io.netty.handler.codec.http.HttpRequest; +import io.netty.handler.codec.http2.Http2CodecUtil; + +/** + * Handles the exceptional case where HTTP 1.x was negotiated under TLS. + */ +public final class FallbackRequestHandler extends SimpleChannelInboundHandler { + + private static final ByteBuf response = unmodifiableBuffer(unreleasableBuffer(copiedBuffer("" + + "

To view the example you need a browser that supports HTTP/2 (" + + Http2CodecUtil.TLS_UPGRADE_PROTOCOL_NAME + + ")

", UTF_8))); + + @Override + protected void channelRead0(ChannelHandlerContext ctx, HttpRequest req) throws Exception { + if (HttpHeaderUtil.is100ContinueExpected(req)) { + ctx.write(new DefaultFullHttpResponse(HTTP_1_1, CONTINUE)); + } + + ByteBuf content = ctx.alloc().buffer(); + content.writeBytes(response.duplicate()); + + FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, OK, content); + response.headers().set(CONTENT_TYPE, "text/html; charset=UTF-8"); + response.headers().setInt(CONTENT_LENGTH, response.content().readableBytes()); + + ctx.write(response).addListener(ChannelFutureListener.CLOSE); + } + + @Override + public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { + ctx.flush(); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { + cause.printStackTrace(); + ctx.close(); + } +} diff --git a/example/src/main/java/io/netty/example/http2/tiles/Html.java b/example/src/main/java/io/netty/example/http2/tiles/Html.java new file mode 100644 index 0000000000..2ac497edb0 --- /dev/null +++ b/example/src/main/java/io/netty/example/http2/tiles/Html.java @@ -0,0 +1,79 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.example.http2.tiles; + +import static io.netty.util.CharsetUtil.UTF_8; + +import java.util.Random; + +/** + * Static and dynamically generated HTML for the example. + */ +public final class Html { + + public static final String IP = System.getProperty("ip", "127.0.0.1"); + + public static final byte[] FOOTER = "".getBytes(UTF_8); + + public static final byte[] HEADER = ("Netty HTTP/2 Example" + + "" + + "" + + "A grid of 200 tiled images is shown below. Compare:" + + "

[HTTP/2, 0 latency] [HTTP/1, 0 latency]
" + "[HTTP/2, 30ms latency] [HTTP/1, 30ms latency]
" + "[HTTP/2, 200ms latency] [HTTP/1, 200ms latency]
" + "[HTTP/2, 1s latency] [HTTP/1, " + "1s latency]
").getBytes(UTF_8); + + private static final int IMAGES_X_AXIS = 20; + + private static final int IMAGES_Y_AXIS = 10; + + private Html() { + } + + private static String url(int port) { + return IP + ":" + port + "/http2"; + } + + public static byte[] body(int latency) { + int r = Math.abs(new Random().nextInt()); + // The string to be built contains 13192 fixed characters plus the variable latency and random cache-bust. + int numberOfCharacters = 13192 + stringLength(latency) + stringLength(r); + StringBuilder sb = new StringBuilder(numberOfCharacters).append("

"); + for (int y = 0; y < IMAGES_Y_AXIS; y++) { + for (int x = 0; x < IMAGES_X_AXIS; x++) { + sb.append(""); + } + sb.append("
\r\n"); + } + sb.append("
"); + return sb.toString().getBytes(UTF_8); + } + + private static int stringLength(int value) { + return Integer.toString(value).length() * IMAGES_X_AXIS * IMAGES_Y_AXIS; + } +} diff --git a/example/src/main/java/io/netty/example/http2/tiles/Http1RequestHandler.java b/example/src/main/java/io/netty/example/http2/tiles/Http1RequestHandler.java new file mode 100644 index 0000000000..aacc31ca53 --- /dev/null +++ b/example/src/main/java/io/netty/example/http2/tiles/Http1RequestHandler.java @@ -0,0 +1,62 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.example.http2.tiles; + +import static io.netty.handler.codec.http.HttpHeaderNames.CONNECTION; +import static io.netty.handler.codec.http.HttpHeaderUtil.isKeepAlive; +import static io.netty.handler.codec.http.HttpResponseStatus.CONTINUE; +import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.http.DefaultFullHttpResponse; +import io.netty.handler.codec.http.FullHttpRequest; +import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpHeaderUtil; +import io.netty.handler.codec.http.HttpHeaderValues; + +import java.util.concurrent.TimeUnit; + +/** + * Handles the requests for the tiled image using HTTP 1.x as a protocol. + */ +public final class Http1RequestHandler extends Http2RequestHandler { + + @Override + protected void channelRead0(ChannelHandlerContext ctx, FullHttpRequest request) throws Exception { + if (HttpHeaderUtil.is100ContinueExpected(request)) { + ctx.write(new DefaultFullHttpResponse(HTTP_1_1, CONTINUE)); + } + super.channelRead0(ctx, request); + } + + @Override + protected void sendResponse(final ChannelHandlerContext ctx, String streamId, int latency, + final FullHttpResponse response, final FullHttpRequest request) { + HttpHeaderUtil.setContentLength(response, response.content().readableBytes()); + ctx.executor().schedule(new Runnable() { + @Override + public void run() { + if (isKeepAlive(request)) { + response.headers().set(CONNECTION, HttpHeaderValues.KEEP_ALIVE); + ctx.writeAndFlush(response); + } else { + ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE); + } + } + }, latency, TimeUnit.MILLISECONDS); + } +} diff --git a/example/src/main/java/io/netty/example/http2/tiles/Http2OrHttpHandler.java b/example/src/main/java/io/netty/example/http2/tiles/Http2OrHttpHandler.java new file mode 100644 index 0000000000..ca93a49035 --- /dev/null +++ b/example/src/main/java/io/netty/example/http2/tiles/Http2OrHttpHandler.java @@ -0,0 +1,77 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.example.http2.tiles; + +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.http2.DefaultHttp2Connection; +import io.netty.handler.codec.http2.DefaultHttp2FrameReader; +import io.netty.handler.codec.http2.DefaultHttp2FrameWriter; +import io.netty.handler.codec.http2.Http2ConnectionHandler; +import io.netty.handler.codec.http2.Http2OrHttpChooser; +import io.netty.handler.codec.http2.HttpToHttp2ConnectionHandler; +import io.netty.handler.codec.http2.InboundHttp2ToHttpAdapter; + +import javax.net.ssl.SSLEngine; + +/** + * Used during protocol negotiation, the main function of this handler is to + * return the HTTP/1.1 or HTTP/2 handler once the protocol has been negotiated. + */ +public class Http2OrHttpHandler extends Http2OrHttpChooser { + + public Http2OrHttpHandler(int maxHttpContentLength) { + super(maxHttpContentLength); + } + + @Override + protected SelectedProtocol getProtocol(SSLEngine engine) { + String[] protocol = engine.getSession().getProtocol().split(":"); + if (protocol != null && protocol.length > 1) { + SelectedProtocol selectedProtocol = SelectedProtocol.protocol(protocol[1]); + System.err.println("Selected Protocol is " + selectedProtocol); + return selectedProtocol; + } + return SelectedProtocol.UNKNOWN; + } + + @Override + protected void addHttp2Handlers(ChannelHandlerContext ctx) { + DefaultHttp2Connection connection = new DefaultHttp2Connection(true); + DefaultHttp2FrameWriter writer = new DefaultHttp2FrameWriter(); + DefaultHttp2FrameReader reader = new DefaultHttp2FrameReader(); + InboundHttp2ToHttpAdapter listener = new InboundHttp2ToHttpAdapter.Builder(connection).propagateSettings(true) + .validateHttpHeaders(false).maxContentLength(1024 * 100).build(); + + ctx.pipeline().addLast("httpToHttp2", new HttpToHttp2ConnectionHandler(connection, + // Loggers can be activated for debugging purposes + // new Http2InboundFrameLogger(reader, TilesHttp2ToHttpHandler.logger), + // new Http2OutboundFrameLogger(writer, TilesHttp2ToHttpHandler.logger) + reader, writer, listener)); + ctx.pipeline().addLast("fullHttpRequestHandler", new Http2RequestHandler()); + } + + @Override + protected ChannelHandler createHttp1RequestHandler() { + return new FallbackRequestHandler(); + } + + @Override + protected Http2ConnectionHandler createHttp2RequestHandler() { + return null; // NOOP + } +} diff --git a/example/src/main/java/io/netty/example/http2/tiles/Http2RequestHandler.java b/example/src/main/java/io/netty/example/http2/tiles/Http2RequestHandler.java new file mode 100644 index 0000000000..8ddf9910ca --- /dev/null +++ b/example/src/main/java/io/netty/example/http2/tiles/Http2RequestHandler.java @@ -0,0 +1,122 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.example.http2.tiles; + +import static io.netty.buffer.Unpooled.EMPTY_BUFFER; +import static io.netty.example.http2.Http2ExampleUtil.firstValue; +import static io.netty.example.http2.Http2ExampleUtil.toInt; +import static io.netty.handler.codec.http.HttpHeaderNames.CONTENT_TYPE; +import static io.netty.handler.codec.http.HttpHeaderUtil.setContentLength; +import static io.netty.handler.codec.http.HttpResponseStatus.BAD_REQUEST; +import static io.netty.handler.codec.http.HttpResponseStatus.OK; +import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1; +import static java.lang.Integer.valueOf; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.handler.codec.http.DefaultFullHttpResponse; +import io.netty.handler.codec.http.FullHttpRequest; +import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.QueryStringDecoder; +import io.netty.handler.codec.http2.HttpUtil; +import io.netty.handler.codec.http2.InboundHttp2ToHttpAdapter; + +import java.util.concurrent.TimeUnit; + +/** + * Handles all the requests for data. It receives a {@link FullHttpRequest}, + * which has been converted by a {@link InboundHttp2ToHttpAdapter} before it + * arrived here. For further details, check {@link Http2OrHttpHandler} where the + * pipeline is setup. + */ +public class Http2RequestHandler extends SimpleChannelInboundHandler { + + private static final String LATENCY_FIELD_NAME = "latency"; + private static final int MIN_LATENCY = 0; + private static final int MAX_LATENCY = 1000; + private static final String IMAGE_COORDINATE_Y = "y"; + private static final String IMAGE_COORDINATE_X = "x"; + + @Override + protected void channelRead0(ChannelHandlerContext ctx, FullHttpRequest request) throws Exception { + QueryStringDecoder queryString = new QueryStringDecoder(request.uri()); + String streamId = streamId(request); + int latency = toInt(firstValue(queryString, LATENCY_FIELD_NAME), 0); + if (latency < MIN_LATENCY || latency > MAX_LATENCY) { + sendBadRequest(ctx, streamId); + return; + } + String x = firstValue(queryString, IMAGE_COORDINATE_X); + String y = firstValue(queryString, IMAGE_COORDINATE_Y); + if (x == null || y == null) { + handlePage(ctx, streamId, latency, request); + } else { + handleImage(x, y, ctx, streamId, latency, request); + } + } + + private void sendBadRequest(ChannelHandlerContext ctx, String streamId) { + FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, BAD_REQUEST, EMPTY_BUFFER); + streamId(response, streamId); + ctx.writeAndFlush(response); + } + + private void handleImage(String x, String y, ChannelHandlerContext ctx, String streamId, int latency, + FullHttpRequest request) { + ByteBuf image = ImageCache.INSTANCE.image(valueOf(x), valueOf(y)); + FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, OK, image.duplicate()); + response.headers().set(CONTENT_TYPE, "image/jpeg"); + sendResponse(ctx, streamId, latency, response, request); + } + + private void handlePage(ChannelHandlerContext ctx, String streamId, int latency, FullHttpRequest request) { + byte[] body = Html.body(latency); + ByteBuf content = ctx.alloc().buffer(Html.HEADER.length + body.length + Html.FOOTER.length); + content.writeBytes(Html.HEADER); + content.writeBytes(body); + content.writeBytes(Html.FOOTER); + FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, OK, content); + response.headers().set(CONTENT_TYPE, "text/html; charset=UTF-8"); + sendResponse(ctx, streamId, latency, response, request); + } + + protected void sendResponse(final ChannelHandlerContext ctx, String streamId, int latency, + final FullHttpResponse response, final FullHttpRequest request) { + setContentLength(response, response.content().readableBytes()); + streamId(response, streamId); + ctx.executor().schedule(new Runnable() { + @Override + public void run() { + ctx.writeAndFlush(response); + } + }, latency, TimeUnit.MILLISECONDS); + } + + private String streamId(FullHttpRequest request) { + return request.headers().get(HttpUtil.ExtensionHeaderNames.STREAM_ID.text()); + } + + private void streamId(FullHttpResponse response, String streamId) { + response.headers().set(HttpUtil.ExtensionHeaderNames.STREAM_ID.text(), streamId); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + cause.printStackTrace(); + ctx.close(); + } +} diff --git a/example/src/main/java/io/netty/example/http2/tiles/Http2Server.java b/example/src/main/java/io/netty/example/http2/tiles/Http2Server.java new file mode 100644 index 0000000000..7c818ca239 --- /dev/null +++ b/example/src/main/java/io/netty/example/http2/tiles/Http2Server.java @@ -0,0 +1,87 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.example.http2.tiles; + +import static io.netty.handler.codec.http2.Http2OrHttpChooser.SelectedProtocol.HTTP_1_1; +import static io.netty.handler.codec.http2.Http2OrHttpChooser.SelectedProtocol.HTTP_2; +import static io.netty.handler.codec.http2.Http2SecurityUtil.CIPHERS; +import io.netty.bootstrap.ServerBootstrap; +import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.socket.SocketChannel; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import io.netty.handler.ssl.ApplicationProtocolConfig; +import io.netty.handler.ssl.ApplicationProtocolConfig.Protocol; +import io.netty.handler.ssl.ApplicationProtocolConfig.SelectedListenerFailureBehavior; +import io.netty.handler.ssl.ApplicationProtocolConfig.SelectorFailureBehavior; +import io.netty.handler.ssl.SslContext; +import io.netty.handler.ssl.SslContextBuilder; +import io.netty.handler.ssl.SupportedCipherSuiteFilter; +import io.netty.handler.ssl.util.SelfSignedCertificate; + +import java.security.cert.CertificateException; + +import javax.net.ssl.SSLException; + +/** + * Demonstrates a Http2 server using Netty to display a bunch of images and + * simulate latency. It is a Netty version of the + * Go lang HTTP2 tiles demo. + */ +public class Http2Server { + + public static final int PORT = Integer.parseInt(System.getProperty("http2-port", "8443")); + static final int MAX_CONTENT_LENGTH = 1024 * 100; + + private final EventLoopGroup group; + + public Http2Server(EventLoopGroup eventLoopGroup) { + group = eventLoopGroup; + } + + public ChannelFuture start() throws Exception { + final SslContext sslCtx = configureTLS(); + ServerBootstrap b = new ServerBootstrap(); + b.option(ChannelOption.SO_BACKLOG, 1024); + b.group(group).channel(NioServerSocketChannel.class).childHandler(new ChannelInitializer() { + @Override + protected void initChannel(SocketChannel ch) throws Exception { + ch.pipeline().addLast(sslCtx.newHandler(ch.alloc()), new Http2OrHttpHandler(MAX_CONTENT_LENGTH)); + } + }); + + Channel ch = b.bind(PORT).sync().channel(); + return ch.closeFuture(); + } + + private SslContext configureTLS() throws CertificateException, SSLException { + SelfSignedCertificate ssc = new SelfSignedCertificate(); + ApplicationProtocolConfig apn = new ApplicationProtocolConfig(Protocol.ALPN, + // NO_ADVERTISE is currently the only mode supported by both OpenSsl and JDK providers. + SelectorFailureBehavior.NO_ADVERTISE, + // ACCEPT is currently the only mode supported by both OpenSsl and JDK providers. + SelectedListenerFailureBehavior.ACCEPT, + HTTP_2.protocolName(), HTTP_1_1.protocolName()); + final SslContext sslCtx = SslContextBuilder.forServer(ssc.certificate(), ssc.privateKey(), null) + .ciphers(CIPHERS, SupportedCipherSuiteFilter.INSTANCE) + .applicationProtocolConfig(apn).build(); + return sslCtx; + } +} diff --git a/example/src/main/java/io/netty/example/http2/tiles/HttpServer.java b/example/src/main/java/io/netty/example/http2/tiles/HttpServer.java new file mode 100644 index 0000000000..a961b4eded --- /dev/null +++ b/example/src/main/java/io/netty/example/http2/tiles/HttpServer.java @@ -0,0 +1,68 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.example.http2.tiles; + +import io.netty.bootstrap.ServerBootstrap; +import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOption; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.socket.SocketChannel; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import io.netty.handler.codec.http.HttpObjectAggregator; +import io.netty.handler.codec.http.HttpRequestDecoder; +import io.netty.handler.codec.http.HttpResponseEncoder; +import io.netty.handler.logging.LogLevel; +import io.netty.handler.logging.LoggingHandler; + +/** + * Demonstrates a http server using Netty to display a bunch of images, simulate + * latency and compare it against the http2 implementation. + */ +public final class HttpServer { + + public static final int PORT = Integer.parseInt(System.getProperty("http-port", "8080")); + private static final int MAX_CONTENT_LENGTH = 1024 * 100; + + private final EventLoopGroup group; + + public HttpServer(EventLoopGroup eventLoopGroup) { + group = eventLoopGroup; + } + + public ChannelFuture start() throws Exception { + ServerBootstrap b = new ServerBootstrap(); + b.option(ChannelOption.SO_BACKLOG, 1024); + + b.group(group).channel(NioServerSocketChannel.class).handler(new LoggingHandler(LogLevel.INFO)) + .childHandler(new ChannelInitializer() { + @Override + protected void initChannel(SocketChannel ch) throws Exception { + ChannelPipeline pipeline = ch.pipeline(); + pipeline.addLast("httpRequestDecoder", new HttpRequestDecoder()); + pipeline.addLast("httpResponseEncoder", new HttpResponseEncoder()); + pipeline.addLast("httpChunkAggregator", new HttpObjectAggregator(MAX_CONTENT_LENGTH)); + pipeline.addLast("httpRequestHandler", new Http1RequestHandler()); + } + }); + + Channel ch = b.bind(PORT).sync().channel(); + return ch.closeFuture(); + } +} diff --git a/example/src/main/java/io/netty/example/http2/tiles/ImageCache.java b/example/src/main/java/io/netty/example/http2/tiles/ImageCache.java new file mode 100644 index 0000000000..dbf3e0b2da --- /dev/null +++ b/example/src/main/java/io/netty/example/http2/tiles/ImageCache.java @@ -0,0 +1,63 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.example.http2.tiles; + +import static io.netty.buffer.Unpooled.unmodifiableBuffer; +import static io.netty.buffer.Unpooled.unreleasableBuffer; +import static io.netty.example.http2.Http2ExampleUtil.toByteBuf; +import io.netty.buffer.ByteBuf; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/** + * Caches the images to avoid reading them every time from the disk. + */ +public final class ImageCache { + + public static ImageCache INSTANCE = new ImageCache(); + + private final Map imageBank = new HashMap(200); + + private ImageCache() { + init(); + } + + public static String name(int x, int y) { + return "tile-" + y + "-" + x + ".jpeg"; + } + + public ByteBuf image(int x, int y) { + return imageBank.get(name(x, y)); + } + + private void init() { + for (int y = 0; y < 10; y++) { + for (int x = 0; x < 20; x++) { + try { + String name = name(x, y); + ByteBuf fileBytes = unreleasableBuffer(unmodifiableBuffer(toByteBuf(getClass() + .getResourceAsStream(name)))); + imageBank.put(name, fileBytes); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } +} diff --git a/example/src/main/java/io/netty/example/http2/tiles/Launcher.java b/example/src/main/java/io/netty/example/http2/tiles/Launcher.java new file mode 100644 index 0000000000..5ce3ff3814 --- /dev/null +++ b/example/src/main/java/io/netty/example/http2/tiles/Launcher.java @@ -0,0 +1,54 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.example.http2.tiles; + +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; + +/** + *

+ * Launches both Http and Http2 servers using Netty to display a set of images + * and simulate latency. It is a Netty version of the Go lang HTTP2 tiles + * demo. + *

+ *

+ * Please note that if you intent to use the JDK provider for SSL, you MUST use JDK 1.8. + * Previous JDK versions don't have any cipher suite that is suitable for use with HTTP/2. + * The associated ALPN library for your JDK version can be found here: + * http://eclipse.org/jetty/documentation/current/alpn-chapter.html#alpn-versions. + * Alternatively, you can use the OpenSsl provider. Please make sure that you run OpenSsl + * version 1.0.2 or greater. + *

+ */ +public final class Launcher { + + public static void main(String[] args) { + EventLoopGroup group = new NioEventLoopGroup(); + Http2Server http2 = new Http2Server(group); + HttpServer http = new HttpServer(group); + try { + http2.start(); + System.err.println("Open your web browser and navigate to " + "http://" + Html.IP + ":" + HttpServer.PORT); + http.start().sync(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + group.shutdownGracefully(); + } + } +} diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-0-0.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-0-0.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-0-1.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-0-1.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..c0dd8789e6d57e048c147113621b4c2c1870e54b GIT binary patch literal 647 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyFA#c-ih8$zvJJ|8D{STY}VY literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-0-10.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-0-10.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-0-11.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-0-11.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-0-12.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-0-12.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-0-13.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-0-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-0-14.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-0-14.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-0-15.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-0-15.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-0-16.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-0-16.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-0-17.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-0-17.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-0-18.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-0-18.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-0-19.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-0-19.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-0-2.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-0-2.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..db5cc901ea4a01bb41937024809adde88da0f5e2 GIT binary patch literal 743 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF8zxmj5@GVm?AR`ToV6y7byUe!O7 zl|L_=oRoKLq5{w4#>ntlcLJU&Fol2pC-~2FX7vi+vZJ0i^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nj>vvz)zc|S2<=$QSUJG0JBdi3kdgi9wL zU$&5c7`EWo#B-&e?%g{0Z`&hPyVkaPt!2Od&1#pc%>N$npP{wrY@&taE&dIrAuHKg z60T}xOgGDzq1693XQusKzxt@1A{#mwc#nkJe6+LmC@m{@(-uBRmte literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-0-4.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-0-4.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..ab69470b319cec07a73049a1ca39ed04618d1cc8 GIT binary patch literal 767 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!?*B{woP9mXTMndYgWgPO=sj3=JYT4&mi@* z>oUjMzjJ&lZ(idUyYZhv#GLuXs`|BF`!p|0uRb+DipHwgEM%lihN+ul11ea&m3+(Fn7{yjJc!v``SnO1xF3`t}bny Z{`Wf2qDik9S#~q0B%4NbWw`&p2>>2*6bAqR literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-0-5.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-0-5.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..32f6b7b9c9adef901535fb9bdba706b03d1ee0e9 GIT binary patch literal 825 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!?zn-|LVo$?s2HU&00S_x9h{2>Y1 zr%xF69#tM`i|=|>axe5dIoQMT72j0 zVcErhZ>IGB{d)e>GSlu2XZ$Ahe~X@#%$4}yN!T)X^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}~AmyTmR{?GM?KA@QH#bVOb1ANRmt*K-qB zMrKW@ycQmKZtf{_RAnWh6<+f8^o9_AKsPW?CM$y$xik|a50^?E_ z{PCG+=D6ngGj;zhM=a$-U)1xT+ADVI*Y&_{(X%ZtWkfGlJpZ3z#kE|MpmMvIm11FW zd%6-OES9XBEc7J!KSRkswyh;^vp)N$Wn1seo!KURy2v=@yVpET?t<#_l^ILU|Gx^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9q*yi_PdBNnJnwe`w`+^VMX>85^ z-k$va^2@k}HImMnEP@lhyNz+WUjIxFm!OZ)jPGq)`$KI8s(^2@h> UR(rayQnh=&Hqcdcru+Y!0Eu1q$p8QV literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-0-8.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-0-8.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-0-9.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-0-9.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-1-0.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-1-0.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-1-1.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-1-1.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..f339448f35439f1c508468a5ca3b3cbb082bd61f GIT binary patch literal 757 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhrtF~`nnJMRQB)@A5=f>~hg;DN1&w2h{ zWi{)$-n(aeYA?xXyjZ+o$u#$Q!79DeOg0|4#PflD<=UW)ymwx_TNiXq=l*}uJtRIiYDYeIx3J5xx?}Ly{R{LGVo};u+{uD Qe|CaI=mV}a&5r*!0j?wwcmMzZ literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-1-10.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-1-10.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..fe0252518daea02214d6d9ba45ac2c083387efc3 GIT binary patch literal 665 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF83HDJtEUVifvybo|8D{Sw@}^^ literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-1-11.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-1-11.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-1-12.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-1-12.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-1-13.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-1-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-1-14.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-1-14.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-1-15.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-1-15.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-1-16.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-1-16.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-1-17.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-1-17.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-1-18.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-1-18.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-1-19.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-1-19.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-1-2.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-1-2.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..d3865871a4d52d04f977d607d66001721a84141e GIT binary patch literal 725 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!Y2OeXVoX zjU&mMJ&KO2t?Lzgy4XFay?~wNLD!njomXr9wAZYhyfHA`GIvYvN<%lzj(!PC(Mt!7 g&U2kuzT)|f>sGFImP=da>z;bPPSdn-dGi0802Yn=ga7~l literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-1-3.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-1-3.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..f7b6b640acc2ff83f93ea99e099dc1ba5bac1f10 GIT binary patch literal 726 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!&l8WdI={di7{U(vNsGoXDH+OV&|XN8&`e4 zaXaQe!#99bVDU(^CET%aft>H2o&On9|1%uhl)h=l_8f0v{e4FKkHePC i^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!xtvamXIeQDdCO{x(9D>3jHj6;j6r}$F+Is zXYFs&X>z|bqwm#opRK!2R(#v}PxZky)qBl_Vo^+L@s5YSpdgNl8?TiBV$1&4ZCu|c}GA(-L=H{-nwdY-`#*P0s E0h?$Cx&QzG literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-1-5.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-1-5.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..82481c7b9a369eefea33a79a87693975bf024ea2 GIT binary patch literal 760 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!<)NY8+kaCSC|TlE`FwZ=*^sm``i3KuA1z0 zVW+!<{kdI}E#HJD#)x-pS)5pv)?0t^nPp5p=R58FiGiL{9tN-0*m9f=*k&RTHplGX z+r`4Xe~(p%6^E^z)8-wjzT#)LS&;Uf%!?lFr={h$FI;0LVPTuSqIj$1Ubbu{jR$*l Rd|V|;Z{5v2+A{I~O#oaR3WNXv literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-1-6.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-1-6.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..7274942c54c859467bd3e0c78444c2ecfcf46ae6 GIT binary patch literal 700 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!&CFB&)yAHb)j~P^K?z6I~Wcvp0MBV{?f2@ ziy0Qpo%7-TT*a8`E{2OA+5fcX?Y}2~A}lu}yIJb#cgrL17Qf(>zqI)U!%~*MDN_R2 H|K9`vb0+aT literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-1-7.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-1-7.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..7ae2c2f536635f43a5f95eb75c120b6570b5195f GIT binary patch literal 759 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!!zaSGUonKdsz><#n0#|l8|#v3z>K#wzkb#+&OM<1^i8eywHo=yC*;oD zd>zg$vth-j=XI0xedNFGpPQ`l)vfcpO?=zSYqMRg-|JO(-8oSblxtzD^(B~9B5!VQ R+LaF*6`F5NcJ}#y69CM<5kUX| literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-1-8.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-1-8.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..737aabb9c58b3db04a7ea956aba0a27c17990d13 GIT binary patch literal 716 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}njBqRkqq3Qa~F@4X#ZMFJhwRvtQrqOV-a-=hAx*D~pyWPHjBMerxaV!%}m09dFNhpU&W|G~vfP XNA3B?C0EaS^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyFA#c+J}S&|0~pddi(Cx*9%)$CK)p JGSvUS2>=r6*}(t+ literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-2-0.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-2-0.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..77c51a9409081c1066bc98f3e232f5559e94c2e3 GIT binary patch literal 715 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9&UwJ?K?5Ct8rrJlgwOW6_p1+wp z^Z0!m{cAh#d8&N!jR_A@Ik&D$OM4|x*rpSELp?=VHwy>v`26lv^C$OD{p+hz*EoI` XlVt8%rS)~;k=(Cq%iN+j|Gx^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!&e8bQ~avt_0lEZL>%+{WZO?)m)p`ZJ;^^f zY9=q!+^&g<#TR|;Pb#n0_%(}R#)K~arC~x7zdOV)Snl(5Vl~e^E!8DvC(VsZRW3F9 LihOkF|9=wzFi7q# literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-2-10.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-2-10.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..af1c4311990ec81412f9b63ff07fa6e6b88f41fe GIT binary patch literal 721 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!`J!k*Le#c*sAP2?Jn5zpW%SS@_(meO$+}s z@ZRX>kBgqzzxh?TVFI7szluMvH!S-ubVFlNm$SwEwwBrY0!*IFF*})Wx2(IhqrYwb Z$ET0&!DpI-kj|ah4%k%0sy4I`}Y6< literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-2-11.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-2-11.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-2-12.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-2-12.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-2-13.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-2-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-2-14.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-2-14.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-2-15.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-2-15.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-2-16.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-2-16.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-2-17.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-2-17.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-2-18.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-2-18.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-2-19.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-2-19.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-2-2.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-2-2.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..48655a423dc4169f2eaa469ae52824f0f7f739d6 GIT binary patch literal 685 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!`Hi8a##LYc+Yk5Y5$)ue}zpq(w^w6v}VTR r{|xiy|9ES1WbcyrV>9@edV*VZ6_k}`x!PR5^0V+gv&x(R_Ww5lH5BU` literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-2-3.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-2-3.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..2820d4d42224ddc16f7a757c30d3ef405224e46b GIT binary patch literal 740 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!`IhoDRUz|S<<$ySs(T!H-DOgrQCk6r810` zHd|FX1S&f}?fS&Ax@y7}vy2tF>EZ@D&Fh_Pd3^&Sr%5C*IaoXi5jSdB${u|E)}kcO wldnAszc+pj$o7`JvvrC0w)BoKi4(tyu8)waJo+c@r~K0VE2oPVZ~T7~058P>+5i9m literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-2-4.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-2-4.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..f0497291a8ef114bbd1823b5e3fc8eff52c0d1c0 GIT binary patch literal 654 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF96CLA|linw^-30pwsmjFgr5in-| Ge-i*a6xN^s literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-2-5.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-2-5.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..8f10b7d0dec9ac9c7f81151f489213f2e154c412 GIT binary patch literal 824 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!#7>$!xK->)aB^?&#aB8&B1(nj7HkECzZZ>j%v|J*j;yq;Ut z#xJBa7VYdk_5J#Um*0f%#h59za&P>`v@iF{@?7u09eWD|pHG~#;)PKa|I(`UM|=IM iYpqWE^*qvEmOkaXqG98gljk33pUjTX)}E~V|0V$DfiuAX literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-2-6.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-2-6.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..979d881d9498172efd51219619c5629910b5e64d GIT binary patch literal 682 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!_y~IfiQVmQp8_hbA_)GzXA@+d*zl&aBsix mY*JV3@%<(YkCxOd|FA4{Tfkwq)jJL@nQ=?fRU}yO|4jfWAL#7> literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-2-7.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-2-7.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..2782965b9f2f2420a72d517ac0945b1c2ffbec92 GIT binary patch literal 673 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!;_beNA*wDuH;bK)x*&Dcqzk#3X26Yr7s;N eOc=1pn%e-i+qz~TP@ literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-2-8.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-2-8.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..c590bd3881e26d2f6c7eacb51bd3d301fe014779 GIT binary patch literal 794 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}EvJ7xOJ%vEJiH;UoP`@%5>G{~2CD*S@K`Hg(Ba>E1P=Q{DyfD_r~J=K0lb+M^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9^-kp=a(NfG5V)pRse+ISXK%p+{ z8ENw}lqW_-cnE2{+9@gdM=R=i?u^49xdU43-X5FFa`xY+J>7ryPh}_x33O$s|9=wz Dgt70F literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-3-0.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-3-0.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..080942070cf4e296f33961f8188712fbd73848f9 GIT binary patch literal 734 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nijuchD2*~omReg1;~3`$#8&%L_rv;IxT zhYazrLq*Gc=CwM8ML+2j-ubgPytmwH{mPX~axZOsdm*ev*6=~fb$OMx$a&6xe0)p8 qbHYxQ$-3mYKaFXcHA7VC?smTD->ZBTOq~BM3jQL$R$-OG|C<12O9ILO literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-3-1.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-3-1.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..05b6af1975d8b5a7f625dccfa7ff8602e2ef9fb5 GIT binary patch literal 686 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!`CN27bM>G%ZSS15p$f^-t4EGENZ(tSn<&u r&89iL3R;@0^~x8Wyua|*RfnuI@@7wLIhGw{FnM#u;d0{w{{J@tFplS- literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-3-10.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-3-10.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..940676fb5721ff391b383c60ea8e9dae1b9c58ec GIT binary patch literal 722 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!x#Nlo|Fq;J3CdpSD$;>Ul3}!?%NLg7D15@ zGDU_eXN$Eb`4ykDUs^up>5gd!T}6TlWYt(=kJF15-3ewF3Fj`dBisAJvw d;n{Si+8b|`9DgW?F7|z=x*^b2q^^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-3-12.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-3-12.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-3-13.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-3-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-3-14.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-3-14.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-3-15.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-3-15.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-3-16.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-3-16.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-3-17.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-3-17.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-3-18.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-3-18.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-3-19.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-3-19.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-3-2.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-3-2.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..00275a7d9fa7635d622625111edfc09fe4a1ba42 GIT binary patch literal 685 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!?#3N6Di{;NiOkf2F*^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!`Ej^CqHYIzWmhWn#sz~+RIm*SnJas!E^uU zSNjv!{w8I5?)qH*J!IDH71N#`PoAwdF+RENi%H96iK`QGGdKLq*8Z0E_~k#}_!VoX SsBZDH)>xTszH`xy|2F|;^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-3-5.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-3-5.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..1bfbaa365dcaf5f641e407e8efaea2c1832e6498 GIT binary patch literal 772 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nh)o0bUd*|fvsqPMYJ1E1&e>$7V7KDtj8 z|Hixc&pYN=gEv+!f2!u^R9*IZBYF78=JAk6*9M}0VKVZha8<~qc f!t8DSGi*6BRel2d=k;bQn=a&NEb3b1|NkZcvLhMl literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-3-6.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-3-6.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..ad4ebc9f305fadb961c611eaef623621c30da434 GIT binary patch literal 669 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}FJu)IPrVU$os=b7FI|Ys4hm!^&%&x6Arz at@CzWrLkzqf)%Mflc&l@&FW(Ke-i*k`QRu3 literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-3-7.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-3-7.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..64be4767590351b6230579eb134ac5e17de8339d GIT binary patch literal 666 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!;_azlf5Tc@%+u?R9{;v!TqVf%J=woc`q*w WhDA$eI^^_ym1PhKbY-aje-i*^;oH^# literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-3-8.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-3-8.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..8e0031cbc6b21561427a35a3dd298bb123bd7235 GIT binary patch literal 751 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!_(%P<+dvqJZOID^j+@C)GG-Yx3{0~JEMJf z59iAIj2~gQi_^So4*X~MAUFTVOVI}bW}^NJ*9ZNGUcvEh{hQc^aMzhd6)ZCHe>v(x zr(A2BST)aMe??IFQdw8__fl8ROk+MNx;e4hbeU@7Da+U;{r;b{h2+0ZU7A;4{^QD~ JX~+NH1OOMA4Hf_Z literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-3-9.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-3-9.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..09986f438f4f51c9b5387b76b509872b9537f3e8 GIT binary patch literal 806 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nj$^zXmfFJw~wpJD!K?(Vw%cT(y<{&~H8 zo%d1SCqGsnGH13FpLF!?=VPuWYNcBOLrP=)Y_+bYPnM26RQ^SM`=tq|%`UG!yT*9^ z-KnC-FZ5hjeZ2kC`#%~t&Xvvx|9s-#)~ydcrQ*3Vd+xgKTK~X8{?vwj3iZdIxBO># zW1j!#)wD;|vTG~1AIo)pv&TG9#CKby-go9VD{lU0xX@bVTe1DP<(>O4uKi~?Fwx^b RL#LMgw<%2>`BYGCu$S literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-4-0.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-4-0.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..a77305cb6e1a6356ac4b2a9b84aaf45a2ef3bfb4 GIT binary patch literal 728 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!*|=jZ<&+le=GbsCtPdUuGpN%-jnAob$=am zz;un7(X^*WEVd@UIuPu*g#E8*{eAmWvv>`qf4%t6&>217E&h4T2GgtA&Hq$|<$d@6 k5?JRU6>y{Y&JO=yO7(j(8&^7>onSYq-m6Dyq5S`w03^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!&if>kfI)mQc(tz2ieI&R~nck>s}XW?p)H@ zys~57o|WI1r8GBR36czvs>o`PsxWm@^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}lw$y`ln%Aqo7Bev7&oG?4KBn*eGf)ZhRB literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-4-11.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-4-11.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-4-12.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-4-12.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-4-13.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-4-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-4-14.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-4-14.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-4-15.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-4-15.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-4-16.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-4-16.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-4-17.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-4-17.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-4-18.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-4-18.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-4-19.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-4-19.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-4-2.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-4-2.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..34af62c63f00b654ec9abf4ab995550ff6dc6abd GIT binary patch literal 706 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!`Gvy4VYIhKlNbS#fudpCuV14+V8UXb)|ZB zu;P=;p39~!o3_C9daI9XaNmE1-hi{2!i^!!$DYfD@ox@jJMr0b))w7~#~c%XT=t#u OR`JiuJ396MZvp_mUH0h! literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-4-3.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-4-3.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..4b23e0c4278ce5f36f0a3235ee08be53eea7a45c GIT binary patch literal 692 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!`GsW&YGK-?B5%RN}4A7KM!cB{?Fib^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF8z))_xC+grFOvn=W2H-D4o^S?RG z`L{H4X@Rws#-a(VmEuQNul@D3cU_Uv_WNISj?}+dw6|=J`=jD%ALlIi&%k5Y_%r?2 LRp&z6{{J@t#qIX* literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-4-5.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-4-5.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..78b32c1b4a145297641f2d45b76f0220db1832d9 GIT binary patch literal 664 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#L;ulVE3efAR+mT{vVU6i<;EVK+Nyu1?XIFb S8C^vJ6c%-9FaR<0|C<2l9^8Nc literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-4-6.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-4-6.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..59ede3518e39d657f2aa19edb5ebabed00bb1f77 GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}Ax5y6&9OSk%P;!~bsr03(3Y;s5{u literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-4-7.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-4-7.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..507e5cc0af53f093e4845e8cd47f94048fb1cb1e GIT binary patch literal 667 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!*i9`)93RNO`6ctq{XcT6iJc)e-i+0fZZ$r literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-4-8.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-4-8.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..3a80f879d7b812ef975244674dcc9cdee89b79a6 GIT binary patch literal 695 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!;|AtVZV<}n!4}fy2Xqa=Xhv)-T1S{_O+qi zufN$|w}0&Cnih29^wRu28M3at-+KcU=GWG3U7GtRzBS$b-$oGg;;M*i$N%310F;XJ AiU0rr literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-4-9.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-4-9.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..566eb6e4eb7c1cf9b4d030202c1c5366382bc865 GIT binary patch literal 927 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!`Jl;r=R^WJ0Z6sw*KSizuM-uDtF?=& zWban2@7r?nPx42jTD=<^&CIkX?D@`9|0Uti>RX-+LLLmIYI_bpthCzSS>yjmO)~QN zr-$}$CPm9PaJrOSQC-*epW(2Bduz1v+S89eMJ;;!?LR~BMU5w!zY^7NZ2Zr_$(r@Y z+IJs+!}Ir^ivJmoZ~Ut*f3W3Vjr+&mC-Yw`O;m{g?wI&zvB<9tZ}NY94*PfPL)h{X z>6~7{Hv8D~pPKAuo_`o(C-$=b<~-(2Iy)x4*?Rgv!+{;~e@b+V=S%6OPO|0q#oZGl3X9KZF}FPYtk9vIROiL#VSh~e|<^P)iG30B& literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-5-0.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-5-0.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..4144053667d335925261455e2820f7be15c55f0a GIT binary patch literal 754 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!*|e{?x#d?ZoXZOF`U~(X1oAsoWuRi^U7PGBs-nULXy#39uwTH@dchvHm z-VN7%v}0PW+;PzusjX#2A5Y%B MVEF6WvGo5p0p{}%5C8xG literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-5-1.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-5-1.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..6f83a51d841ec9454105b52a9dea9f000a50e67a GIT binary patch literal 712 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!dg01 literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-5-10.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-5-10.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..4b875ead297bce40b5f52df4eb2b699e723537c6 GIT binary patch literal 863 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}njBn>;4EeeyUM$e5}kLG zr{^-i$W|{Vkxo&rt-zho%X}!~uN7o+A zs+O!%P1+}U<%Gq52DkdBaq$l-7VZ2PyQbJ}lG^p$HAY4vkGsCS7yi$1V*Seh4A(dR zXVCi0-~RlcHh27YmH!MEd^7o5C+c?!S3Gu$RgV6w=rC=&b4{Wf)BH#B*FUa%eNgJe z)h#UUId`HSX&PVYe`r7b6|Z`KPSWlVYmclmRNW|a>|VQt@<+Bk`yD^>-fw@GI_rvd X<;smycgYp;U;mT&r;xwR{r^n>4FX0} literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-5-11.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-5-11.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..3587575181479a06dc80f31852ed043e275bc943 GIT binary patch literal 651 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF8`^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhrYvjeU%cc0HieBC1^6qoTi77$`q5Vm= znoG+Q&6BITp8k=4%nrNp1Vju>R{K*!0)NC5|6To`A*cRZ)fcPJ^IP5RZ{7cP S{69nbdbj2F9f}+O-vj^}UK3mZ literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-5-13.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-5-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-5-14.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-5-14.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-5-15.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-5-15.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..23a5bf55c244a81de5b769dae8cca535390e725d GIT binary patch literal 683 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9KSgUQj&V&r9o{N^A%3G&So$_EM imxt1xe*ceZTU8IUU)7tDdyZ%Ml~6Zx)l^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyFA#c)ixgeY;oP__6E}cdXMRiKziC So*c|tT8rh<6U~$V-vj_66y9|J literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-5-17.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-5-17.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..c3d2507a920efe715e1b4c8d73fa784f2479b4c8 GIT binary patch literal 672 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF8iY5(FNDul7OH&WUKVi4 a%tJch@mJGp!CB`H`MuCs)a7jd|0V$6&f;qT literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-5-18.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-5-18.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-5-19.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-5-19.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-5-2.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-5-2.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..d70a4fc572f9dae0d97b9a960a8a87543df58505 GIT binary patch literal 705 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!`IGr-VR&^5)*1y&3jd%ex}c3_v50!u8zC5 zdmMW*du7daS;_rY-KA=o9WGNAx5+v#zr(O8FMh}4f>k$H3(hyX=4$`x{Ig&O!Mr7R Mea@<7HvYc}08JG16aWAK literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-5-3.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-5-3.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5c88ed69fce5c3d4475ca0bbbc35ff6473ddc982 GIT binary patch literal 744 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!z>md#3AFspS%VWZNA*Dtc$)YfGNofJJi^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF8--0!siWF7mTVW<4R2JJhmkJf2A zC4a0avY2*LqAsQ0Yek+~b*N~#|IX~)rZcCosWkT|cWn(aSg-$McS?EY^ivjx4?X{+ l{hwiT_=-^8Xpb$|)`s2sXnt&+3iBN%`<2V)&Y1cCCIE?o|9=1g literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-5-5.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-5-5.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..cd02251aca7870014e7db0886e69eae9789d2906 GIT binary patch literal 656 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}Ax5y6&9OSk%R!u~NPJ)?&y%N~vwCo) MgdxyXgz^7P03g-cwg3PC literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-5-6.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-5-6.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..59ede3518e39d657f2aa19edb5ebabed00bb1f77 GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}Ax5y6&9OSk%P;!~bsr03(3Y;s5{u literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-5-7.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-5-7.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..4480b598199ed9cc1f4d7a3a1b9e5b5b6b5a48e6 GIT binary patch literal 664 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}Ax5y6&7=ahS(_uc}>OC$G_(rl%r-0g-Wu UpZ|%<`kKctbq?vQp8x+Q0P3{eq5uE@ literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-5-8.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-5-8.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..1c2f1506017ca76393ffc6117a8feeaac1365eec GIT binary patch literal 729 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!&CA1T+UZ6t-rTq-D1X%JSVih?$osWzE;Eh zO#RlDg%TYho2DJ}c;Tz6|Dn!gs>?Km`01~*_kIv-7u&cpM&XO{-9kM&N m2kvBl9C!S~uA9QnyLZaJR^4&qzH4CrUyf@^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!`Jm}Z#H}|opWjKij60Y=jWcee`>=%VVCbx zVXN1iv9Dfn-+J;ZcKfrl*8Dj2=129z%Zr1cAJ{lY%(f2jZCChLZuZ?-f}duKFf{+|w~f18(%$X9 z=el0eb*Yvm+S`M={QMss-LDuo-7ETr@}1B2a`HbsY6=%rB-&+M{dcj*cGraZ2U_>P zUsx3{S}M79Zobcl-sZfCPr_&L&A#2j{(>|4tEhS7QmgrWe*)LV^j^OG%;LHYt4ibf z4L$rvuJX68{LjEC-m|q{;J(@G6%8qIr&8`%{L*?WcWib3gzZ1)ZCsZ5;bm0n+SVOM W%s#Hke#h|o>*|oe$Z7TeZvp@oxoKhm literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-6-0.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-6-0.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..f4f72d05f1b993a9e37d5e3b6dabf72580276af0 GIT binary patch literal 766 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nh&KFY4YWwLFeTb%Iz5AXlkw`N~5TD>q# zGE74GO0eI#M_DgE2V5;PH4i(r`uk&xKfK{rbfXUai!M7Sx-a;Zb=_1MbADzq=O#Dp z<+VNhUW>Z4r@XMdFPizUbkn_Kb`?8n%H!h?|GF-}Yp?6Y6gPK<)jR^#U7vmZZsu&& Y?k-VTWG8Mnb+2Z;vsBlu`TuVM0AX|y0ssI2 literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-6-1.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-6-1.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..d185b5158e3428c2e0fbf3252f0c0022ea951915 GIT binary patch literal 726 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!`shcN%?x0BCR)a*spahVS75$?n$$~^PQkG zw{;)%UlF(OEt&JUJm}pDAYR6L*EV_Dnbi&V4Ig}4u~i~cHbuUe(S2*!<>wjeocKb| fajf;;AayCAe)lYYH`7&y+kx6Pd(T?r|NkZck8Az6 literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-6-10.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-6-10.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5b2b2f236c3687144625d7007cc60cbff096e98d GIT binary patch literal 817 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!?%8sj}K#m|LvXsGkn?~o17n~uKzu0|3x@% z@uPh<>Z|@UTwnd4LF?1}cHQ|>QT033|21TL{L$&G@%Xm7LwVQsY4=k2MOFn~`OcDX z{rs;J4ixlh`xCO7lnlli|G*GGIT|I;P4|8LdFKdVptlal|j cPS^g<^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!`FC*?D|{x>cCI!`de_vYu|ng+difXgZ_HDja%^^P z-u_xKE2g?n|Jc7M?X^EJ>;1R)Z41+L?%b|>l=D@EPx_<8pW={x>X{qvRk%eje-v#V zsjPgbRr%$)dd3+2LwCKZ^Tl*0%{g2tt-Y>#g%1A<_s3Cx0+lo6Zo7(vxz7K8696e< BA-n(p literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-6-12.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-6-12.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..3e801f4385ffd984b94f1f54458c1b1eba5c302d GIT binary patch literal 761 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nj0>@?<7q}~3vU;ICVL)F{YZ9i5OKCI6F z^*8=6^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF8HNWG*>;42^(R)&{Wr|oq ziI4%Wa=qiPzu7{z>PP1($Y*>qa1^fq literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-6-14.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-6-14.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..38d585d873786665d82f684d0c9d8db844af9de4 GIT binary patch literal 795 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}niWlKQ#}Ev7vZu{?g}LGa^gmTt)tWvW&) zJMb^+(qKOP=tu6ON^#vxk+}0#{~4UJH2<(Znl1cnX|vhAUY1q<4;ar@uN7UsC8bFD zkj|gfNA>(MmBQz(bAMm^zRLge&-Mq|7x&nI6!*CLQ0bG)hMkVnJma6_m*&5`wo5nK z_43!x@BxTS4Y(55JH0|8D{S D8c!j8 literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-6-15.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-6-15.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..de98ca1580865ab9875bf2e6edc848a0d0d10c59 GIT binary patch literal 791 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyDk;T>mpDom>5%A+EUo1=}8T@BA;z z{xcN(XE2O={K)>N=-2#TpJxAOa4>x+6&OG1w#cM+<&k|8(h311I zTc65v+jv&1zRoD#IPHd8O2@`$I;G4vo-fb(T6K1{wbbevvO+e`4jD`s+RSe=)9~|E2lgwEOSmpJ{tl3)-Ile-i*$dL--s literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-6-16.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-6-16.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..0199780803f74cc587c5c4857d1f29e1a02f35aa GIT binary patch literal 751 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF8-=6B@wOUBmkl>gVHeJlG&owAut zX8FG-^}iU_YQA&%rk#GgZl3agh7(_4jIZy$1fG8)vt0he``^jGm0tf&e|xWd{-@f_ zb#HgO``&qMx!(52q#GZ%-v2%EKf?>Ay{Go5KZ^X%(Dms3-xL2CzA(DTJ}sEm@&6_O D7x5Lm literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-6-17.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-6-17.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..d2ae692c2fff7bafbec363936d3c44e716588a10 GIT binary patch literal 760 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!!1G_zHq$Ww>IX@H{-xvHr0pOkI8?S98tR`dw=R@_nFUs-Zt#} U`B*;co0P_yC-0)d?El{c0NhL%w*UYD literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-6-18.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-6-18.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..a86bd43cfa1ed7a3738a844096b51f729a65bf53 GIT binary patch literal 687 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9q*v8u7`q$1q$;m9cwthZzy=$#> rjAf8{iL$Nso$Tl9dF6ks+w%U`zxcmg`&!p(<+(6*X{^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9~*m#el&V-8mkZI}}PrNN7WBs@$ zv^4Q2$Ehx>=#QH8wE4AEGjGeobur)NzP`0n`_C{jIO0FUdddA?nB(nVvj5fHf5-kz N*oGUO@9O{G1ONb}^t}K8 literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-6-2.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-6-2.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..056be6059ffa804203b832ae94751230de8b9a2e GIT binary patch literal 710 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!@KVx6V5;NkX|)UqN;1{uHLJcljm%^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!@Kfe?_lmAv2}~*RA%j7R{K->0%PRTRd-ka zEPMBF9s7$++s3?*iBaYnk9jm(SDmoW+FVw@pX1?P_l2umt|}TnT~&MI^6t<2UsknT Rc|ZTni=VF*7x4eT2>>%d`CI@1 literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-6-4.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-6-4.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..a189bb6dec4bb1b292b03f58fd3d82faf5235ef7 GIT binary patch literal 789 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!xvlg$mxDN(w;snp6>t3_Vu={yW768&SK|l z|IB{j`pjvo#iDwT&9$GM_rw0k^2N2TC0^n;ju~%!84~6;{gJe+8d@ZvoF x_}cpa42Kkd_nW`H`>|jBKf|UqweG(E&L`O1H=a{_r#@=-u_(Svearvf1OTZuAua#_ literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-6-5.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-6-5.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..9ae844182cb486a3731e9d95563d951285c21d0a GIT binary patch literal 824 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!_JTVE>`ZHOQ#BpU7tD2$cp)o^XKO;T#HJ- zhQ+Qg`TKPDymQv_$(O&rjbpYEx*g-m@^MSiv7@mP2`gn?v&BoCT}lF7 z1Nv((|A|j8ZrL52ul{}4%0Ja%?!9}&qw+KP=5DpeuNGV1@|1ON|%FJu4! literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-6-6.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-6-6.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..59ede3518e39d657f2aa19edb5ebabed00bb1f77 GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}Ax5y6&9OSk%P;!~bsr03(3Y;s5{u literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-6-7.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-6-7.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..f729c91ff1bc6a326b7cd6692e01fa9cd4b1e6e7 GIT binary patch literal 670 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}Ax5y6&85^Gi{_5@M>d{QG{dygM7etWuq} bVo}$mt~bmcewkOUKG|w|@|;$u{r{T)dZ^@^ literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-6-8.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-6-8.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..eba94d955a5071f476cc90c6908ad2f71e298279 GIT binary patch literal 889 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!&80+u8`O>tjaPQS0==9*M(k6zOp-S&$KU( z_Oc&|dV0R`kNTpQ)A*FHq_I_QvJ5DmP%qs7gSYq}-=*-N>$!`k@NYi+`*)iylfKPw z;l>|V7nr=4s+b*eZR_d%n_db|%+Gn__2g@S{R6EtbzAw1`uL^iGw)n|?c>w-MOPz4 z61LY(y;PCy*Bx~2P0mskca!EitBF_oFN^wiN=-L1YkV+~#o<3g=IbR|D}JBOv-r<& zyz}@DyQ^o<=2owkFtL?m-_>_i@{a3?NltFxzf0a)@Qd-a-$%cVb_*Y6pPt5Ov(3P% z;iHf~1OJu3e%V+5iM`l%tG+e)itw`?`&6G4SuuEU+3ryPxH9k5gRN!u|8D{Sgy>Q6 literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-6-9.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-6-9.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..7e4d54779f88b4f2a11532ad200816c49134c918 GIT binary patch literal 750 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!@lqChvc~@iCUN1R?Or)ugPaP|47MyhMHgD z3u`Pt-2Cvq^^vgqwr}r+{U@G!{%-vP`=IRB4}UlRarn{nYstslOKZ%27EV0i`kx_e ze&^4QU)Q&Up8TSuy&}+6lyyd&;D^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9||8ZPkw^*fIY`4pQhSE<35@q&L XFEp0T_Iu$Qqp_&VnG2}M{{Kw?Ue@0< literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-7-1.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-7-1.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..1d7f6bf9e2170c7e4576731fc80a10263d553dfa GIT binary patch literal 808 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>iahO)2xBb<0`g7F^wtKg-p??|Cv$-aG9j zAKlvW0`A{hmlpW@2=jaXz<1hRcVh#yyq+8T>1;O1XK9uHVB4`QZ>8c6Pi27^`RPC8 zcg_E>dfPntEBf9N6J3&*^c1Z9@^yK2p4h(Qi>^yQ^5>gz`hKMP$!if)YVQ}mjh!lb zR?=ek;!0POO3~7P@*i~sZgG1*6a48cc!Hg!N~V0(J?)Ec-^|o|`_EB3H{-wqnNqp= QUeB@@doJeQVf_Cl0HzNkb^rhX literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-7-10.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-7-10.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..3fce6f62c34cc74d0b45a3dfa39fb284812168c4 GIT binary patch literal 762 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!?$?x{|qPQuKv$(eaZY&dzv3kPCp)2|IYJ2 z!vd+V?xryrkI|Mgt_UxsTFe?$u1mHX`~5|%on&gehGME%JB4C_7Z zr&e4)ba}qqO`vg>^ATGdQl7_z_nBX#b}F4C{*iGrVBi(tqg0 Qv=_gGx-{0Dw*P+<01A2-%>V!Z literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-7-11.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-7-11.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..7588c7989f9956483c046c9d5d1fcbc68cf4a45c GIT binary patch literal 871 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}sdf7NydhZ{CTQ7%%KSzESk^l11MS?Nd)Z zcYC$uC;qg9C+wZPPpOH&Q1~skO!Q0BW9E-x|B^qgZoYQJx760y=ZeDBlGEA0 z)6N(lldav`zr&_ZG;h!5hx{EiC)Sy0-k);j+E3g5dx1Y5{8QWOx6JF@QS}m0?}*Ea z*GjtAT0Q<7dnA?fSlPVeulV>MhG#4>er9dG`aI{4rK;N9v$>nr&3w3_;P4AK_s8*G zH)9XiC$m1?o!3@z&Bbm(PuIu(o>@6&^Axu1@5rq_;XjMv)yc-)pA_muuhht1Rp0aB g?%65Fi*BCnm@%*Gu*Dy~daFxOt0&6J_W!>L050-RvH$=8 literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-7-12.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-7-12.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..32aa90007c76af415f2d24563a86133529170429 GIT binary patch literal 771 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhg?DS&e)^mEVsE_j5+o zU;kA9VyD*P9ZNUP{E+hecmBT{^>4ktdVT6|I&Ob^{GHq*mqA9vwa1lyoZZiUtN!{gpb;8jW_lGZvp@d{UC(^ literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-7-13.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-7-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..83a7f72177d33fbc7bdb1da0f6b36dfa5f488ab0 GIT binary patch literal 870 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!x#C^f9kpFUcP$Qe7A?MDxXm4u}l8^@(0;d ze&jwBxwh_h=>8tlskYxJL>+2m3wsm gGuW)#|NiIVf1>8C`=3v}{`WtFsocZ3kN^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF8NeUxw6a$k6feQvm?qP@;W0crWW zc6VQwb?GPA9R4TnH}^k-!|e6He{88g^z!ol7s93g8S2Hh?td6u5&f?+w*LNS_di^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!@}zP6&1!u*-UGvn@wWtbFe6VQ`b@|9~k#{ z;j0U;cj>NM%+76;vaarRiS`ef>&ze9J;N`*+1e6+&*h&>OL_35oxcR?->*tPxYy@o z_KKH%M>=k%_sBaRu2=o@+A~{v!j>}Y^TPibPAp&ZpW%AXe}-Q=*Uwiu*Du}wyZvX^ zFaD$QpER@MzdpAA*PZqAzI*$o$?Upx*>^|hvs+^jSq5#4_7tEz5IAa zE#pkeNwtSfj{lmbo8+cgTi>0&C-^^uQrp)53~@krz1X&X&X=_R3_kV0p4HD-zvxdW eP_ho_2$-Zv^1m7X8NQzR&tT{$%~d`B|4jg^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF8-JeEa;b=k)(FgkLcIeE+EPe+JRN@BbEe Q|7UOzE%~lgE&u-}0BR`s5&!@I literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-7-17.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-7-17.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..09cb715a7d78f1b990237c99c876532594a869c9 GIT binary patch literal 710 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!x#P*bvxl*{~6Xl|Icu-@Oph*?T3ozhr;W> z{`t@FOV8?y)XF@KHzI+q9_MX-m=!j&r6$d~_Th=2c|VbSCD RuB)a!>O1Hv64LYkCIDbd_$~kd literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-7-18.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-7-18.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..821e5ac08fc3d3258ed0226eb79c45120c015538 GIT binary patch literal 712 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!|I32{xfvF_xsPV{^@^)3#(tu`g!^=?|%l- zceDR9#Gn4purU1M)}_8D8UkHKXQrRMCvN{S{^kC!|Mve9tyPXUt%&%~aP;71``3T# Vzi9mm+p=<}0GGz1%{u>Y0stwQ{D}Yn literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-7-19.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-7-19.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..1423ca0edf5813baac725135d814ee4f2ceca90e GIT binary patch literal 753 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyDmf`2S~6nz#8sL!9w{h8LUTZC~>K zoA#gKo%}QH7xp6cCzh_Qzuxno;g{~}=e4r?FWvvQbN(~!h@5oW^UGH(>N;`Z^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>jFqyLP?yXFITp_wM1{OFuH1On?bW;chh_!;y|Kjqdy4&aQ?Gp11INFcPg3~Lkjq@J z6R^s~c23{i2&=Xru89-etD+w5QC}USdn@x@`Jo3>Pd+s;KE8cx+18%Lr`}{s7HhYP K1O^5EzX<@@_783V literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-7-3.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-7-3.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..1f97c0b60e9103a1bb1815b5747c0814e56f8c12 GIT binary patch literal 752 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!)wJI87X)6JMlYdc|Hp3Ki~W}{-b`0{ln<| z2fH^MPragA>!EP^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!?)S?e3{c4$5iPI`4}7|1(72nv+~;mQ~Sy)M|RCp84I=+gL68?(zxRANf7& M$fB+*lmFiY07pe9P5=M^ literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-7-5.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-7-5.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..23c9d1a23b69bfb4c10bb4dc22f4a9e80db057dd GIT binary patch literal 800 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}si7t5dJ-YS#n_-&t_}dBpa4d>dy7=e*Cm z+kP+p#OGhv1xr5`{hjf*-)CEAb>+Ep^}bsJYQnD{7XFrN(|r3>4ga6IEitE)qPp+A z;+wm+qAb})vZDQ7#=lhMzY8O+mNhP^SQfwapiPwTPs_RSe`Dsq<(pyu{NBRmM{hq( z{MM^?&+-20iIaam+mif|zoo`;X8I&wttUkf8@T>6I2rN3$XZ|D(H)(9N@G!1GMC1p I2K)av0aG0-xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-7-6.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-7-6.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..8abf43c659ed9f6c69135cb2ae1c914b63140017 GIT binary patch literal 825 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!`Z7_y3dOJee*u)rqU;gqIK3r^B%3ZzBX%D zOmXJRy56K?4B$4_pRO(_PEf-Q@iH%EZ2Z}^u97_ar|~LS+)S=WtytCv5Dgqui0+- j4l_f?6_NMVf1TdZIs5PO;O*s)4CmLcExdB9{{Kw?<%~8i literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-7-7.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-7-7.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..a40c73cba3615b901c3bf51a73db11d2e6fa405a GIT binary patch literal 755 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}FJ%2h^r5p7F?jZC;v_f8wPUr=LfaR;C?T zJ<-MEP~TMFNfV~>>`dpf4!P2`K)$Hzl4duL{UNLGrq?R64~gGXh>W_k#=!mHG>3w- zFAT3-wdZ{)`0Cc(b@M)%WNOQvS**?={8zjBc-5M1;v0X|`>|a*buy$;SRl6JoadkV NnJe$!u!{MA695w-4Eg{7 literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-7-8.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-7-8.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..4d0cddea82a1cca96781a938c2d010d3114a8e7d GIT binary patch literal 872 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!=Waf3HB|e>vr9W|Ka+_?APv^T~mK;F;m`? z`KRbVgX2HZ@WW9$;hRntSKSMnp0+Rd%JLomUVJy5yXxM(AG?oa=`K)Rsw5p<`cjI2 z*S;GvlfSP0ZY2GXpXcy3*SDtX6MW95nNN~vQSWb zQR4y8i4XJnqJN~j_MOtPIs5s%hJ5XRh65#{+atZgQ;$Y`xG(l<+r@+8?Iy*uxzql> zX3{F~_VZ>?YIKN`-hdnx}a;6DTZmG6I6&;613@VEEtnOn2x i-?Lra+GS+H+w<^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-8-0.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-8-0.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-8-1.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-8-1.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..b56cbc04d94c6e8ab460d77b7350615829d1d485 GIT binary patch literal 680 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyD-6Z0~x-)>d)&*kM-R!l?DFdb!K) lCaty6sfd3RzkdC--K(?~o6B}i3FgvRv}D1eE)C}YHvumj=4t={ literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-8-10.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-8-10.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..173493c56f0b64c185ef5d21b9f55626ed349f8c GIT binary patch literal 767 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!#91Y`V*7a)?c49{}*q?_Cu5BcZkJ*Js1C% z;rf<}>;GJOv;XaR@}J>C_E9?#nLm!3{xhsA`p@u!ZA<^56Vs3MFUnZdb!IdBvHPEt xU)O(quKuq%PW8i#{|rYD!By_veC$61vh)<7^x=)j22FeM%cx6Z&1w7pHvuje9@PK< literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-8-11.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-8-11.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..23ad24431fdac362a9f9a19f86b95e902aa2ab19 GIT binary patch literal 756 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyAE6cgD&6yZ2$vd7)?TPMZr>O<+H> zzvKBU){6ZtHSy&SwQqO6z2G(Z_{PV{4IY;4uPpzZtu>A}`SG9O@bklUIy<-bn%z48 z`*%$V$MNM4itHJq9PhiiT-|CnZBduD(V?C8GC#ERC2rnYFg0Pv_6bv`^gmRd`sdL6 PL%U9CE>FmM{{JQbQ1le7 literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-8-12.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-8-12.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..4cd3b2c6695c8ded9a5b2c092ae0533560f60946 GIT binary patch literal 890 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nafU%dW)+xKnDy%6K3;{3*~-s-_V6PXID z%l{5>{%2V9WR*Nyjr+H5>0YKvW7Yld*B-PDm_MVA<@rC>@O`E-6=vt5>Q;MQ+NgU^ z&HupX`ETFbLKId;dQ}R`~i$^N$GL_?hf>W!)d;M?3Q7nMJ-? zu4&@Fl3DBZ&y?`BHOV`>-XEwcJ;Ns_xjv~R@xsb3C*Gp_QYO~9_OV;8DyYT>gnbT{ z$@5)Y{)pqx=6ieo)uspTx}0!%`QCZn*2TLtB2R|c9sX!PH#7U@#H|-!-Dm2n-~OKg qV)=&f8GnQ}_Q~_yyU*k^UEEr_uTdoVKZBF$%d2y~>sibHzX<@HCsVHg literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-8-13.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-8-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..bdf6dbe49ff8cf41f4882fb551f51fdc9f61a825 GIT binary patch literal 885 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!*l&>{`@}<6|l)2`?2ZUx$7tXIqjR@ma?PC z@=@-^6AQ2OJ?QEB@V+OCIpX!lY(xEb`crgT_$IA5{%V2zf$NDMrXS^8^@7=Bp5wRE zjIHde5C2jB@bYKXwMkcFI$pe~QWXh|oR(J6?6l>hTzBEJIR3k*?82F6+$c$W$NwYz zocXj}_Zw;g7EEjUba%U}R{ylnmlIztDR93c^{Z`@jqAg?#z&=tbR0Cpd$ZBxK&b& v&il;Ty}ZWxW88F(w)+t?7c(=aaqHQ&HY%+=^qbRv=l`1k0RL6` literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-8-14.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-8-14.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..9bb3a4a735e7763e14df83a2038e3e210e6f84ba GIT binary patch literal 746 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF8V7nes1wvMTh^N z)uEZiAEzHRZc-LA`}tmk$nTy*a4(B@mXJCxszqDyV_qn3o8yn|M^_pK4^IQJ^O#nz( B3mO0b literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-8-15.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-8-15.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..c9485dcf4d071cff81d628b2b62bc0bbf607ee29 GIT binary patch literal 842 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyDk@&{tf7CkT7W0ygf`2DE7$w_Rn3sKf zdHdepZRSEpCNZ3nbWUvJIKRS{x8NVgkJ2SSsx(Z+)xHOm@ND+jA^4=8>vQw_lfS}C z1GP)E%wMIyzV^2A;ak6(;l;k0I*GNOPKNQ?k@rmJ9CHmgvhI%j=eO}O*U#1q)!64g jyf5y{x>#Q6q1}a*J(bm+KiyZHc(iKv3(a-Q|K9`vVm3Sk literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-8-16.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-8-16.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..220eeb64dbdbd7270a8f98650409c7ac310e9d42 GIT binary patch literal 795 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9oK7X|F_z~{=zn+W#YtVj?_4D?l zoyU(zL-<-R-?@CVYuvb}IdEgsr<;cl+9bIo-VvO&F<$fKJnidSs`EEz{#tu>kL3Aj z>pwNW;rIIfpP}v6)MslS%=SM0yM4!w@(CvWS00`a@iLQ|dT!gknjeSrE>ygIqTOh_ zC69ld(f;4Mwd^tNeKow{++ BFP8uS literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-8-17.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-8-17.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..2242f0d2ac85a52e64ca98475803a65ece6cdcdc GIT binary patch literal 753 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!@D}}IX|r4|2xG0pJCDC^=|7eerOdxxPAUN zhyB0qzP)m*qPwhFMFNA2Pup?460mDu@p5;=j=tyTZ_o4EwCYKn_OGt5RzKw~{rc>F z#pXBn%G~EYQ-xfP`u}HGeQU4&!~Sm5x5>u>Z)Hg>`7ZX1Q{vc@WQD>gFI$hEU2?Zw LMZ!|&|Gx^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>NngZr1p0?mc!a4Pyr1zj|;`Pt#)F008zkK-9e}s!oJ~*qce{=NZlPxi4H+d)QS9@fZfzLk5&C=XlFZX9xzeyoDY9{|G%HMc8f)?yMEk# ZglopM!@gzzKDf*OHszbmYEu9ICIE*eN__wT literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-8-19.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-8-19.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..e355af14e90354ae6edebf7cb93985adc7d7d026 GIT binary patch literal 864 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriy92~#3~(sa5s0xgW9&lA5#?SmhH>G z=>IGEKf`t7KS!(MkDkpmxzE0J(mwV5g;I^z6BK9swP60o8mGKy{+Hwb8P=u$?7Ai` zdAj)3sq@!L_u4yLUb62>o|r~J;os->cLVQS@3>c!@loeR7>ADTj^8hZjro7S?D(tQ zakX@(1dv>s0rA?AxpQ*zJ)?kV0eSr^f-F ze+no0e-U+dv46S#KSRv<&!Vq?xi@Wj&tGGHb*re_qkr!`XWmMW$qDP2yULnB`2Lsm Uau@l3WkY-smHEaw_Wb{w08~Rwy8r+H literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-8-2.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-8-2.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..fc1623448ef745583f89116e3da11e62bde4fdad GIT binary patch literal 817 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^`?gmitF#I_g?I)}43y=oG`cZGXb#lE^Cd zU%#ZTTs5(_4K3DsGlNexZh!xZb?U(v^h*v!UOv;lWrdNwyw{68X=~2tYFID6l(CN4 z{iE%%d1BHH>Dy)a>Qa8mzl_~F_3yTY{Ihelc72z<{>nNmsJU}Z+LFjcU0Pg*rt;i3 z;)Oo0+&<+$gGh4o*Z2=d3*!{F&OWqK=DTpeUf7LZ;iBp^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nj>){)oVm`Dqk*P9)AvC1;tuAzLr!bkBV zy3tYTZ8vWnJM(dq+Rq#HTkh5~Hhx{U=*Dc@@bHgior}c0Pe1wG{%2$V^O|1*R&^HZ zn8SapuQq8cnH{pdLw>)-y|+I~3od@>xAc+PB$FtrA@EOG{}@v*I~hUWGZ|MIy@W|K9`vNn;=f literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-8-4.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-8-4.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..0f9a1ee632cbbfb1208f106e0ed0966976565516 GIT binary patch literal 667 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!>KD^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}Ax5y6&9OSk%P;!AtsdA6swy5y1ZcCIJ0d B*VO<3 literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-8-6.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-8-6.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..568504b96ad12c879a599db5f5d2004f339fd89f GIT binary patch literal 826 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}C|w+9$vKexa{BKjp%X61&I0LPWxzr7!uh zG~wDFnNsi4L&|IKB(HRMp0e_X1>2rmyKJ>%`|cl#IyTi>=#tjf4d3;4AAhpoAKT6| zX_F)Z!(4auEt&P@J?9_$%X&GwU!`x#)ti>r1WqfqU{FzHt3h*xgk<(~W7mR`)| l-08A+?BTz*qk84joimrtbD!j9vw6;BU)Q}ZPbU7q2>{&^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!vTiL4My4C-k0)9rBA%gRWy#VeCVEERLx&? z>BIF_Q{Jio-N&CEvVWh>XBYZSZuyP6srO@FN!d4)eA{$6Fwayye(vna^TTc17xn+! zn{(eKEv#h2kJ81{*sSLkJv88y(fHS8Z&dG>e0ZMNu8(u?zP)?)w#%xUm0j=j6`#xQ zt~U&PDOLNt$Ht5G$|lb}Kc@?Q50RVOzF>X&^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!*^Y6@2wZNyjYX-_@+qm$K*TngR^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-9-0.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-9-0.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-9-1.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-9-1.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-9-10.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-9-10.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..a950ab67d9a5071139e60d2ffcf72e351c5c45c1 GIT binary patch literal 690 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!*^eQ|MsxUdL_S`9!bwQlfU7?gC3c1(*-rA u7xtL1KDzS8-iJGS3<7l)tXF35;g5QwvAj&1RV2_O(N!dX5s2CU-vj_LK^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-9-12.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-9-12.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..29ebd2ba748cfbb10113acea3212e1534684cf08 GIT binary patch literal 711 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!?(BD&X@N%F5lX>JZJMEKer04+K@iSbxQV4 z^Q67!8@}5rsmyK{?A0KjGw%mgW%R&S(=dd0~I#_tjMz POAHouX)pjW^Z%OwFU{~+ literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-9-13.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-9-13.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..46efbafe6c813ac2bfb6f126449ed7164b0a758b GIT binary patch literal 691 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyDke>-k?weNoa4IwU=TO>}O-=`V>V w{_qxT-_PgpWM-z}>fznnP#%(p64^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!`;~r!c`7Gl3%oU`B(nG8r=^99-Mw8ziR3H zulN6I-&nEg`9zx)pR4(s?#XUTxLz*4y+tl$hpT;4&%dp=Us|zEUg-QZvrHgrrG%>Z dv;5U^{*SWVx_q~pOybg5G~rN}#sdETHv!TV{eJ)e literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-9-15.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-9-15.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..84e019ca5beba9b964cb71f3eec9954b6165d7b8 GIT binary patch literal 663 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyFAjUp2ASkBYb+ykYw;!8yxkHB9{_ Obpa?2k^^G<|2F{^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!x!!K&HsdVOxaU#H@f+cpkLvChJNPQu*QW^ s75N_BJ{yf@SDY3#+7>-|@;UaknHT-ucAd~z)aA^jv8Vxr?f>5d04wO}Z~y=R literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-9-17.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-9-17.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5b7c2440ab64b8572d337ceb88313d05ca4ec5c4 GIT binary patch literal 693 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!`IyWhtJ!#{=E0>)dBaS=enl5C2sbwWNxZG xv0{(yhsVwz&aK+j+kAKCRY`_v4yT*1_i(*lvAj%MVNsVRkH(@d1`zEC)K@DKn1 literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-9-18.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-9-18.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..f4e5e2375a90878c936ea0b0d8beda434ab858e6 GIT binary patch literal 760 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}niZk8W}AE^m4!@vQZjl%)+%@*1vzK^YflP?5VnBze&x!=F7~?$`{g2-|Z9r$oSE$nQzIpLwEMGGQay< Spi!71GTB^XQP-sY|2F~sd=fzb literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-9-19.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-9-19.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..54c7b57856e55ace1885cf66ee9740bf32b1b211 GIT binary patch literal 928 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!wcPgtVblI*Vf*wUK6&^|5?O;2CX+H@@?~^ zE~t1u-eMlEd1BU!_X@vSAG%+cT(_@lx!RFM6WbqKhRL(M?)l5xbNa_70sG*1`wFo$ z_p^&#HtH;iHqOndudJ=x`ue_vY3ha#!8hBOvVVrD%6?mU=lB=qf2=X<58O4K9dNbO zi6i1sbgA9azQ;dvdVBpn&vXS3CFQ4K$I5?CynT87GTU8q?z{Me2mikb0JHmRbpQYW literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-9-2.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-9-2.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..a7ca8d64ba41c9ec551e56f02214b2a7f1044b31 GIT binary patch literal 671 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9|{c(M8TVL?*@lx9(AI?nd_|H(@ ZBg!(brSzofr9h`LhDBW(Ak6&#CICGn;m-g7 literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-9-3.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-9-3.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..1a0e06f5292ca95f2b72b4580c8a4dafafd16d1b GIT binary patch literal 735 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!^^Mwt-q#NW=nVIUEZ|+#D9kM@@tFA|4Cl? z@@Dp4t7oFJ@rm018ESdDehGDLHS^c}Y`N`A{+VFk&HouTWxqJRR@{59%H7Own>PMa t@AUlhan`BX2kN9}Jb8JL|F_VNzs6lPFJjibc(JJK%!Wl>8qEK10sxvo2(ADC literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-9-4.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-9-4.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..ef2f7a3b80d6a710cc2291a04ed5010fe1eeb326 GIT binary patch literal 723 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!=c~S{14=p%K0?^@U1SH&-=&j`BU#1f2YNN zWLsd*{l&>s-2CwkkNJOmv(I&Gwn;uY`S+GZoVM)G<1WnSDKTX?jyJ#N`mZ}I_~HHb ffSPNU_V4z&e_5n>!Dg#f8jCjRXe{bt_^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!%?xfcN&9^rd-Avg0`0@g3d5UHEG+|p*vM_&5_x1N4vvo(Db{HI)A&7S%E t6YVt{e?^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!#7^-gR|5oZ(X!S*vJ0qn*R*eb+YXbw8Org zh5^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}rzI(bXP*c4sKJ+V7TXm0#-ZD#8$mz>NQI F0sw^*)^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/example/src/main/resources/io/netty/example/http2/tiles/tile-9-9.jpeg b/example/src/main/resources/io/netty/example/http2/tiles/tile-9-9.jpeg new file mode 100755 index 0000000000000000000000000000000000000000..5890841f7d05eed1821b00c9b9226ff30ae738bb GIT binary patch literal 643 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<c1}I=;VrF4wW9Q)H;sz?% zD!{d!pzFb!U9xX3zTPI5o8roG<0MW4oqZMDikqloVbuf*=gfJ(V&YTRE(2~ znmD<{#3dx9RMpfqG__1j&CD$#!}nhriyF9)u>Jp=01kc9xc~qF literal 0 HcmV?d00001 diff --git a/run-example.sh b/run-example.sh index 30ae934266..d91bec7722 100755 --- a/run-example.sh +++ b/run-example.sh @@ -16,8 +16,9 @@ EXAMPLE_MAP=( 'http-upload-server:io.netty.example.http.upload.HttpUploadServer' 'websocket-client:io.netty.example.http.websocketx.client.WebSocketClient' 'websocket-server:io.netty.example.http.websocketx.server.WebSocketServer' - 'http2-client:io.netty.example.http2.client.Http2Client' - 'http2-server:io.netty.example.http2.server.Http2Server' + 'http2-client:io.netty.example.http2.helloworld.client.Http2Client' + 'http2-server:io.netty.example.http2.helloworld.server.Http2Server' + 'http2-tiles:io.netty.example.http2.tiles.Launcher' 'spdy-client:io.netty.example.spdy.client.SpdyClient' 'spdy-server:io.netty.example.spdy.server.SpdyServer' 'worldclock-client:io.netty.example.worldclock.WorldClockClient'