From: Athos Ribeiro Date: Thu, 17 Jul 2025 10:20:19 +0000 (-0300) Subject: Import puma_6.6.0-4.debian.tar.xz X-Git-Tag: archive/raspbian/6.6.0-4+rpi1^2~13^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=8a29471c46b0c8319cfdab2489b1f8bd13fac5ca;p=puma.git Import puma_6.6.0-4.debian.tar.xz [dgit import tarball puma 6.6.0-4 puma_6.6.0-4.debian.tar.xz] --- 8a29471c46b0c8319cfdab2489b1f8bd13fac5ca diff --git a/README.source b/README.source new file mode 100644 index 0000000..7622ecc --- /dev/null +++ b/README.source @@ -0,0 +1,31 @@ +puma (6.6.0-4) + + Added the capability to re-generate test certificates in the examples + directory. This should require installing + - default-jre, and + - ruby-certificate-authority + which are currently not listed as dependencies of this package. You can also + use faketime to run the upstream tests in a future date to test if the + certificates will be valid throughout the Debian release support cycle. + + Note that these certificates are not being re-generated during build time + because the examples/generate_all_certs script depends on the keytool binary + shipped in the JRE package (we do not want to build depend on Java just for + this). It should be possible to re-write the script to use the minijks + package instead (written in Go) so we can always generate these certificates + during package builds. + +puma (4.3.1-1) + + Several tests have been disabled by default: + + - test/test_puma_server_ssl.rb has been disabled because all tests fail + randomly. However these tests have never been performed in puma 3.x and + they also work randomly. So until someone can look into them and fix them, + we decided to not run them (see also #921931). + + - test_control_for_ssl (test/test_cli.rb) and + test_control_ssl (test/test_pumactl.rb) show similar issues and don't seem + to imply that the package fails to work. So they have been disabled too. + + -- Daniel Leidert Wed, 05 Feb 2020 23:51:51 +0100 diff --git a/changelog b/changelog new file mode 100644 index 0000000..3342f03 --- /dev/null +++ b/changelog @@ -0,0 +1,428 @@ +puma (6.6.0-4) unstable; urgency=medium + + * Team upload. + * Do not generate example certificates in build time to avoid build + depending on Java + * d/p/0019-adapt-test-certs-generation.patch: adjust example certificates + generation script + * d/p/0020-update-ex-certs.patch: update example certificates to avoid a + regression for #1078640 + * debian/README.source: document test certificates generation + + -- Athos Ribeiro Thu, 17 Jul 2025 07:20:19 -0300 + +puma (6.6.0-3) unstable; urgency=medium + + * Team upload. + * Freshly generate example certificates for test suite (Closes: #1078640) + + -- Timo Röhling Wed, 16 Jul 2025 21:51:16 +0200 + +puma (6.6.0-2) unstable; urgency=medium + + * Team upload + * Change build-dependency on ruby-rackup to + ruby-rackup | ruby-rack (<< 3), to allow migration to testing + independently of rackup or rack 3. + + -- Lucas Nussbaum Fri, 07 Feb 2025 21:46:17 +0100 + +puma (6.6.0-1) unstable; urgency=medium + + * Team upload + * New upstream version 6.5.0, with fixes for rack 3. Closes: #1094539 + * Refresh patches for 6.5.0 + * Drop patches (were upstream backports, so no longer needed): + + 0009-CI-update-chain-certs-example-files-3426.patch + + 0010-Update-all-certs.patch + + 0011-Fix-path-of-certs-useb-by-test_example_cert_expirati.patch + + 0014-Give-a-wide-berth-on-the-timeout-as-sometimes-CI-is-.patch + + 0018-update-certs-from-upstream.patch + * Refresh packaging using dh-make-ruby + * Add build-dep on rackup for Rack::Handler + * New upstream version 6.6.0 + * Refresh patches again, for 6.6.0 + * Add build-dep on ruby-concurrent + * Add patch: 0010-Disable-test-concurrency-without-concurrent_ruby.patch + * Drop unmatched lintian override + + -- Lucas Nussbaum Wed, 05 Feb 2025 14:56:49 +0100 + +puma (6.4.3-3) unstable; urgency=medium + + * d/p/0014-Give-a-wide-berth-on-the-timeout-as-sometimes-CI-is-.patch: + increase timeout to fix FTBFS with ruby 3.3. + + -- Lucas Kanashiro Wed, 22 Jan 2025 17:06:59 -0300 + +puma (6.4.3-2) unstable; urgency=medium + + * Team upload. + * d/p/0018-disable-test-failing-with-ruby3.2.patch: fix FTBFS + + -- Lucas Kanashiro Mon, 23 Dec 2024 19:07:19 -0300 + +puma (6.4.3-1) unstable; urgency=medium + + * Team upload. + * New upstream version. Fixes CVE-2024-45614 (Closes: #1082379) + * Remove custom ssl autopkgtest. + - https://lists.debian.org/debian-ruby/2024/11/msg00006.html + * Update certificates for tests. + + -- Abhijith PA Mon, 30 Sep 2024 09:46:18 +0530 + +puma (6.4.2-6) unstable; urgency=medium + + * Fix FTBFS due to certs expiration (Closes: #1078640) + - d/p/0010-Update-all-certs.patch + - d/p/0011-Fix-path-of-certs-useb-by-test_example_cert_expirati.patch + * Declare compliance with Debian Policy 4.7.0. + + -- Lucas Kanashiro Thu, 19 Sep 2024 17:56:24 -0300 + +puma (6.4.2-5) unstable; urgency=medium + + * Backport upstream patch to update certificates in examples. + This fixes a test failure. + + -- Lucas Kanashiro Sat, 20 Jul 2024 12:24:05 -0300 + +puma (6.4.2-4) unstable; urgency=medium + + * Disable test failing on armhf + + -- Pirate Praveen Tue, 06 Feb 2024 18:13:41 +0530 + +puma (6.4.2-3) unstable; urgency=medium + + * Add Breaks: rails (<< 2:6.1.7.3+dfsg-3~) + + -- Pirate Praveen Mon, 05 Feb 2024 15:12:00 +0530 + +puma (6.4.2-2) unstable; urgency=medium + + * Disable test failing on arm64 buildd + + -- Pirate Praveen Mon, 05 Feb 2024 14:11:14 +0530 + +puma (6.4.2-1) unstable; urgency=medium + + * Switch to github tags from releases (6.4.2 is only available from tags) + * New upstream version 6.4.2 (Fixes: CVE-2024-21647) + + -- Pirate Praveen Mon, 05 Feb 2024 01:08:22 +0530 + +puma (6.4.0-4) unstable; urgency=medium + + * Remove minitest/retry as well (copy from 5.x branch and fixes salsa ci) + * Export LC_ALL also to C.UTF-8 (hoping this would fix some test failures) + + -- Pirate Praveen Mon, 05 Feb 2024 00:52:13 +0530 + +puma (6.4.0-3) unstable; urgency=medium + + * Reupload to unstable + + -- Pirate Praveen Sun, 04 Feb 2024 01:16:15 +0530 + +puma (6.4.0-2) experimental; urgency=medium + + * Set TEST_CASE_TIMEOUT = 300 (one test is timing out on amd64 buildd) + + -- Pirate Praveen Mon, 04 Dec 2023 23:59:02 +0530 + +puma (6.4.0-1) experimental; urgency=medium + + * New upstream version 6.4.0 + * Disable more tests and refresh patches + * Add procps to build depends for kill command (used in tests) + + -- Pirate Praveen Sun, 03 Dec 2023 13:58:23 +0530 + +puma (6.0.2-1) experimental; urgency=medium + + * Team upload. + * New upstream release. + * d/control (Standards-Version): Bump to 4.6.2. + (Build-Depends): Add ruby-sd-notify. + * d/copyright (Copyright): Update years. + * d/ruby-tests.rake: Re-enable multiple tests (closes: #984713). + * d/upstream/metadata: Adjust a few URLs. + + -- Daniel Leidert Thu, 09 Feb 2023 16:12:20 +0100 + +puma (5.6.5-2) unstable; urgency=medium + + * debian/ruby-tests.rake: skip test that fails often (Closes: #1006022) + * debian/ruby-tests.rake: exclude tests that fail often but not always + + -- Antonio Terceiro Wed, 02 Nov 2022 09:26:37 -0300 + +puma (5.6.5-1) unstable; urgency=medium + + * Update watch file for github.com pattern change + * New upstream version 5.6.5 + * Refresh patches + * Bump Standards-Version to 4.6.1 (no changes needed) + + -- Pirate Praveen Sun, 16 Oct 2022 22:44:46 +0530 + +puma (5.6.4-1) unstable; urgency=medium + + * New upstream version 5.6.4 + * Refresh patches + * Disable some tests that fail with + NameError: uninitialized constant Puma::LogWriter + * Remove tmp/restart.txt in clean + + -- Pirate Praveen Mon, 04 Apr 2022 13:24:10 +0530 + +puma (5.5.2-2) unstable; urgency=medium + + * Team upload + * debian/rules: force an UTF-8 locale + * debian/ruby-tests.rake: wrap lines + * debian/ruby-tests.rake: run all ssl tests on autopkgtest only + * debian/test/control: give ssl test a name + + -- Antonio Terceiro Tue, 02 Nov 2021 16:35:12 -0300 + +puma (5.5.2-1) unstable; urgency=medium + + * Team upload + * New upstream version 5.5.2 + - Builds and tests fine again (Closes: #998295) + * Add build-dependency on ruby-localhost + * debian/rules: exclude several unnecessary files from installation + + -- Antonio Terceiro Tue, 02 Nov 2021 14:39:10 -0300 + +puma (5.3.2-3) unstable; urgency=medium + + * Use --gem-install layout option of dh-ruby + + -- Pirate Praveen Tue, 12 Oct 2021 02:24:33 +0530 + +puma (5.3.2-2) unstable; urgency=medium + + * Reupload to unstable + * Bump Standards-Version to 4.6.0 (no changes needed) + * Bump debhelper compatibility level to 13 + + -- Pirate Praveen Mon, 11 Oct 2021 03:17:23 +0530 + +puma (5.3.2-1) experimental; urgency=medium + + * New upstream version 5.3.2 (Closes: #989054) (Fixes: CVE-2021-29509) + * Refresh patches + + -- Pirate Praveen Fri, 28 May 2021 22:34:53 +0530 + +puma (4.3.8-1) unstable; urgency=medium + + * New upstream version 4.3.8 (Closes: #989054) (Fixes: CVE-2021-29509) + + -- Pirate Praveen Wed, 26 May 2021 10:24:19 +0530 + +puma (5.2.2-2) experimental; urgency=medium + + * Disable test that failied on amd64 buildd + + -- Pirate Praveen Mon, 08 Mar 2021 23:03:52 +0530 + +puma (5.2.2-1) experimental; urgency=medium + + * New upstream version 5.2.2 + * Bump Standards-Version to 4.5.1 (no changes needed) + * Refresh patches for new upstream release + * Add ruby-minitest-stub-const as build dependency + * Disable failing tests + + -- Pirate Praveen Sun, 07 Mar 2021 21:03:52 +0530 + +puma (4.3.6-1) unstable; urgency=medium + + * Team upload. + * New upstream version. + - Fixes CVE-2020-11076 and CVE-2020-11077 (closes: #972102). + * d/copyright: Minor update. + * d/puma.lintian-overrides: Add package override. + * d/ruby-tests.rake: Add logic to run SSL test. + * d/patches/*.patch: Add missing headers and refresh. + * d/source/lintian-overrides: Add source override. + * d/tests/control: Set environment variable to run the SSL tests separately + (similar to the solution used in the jekyll package). + * d/tests/test-puma-server-ssl*: Removed. + + -- Daniel Leidert Thu, 15 Oct 2020 20:57:29 +0200 + +puma (4.3.3-3) unstable; urgency=medium + + * Include patch from gitlab to improve performance + + -- Pirate Praveen Tue, 18 Aug 2020 00:15:20 +0530 + +puma (4.3.3-2) unstable; urgency=medium + + [ Daniel Leidert ] + * debian/tests/test_puma_server_ssl, + debian/tests/test_puma_server_ssl.rake: Run test/test_puma_server_ssl.rb + in an openssl enviroment not using the Debian defaults. + * debian/tests/control: Add new test. + + [ Debian Janitor ] + * Set field Upstream-Contact in debian/copyright. + * Remove obsolete fields Contact, Name from debian/upstream/metadata + (already present in machine-readable debian/copyright). + + [ Pirate Praveen ] + * Remove debian-branch option from debian/gbp.conf + * Reupload to unstable + + -- Pirate Praveen Mon, 03 Aug 2020 15:37:16 +0530 + +puma (4.3.3-1) experimental; urgency=medium + + * Team upload. + * New upstream release. + - Fixes CVE-2020-5247 (closes: #952766). + - Fixes CVE-2020-5249 (closes: #953122). + * d/control (Section): Change to web. + (Vcs-Git): Indicate branch name via -b debian/experimental. + (Homepage): Use secure URL. + (Depends): Use ${ruby:Depends}. + * d/copyright (Source): Use secure URL. + * d/rules: Add override to install upstream changelog. + * d/watch: Use package name for tarball. + + -- Daniel Leidert Thu, 05 Mar 2020 01:34:17 +0100 + +puma (4.3.1-1) experimental; urgency=medium + + * Team upload. + * New upstream release + - Fixes CVE-2019-16770 Keepalive thread overload/DoS (closes: #946312). + * d/control (Rules-Requires-Root): Set to binary-targets. + (Build-Depends, Depends): Add ruby-nio4r. + (Build-Depends): Add curl for test/test_integration_single.rb. + * d/ruby-tests.rake: Disable test/test_puma_server_ssl.rb. + * d/README.source: Add to explain tests which have been disabled. + * d/patches/0004-puma.gemspec-drop-git-usage.patch: Refresh patch. + * d/patches/0011-disable-minitest-extensions.patch: Add patch. + - Disable unavailable minitest extensions (retry and proveit). + * d/patches/0012-disable-cli-ssl-tests.patch: Add patch. + - Disable CLI SSL tests. + * d/patches/0013-fix-test-term-not-accepts-new-connections.patch: Add. + - Fix test_term_not_accepts_new_connections to be locale independent. + * d/patches/0002-test_integration-disable-test-that-fails-randomly.patch, + d/patches/0003-test_cli-disable-test-that-rails-randomly.patch, + d/patches/0005-test_puma_server-disable-test-that-fails-randomly.patch, + d/patches/0006-test-helper.rb-drop-bundler-usage.patch, + d/patches/0007-test-test_cli.rb-disable-test-that-fails-randomly.patch, + d/patches/0008-fix-ssl-tests.patch, + d/patches/0009-disable-tests-failing-in-single-cpu.patch, + d/patches/0010-fix-cluster-exit-for-ruby27.patch: Remove obsolete patches. + * d/patches/series: Adjust. + + -- Daniel Leidert Thu, 06 Feb 2020 11:45:11 +0100 + +puma (3.12.4-1) unstable; urgency=medium + + * Team upload. + * New upstream release. + - Fixes CVE-2020-5247 (closes: #952766). + - Fixes CVE-2020-5249 (closes: #953122). + * d/control (Section): Changed to web. + (Homepage): Use secure URL. + (Depends): Add ${ruby:Depends}. + * d/copyright (Source): Use secure URL. + * d/ruby-tests.rake: Disable test/test_puma_server_ssl.rb for the moment. + These tests fail due to openssl being configured to use SECLEVEL2 + (https://github.com/puma/puma/issues/2147). + * d/rules: Add override to install upstream changelog. + * d/watch: Rename downloaded tarball to include package name. + * d/patches/0008-fix-ssl-tests.patch: Remove patch. Applied upstream. + * d/patches/CVE-2019-16770.patch: Ditto. + * d/patches/*.patch: Refresh patches. + * d/patches/series: Adjust. + + -- Daniel Leidert Wed, 04 Mar 2020 23:09:16 +0100 + +puma (3.12.0-4) unstable; urgency=medium + + * Team upload. + * d/control (Rules-Requires-Root): Set to binary-targets. + * d/patches/0011-disable-minitest-extensions.patch: Add patch. + - Disable unavailable minitest retry extension. + * d/patches/CVE-2019-16770.patch: Add patch. + - Backport fix for CVE-2019-16770 from upstream (closes: #946312). + * d/patches/series: Add patch. + + -- Daniel Leidert Thu, 06 Feb 2020 12:54:59 +0100 + +puma (3.12.0-3) unstable; urgency=medium + + * Team upload. + * d/compat: Remove obsolete file. + * d/control: Add Rules-Requires-Root field. + (Build-Depends): Use debhelper-compat. + (Standards-Version): Bump to 4.5.0. + (Depends): Drop ruby-interpreter. + * d/copyright (Format): Fix insecure-copyright-format-uri and add myself. + * d/puma.1, d/pumactl.1: Add manual pages. + * d/puma.manpages: Install manual pages. + * d/ruby-tests.rake: Set verbose mode. + * d/patches/0010-fix-cluster-exit-for-ruby27.patch: Add patch. + - Fix hang with Ruby >= 2.6 when shutting down workers. + * d/patches/series: Enable new patch. + * d/upstream/metadata: Add metadata. + * d/upstream/metadata: Add metadata. + + -- Daniel Leidert Wed, 05 Feb 2020 18:20:58 +0100 + +puma (3.12.0-2) unstable; urgency=medium + + * Disable tests failing in single cpu (Closes: #921931) + + -- Pirate Praveen Sun, 10 Feb 2019 18:56:47 +0530 + +puma (3.12.0-1) unstable; urgency=medium + + [ Balint Reczey ] + * New upstream version 3.12.0 + * Refresh patches + + [ Pirate Praveen ] + * Fix OpenSSL 1.1.1 test failures with upstream patch (Closes: #900156) + * Bump Standards-Version to 4.3.0 (no changes needed) + * Add myself to uploaders + + -- Pirate Praveen Sun, 10 Feb 2019 10:56:59 +0530 + +puma (3.11.3-1) unstable; urgency=medium + + * Team upload + * Remove myself from Uploaders: + * New upstream version 3.11.3 + * Build against libssl-dev instead of libssl1.0-dev (Closes: #859542) + * Refresh packaging files with `dh-make-ruby -wo .` + * Bump debhelper compat to 11 + * Change Vcs-* to point to salsa.debian.org + * Use standard debian/ruby-tests.rake + * drop build-dependency on ruby-hoe + * Refresh patches + * New patches: + - 0006-test-helper.rb-drop-bundler-usage.patch + - 0007-test-test_cli.rb-disable-test-that-fails-randomly.patch + * Replace 0001-test_puma_server_ssl-update-for-newer-versions-of-Op.patch + with 0001-test_puma_server_ssl-disable-test-that-takes-too-lon.patch + + + -- Antonio Terceiro Wed, 28 Mar 2018 18:53:22 -0300 + +puma (3.6.0-1) unstable; urgency=medium + + * Initial release (Closes: #720336) + + -- Antonio Terceiro Thu, 10 Nov 2016 16:47:06 -0200 diff --git a/clean b/clean new file mode 100644 index 0000000..4535125 --- /dev/null +++ b/clean @@ -0,0 +1 @@ +tmp/restart.txt diff --git a/control b/control new file mode 100644 index 0000000..659a047 --- /dev/null +++ b/control @@ -0,0 +1,37 @@ +Source: puma +Section: web +Priority: optional +Maintainer: Debian Ruby Team +Uploaders: Pirate Praveen , + Lucas Kanashiro +Build-Depends: curl, + debhelper-compat (= 13), + gem2deb (>= 1.6), + libssl-dev, + procps, + rake, + ruby-concurrent, + ruby-localhost, + ruby-minitest-stub-const, + ruby-nio4r (>= 2), + ruby-rack, + ruby-rackup | ruby-rack (<< 3), + ruby-sd-notify +Standards-Version: 4.7.0 +Vcs-Git: https://salsa.debian.org/ruby-team/puma.git +Vcs-Browser: https://salsa.debian.org/ruby-team/puma +Homepage: https://puma.io +Testsuite: autopkgtest-pkg-ruby +Rules-Requires-Root: binary-targets + +Package: puma +Architecture: any +Breaks: rails (<< 2:6.1.7.3+dfsg-3~) +Depends: ruby, + ${misc:Depends}, + ${ruby:Depends}, + ${shlibs:Depends} +Description: threaded HTTP 1.1 server for Ruby/Rack applications + Puma is a simple, fast, threaded, and highly concurrent HTTP 1.1 server for + Ruby/Rack applications. Puma is intended for use in both development and + production environments. diff --git a/copyright b/copyright new file mode 100644 index 0000000..70590cd --- /dev/null +++ b/copyright @@ -0,0 +1,42 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: puma +Upstream-Contact: https://github.com/puma/puma/issues +Source: https://github.com/puma/puma + +Files: * +Copyright: 2005, Zed Shaw + 2011, Evan Phoenix +License: BSD-3-clause + +Files: debian/* +Copyright: 2016 Antonio Terceiro + 2020,2023 Daniel Leidert + 2023 Debian Ruby Extras Maintainers +License: BSD-3-clause +Comment: The Debian packaging is licensed under the same terms as the source. + +License: BSD-3-clause + All rights reserved. + . + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + . + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the Evan Phoenix nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/gbp.conf b/gbp.conf new file mode 100644 index 0000000..da9f191 --- /dev/null +++ b/gbp.conf @@ -0,0 +1,4 @@ +[DEFAULT] +pristine-tar = true +sign-tags = true +verbose = true diff --git a/patches/0004-puma.gemspec-drop-git-usage.patch b/patches/0004-puma.gemspec-drop-git-usage.patch new file mode 100644 index 0000000..45b69ad --- /dev/null +++ b/patches/0004-puma.gemspec-drop-git-usage.patch @@ -0,0 +1,23 @@ +From: Antonio Terceiro +Date: Wed, 5 Feb 2020 21:36:05 +0100 +Subject: Drop git usage from gemspec + +Forwarded: not-needed +--- + puma.gemspec | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +Index: puma/puma.gemspec +=================================================================== +--- puma.orig/puma.gemspec ++++ puma/puma.gemspec +@@ -18,8 +18,7 @@ Gem::Specification.new do |s| + if RbConfig::CONFIG['ruby_version'] >= '2.5' + s.metadata["msys2_mingw_dependencies"] = "openssl" + end +- s.files = `git ls-files -- bin docs ext lib tools`.split("\n") + +- %w[History.md LICENSE README.md] ++ s.files = Dir.glob('**/*').reject { |f| f =~ /^debian\//} + s.homepage = "https://puma.io" + + if s.respond_to?(:metadata=) diff --git a/patches/0010-Disable-test-concurrency-without-concurrent_ruby.patch b/patches/0010-Disable-test-concurrency-without-concurrent_ruby.patch new file mode 100644 index 0000000..967e60d --- /dev/null +++ b/patches/0010-Disable-test-concurrency-without-concurrent_ruby.patch @@ -0,0 +1,25 @@ +From: Lucas Nussbaum +Date: Wed, 5 Feb 2025 14:17:14 +0100 +Subject: Disable test concurrency without concurrent_ruby + +The way this is implemented (moving away the gem in $HOME) looks dangerous and +doesn't work for non-user-installed packages. + +Forwarded: not-needed +--- + test/test_web_concurrency_auto.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/test_web_concurrency_auto.rb b/test/test_web_concurrency_auto.rb +index 8afebe6..a2fed7a 100644 +--- a/test/test_web_concurrency_auto.rb ++++ b/test/test_web_concurrency_auto.rb +@@ -39,7 +39,7 @@ class TestWebConcurrencyAuto < TestIntegration + end + + # Rename the processor_counter file, then restore +- def test_web_concurrency_with_concurrent_ruby_unavailable ++ def xxtest_web_concurrency_with_concurrent_ruby_unavailable + file_path = nil + skip_unless :fork + diff --git a/patches/0011-disable-minitest-extensions.patch b/patches/0011-disable-minitest-extensions.patch new file mode 100644 index 0000000..6ec39ca --- /dev/null +++ b/patches/0011-disable-minitest-extensions.patch @@ -0,0 +1,43 @@ +From: Daniel Leidert +Date: Wed, 5 Feb 2020 22:20:42 +0100 +Subject: Disable unavailable minitest extensions + +Forwarded: not-needed +--- + test/helper.rb | 7 +------ + 1 file changed, 1 insertion(+), 6 deletions(-) + +Index: puma/test/helper.rb +=================================================================== +--- puma.orig/test/helper.rb ++++ puma/test/helper.rb +@@ -25,7 +25,6 @@ require_relative "helpers/test_puma/asse + require_relative "minitest/verbose" + require "minitest/autorun" + require "minitest/pride" +-require "minitest/proveit" + require "minitest/stub_const" + require "net/http" + require_relative "helpers/apps" +@@ -105,12 +104,9 @@ class TimeoutTestCase < Minitest::Test # + end + + if ENV['CI'] +- require 'minitest/retry' + + SUMMARY_FILE = ENV['GITHUB_STEP_SUMMARY'] + +- Minitest::Retry.use! +- + if SUMMARY_FILE && ENV['GITHUB_ACTIONS'] == 'true' + + GITHUB_STEP_SUMMARY_MUTEX = Mutex.new +@@ -210,7 +206,7 @@ class Minitest::Test + PROJECT_ROOT = File.dirname(__dir__) + + def self.run(reporter, options = {}) # :nodoc: +- prove_it! ++ #prove_it! + super + end + diff --git a/patches/0012-disable-cli-ssl-tests.patch b/patches/0012-disable-cli-ssl-tests.patch new file mode 100644 index 0000000..e8dcd42 --- /dev/null +++ b/patches/0012-disable-cli-ssl-tests.patch @@ -0,0 +1,28 @@ +From: Daniel Leidert +Date: Wed, 5 Feb 2020 23:18:37 +0100 +Subject: Disable cli ssl tests + +Forwarded: not-needed +--- + test/test_pumactl.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: puma/test/test_pumactl.rb +=================================================================== +--- puma.orig/test/test_pumactl.rb ++++ puma/test/test_pumactl.rb +@@ -251,12 +251,12 @@ class TestPumaControlCli < TimeoutTestCa + end + + +- def test_control_ssl_ipv4 ++ def __test_control_ssl_ipv4 + skip_unless :ssl + control_ssl '127.0.0.1' + end + +- def test_control_ssl_ipv6 ++ def __test_control_ssl_ipv6 + skip_unless :ssl + control_ssl '[::1]' + end diff --git a/patches/0013-fix-test-term-not-accepts-new-connections.patch b/patches/0013-fix-test-term-not-accepts-new-connections.patch new file mode 100644 index 0000000..4583cad --- /dev/null +++ b/patches/0013-fix-test-term-not-accepts-new-connections.patch @@ -0,0 +1,24 @@ +From: Daniel Leidert +Date: Thu, 6 Feb 2020 11:24:24 +0100 +Subject: Fix test to read output locale independent + +The test fails if run in a non-English environment. + +Forwarded: https://github.com/puma/puma/issues/2149 +--- + test/test_integration_single.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: puma/test/test_integration_single.rb +=================================================================== +--- puma.orig/test/test_integration_single.rb ++++ puma/test/test_integration_single.rb +@@ -121,7 +121,7 @@ class TestIntegrationSingle < TestIntegr + assert wait_for_server_to_include('Gracefully stopping') # wait for server to begin graceful shutdown + + # Invoke a request which must be rejected +- _stdin, _stdout, rejected_curl_stderr, rejected_curl_wait_thread = Open3.popen3("curl #{HOST}:#{@tcp_port}") ++ _stdin, _stdout, rejected_curl_stderr, rejected_curl_wait_thread = Open3.popen3({ "LC_ALL" => "C" }, "curl http://#{HOST}:#{@tcp_port}") + + assert nil != Process.getpgid(@server.pid) # ensure server is still running + assert nil != Process.getpgid(curl_wait_thread[:pid]) # ensure first curl invocation still in progress diff --git a/patches/0014-disable-test-failing-on-amd64.patch b/patches/0014-disable-test-failing-on-amd64.patch new file mode 100644 index 0000000..ce0677d --- /dev/null +++ b/patches/0014-disable-test-failing-on-amd64.patch @@ -0,0 +1,25 @@ +From: Pirate Praveen +Date: Mon, 8 Mar 2021 23:03:21 +0530 +Subject: Disable test that failied on amd64 buildd + +This test failed on amd64 buildd +https://buildd.debian.org/status/fetch.php?pkg=puma&arch=amd64&ver=5.2.2-1&stamp=1615133735&raw=0 + +Forwarded: not-needed +--- + test/test_puma_server.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: puma/test/test_puma_server.rb +=================================================================== +--- puma.orig/test/test_puma_server.rb ++++ puma/test/test_puma_server.rb +@@ -1735,7 +1735,7 @@ class TestPumaServer < TimeoutTestCase + end + end + +- def test_command_ignored_before_run ++ def __test_command_ignored_before_run + @server.stop # ignored + @server.run + @server.halt diff --git a/patches/0015-disable-different-output-test.patch b/patches/0015-disable-different-output-test.patch new file mode 100644 index 0000000..75c31e4 --- /dev/null +++ b/patches/0015-disable-different-output-test.patch @@ -0,0 +1,15 @@ +Output changed from 'OK' to '::Rack::URLMap is loaded' + +Index: puma/test/test_url_map.rb +=================================================================== +--- puma.orig/test/test_url_map.rb ++++ puma/test/test_url_map.rb +@@ -9,7 +9,7 @@ class TestURLMap < TestIntegration + end + + # make sure the mapping defined in url_map_test/config.ru works +- def test_basic_url_mapping ++ def __test_basic_url_mapping + skip_if :jruby + env = { "BUNDLE_GEMFILE" => "#{__dir__}/url_map_test/Gemfile" } + Dir.chdir("#{__dir__}/url_map_test") do diff --git a/patches/0016-disable-test-failing-on-arm64.patch b/patches/0016-disable-test-failing-on-arm64.patch new file mode 100644 index 0000000..6e038dd --- /dev/null +++ b/patches/0016-disable-test-failing-on-arm64.patch @@ -0,0 +1,15 @@ +this test is failing on arm64 buildd (sometimes on other archs as well) + +Index: puma/test/test_plugin_systemd.rb +=================================================================== +--- puma.orig/test/test_plugin_systemd.rb ++++ puma/test/test_plugin_systemd.rb +@@ -31,7 +31,7 @@ class TestPluginSystemd < TestIntegratio + super + end + +- def test_systemd_notify_usr1_phased_restart_cluster ++ def __test_systemd_notify_usr1_phased_restart_cluster + skip_unless :fork + assert_restarts_with_systemd :USR1 + end diff --git a/patches/0017-disable-test-failing-on-armhf.patch b/patches/0017-disable-test-failing-on-armhf.patch new file mode 100644 index 0000000..7e984f2 --- /dev/null +++ b/patches/0017-disable-test-failing-on-armhf.patch @@ -0,0 +1,15 @@ +https://ci.debian.net/packages/p/puma/testing/armhf/42745746/ + +Index: puma/test/test_integration_ssl_session.rb +=================================================================== +--- puma.orig/test/test_integration_ssl_session.rb ++++ puma/test/test_integration_ssl_session.rb +@@ -122,7 +122,7 @@ class TestIntegrationSSLSession < TestIn + assert reused, 'session was not reused' + end + +- def test_off_tls1_2 ++ def __test_off_tls1_2 + ssl_vers = Puma::MiniSSL::OPENSSL_LIBRARY_VERSION + old_ssl = ssl_vers.include?(' 1.0.') || ssl_vers.match?(/ 1\.1\.1[ a-e]/) + skip 'Requires 1.1.1f or later' if old_ssl diff --git a/patches/0018-disable-test-failing-with-ruby3.2.patch b/patches/0018-disable-test-failing-with-ruby3.2.patch new file mode 100644 index 0000000..5749467 --- /dev/null +++ b/patches/0018-disable-test-failing-with-ruby3.2.patch @@ -0,0 +1,179 @@ +From: Debian Ruby Team +Date: Mon, 23 Dec 2024 19:26:53 -0300 +Subject: Skip tests failing with ruby3.2 in Ubuntu + + 1) Error: +TestRackUp::RackUp#test_bin: +TimeoutEveryTestCase::TestTookTooLong: execution expired + /<>/test/test_rack_handler.rb:318:in `sysread' + /<>/test/test_rack_handler.rb:318:in `test_bin' + /<>/test/helper.rb:90:in `block (4 levels) in run' + /usr/lib/ruby/3.2.0/timeout.rb:189:in `block in timeout' + /usr/lib/ruby/3.2.0/timeout.rb:196:in `timeout' + /<>/test/helper.rb:88:in `block (3 levels) in run' + +Those tests reported the following errors: + + 2) Error: +TestCLI#test_control_clustered: +TimeoutEveryTestCase::TestTookTooLong: execution expired + /<>/test/test_cli.rb:136:in `join' + /<>/test/test_cli.rb:136:in `test_control_clustered' + /<>/test/helper.rb:90:in `block (4 levels) in run' + /usr/lib/ruby/3.2.0/timeout.rb:189:in `block in timeout' + /usr/lib/ruby/3.2.0/timeout.rb:196:in `timeout' + /<>/test/helper.rb:88:in `block (3 levels) in run' + + 3) Error: +TestPluginSystemd#test_systemd_notify_usr2_hot_restart_cluster: +Errno::EPIPE: Broken pipe + /<>/test/test_plugin_systemd.rb:90:in `write' + /<>/test/test_plugin_systemd.rb:90:in `assert_restarts_with_systemd' + /<>/test/test_plugin_systemd.rb:42:in `test_systemd_notify_usr2_hot_restart_cluster' + /<>/test/helper.rb:90:in `block (4 levels) in run' + /usr/lib/ruby/3.2.0/timeout.rb:189:in `block in timeout' + /usr/lib/ruby/3.2.0/timeout.rb:196:in `timeout' + /<>/test/helper.rb:88:in `block (3 levels) in run' + + 4) Error: +TestIntegrationPumactl#test_halt_unix: +Errno::ECHILD: No child processes + /<>/test/test_integration_pumactl.rb:55:in `wait2' + /<>/test/test_integration_pumactl.rb:55:in `ctl_unix' + /<>/test/test_integration_pumactl.rb:42:in `test_halt_unix' + /<>/test/helper.rb:90:in `block (4 levels) in run' + /usr/lib/ruby/3.2.0/timeout.rb:189:in `block in timeout' + /usr/lib/ruby/3.2.0/timeout.rb:196:in `timeout' + /<>/test/helper.rb:88:in `block (3 levels) in run' + + 5) Error: +TestIntegrationPumactl#test_stop_unix: +Errno::ECHILD: No child processes + /<>/test/test_integration_pumactl.rb:55:in `wait2' + /<>/test/test_integration_pumactl.rb:55:in `ctl_unix' + /<>/test/test_integration_pumactl.rb:38:in `test_stop_unix' + /<>/test/helper.rb:90:in `block (4 levels) in run' + /usr/lib/ruby/3.2.0/timeout.rb:189:in `block in timeout' + /usr/lib/ruby/3.2.0/timeout.rb:196:in `timeout' + /<>/test/helper.rb:88:in `block (3 levels) in run' + + 6) Error: +TestPumaServer#test_timeout_in_data_phase: +TimeoutEveryTestCase::TestTookTooLong: execution expired + /<>/debian/puma/usr/lib/x86_64-linux-gnu/rubygems-integration/3.2.0/gems/puma-6.4.2/lib/puma/server.rb:627:in `join' + /<>/debian/puma/usr/lib/x86_64-linux-gnu/rubygems-integration/3.2.0/gems/puma-6.4.2/lib/puma/server.rb:627:in `stop' + /<>/test/test_puma_server.rb:31:in `teardown' + /<>/test/helper.rb:96:in `block (5 levels) in run' + /<>/test/helper.rb:96:in `each' + /<>/test/helper.rb:96:in `block (4 levels) in run' + /usr/lib/ruby/3.2.0/timeout.rb:189:in `block in timeout' + /usr/lib/ruby/3.2.0/timeout.rb:196:in `timeout' + /<>/test/helper.rb:95:in `block (3 levels) in run' + . + Extra failure in Debian: + . + 1) Error: +TestIntegrationSingle#test_puma_debug_loaded_exts: +TimeoutEveryTestCase::TestTookTooLong: execution expired + /build/reproducible-path/puma-6.4.3/test/helpers/integration.rb:125:in `wait2' + /build/reproducible-path/puma-6.4.3/test/helpers/integration.rb:125:in `stop_server' + /build/reproducible-path/puma-6.4.3/test/helpers/integration.rb:39:in `teardown' + /build/reproducible-path/puma-6.4.3/test/helper.rb:96:in `block (5 levels) in run' + /build/reproducible-path/puma-6.4.3/test/helper.rb:96:in `each' + /build/reproducible-path/puma-6.4.3/test/helper.rb:96:in `block (4 levels) in run' + /usr/lib/ruby/3.3.0/timeout.rb:186:in `block in timeout' + /usr/lib/ruby/3.3.0/timeout.rb:193:in `timeout' + /build/reproducible-path/puma-6.4.3/test/helper.rb:95:in `block (3 levels) in run' + . + They do not seem real regressions, so skipping them for now. +Author: Lucas Kanashiro +Last-Updated: 2024-12-23 +Forwarded: not-needed +--- + test/test_cli.rb | 2 +- + test/test_integration_pumactl.rb | 4 ++-- + test/test_integration_single.rb | 2 +- + test/test_plugin_systemd.rb | 2 +- + test/test_puma_server.rb | 4 ++-- + test/test_rack_handler.rb | 2 +- + 6 files changed, 8 insertions(+), 8 deletions(-) + +Index: puma/test/test_integration_pumactl.rb +=================================================================== +--- puma.orig/test/test_integration_pumactl.rb ++++ puma/test/test_integration_pumactl.rb +@@ -31,11 +31,11 @@ class TestIntegrationPumactl < TestInteg + wait_server + end + +- def test_stop_unix ++ def __test_stop_unix + ctl_unix + end + +- def test_halt_unix ++ def __test_halt_unix + ctl_unix 'halt' + end + +Index: puma/test/test_integration_single.rb +=================================================================== +--- puma.orig/test/test_integration_single.rb ++++ puma/test/test_integration_single.rb +@@ -247,7 +247,7 @@ class TestIntegrationSingle < TestIntegr + assert true + end + +- def test_puma_debug_loaded_exts ++ def _test_puma_debug_loaded_exts + cli_server "#{set_pumactl_args} test/rackup/hello.ru", puma_debug: true + + assert wait_for_server_to_include('Loaded Extensions:') +Index: puma/test/test_plugin_systemd.rb +=================================================================== +--- puma.orig/test/test_plugin_systemd.rb ++++ puma/test/test_plugin_systemd.rb +@@ -36,7 +36,7 @@ class TestPluginSystemd < TestIntegratio + assert_restarts_with_systemd :USR1 + end + +- def test_systemd_notify_usr2_hot_restart_cluster ++ def __test_systemd_notify_usr2_hot_restart_cluster + skip_unless :fork + assert_restarts_with_systemd :USR2 + end +Index: puma/test/test_puma_server.rb +=================================================================== +--- puma.orig/test/test_puma_server.rb ++++ puma/test/test_puma_server.rb +@@ -602,7 +602,7 @@ class TestPumaServer < TimeoutTestCase + assert_equal [:booting, :running, :stop, :done], states + end + +- def test_timeout_in_data_phase(**options) ++ def __test_timeout_in_data_phase(**options) + server_run(first_data_timeout: 1, **options) + + socket = send_http "POST / HTTP/1.1\r\nHost: test.com\r\nContent-Type: text/plain\r\nContent-Length: 5\r\n\r\n" +@@ -615,7 +615,7 @@ class TestPumaServer < TimeoutTestCase + assert_equal "HTTP/1.1 408 #{STATUS_CODES[408]}", response.status + end + +- def test_timeout_data_no_queue ++ def __test_timeout_data_no_queue + test_timeout_in_data_phase(queue_requests: false) + end + +Index: puma/test/test_rack_handler.rb +=================================================================== +--- puma.orig/test/test_rack_handler.rb ++++ puma/test/test_rack_handler.rb +@@ -345,7 +345,7 @@ module TestRackUp + FileUtils.rm 'config.ru' + end + +- def test_bin ++ def __test_bin + pid = nil + # JRuby & TruffleRuby take a long time using IO.popen + skip_unless :mri diff --git a/patches/0019-adapt-test-certs-generation.patch b/patches/0019-adapt-test-certs-generation.patch new file mode 100644 index 0000000..b3fac59 --- /dev/null +++ b/patches/0019-adapt-test-certs-generation.patch @@ -0,0 +1,80 @@ +From: Athos Ribeiro +Date: Thu, 17 Jul 2025 06:35:51 -0300 +Subject: Adapt test certificates generation + +Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1078640 +Forwarded: not-needed +Last-Update: 2025-07-15 + +Adapt the test certificates generation process to Debian. For that, we extend +the validity of the certificates to 11 years to try to cover the Debian support +(and hopefully the LTS/eLTS) window as long as a build is performed 1 year +before a release. We also require certificate_authority from the installed +package so we can generate this certificates without external packages. +Last-Update: 2025-07-15 +--- + examples/generate_chain_test.rb | 9 ++++----- + examples/generate_client_test.rb | 2 +- + examples/generate_server_test.rb | 2 +- + 3 files changed, 6 insertions(+), 7 deletions(-) + +diff --git a/examples/generate_chain_test.rb b/examples/generate_chain_test.rb +index 2676760..d84c7ae 100644 +--- a/examples/generate_chain_test.rb ++++ b/examples/generate_chain_test.rb +@@ -11,10 +11,7 @@ certs before date will be the first of the current month + =end + + require 'bundler/inline' +-gemfile(true) do +- source 'https://rubygems.org' +- gem 'certificate_authority' +-end ++require 'certificate_authority' + + module GenerateChainCerts + +@@ -39,7 +36,7 @@ module GenerateChainCerts + + { + not_before: Time.new(yr, mo, 1, 0, 0, 0, zone), +- not_after: Time.new(yr+4, mo, 1, 0, 0, 0, zone) ++ not_after: Time.new(yr+11, mo, 1, 0, 0, 0, zone) + } + ) + end +@@ -83,6 +80,8 @@ module GenerateChainCerts + cert.subject.common_name = common_name + cert.serial_number.number = parent.serial_number.number + 100 + cert.parent = parent ++ cert.not_before = before_after[:not_before] ++ cert.not_after = before_after[:not_after] + + cert.key_material.generate_key + cert.sign! +diff --git a/examples/generate_client_test.rb b/examples/generate_client_test.rb +index f875916..e197428 100644 +--- a/examples/generate_client_test.rb ++++ b/examples/generate_client_test.rb +@@ -107,7 +107,7 @@ module GenerateClientCerts + zone = '+00:00' + + @before = Time.new yr , mo, 1, 0, 0, 0, zone +- @after = Time.new yr+4, mo, 1, 0, 0, 0, zone ++ @after = Time.new yr+11, mo, 1, 0, 0, 0, zone + + @b_exp = Time.new yr-1, mo, 1, 0, 0, 0, zone + @a_exp = Time.new yr , mo, 1, 0, 0, 0, zone +diff --git a/examples/generate_server_test.rb b/examples/generate_server_test.rb +index cf9364a..f73e660 100644 +--- a/examples/generate_server_test.rb ++++ b/examples/generate_server_test.rb +@@ -33,7 +33,7 @@ module GenerateServerCerts + zone = '+00:00' + + cert.not_before = Time.new yr , mo, 1, 0, 0, 0, zone +- cert.not_after = Time.new yr+4, mo, 1, 0, 0, 0, zone ++ cert.not_after = Time.new yr+11, mo, 1, 0, 0, 0, zone + cert.public_key = key.public_key + cert.sign ca_key, SIGN_ALGORITHM.new + puts "New:", cert.to_text, "" diff --git a/patches/0020-update-ex-certs.patch b/patches/0020-update-ex-certs.patch new file mode 100644 index 0000000..05c5e47 --- /dev/null +++ b/patches/0020-update-ex-certs.patch @@ -0,0 +1,1499 @@ +From: Athos Ribeiro +Date: Tue, 15 Jul 2025 10:38:43 -0300 +Subject: Update example certificates + +Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1078640 +Forwarded: not-needed +Last-Update: 2025-07-15 + +Update the example certificates so that the upstream unit tests keep +passing throughout the next Debian release (trixie) support cycle. This +is done by updating the certificates validity to 11 years (possibly +covering LTS/eLTS). +Last-Update: 2025-07-15 +--- + examples/puma/cert_puma.pem | 30 ++++---- + examples/puma/chain_cert/ca.crt | 33 ++++---- + examples/puma/chain_cert/ca.key | 50 ++++++------ + examples/puma/chain_cert/ca_chain.pem | 65 ++++++++-------- + examples/puma/chain_cert/cert.crt | 32 ++++---- + examples/puma/chain_cert/cert.key | 50 ++++++------ + examples/puma/chain_cert/cert_chain.pem | 97 ++++++++++++------------ + examples/puma/chain_cert/intermediate.crt | 32 ++++---- + examples/puma/chain_cert/intermediate.key | 50 ++++++------ + examples/puma/client_certs/ca.crt | 28 +++---- + examples/puma/client_certs/ca.key | 50 ++++++------ + examples/puma/client_certs/ca_store.jks | Bin 848 -> 848 bytes + examples/puma/client_certs/ca_store.p12 | Bin 2568 -> 2584 bytes + examples/puma/client_certs/client.crt | 30 ++++---- + examples/puma/client_certs/client.key | 50 ++++++------ + examples/puma/client_certs/client_expired.crt | 30 ++++---- + examples/puma/client_certs/client_expired.key | 50 ++++++------ + examples/puma/client_certs/client_unknown.crt | 30 ++++---- + examples/puma/client_certs/client_unknown.key | 50 ++++++------ + examples/puma/client_certs/keystore.jks | Bin 4392 -> 4392 bytes + examples/puma/client_certs/server.crt | 30 ++++---- + examples/puma/client_certs/server.key | 50 ++++++------ + examples/puma/client_certs/server.p12 | Bin 3408 -> 3424 bytes + examples/puma/client_certs/unknown_ca.crt | 28 +++---- + examples/puma/client_certs/unknown_ca.key | 50 ++++++------ + examples/puma/client_certs/unknown_ca_store.p12 | Bin 2592 -> 2608 bytes + examples/puma/encrypted_puma_keypair.pem | 56 +++++++------- + examples/puma/keystore.jks | Bin 2253 -> 2252 bytes + examples/puma/puma_keypair.pem | 50 ++++++------ + examples/puma/server.p12 | Bin 2700 -> 2716 bytes + 30 files changed, 509 insertions(+), 512 deletions(-) + +diff --git a/examples/puma/cert_puma.pem b/examples/puma/cert_puma.pem +index 6cbb9c1..cace838 100644 +--- a/examples/puma/cert_puma.pem ++++ b/examples/puma/cert_puma.pem +@@ -1,21 +1,21 @@ + -----BEGIN CERTIFICATE----- + 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 + -----END CERTIFICATE----- +diff --git a/examples/puma/chain_cert/ca.crt b/examples/puma/chain_cert/ca.crt +index 9acfe79..bcc8e26 100644 +--- a/examples/puma/chain_cert/ca.crt ++++ b/examples/puma/chain_cert/ca.crt +@@ -1,20 +1,19 @@ + -----BEGIN CERTIFICATE----- +-MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQ0FADAcMRowGAYDVQQDDBFjYS5w +-dW1hLmxvY2FsaG9zdDAeFw0yNDA4MDEwMDAwMDBaFw0yODA4MDEwMDAwMDBaMBwx ++MIIDEjCCAfqgAwIBAgIBATANBgkqhkiG9w0BAQ0FADAcMRowGAYDVQQDDBFjYS5w ++dW1hLmxvY2FsaG9zdDAeFw0yNTA3MDEwMDAwMDBaFw0zNjA3MDEwMDAwMDBaMBwx + GjAYBgNVBAMMEWNhLnB1bWEubG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOC +-AQ8AMIIBCgKCAQEAuKZ43p+68AFTSVno4p8rxk2Ixngw9CR9K5/11LCS+nM9jPph +-E0aWluwRAdWNs0CLN9A9ZKqJq+G67Y6CAw87g4RfUaZUkBkClwH76WUYzMTo9P3e +-UMpwzVtdrijW2Y/9MnxMCyt14WVfoY0itjEyfeGT3FbP8yKuk2qYoz3YecrhiRGu +-xv5gFZOd0hxIL0HkRe0lrpgWDj4MrvsBqUnb4aeqDgjz4lPUWo/GSvgU7xcV5Q6c +-Ti8FB9k3HZfphb2JHydZfxIqCCeflZlAQBBKNevWbSxhfsfjzqHmC64M9ELoJ/1J +-JFoX+zdlv9DqOn2k67N4rZcfptoEKPQThPmX+wIDAQABo4GFMIGCMB0GA1UdDgQW +-BBQuEpl4C66N1A3ZvoVOcO8k6G21nTAOBgNVHQ8BAf8EBAMCAgQwEwYDVR0lBAww +-CgYIKwYBBQUHAwEwDAYDVR0TBAUwAwEB/zAuBgNVHSMEJzAloSCkHjAcMRowGAYD +-VQQDDBFjYS5wdW1hLmxvY2FsaG9zdIIBATANBgkqhkiG9w0BAQ0FAAOCAQEAOy3A +-9GPAQvTeqbmvMlkJh8jtTRUOKmcGUNPFQqJ4aTx/BXh8x415zjW9ZSjLN7ZSNxjJ +-nFm1XeD9I1EB1JjXwnkNTgC7zUn+kyuIMBxEvfsM0Pfdumr8VOrlidIJeTLBs029 +-tYd/kVlaZfoDS/cSu8ezS7urwY/usHRuku6MUCs4L1WZlDptweGUCWsESpIEGF7d +-ZJC8f6C8rwQimOyhhouVSlOh1NxC338TvQSflhRtWiP4lIgDVNMmb4MRDAUzbkrg +-SH4+Oho7EeoK2VSmgqSAyIpOTBBhIcdEgib7Hz+Uq+Y6KekuD8Y8SslbXitBqgS3 +-8uByucqDNovFjYNMKw== ++AQ8AMIIBCgKCAQEArOhy3ADotcJ0F7rl0KpWlm/a6wkyeSbTNPd+gaccACR1wd92 ++kXs2/S5day5/lP6uVUxrrKU2fhFXSy+aI5bng5cQl0ita6sVZCThs9k683w/fobc ++OMIKk3MFPxF4QJTa4iNb21g8olKYT/L2b0MUTq+AvnlC3mAAJkLrXjML3wrhwORa ++VmTdsepqMOkQD3EcuggbkfkUK3p3xfVcHJ2iEfRhGY/7JxNcm1o6YLbj8WPqAKcH ++0f8KNjzr0IJuMDKy/jArV7VdA9TeGoq6ECMkIIx7y9lwu0gfkJNkmmEYJbU7c0ik ++UzwIko3qxlvB9nugrzzsG11aTwYkLu2WE1BhcQIDAQABo18wXTAdBgNVHQ4EFgQU ++3ZgoXoMYzlhYDr93B73HJUlsQXgwDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoG ++CCsGAQUFBwMBMAwGA1UdEwQFMAMBAf8wCQYDVR0jBAIwADANBgkqhkiG9w0BAQ0F ++AAOCAQEAjwWu4jaf6ybB4BVNuNvvFFCa40iRsjYH7W9LSjtkObEDyOAr4GK3j83b ++3r23HVE4y/Aiz502DlENUdhLw3rPqfY6efHG1k6W0RiKbL++0BLQOmta3e8fpgaq ++DDkmGGt60hpizfftkkGoZUVs+MabuJwCezs5n+KcyztGhGKCTtLJfv+1N1aevrFF ++50E7rkqTkhHsCjMvL/dnmDVzuXDkqJ2SGeWC9fSwWEKmVEA6QDCXPc8RyGEgJPgF ++gK7Q+5JF6zd3ZSVlcX8lCivXw4GX6Mh2ZjE3DtDIaGpuQIFV/y3vo0c/8RVMBiMo ++dGuf7tB1eQn0vSFRUc3UrZIMBspK7Q== + -----END CERTIFICATE----- +diff --git a/examples/puma/chain_cert/ca.key b/examples/puma/chain_cert/ca.key +index c884487..8de2968 100644 +--- a/examples/puma/chain_cert/ca.key ++++ b/examples/puma/chain_cert/ca.key +@@ -1,27 +1,27 @@ + -----BEGIN RSA PRIVATE KEY----- +-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 + -----END RSA PRIVATE KEY----- +diff --git a/examples/puma/chain_cert/ca_chain.pem b/examples/puma/chain_cert/ca_chain.pem +index 7d500ef..7196332 100644 +--- a/examples/puma/chain_cert/ca_chain.pem ++++ b/examples/puma/chain_cert/ca_chain.pem +@@ -1,40 +1,39 @@ + -----BEGIN CERTIFICATE----- + MIIDMjCCAhqgAwIBAgIBCzANBgkqhkiG9w0BAQ0FADAcMRowGAYDVQQDDBFjYS5w +-dW1hLmxvY2FsaG9zdDAeFw0yNDA4MDEwMDAwMDBaFw0yODA4MDEwMDAwMDBaMCYx ++dW1hLmxvY2FsaG9zdDAeFw0yNTA3MDEwMDAwMDBaFw0zNjA3MDEwMDAwMDBaMCYx + JDAiBgNVBAMMG2ludGVybWVkaWF0ZS5wdW1hLmxvY2FsaG9zdDCCASIwDQYJKoZI +-hvcNAQEBBQADggEPADCCAQoCggEBAKe0Vb0OyhNyWi4/u1jwLOkDYGx7+aXOJJyN +-5ExJNS0goWy8+OQKVBwFgZZ5jqqfrXlLheOpAEpRm7TIJVTIwD1/gi/zrNN1ec3D +-uJMBvlTzNVozfBncQ9EJ62JRC3I/56W1xYMekCIG2SjzSnAfNSojyN6SLxGmtT89 +-xN6parFq/GcvEtssDRVVUm6pyIOgpDOgTuUcqT3qUgOkN9w+5ZgjKWAc1BuMipR9 +-f8wwjuhXx2XlH2lodVWl94xo4ipY7sd2frF/oil9SXDC3ZrwGdkt9TQaCMYlt74V +-yNxPAX5XwRH8b2OAsIGkPNh7TvIkKR33JkKcXXpZbxlRP6PDWR0CAwEAAaN1MHMw +-HQYDVR0OBBYEFNVfAg8SLxqTN54wYWiWfxVic+iHMA4GA1UdDwEB/wQEAwICBDAT +-BgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMEBTADAQH/MB8GA1UdIwQYMBaAFC4S +-mXgLro3UDdm+hU5w7yTobbWdMA0GCSqGSIb3DQEBDQUAA4IBAQAOdOtD3py2k4OO +-0Q5KvmvyybaeSlFPM6/iXNakmqJY3lELnJgjWYgBXlOK91M7F2xG8YRFoBrUipXd +-rMAburoWjnKvMoPaGZqbpligfkPIueo+ON/Q27UhvH2EYFzTOGjfnCiSCzpekesC +-32MhK7mB9Uzu9yxDgtRu0IRqCk9WbU35qDzx7mUEZwCHe11T6tV4k9ZHAvhqEvaq +-sqAgA+OoXBev6wx1tWgiqf40vuKZBRutWUSTHgGIXqain2l5b7Jv6TkCNI4HttHN +-43oME4M6P1/iH+l99Y7fZBkLGnkGYPiWXQH9NyydQVHOBm3dN26QJzAmV06ZLxEm +-iX6YKGNd ++hvcNAQEBBQADggEPADCCAQoCggEBAI1oWjP0qqF7UZqnmfU2nTVC+IotygpP2jFe ++bd+navwcWLoizHEy/h5QdmiEUu9L/kR9krMfhcOL7z0mETBVQpfN3JsYkn/gLyJd ++6XES3dwHXINAp6LMfwQXOYCbv+yC5KRJ/kER/PIrY2/bwLR8eT5mOZJqtmpE3LiQ ++UUEXcEX5ycQ+xdwYmKgGJCjmDdBhSgMSMY1dhZM5nk/HI8jRT10iJ/g6GKwsoveu ++B8WSA4iX1ZUxRFGhaXbkDo+6ldzPPERa9yQELy8iQHW3hC35v0xFSfirL2DOvSRf ++p3Vf/7zHn3EEF8QBO6FHCnDuHUqYXnjjv1k2f+pAQQLQQXT2yhsCAwEAAaN1MHMw ++HQYDVR0OBBYEFAx+NE6dAvT7H5QU+yyK9wV64l/OMA4GA1UdDwEB/wQEAwICBDAT ++BgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMEBTADAQH/MB8GA1UdIwQYMBaAFN2Y ++KF6DGM5YWA6/dwe9xyVJbEF4MA0GCSqGSIb3DQEBDQUAA4IBAQBsxxIbUQvJEYsu ++jGmNVXTbB3h9yh8u0pYEBbPSTKo38Ah4OAtrpnzn3SaniRdahFegn4wmcNJr2BAj ++8EFkNdLfHzB/NnDfzmHAfZlkf2OLgDotKTT2psL6wgWFLIu47MFoge4z4zVFLaNp ++ESJUiHDoFIms6DXDFoKiCO0IA6sCrYEkaOBfC8IMaPyDcnIrrdEuTuZd/5DxhAih ++jlNUPszXAh7wGVoFyKiEjbACmQXAWKvTtALNl5Z3aXeucR3iamrUDVmJyKKYsdvh ++24dNlMF6beMl8v8tIQ0iQBbkD/jsp3SjzrANMNhgOQHKcXQ84j1C3AAkNwTL0M7o ++05PKNc+5 + -----END CERTIFICATE----- + -----BEGIN CERTIFICATE----- +-MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQ0FADAcMRowGAYDVQQDDBFjYS5w +-dW1hLmxvY2FsaG9zdDAeFw0yNDA4MDEwMDAwMDBaFw0yODA4MDEwMDAwMDBaMBwx ++MIIDEjCCAfqgAwIBAgIBATANBgkqhkiG9w0BAQ0FADAcMRowGAYDVQQDDBFjYS5w ++dW1hLmxvY2FsaG9zdDAeFw0yNTA3MDEwMDAwMDBaFw0zNjA3MDEwMDAwMDBaMBwx + GjAYBgNVBAMMEWNhLnB1bWEubG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOC +-AQ8AMIIBCgKCAQEAuKZ43p+68AFTSVno4p8rxk2Ixngw9CR9K5/11LCS+nM9jPph +-E0aWluwRAdWNs0CLN9A9ZKqJq+G67Y6CAw87g4RfUaZUkBkClwH76WUYzMTo9P3e +-UMpwzVtdrijW2Y/9MnxMCyt14WVfoY0itjEyfeGT3FbP8yKuk2qYoz3YecrhiRGu +-xv5gFZOd0hxIL0HkRe0lrpgWDj4MrvsBqUnb4aeqDgjz4lPUWo/GSvgU7xcV5Q6c +-Ti8FB9k3HZfphb2JHydZfxIqCCeflZlAQBBKNevWbSxhfsfjzqHmC64M9ELoJ/1J +-JFoX+zdlv9DqOn2k67N4rZcfptoEKPQThPmX+wIDAQABo4GFMIGCMB0GA1UdDgQW +-BBQuEpl4C66N1A3ZvoVOcO8k6G21nTAOBgNVHQ8BAf8EBAMCAgQwEwYDVR0lBAww +-CgYIKwYBBQUHAwEwDAYDVR0TBAUwAwEB/zAuBgNVHSMEJzAloSCkHjAcMRowGAYD +-VQQDDBFjYS5wdW1hLmxvY2FsaG9zdIIBATANBgkqhkiG9w0BAQ0FAAOCAQEAOy3A +-9GPAQvTeqbmvMlkJh8jtTRUOKmcGUNPFQqJ4aTx/BXh8x415zjW9ZSjLN7ZSNxjJ +-nFm1XeD9I1EB1JjXwnkNTgC7zUn+kyuIMBxEvfsM0Pfdumr8VOrlidIJeTLBs029 +-tYd/kVlaZfoDS/cSu8ezS7urwY/usHRuku6MUCs4L1WZlDptweGUCWsESpIEGF7d +-ZJC8f6C8rwQimOyhhouVSlOh1NxC338TvQSflhRtWiP4lIgDVNMmb4MRDAUzbkrg +-SH4+Oho7EeoK2VSmgqSAyIpOTBBhIcdEgib7Hz+Uq+Y6KekuD8Y8SslbXitBqgS3 +-8uByucqDNovFjYNMKw== ++AQ8AMIIBCgKCAQEArOhy3ADotcJ0F7rl0KpWlm/a6wkyeSbTNPd+gaccACR1wd92 ++kXs2/S5day5/lP6uVUxrrKU2fhFXSy+aI5bng5cQl0ita6sVZCThs9k683w/fobc ++OMIKk3MFPxF4QJTa4iNb21g8olKYT/L2b0MUTq+AvnlC3mAAJkLrXjML3wrhwORa ++VmTdsepqMOkQD3EcuggbkfkUK3p3xfVcHJ2iEfRhGY/7JxNcm1o6YLbj8WPqAKcH ++0f8KNjzr0IJuMDKy/jArV7VdA9TeGoq6ECMkIIx7y9lwu0gfkJNkmmEYJbU7c0ik ++UzwIko3qxlvB9nugrzzsG11aTwYkLu2WE1BhcQIDAQABo18wXTAdBgNVHQ4EFgQU ++3ZgoXoMYzlhYDr93B73HJUlsQXgwDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoG ++CCsGAQUFBwMBMAwGA1UdEwQFMAMBAf8wCQYDVR0jBAIwADANBgkqhkiG9w0BAQ0F ++AAOCAQEAjwWu4jaf6ybB4BVNuNvvFFCa40iRsjYH7W9LSjtkObEDyOAr4GK3j83b ++3r23HVE4y/Aiz502DlENUdhLw3rPqfY6efHG1k6W0RiKbL++0BLQOmta3e8fpgaq ++DDkmGGt60hpizfftkkGoZUVs+MabuJwCezs5n+KcyztGhGKCTtLJfv+1N1aevrFF ++50E7rkqTkhHsCjMvL/dnmDVzuXDkqJ2SGeWC9fSwWEKmVEA6QDCXPc8RyGEgJPgF ++gK7Q+5JF6zd3ZSVlcX8lCivXw4GX6Mh2ZjE3DtDIaGpuQIFV/y3vo0c/8RVMBiMo ++dGuf7tB1eQn0vSFRUc3UrZIMBspK7Q== + -----END CERTIFICATE----- +diff --git a/examples/puma/chain_cert/cert.crt b/examples/puma/chain_cert/cert.crt +index 8467b47..89010e8 100644 +--- a/examples/puma/chain_cert/cert.crt ++++ b/examples/puma/chain_cert/cert.crt +@@ -1,20 +1,20 @@ + -----BEGIN CERTIFICATE----- + MIIDLjCCAhagAwIBAgIBbzANBgkqhkiG9w0BAQ0FADAmMSQwIgYDVQQDDBtpbnRl +-cm1lZGlhdGUucHVtYS5sb2NhbGhvc3QwHhcNMjQwODExMDAwMDAwWhcNMjUwODEx ++cm1lZGlhdGUucHVtYS5sb2NhbGhvc3QwHhcNMjUwNzAxMDAwMDAwWhcNMzYwNzAx + MDAwMDAwWjAeMRwwGgYDVQQDDBN0ZXN0LnB1bWEubG9jYWxob3N0MIIBIjANBgkq +-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkH1hQqC0EFwYxi5+Ihqat9Yqebpk0A9x +-ZzdO68eBSw4glnhh/+8VNB238q3nVD+0oL5oOBFVPAA34jUrrngS3LSl7tx4y1tj +-jqn2LwKkdjAaaQn7uNKf/Ow6JX8dsaFpEUmabOzQBbhQtUDdbHmX1jgJYy8siSdU +-ExXtNHAA+kqlif0Hcj1Xx8dlXQlLiDgdO1I5h84rjfdX+TUGwnJO5MkIZ5X5r6tE +-hk8s/2dvbrU2AKcP+pTY4jw/fyDNd9q8OdW186RlBdS+uyX3D2hh+8aVLONQIJOx +-wRyQaImYzHPWMDO6MuQ5/5LAxFFYWCGSLvUTdrillB0Snmppe9uGhwIDAQABo28w +-bTAdBgNVHQ4EFgQUQT/iPOTx/zDEIgWHiraGJdrud74wCwYDVR0PBAQDAgbAMBMG +-A1UdJQQMMAoGCCsGAQUFBwMBMAkGA1UdEwQCMAAwHwYDVR0jBBgwFoAU1V8CDxIv +-GpM3njBhaJZ/FWJz6IcwDQYJKoZIhvcNAQENBQADggEBADHQ75un1UtxDI9oluXu +-wEJL0515nIAKjaWFCl0Z/CGaAWkkJERk0JBxTe9J/MrYY68NYCCAusRoUoRbvcA2 +-GQ8vKae5V6/md+npZpKQznmUk+nZMzNKr+QoMY/nvtLA5tZ85fsU40H4nbvb23EY +-3o6IiEbLD0G3FbIFtkgQ7+j9w6bvvMwd+3Ed0jSjRl4wKi4cXgD1UIyce/MVzAzT +-bXW2SLWjfRzcTsrAnrbno5S3g+KMD1w9zGNppYiFH0zydpatKjJW18r/6XgJqoim +-Rl5OGVnMNgIAw+S8/G3+/IIPXWHFE29R3j3oXjm/F8570TpQTYyx8wOmEr+zJPv0 +-8gU= ++hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnweGJw3HXhvtIAFL6i3hzFdD5F3UG2Nm ++hIGaiKyDy71b25rkXFduG8R9i4s5rVBUdafA2OlrRDWMMrlYSudJnlB6P2jtBRxB ++7iw66vBVCBstDiKEr5xWFceG+2WpHU1peLCj72Ujuy/Xc/85S+70a9ISXItDRuyY ++tNTLi1HROioH6A0MfpvoLKxHYyoJ1dxu/eXikY8uk+J1cKogOP0jjn0VieJXptqc ++nHICV5/LmX3KC7ZxowexrQhTw81cKtx0fVeyZAHlM0rmIj23iajLqLtE+tq07P50 ++OP8uABiK53L9RH55SlM/7PjDss6/VZDG7xsRBhEzaU39jOuSmZdrewIDAQABo28w ++bTAdBgNVHQ4EFgQUBt0gNG2VFq4KeC5rPkvqxlxUZpgwCwYDVR0PBAQDAgbAMBMG ++A1UdJQQMMAoGCCsGAQUFBwMBMAkGA1UdEwQCMAAwHwYDVR0jBBgwFoAUDH40Tp0C ++9PsflBT7LIr3BXriX84wDQYJKoZIhvcNAQENBQADggEBAIsh0gAB91/phH0XSbaV ++5X7bOvUQZBkF6VU3FMSKz1qeP7zhxhHnsTQVAWRCT4QdQ0bXzWDaUubUfS1uL9fW ++hMS6qJ/X56WjYvzUqr6Haxxc6nF2SzaZfNHC02uBOBqZaOWsf0rEv4M9A1PPPyy4 ++ZO5nCLsLvReiAXViAyRO2HjXej/820fXh0uwEZgR8tUaQEt5frphr9cT/Q70kn+M ++XfpXvhGmLZ9C+0pXS0ILJRb8DccdfL6UMmQEPyfuW2OJrCDwvK3aG4KA2mdAg9Ca ++OvxCQ9WgAkMR2P7dHovoYaMsl8Nipiy/i0YeVG1rJAledWOO05xiVPdiTPkJk8JC ++PPU= + -----END CERTIFICATE----- +diff --git a/examples/puma/chain_cert/cert.key b/examples/puma/chain_cert/cert.key +index ed2bd0d..790455c 100644 +--- a/examples/puma/chain_cert/cert.key ++++ b/examples/puma/chain_cert/cert.key +@@ -1,27 +1,27 @@ + -----BEGIN RSA PRIVATE KEY----- +-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 + -----END RSA PRIVATE KEY----- +diff --git a/examples/puma/chain_cert/cert_chain.pem b/examples/puma/chain_cert/cert_chain.pem +index 5f391f3..40ed0f5 100644 +--- a/examples/puma/chain_cert/cert_chain.pem ++++ b/examples/puma/chain_cert/cert_chain.pem +@@ -1,60 +1,59 @@ + -----BEGIN CERTIFICATE----- + MIIDLjCCAhagAwIBAgIBbzANBgkqhkiG9w0BAQ0FADAmMSQwIgYDVQQDDBtpbnRl +-cm1lZGlhdGUucHVtYS5sb2NhbGhvc3QwHhcNMjQwODExMDAwMDAwWhcNMjUwODEx ++cm1lZGlhdGUucHVtYS5sb2NhbGhvc3QwHhcNMjUwNzAxMDAwMDAwWhcNMzYwNzAx + MDAwMDAwWjAeMRwwGgYDVQQDDBN0ZXN0LnB1bWEubG9jYWxob3N0MIIBIjANBgkq +-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkH1hQqC0EFwYxi5+Ihqat9Yqebpk0A9x +-ZzdO68eBSw4glnhh/+8VNB238q3nVD+0oL5oOBFVPAA34jUrrngS3LSl7tx4y1tj +-jqn2LwKkdjAaaQn7uNKf/Ow6JX8dsaFpEUmabOzQBbhQtUDdbHmX1jgJYy8siSdU +-ExXtNHAA+kqlif0Hcj1Xx8dlXQlLiDgdO1I5h84rjfdX+TUGwnJO5MkIZ5X5r6tE +-hk8s/2dvbrU2AKcP+pTY4jw/fyDNd9q8OdW186RlBdS+uyX3D2hh+8aVLONQIJOx +-wRyQaImYzHPWMDO6MuQ5/5LAxFFYWCGSLvUTdrillB0Snmppe9uGhwIDAQABo28w +-bTAdBgNVHQ4EFgQUQT/iPOTx/zDEIgWHiraGJdrud74wCwYDVR0PBAQDAgbAMBMG +-A1UdJQQMMAoGCCsGAQUFBwMBMAkGA1UdEwQCMAAwHwYDVR0jBBgwFoAU1V8CDxIv +-GpM3njBhaJZ/FWJz6IcwDQYJKoZIhvcNAQENBQADggEBADHQ75un1UtxDI9oluXu +-wEJL0515nIAKjaWFCl0Z/CGaAWkkJERk0JBxTe9J/MrYY68NYCCAusRoUoRbvcA2 +-GQ8vKae5V6/md+npZpKQznmUk+nZMzNKr+QoMY/nvtLA5tZ85fsU40H4nbvb23EY +-3o6IiEbLD0G3FbIFtkgQ7+j9w6bvvMwd+3Ed0jSjRl4wKi4cXgD1UIyce/MVzAzT +-bXW2SLWjfRzcTsrAnrbno5S3g+KMD1w9zGNppYiFH0zydpatKjJW18r/6XgJqoim +-Rl5OGVnMNgIAw+S8/G3+/IIPXWHFE29R3j3oXjm/F8570TpQTYyx8wOmEr+zJPv0 +-8gU= ++hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnweGJw3HXhvtIAFL6i3hzFdD5F3UG2Nm ++hIGaiKyDy71b25rkXFduG8R9i4s5rVBUdafA2OlrRDWMMrlYSudJnlB6P2jtBRxB ++7iw66vBVCBstDiKEr5xWFceG+2WpHU1peLCj72Ujuy/Xc/85S+70a9ISXItDRuyY ++tNTLi1HROioH6A0MfpvoLKxHYyoJ1dxu/eXikY8uk+J1cKogOP0jjn0VieJXptqc ++nHICV5/LmX3KC7ZxowexrQhTw81cKtx0fVeyZAHlM0rmIj23iajLqLtE+tq07P50 ++OP8uABiK53L9RH55SlM/7PjDss6/VZDG7xsRBhEzaU39jOuSmZdrewIDAQABo28w ++bTAdBgNVHQ4EFgQUBt0gNG2VFq4KeC5rPkvqxlxUZpgwCwYDVR0PBAQDAgbAMBMG ++A1UdJQQMMAoGCCsGAQUFBwMBMAkGA1UdEwQCMAAwHwYDVR0jBBgwFoAUDH40Tp0C ++9PsflBT7LIr3BXriX84wDQYJKoZIhvcNAQENBQADggEBAIsh0gAB91/phH0XSbaV ++5X7bOvUQZBkF6VU3FMSKz1qeP7zhxhHnsTQVAWRCT4QdQ0bXzWDaUubUfS1uL9fW ++hMS6qJ/X56WjYvzUqr6Haxxc6nF2SzaZfNHC02uBOBqZaOWsf0rEv4M9A1PPPyy4 ++ZO5nCLsLvReiAXViAyRO2HjXej/820fXh0uwEZgR8tUaQEt5frphr9cT/Q70kn+M ++XfpXvhGmLZ9C+0pXS0ILJRb8DccdfL6UMmQEPyfuW2OJrCDwvK3aG4KA2mdAg9Ca ++OvxCQ9WgAkMR2P7dHovoYaMsl8Nipiy/i0YeVG1rJAledWOO05xiVPdiTPkJk8JC ++PPU= + -----END CERTIFICATE----- + -----BEGIN CERTIFICATE----- + MIIDMjCCAhqgAwIBAgIBCzANBgkqhkiG9w0BAQ0FADAcMRowGAYDVQQDDBFjYS5w +-dW1hLmxvY2FsaG9zdDAeFw0yNDA4MDEwMDAwMDBaFw0yODA4MDEwMDAwMDBaMCYx ++dW1hLmxvY2FsaG9zdDAeFw0yNTA3MDEwMDAwMDBaFw0zNjA3MDEwMDAwMDBaMCYx + JDAiBgNVBAMMG2ludGVybWVkaWF0ZS5wdW1hLmxvY2FsaG9zdDCCASIwDQYJKoZI +-hvcNAQEBBQADggEPADCCAQoCggEBAKe0Vb0OyhNyWi4/u1jwLOkDYGx7+aXOJJyN +-5ExJNS0goWy8+OQKVBwFgZZ5jqqfrXlLheOpAEpRm7TIJVTIwD1/gi/zrNN1ec3D +-uJMBvlTzNVozfBncQ9EJ62JRC3I/56W1xYMekCIG2SjzSnAfNSojyN6SLxGmtT89 +-xN6parFq/GcvEtssDRVVUm6pyIOgpDOgTuUcqT3qUgOkN9w+5ZgjKWAc1BuMipR9 +-f8wwjuhXx2XlH2lodVWl94xo4ipY7sd2frF/oil9SXDC3ZrwGdkt9TQaCMYlt74V +-yNxPAX5XwRH8b2OAsIGkPNh7TvIkKR33JkKcXXpZbxlRP6PDWR0CAwEAAaN1MHMw +-HQYDVR0OBBYEFNVfAg8SLxqTN54wYWiWfxVic+iHMA4GA1UdDwEB/wQEAwICBDAT +-BgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMEBTADAQH/MB8GA1UdIwQYMBaAFC4S +-mXgLro3UDdm+hU5w7yTobbWdMA0GCSqGSIb3DQEBDQUAA4IBAQAOdOtD3py2k4OO +-0Q5KvmvyybaeSlFPM6/iXNakmqJY3lELnJgjWYgBXlOK91M7F2xG8YRFoBrUipXd +-rMAburoWjnKvMoPaGZqbpligfkPIueo+ON/Q27UhvH2EYFzTOGjfnCiSCzpekesC +-32MhK7mB9Uzu9yxDgtRu0IRqCk9WbU35qDzx7mUEZwCHe11T6tV4k9ZHAvhqEvaq +-sqAgA+OoXBev6wx1tWgiqf40vuKZBRutWUSTHgGIXqain2l5b7Jv6TkCNI4HttHN +-43oME4M6P1/iH+l99Y7fZBkLGnkGYPiWXQH9NyydQVHOBm3dN26QJzAmV06ZLxEm +-iX6YKGNd ++hvcNAQEBBQADggEPADCCAQoCggEBAI1oWjP0qqF7UZqnmfU2nTVC+IotygpP2jFe ++bd+navwcWLoizHEy/h5QdmiEUu9L/kR9krMfhcOL7z0mETBVQpfN3JsYkn/gLyJd ++6XES3dwHXINAp6LMfwQXOYCbv+yC5KRJ/kER/PIrY2/bwLR8eT5mOZJqtmpE3LiQ ++UUEXcEX5ycQ+xdwYmKgGJCjmDdBhSgMSMY1dhZM5nk/HI8jRT10iJ/g6GKwsoveu ++B8WSA4iX1ZUxRFGhaXbkDo+6ldzPPERa9yQELy8iQHW3hC35v0xFSfirL2DOvSRf ++p3Vf/7zHn3EEF8QBO6FHCnDuHUqYXnjjv1k2f+pAQQLQQXT2yhsCAwEAAaN1MHMw ++HQYDVR0OBBYEFAx+NE6dAvT7H5QU+yyK9wV64l/OMA4GA1UdDwEB/wQEAwICBDAT ++BgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMEBTADAQH/MB8GA1UdIwQYMBaAFN2Y ++KF6DGM5YWA6/dwe9xyVJbEF4MA0GCSqGSIb3DQEBDQUAA4IBAQBsxxIbUQvJEYsu ++jGmNVXTbB3h9yh8u0pYEBbPSTKo38Ah4OAtrpnzn3SaniRdahFegn4wmcNJr2BAj ++8EFkNdLfHzB/NnDfzmHAfZlkf2OLgDotKTT2psL6wgWFLIu47MFoge4z4zVFLaNp ++ESJUiHDoFIms6DXDFoKiCO0IA6sCrYEkaOBfC8IMaPyDcnIrrdEuTuZd/5DxhAih ++jlNUPszXAh7wGVoFyKiEjbACmQXAWKvTtALNl5Z3aXeucR3iamrUDVmJyKKYsdvh ++24dNlMF6beMl8v8tIQ0iQBbkD/jsp3SjzrANMNhgOQHKcXQ84j1C3AAkNwTL0M7o ++05PKNc+5 + -----END CERTIFICATE----- + -----BEGIN CERTIFICATE----- +-MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQ0FADAcMRowGAYDVQQDDBFjYS5w +-dW1hLmxvY2FsaG9zdDAeFw0yNDA4MDEwMDAwMDBaFw0yODA4MDEwMDAwMDBaMBwx ++MIIDEjCCAfqgAwIBAgIBATANBgkqhkiG9w0BAQ0FADAcMRowGAYDVQQDDBFjYS5w ++dW1hLmxvY2FsaG9zdDAeFw0yNTA3MDEwMDAwMDBaFw0zNjA3MDEwMDAwMDBaMBwx + GjAYBgNVBAMMEWNhLnB1bWEubG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOC +-AQ8AMIIBCgKCAQEAuKZ43p+68AFTSVno4p8rxk2Ixngw9CR9K5/11LCS+nM9jPph +-E0aWluwRAdWNs0CLN9A9ZKqJq+G67Y6CAw87g4RfUaZUkBkClwH76WUYzMTo9P3e +-UMpwzVtdrijW2Y/9MnxMCyt14WVfoY0itjEyfeGT3FbP8yKuk2qYoz3YecrhiRGu +-xv5gFZOd0hxIL0HkRe0lrpgWDj4MrvsBqUnb4aeqDgjz4lPUWo/GSvgU7xcV5Q6c +-Ti8FB9k3HZfphb2JHydZfxIqCCeflZlAQBBKNevWbSxhfsfjzqHmC64M9ELoJ/1J +-JFoX+zdlv9DqOn2k67N4rZcfptoEKPQThPmX+wIDAQABo4GFMIGCMB0GA1UdDgQW +-BBQuEpl4C66N1A3ZvoVOcO8k6G21nTAOBgNVHQ8BAf8EBAMCAgQwEwYDVR0lBAww +-CgYIKwYBBQUHAwEwDAYDVR0TBAUwAwEB/zAuBgNVHSMEJzAloSCkHjAcMRowGAYD +-VQQDDBFjYS5wdW1hLmxvY2FsaG9zdIIBATANBgkqhkiG9w0BAQ0FAAOCAQEAOy3A +-9GPAQvTeqbmvMlkJh8jtTRUOKmcGUNPFQqJ4aTx/BXh8x415zjW9ZSjLN7ZSNxjJ +-nFm1XeD9I1EB1JjXwnkNTgC7zUn+kyuIMBxEvfsM0Pfdumr8VOrlidIJeTLBs029 +-tYd/kVlaZfoDS/cSu8ezS7urwY/usHRuku6MUCs4L1WZlDptweGUCWsESpIEGF7d +-ZJC8f6C8rwQimOyhhouVSlOh1NxC338TvQSflhRtWiP4lIgDVNMmb4MRDAUzbkrg +-SH4+Oho7EeoK2VSmgqSAyIpOTBBhIcdEgib7Hz+Uq+Y6KekuD8Y8SslbXitBqgS3 +-8uByucqDNovFjYNMKw== ++AQ8AMIIBCgKCAQEArOhy3ADotcJ0F7rl0KpWlm/a6wkyeSbTNPd+gaccACR1wd92 ++kXs2/S5day5/lP6uVUxrrKU2fhFXSy+aI5bng5cQl0ita6sVZCThs9k683w/fobc ++OMIKk3MFPxF4QJTa4iNb21g8olKYT/L2b0MUTq+AvnlC3mAAJkLrXjML3wrhwORa ++VmTdsepqMOkQD3EcuggbkfkUK3p3xfVcHJ2iEfRhGY/7JxNcm1o6YLbj8WPqAKcH ++0f8KNjzr0IJuMDKy/jArV7VdA9TeGoq6ECMkIIx7y9lwu0gfkJNkmmEYJbU7c0ik ++UzwIko3qxlvB9nugrzzsG11aTwYkLu2WE1BhcQIDAQABo18wXTAdBgNVHQ4EFgQU ++3ZgoXoMYzlhYDr93B73HJUlsQXgwDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoG ++CCsGAQUFBwMBMAwGA1UdEwQFMAMBAf8wCQYDVR0jBAIwADANBgkqhkiG9w0BAQ0F ++AAOCAQEAjwWu4jaf6ybB4BVNuNvvFFCa40iRsjYH7W9LSjtkObEDyOAr4GK3j83b ++3r23HVE4y/Aiz502DlENUdhLw3rPqfY6efHG1k6W0RiKbL++0BLQOmta3e8fpgaq ++DDkmGGt60hpizfftkkGoZUVs+MabuJwCezs5n+KcyztGhGKCTtLJfv+1N1aevrFF ++50E7rkqTkhHsCjMvL/dnmDVzuXDkqJ2SGeWC9fSwWEKmVEA6QDCXPc8RyGEgJPgF ++gK7Q+5JF6zd3ZSVlcX8lCivXw4GX6Mh2ZjE3DtDIaGpuQIFV/y3vo0c/8RVMBiMo ++dGuf7tB1eQn0vSFRUc3UrZIMBspK7Q== + -----END CERTIFICATE----- +diff --git a/examples/puma/chain_cert/intermediate.crt b/examples/puma/chain_cert/intermediate.crt +index cc9895e..501d1ad 100644 +--- a/examples/puma/chain_cert/intermediate.crt ++++ b/examples/puma/chain_cert/intermediate.crt +@@ -1,20 +1,20 @@ + -----BEGIN CERTIFICATE----- + MIIDMjCCAhqgAwIBAgIBCzANBgkqhkiG9w0BAQ0FADAcMRowGAYDVQQDDBFjYS5w +-dW1hLmxvY2FsaG9zdDAeFw0yNDA4MDEwMDAwMDBaFw0yODA4MDEwMDAwMDBaMCYx ++dW1hLmxvY2FsaG9zdDAeFw0yNTA3MDEwMDAwMDBaFw0zNjA3MDEwMDAwMDBaMCYx + JDAiBgNVBAMMG2ludGVybWVkaWF0ZS5wdW1hLmxvY2FsaG9zdDCCASIwDQYJKoZI +-hvcNAQEBBQADggEPADCCAQoCggEBAKe0Vb0OyhNyWi4/u1jwLOkDYGx7+aXOJJyN +-5ExJNS0goWy8+OQKVBwFgZZ5jqqfrXlLheOpAEpRm7TIJVTIwD1/gi/zrNN1ec3D +-uJMBvlTzNVozfBncQ9EJ62JRC3I/56W1xYMekCIG2SjzSnAfNSojyN6SLxGmtT89 +-xN6parFq/GcvEtssDRVVUm6pyIOgpDOgTuUcqT3qUgOkN9w+5ZgjKWAc1BuMipR9 +-f8wwjuhXx2XlH2lodVWl94xo4ipY7sd2frF/oil9SXDC3ZrwGdkt9TQaCMYlt74V +-yNxPAX5XwRH8b2OAsIGkPNh7TvIkKR33JkKcXXpZbxlRP6PDWR0CAwEAAaN1MHMw +-HQYDVR0OBBYEFNVfAg8SLxqTN54wYWiWfxVic+iHMA4GA1UdDwEB/wQEAwICBDAT +-BgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMEBTADAQH/MB8GA1UdIwQYMBaAFC4S +-mXgLro3UDdm+hU5w7yTobbWdMA0GCSqGSIb3DQEBDQUAA4IBAQAOdOtD3py2k4OO +-0Q5KvmvyybaeSlFPM6/iXNakmqJY3lELnJgjWYgBXlOK91M7F2xG8YRFoBrUipXd +-rMAburoWjnKvMoPaGZqbpligfkPIueo+ON/Q27UhvH2EYFzTOGjfnCiSCzpekesC +-32MhK7mB9Uzu9yxDgtRu0IRqCk9WbU35qDzx7mUEZwCHe11T6tV4k9ZHAvhqEvaq +-sqAgA+OoXBev6wx1tWgiqf40vuKZBRutWUSTHgGIXqain2l5b7Jv6TkCNI4HttHN +-43oME4M6P1/iH+l99Y7fZBkLGnkGYPiWXQH9NyydQVHOBm3dN26QJzAmV06ZLxEm +-iX6YKGNd ++hvcNAQEBBQADggEPADCCAQoCggEBAI1oWjP0qqF7UZqnmfU2nTVC+IotygpP2jFe ++bd+navwcWLoizHEy/h5QdmiEUu9L/kR9krMfhcOL7z0mETBVQpfN3JsYkn/gLyJd ++6XES3dwHXINAp6LMfwQXOYCbv+yC5KRJ/kER/PIrY2/bwLR8eT5mOZJqtmpE3LiQ ++UUEXcEX5ycQ+xdwYmKgGJCjmDdBhSgMSMY1dhZM5nk/HI8jRT10iJ/g6GKwsoveu ++B8WSA4iX1ZUxRFGhaXbkDo+6ldzPPERa9yQELy8iQHW3hC35v0xFSfirL2DOvSRf ++p3Vf/7zHn3EEF8QBO6FHCnDuHUqYXnjjv1k2f+pAQQLQQXT2yhsCAwEAAaN1MHMw ++HQYDVR0OBBYEFAx+NE6dAvT7H5QU+yyK9wV64l/OMA4GA1UdDwEB/wQEAwICBDAT ++BgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMEBTADAQH/MB8GA1UdIwQYMBaAFN2Y ++KF6DGM5YWA6/dwe9xyVJbEF4MA0GCSqGSIb3DQEBDQUAA4IBAQBsxxIbUQvJEYsu ++jGmNVXTbB3h9yh8u0pYEBbPSTKo38Ah4OAtrpnzn3SaniRdahFegn4wmcNJr2BAj ++8EFkNdLfHzB/NnDfzmHAfZlkf2OLgDotKTT2psL6wgWFLIu47MFoge4z4zVFLaNp ++ESJUiHDoFIms6DXDFoKiCO0IA6sCrYEkaOBfC8IMaPyDcnIrrdEuTuZd/5DxhAih ++jlNUPszXAh7wGVoFyKiEjbACmQXAWKvTtALNl5Z3aXeucR3iamrUDVmJyKKYsdvh ++24dNlMF6beMl8v8tIQ0iQBbkD/jsp3SjzrANMNhgOQHKcXQ84j1C3AAkNwTL0M7o ++05PKNc+5 + -----END CERTIFICATE----- +diff --git a/examples/puma/chain_cert/intermediate.key b/examples/puma/chain_cert/intermediate.key +index 9269949..a1d0df4 100644 +--- a/examples/puma/chain_cert/intermediate.key ++++ b/examples/puma/chain_cert/intermediate.key +@@ -1,27 +1,27 @@ + -----BEGIN RSA PRIVATE KEY----- +-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 + -----END RSA PRIVATE KEY----- +diff --git a/examples/puma/client_certs/ca.crt b/examples/puma/client_certs/ca.crt +index c3d39dc..599b16a 100644 +--- a/examples/puma/client_certs/ca.crt ++++ b/examples/puma/client_certs/ca.crt +@@ -1,19 +1,19 @@ + -----BEGIN CERTIFICATE----- + MIIDDjCCAfagAwIBAgIBAzANBgkqhkiG9w0BAQsFADA4MRMwEQYKCZImiZPyLGQB +-GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTELMAkGA1UEAwwCQ0EwHhcNMjQw +-ODAxMDAwMDAwWhcNMjgwODAxMDAwMDAwWjA4MRMwEQYKCZImiZPyLGQBGRYDbmV0 ++GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTELMAkGA1UEAwwCQ0EwHhcNMjUw ++NzAxMDAwMDAwWhcNMzYwNzAxMDAwMDAwWjA4MRMwEQYKCZImiZPyLGQBGRYDbmV0 + MRQwEgYKCZImiZPyLGQBGRYEcHVtYTELMAkGA1UEAwwCQ0EwggEiMA0GCSqGSIb3 +-DQEBAQUAA4IBDwAwggEKAoIBAQDPVFa7U4cqfq2Nux7VuXIUhYtaiQwxEEZuDvGI +-tlSVzpENnqFLbqH0QsOuxGgIZofsrSf4BrCzh4AoL3qY+HgVRCmkD09FnoWjFTfT +-X6v7QaCtUsrb7RNASrrgyP7rB9y7sp9oc8FNJQA3gtJQxghffO9zGhnEvPt8EGGU +-axh29BYVxvQpX1Av0SkYjTgpRus1s7r50tpoDHXhKyAHP6WEEVaN/8x1p9eXqVCT +-XIhlJJ+dgwZz/Hfnb6gr97W5G16Ceo7ybS8syKBJf2D20DOL8kLAiNpjWm9spoJi +-oxHvFMdDB3nUqZyRO+QU8gSoQBVYYqRlEnOXvouzqslUVdbLAgMBAAGjIzAhMA8G ++DQEBAQUAA4IBDwAwggEKAoIBAQCxatlqNB98n2Huwg4TNhTx81t4RDUHyRH5YUCT ++808QrxqqhNJGOSTfLDoobeObZqm8DzhZgeiMI8TQjGoQUPntARrfmS0qwBKpERJ7 ++Se2mY7J5EFZtIR4dtTlD6CPzEC1cxdgF8+2BXCb/DdSRmgEMseC32cimYZt4uumA ++ckJfmGJst18nc8R9EPZdsW1mFjGSYrfigtqEcm4UOKnBRilMhacIXHJqUKcV6oIh ++KXWraHLex62Mzfp+g9MQ2xEmOz6j/nJ/54xqmFNoIR2mZBAOvsKMQVph/EWFF8Ei +++NMkzXYbePkKaQBLMsKnonfIpfPzm4Sg8V51oSOG5KsW4JLzAgMBAAGjIzAhMA8G + A1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4IB +-AQC9iO5jvBDNgDmUq8+NfsAZngWLOG7IR+Ez5h3CzGU9yzcJgn8y6PMjzhgc20le +-WYzAHEG/KXFIfubUW/9iA8E6We0hm0LM1s9o7A9JAqsHcZ/pK2QmDW71JupU8o1z +-3Qcu7jRzPc7zYgNwaD4/ccpJTAPGg6keV3YGN2Z5RpWykOFzP7WswaMIcKQE869c +-Tyi8i71XkVrL+xx2pRiiNDOmfMkmm8TZ9tBP7n6BcRd556TTIxhjONvmamCraBQP +-msPnMtb8+H3/IsMsUw02/fQTJ91FVa3t914Y24+q5xmkasyrhinTNmsa/S939P6I +-JNNoAM6TUZrskKPtb/pMzaqn ++AQAayMxMY4+PRsjODW49e8YM+NfLIypZB9+QV432q6BTT+5KQh9DSBt1Bz5RaU1g ++tsz0sS7x0Iv7CvRwR1iDZOv8annHcjuEgxfWJ0+PBhFi2Tz1eF4EnpZt2RcJ/IMW ++xnsDLjRMASdmQxOLvxqz19fAQMAVw7ThkzicuW0ZMBX3baAf88m7w1Mu/V7P6rj5 ++yw+SfZv/qNakUv2yc/2xEDRcfrYuimZAmGhM/HaPsta2BpvWJDpYe1Hq8AFWniz0 ++C2epSzW+CdkpQZD/DIQmfWrWcBeb/XQ6hmouyJ6IWrgL45x7xcTLBOSAecBeZGMp ++npnO0PJN8Z/PQWz4sd8e2dIN + -----END CERTIFICATE----- +diff --git a/examples/puma/client_certs/ca.key b/examples/puma/client_certs/ca.key +index c689bd4..16a86af 100644 +--- a/examples/puma/client_certs/ca.key ++++ b/examples/puma/client_certs/ca.key +@@ -1,27 +1,27 @@ + -----BEGIN RSA PRIVATE KEY----- +-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 + -----END RSA PRIVATE KEY----- +diff --git a/examples/puma/client_certs/ca_store.jks b/examples/puma/client_certs/ca_store.jks +index f522926..9071747 100644 +--- a/examples/puma/client_certs/ca_store.jks ++++ b/examples/puma/client_certs/ca_store.jks +@@ -1,6 +1,8 @@ +-þíþímykey‘C”5±X.5090‚0‚ö 0  *†H†÷  0810 ++þíþímykey˜ðk‘X.5090‚0‚ö 0  *†H†÷  0810 + ’&‰“ò,dnet10 +- ’&‰“ò,dpuma1 0 U CA0 240801000000Z 280801000000Z0810 ++ ’&‰“ò,dpuma1 0 U CA0 250701000000Z 360701000000Z0810 + ’&‰“ò,dnet10 + ’&‰“ò,dpuma1 0 U CA0‚"0  *†H†÷ ‚0‚ +-‚ÏTV»S‡*~­»Õ¹r…‹Z‰ 1Fnñˆ¶T•Α ž¡Kn¡ôBîÄhf‡ì­'ø°³‡€(/z˜øxD)¤OEž…£7Ó_«ûA ­RÊÛí@JºàÈþëÜ»²ŸhsÁM%7‚ÒPÆ_|ïsļû|a”kvôÆô)_P/Ñ)8)Fë5³ºùÒÚh uá+ ?¥„VÿÌu§×—©P“\ˆe$Ÿƒsüwço¨+÷µ¹^‚zŽòm/,È I`öÐ3‹òBÀˆÚcZol¦‚b£ïÇCyÔ©œ‘;äò¨@Xb¤es—¾‹³ªÉTUÖË£#0!0Uÿ0ÿ0Uÿ0  *†H†÷  ‚½ˆîc¼̀9”«Ï~Àž‹8nÈGá3æÂÌe=Ë7 ‚2èó#ÎÛI^YŒÀA¿)qH~æÔ[ÿbÁ:Yí!›BÌÖÏhìI«qŸé+d& nõ&êTòsÝ.î4s=Îóbph>?qÊILƃ©Wv7fyF•²ás?µ¬Á£p¤ó¯\O(¼‹½W‘ZËûv¥¢43¦|É&›ÄÙöÐOî~qyç¤Ó#c8Ûæj`«hšÃç2Öüø}ÿ"Ã,S 6ýô'ÝEU­í÷^ۏªç¤jÌ«†)Ó6ký/wôþˆ$ÓhΓQšì£íoúLͪ§N ;~ úEâ$ywy[XLV +\ No newline at end of file ++‚±jÙj4|ŸaîÂ6ñó[xD5Éùa@“óO¯ª„ÒF9$ß,:(mã›f©¼8YèŒ#ÄЌjPùíߙ-*À©{Ií¦c²yVm!µ9Cè#ó-\ÅØóí\&ÿ ԑš ±à·ÙȦa›xºé€rB_˜bl·_'sÄ}ö]±mf1’b·â‚Ú„rn8©ÁF)L…§\rjP§ê‚!)u«hrÞÇ­ŒÍú~ƒÓÛ&;>£þrçŒj˜Sh!¦d¾ÂŒAZaüE…Á"øÓ$Ívxù ++iK2§¢wÈ¥ó󛄠ñ^u¡#†ä«à’ó£#0!0Uÿ0ÿ0Uÿ0  *†H†÷  ‚ÈÌLcFÈÎ n={Æ ø×Ë#*YߐWö« SOîJBCHu>QiM`¶Ìô±.ñЋû ++ôpGXƒdëüjyÇr;„ƒÖ'ObÙ<õx^ž–mÙ üƒÆ{.4L'fC‹¿³××À@Àôá“8œ¹m0÷m óÉ»ÃS.ý^Ïê¸ùË’}›ÿ¨Ö¤Rý²sý±4\~¶.Šf@˜hLüv²Ö¶›Ö$:X{QêðVž,ô g©K5¾ Ù)Aÿ „&}jÖp›ýt:†j.ȞˆZ¸ ãœ{ÅÄËä€yÀ^dc)ž™ÎÐòMñŸÏAlø±ßÙÒ -qlñZq­£LµÃ ²6‚¾ +\ No newline at end of file +diff --git a/examples/puma/client_certs/ca_store.p12 b/examples/puma/client_certs/ca_store.p12 +index 2af10d9..9b7934a 100644 +--- a/examples/puma/client_certs/ca_store.p12 ++++ b/examples/puma/client_certs/ca_store.p12 +@@ -1,11 +1,13 @@ + 0‚ +-0‚ º *†H†÷  ‚ «‚ §0‚ £0‚ *†H†÷  ‚ó0‚ï0‚è *†H†÷ 0W *†H†÷  0J0) *†H†÷  0G§NÓ®ÀF0 *†H†÷  0 `†He*!¡ +-¾²÷Eˆ›‡ÞR_̀‚€Üæ¨ H´³ï>º‡x•\Òùë`•ð…ŠËÖ/€ê“-“<»Àõ-®µP"1¥–Í|ª¹9OMOÚ7òølÛFŽø«ê )b[€ÇÝ¥~Hôó¾khLÑókÅQoÙ2ݶ?EÑà¼k Ÿ!QäVNμPøóÄ?>¦ªBoø“| Kô—J||#p@‹$!M4˜80© /gQ̧Û6.í]¬C¼±•Amf3³êX€Ãc °š[~ŠWpd{ÔØSoÄØÌØÊõoJsQ´áfFÖm¡]b{‡è51oVôН÷ž„Ç™YMˆ¬ìÀÜXÏèeÁR +-óٚí/1ï!ÁàKL›Þ_Éü'¯QTÛ45yfN/¶&°¿?Ö¶PÅÀˆÆwí¡.;jÐ),%Î"ÚC)4¥«o½ÂÁ[ÝÀ´–Ø)4„žØŸUn7¿ÃŒ±Îk×/.k­Òßåd2ÝíÅ%½rOëãwF+°xÆkøìVn`Ì~}Ñsæ:]Ù°ñ‘tT¥q_–èï¸ÈZËLîâс:¢W!¢–|*dèŸ^v£Ñل^òVa­AêPI"@ÕÌêrFÑIÎf—µ*㞶»Rэ{Jž¨`bBÒîö.å„}Ðêӂ¯JŽê VÐ@ЅÎß.$ð5¸AÓ4åߪ˜ Ò6¾wën›ñ ›oªf2À¯ ظÚVï»-˜$^œ?4˜A¡oó-ü+K……ËŒ:È-¼l§}7´Sþ4abe<¥ô±X $öµÅF ê›þuÐBšy?ûzqñí9GHÏ娢–´o†En—Ù·˜~™×&ÿùQtþ›ÃÝÊ£ +-¦ÀÀÈ.íºBƼ>’§ÇOÞŽ™jJ›¿þmó݈úç¾Só°à®-|v¡í½ ÜÎ5¥9GEbôvVõW}1ßUÈ+ÎíñP»d9Šqì^–Û|æE%ôµ}uÔ;zF¹ œ‚QJ³»žZ&’òòQ ,Ô«ÑTÖöá ªSö—^¢A›ßXƒÏœüûBÀtÍê5_ó‡óºž.ˆŸ$~˜Ï)ùŠ)1,Ä iÁîJ5¹ÅüÄsDs¡q-ӈDí[Dõæ“[=Ã8š¾éþž†QB1D!Ÿ¡$ë.L^`4-‘cx£'xi°7Õ³~œÿ¥C úýx“×ÿXì[ot'|ìã‹,£°ë DºAS…G’qɟƒV*¸Èª …*EwÂgG»Á ‹êH¡)X1çÆB£ ¸JVåÜ!ý¹ä@6ݞòEÍ£^…ç˜ä(ïª¯;» ÓQÝ~Q/<¶·Üµ<}2Çaàÿ˘ƒ0Ñ<…ÉðIëáXԋ@¦›ˆÁPÅZßO<“=»E– òsÆaœªz5¤ „Ô±øad½‹›šÐâ:PXuo2Ólš“¶Âüä;cVR•n¿@ØqË/nÅlr½‚À3´´rݽzt±r.ƃ:ééèÜ\E÷³W„0îÒ ZvUº}×öXbïuDÔ—'A( |éú4]ãèè[ õÝ6sž|(’‹áv›1Øä!ûIðâpP÷»>:§mÈ-“KTW¸2äQµXNÁpeÉohp€­Tô5!e¡¦5ð`9óï/Å<ôkz7ÐhÃXΈÿ*û‘‹:úøÆm¶MîÞN)ìð";Ô±µ7€ðY´ƒ& +-=ð¸ãș Ç5Fi”½ßO² K¯gL^s@´´Sðûn«"¶äBÕòpeœ~<Ó/ÒVT›Ó€X©Ó Kú2¹«°wÖm‹Á`›¸¬*Úð$p/ÒÚ”õ¤În¢=áÄJ½¥2]0´G +-Ni ¬ÍžEŽwl™Ðð½;¥yÝ¡3ˤL¾LG ž©•)3þþÀþU^œ½×f 0•ù!Ԁ£y2Ã9¨Uão[bѱ7+.*E0ÉjåÓäËÔ%““h®£7/ìy-¹Ž_%®­Ö—UG—u“Ü*à ejç֞XCD2å€ ¨÷tŠÊ:õ1¦1ÓMo¶éïÚۏ³Ôƒ—7'Æ´Êߜa´Ûå°ï‡ÿ\ƒÿƒŒk!2çÌcC‹)ò°8ûÊFWoõÎj¶7ј"PÂZ Hû4’o@Øz–J9§Ì°j¥UT"ÝaYᒠGB±òç½$Ù÷ê +-2ƒÂ5ñÚì͚,½'*‡\H†Þˆ°8Vä)Ô*ýqÐ;ÕÏ@­}uä/F ù§ð'è‹šŠüAu_ìkïe¡5ÁÇpüŸ®ZSP߇¡­ø˜O8"eˆºÏY´ú#Æ>ÎÁ<†âÐ ¯x +-eX»‹6 ‰t)>ǁßá|®Š3ÝZ˜¬9_1:0 *†H†÷  1ca0# *†H†÷  1°‘³iÐÔ»ÀXÿ’ãň%W–0A010  `†He ÉD¨ù:8T¢!›WŽ=¶7‡c~íÕPW#ç“*O-z·'MìöŠ"´ +\ No newline at end of file ++0‚ Ê *†H†÷  ‚ »‚ ·0‚ ³0‚ ++ *†H†÷  ‚û0‚÷0‚ð *†H†÷ 0_ *†H†÷  0R01 *†H†÷  0$<½5_L¦ÔX¥Ý cm0 *†H†÷  0 `†He*¡Ä«rßÊWuˆg"Acíf€‚€Ÿ!ÃÆ óg„[ÏèW¬€·DÃ÷W­Î(cÐñá.7™¾Ñ….³ã‰·¼Xª¸Jú)º×w‹†t]¡V‡5>Š-Zñœ&=‹K‘ah¿Ê`]ýÐJZ»À•T¨·:qc÷d1M±ð”aq, ñEÓAŸOÊÍÏV$d6KŒhÃ<«)î5þéI7Kc Õµ2úˆu)é‘ úN"$/2G±îê.¹!·A4¶£# @Ä,µ¨G:]¤cvÏ!5amæ¬éi3½ÿ…ÒP¼G«0ȋ~÷Ü*¼ É*V6*ß`Þ䪬á?*£‹"’ä •‚’iJ3F=!D:Yˆp¤­¶Ï1Ë—ˆ¬Í騼s!ŽlEâ Ç<£sDæözúš]ž ïHçFDÙ¢À¼ €. ƒ5Í3/ƒæ›&9´…=‘ê ƒAiP²‘B!GT̝9qŽÔç_µ\Æ0áöO³qyŠþk‹UÏ)]›+ŸºÆÂ"tàµF¶)al½‰âvÕ]ß’Õ{ƒ+kì_¦bêã“ìˆBÚï\dw‚^Ñ8sqü[³¶ÊŒn³!Vє¯b÷Ë55…ø€gKÎ¥ÌV›¸"{² ßð;5…5®ü·æ³+Œm]M|F]f;š$ãå íõ•¥©: ¾ô¢=ٚFØ[y<í% pz¿\ý~[t;ê'IJÃ5ÐØØ3÷|¸âGaá¢{\㕼s)„Wð;=ð›N0ÒrÞ,Z’w«ðo . Q¤rª|LyLùÀÎ^8zYLx,ªs$ÄÐ0®ä¶‚õ±…W#UqÑÄJÏ9±ù‡É_“c•>6…|þÍ"m=iGëp ªLšüR0m{ûœJ-&bãïMcÙwx°‘Ômçüé=⣱úÕÄúǘ{¬"ÎP™p îÕ¶³mÕ§°°m|w9ø¼[B¦ Ù¤žèdè¶hÞ/œµÜ³¤xH>e§yn°Øí][Rª1ÿ_bN¬QéÅå2Ên†}Á%z ofAE$r®/@„'ý"%V'ÛÄA3—R‘ý¬†7,`¯0‚¡ *†H†÷  ‚’‚Ž0‚Š0‚† *†H†÷  ++ ‚90‚50_ *†H†÷  0R01 *†H†÷  0$™:ЬL2>Á¶#H 10 *†H†÷  0 `†He*ß®M2‰àì¬"4ÃK‰º“‚Ђ"x±z‹3xg#àü‹A{*%1ò:½ÊÞ/øœª¡.ãN®‡ì9\W,ÖøÌæi»‚·±=¤ñ©&oí®ŸREtBàEx!/:wè ++pac¤èuÎ=°›S"|Ft¶h!§êï “¼N_ çC^J€ô…¼X6öø ++æI1t^±þ*ŒqÏc ·íÒž1o$‡~¤]¦ø¯Âù°`;ö<؟åä˜*œ=/ô۹ݕðã,TCUu‹¶­ý½7«`n=& ðgZÅ2(LÐfÞG€Ú%_ð›àða¿ÖSÔë&š˜5҈ ++Ï}!—€R­hCߖÿ ++Ÿ7NâO.*î¤ûè‡?mϓn1žIۜ }›¦äR&çjË0êfWúÿU*…a+ùu Eøý ç÷|M}»_å(Zƒ4zƒÞÃýÅ/ƒ‘z¶ÂQލtϸ¶üP̅Cl”j|õˆÙü#C*ï*ÐD[^¥ Š Ig‚T×1¶j{i{Y´˜Š—?´fÏ aÇ&Y¶4ÛãjŸ“Ñʸ+eqšúÔ.HxùNɇ߂ĸÊ亻œøÊi!Òãµá¥·>u#C§„ŒÁ6#M”¡F*´j¶„­iYî[4Kþ *¨#`OØö71b;•¹n/j3¦<#½5Œá>3APz°‡?ÿÃ-É|´pg?¬xÁ,ý¶ˆ#‹ÒH˜Nl+OdÑì¼Ðø=œ×Meht}„ î˜ø½ÿìhà”׎0¶e¿ >¡ ¿•0”~®ºkç»âcýH—•®¼c©"<¤Ç1”[8EoýçXc)6UúúÊ/'® I½­> öˆ¯,ŸH›©å®ë!¤ƒnr/$Ï0FZs%ßzÿºŽ×Gpþún¼nrµƒVî`,fÓ0¨µ9hñìØ4È.k ¡éc%±ƒr—tt¢ÊFR·Ddø•XTܒ©öƒ¶"äžØûŽÆÚ„3ó̋ÑJš¾À!ï5ü;bÒmOd=7T)çç¡òBp_ ;Žî U±ï.|̟å^¤ôÂ\‘€;­ƒD´™Åù S"º]ÏÇãÝêðK©Èó5%(qûf¯0݌Î>d›÷ø#»ìÏRø ++CÒé»%› Ø¸ÔÝYÕ³ÀD ++lªdsÍÁ"´²óZ؃¯Ká<ïÖo9¨xlnãž]W£ ©‘}y¼"ðA sÒÖ«‹Un[•Ǐ¥q¶Z–6§,Ä^ís/ý UL¢¼Ý6“t¢Ï:q-Bš×J!í¶×0Éð–‡kYUÛän­¼’»=MÓìVÌÜïþküãmzÇlU*‡¼G+ù`4~  +\ No newline at end of file +diff --git a/examples/puma/client_certs/client.crt b/examples/puma/client_certs/client.crt +index 79e7f6f..14eb1dc 100644 +--- a/examples/puma/client_certs/client.crt ++++ b/examples/puma/client_certs/client.crt +@@ -1,19 +1,19 @@ + -----BEGIN CERTIFICATE----- + MIIDBDCCAeygAwIBAgIBCzANBgkqhkiG9w0BAQsFADA4MRMwEQYKCZImiZPyLGQB +-GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTELMAkGA1UEAwwCQ0EwHhcNMjQw +-ODAxMDAwMDAwWhcNMjgwODAxMDAwMDAwWjA/MRMwEQYKCZImiZPyLGQBGRYDbmV0 ++GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTELMAkGA1UEAwwCQ0EwHhcNMjUw ++NzAxMDAwMDAwWhcNMzYwNzAxMDAwMDAwWjA/MRMwEQYKCZImiZPyLGQBGRYDbmV0 + MRQwEgYKCZImiZPyLGQBGRYEcHVtYTESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjAN +-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzl14vsZCU7E1qf/a4Yxs/SbIf/Pz +-PW3Thbhno3JAbsTUpf9zkdDRB8fCn+R8SnJVZhCRYhUA3lNdZIskQp1h2Ix9TZxj +-QSo29ixzik0fTd7nd4KC8WOpZUyDs0U2ugmqomJXP0e/AiFpN+3HmgTWJpDx2oET +-Lcdl70+wRBkF2FDRJU/5KvArUnaGXrqW645GH3iXMadQRpEWBxFP/+aiz0FXqd9Z +-IWSoobf03dY/tIaxCrFe2+yljBB6eI/oHWs7Y861JN+nRcJrtp4LmeCdDXzQN7/y +-xDg+NVQy0sEltIMTgMyoIsb1UPD+IkepT9GKd09M6p63BX0SXr5YPhz9iQIDAQAB +-oxIwEDAOBgNVHQ8BAf8EBAMCBLAwDQYJKoZIhvcNAQELBQADggEBAHKYzIAjmllB +-n+CRjYjtwPrkVT8azecL9efdBvE90KkGnIvRzNe4vQdH0mT4R+RUOXO4mbhAT6tX +-zOpO2gPldBAQ1GAcjs1XJPGxSqKUO8B69Nv3mXqwR3FKR4ZGseC5MXjQb5dZc3An +-NJZy6t+7gO0nDfV361JJjXvNdHd0cfx0aCWdTgQWxt9RSnH3QxvVbdXLAPvYyb1g +-Ueao9M5PMMx5cAgq4ORM+TxPJxTRj2BuRj5coHsPn7R4dkwWP59+h6Vgdf0AmeUG +-Jmdrul5ESeACbs2GixZdtqLT9QUJhTAFaXpJd3IUYyML1V7qRk1FJqRvatYxhBxQ +-gjZp0ouJRCY= ++BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvAuT6k08rCxgTQtwtZ1PB2iaVTAE ++Z/DTKp1bUP+A06DslWT9tng5bxUNMD/8z/D4sOKzNTds9JP9QmJsgme1qlm+pIRQ ++qgejLw6hG3v4ZdTe2CTvfE08lJlwWVU2hoDLDnurXWoQE3SSAzfuoeg48EZ8tjug ++3KkxbCR0GUzk5aof8fskCapybRGvIek/xBkVKwEVhrvNwCvIwvw2SRgGuxHuZNCk ++kq3pptuVC4e14RglByVV0C6MkNMP9CDMXILZfTQRnsqgq67MuB7IUbVPH6VUYqwB ++IIR0MW7lLFLkB6x9QOkCdAXrzqKFeNeWxw2eyV2ueTDQIqsx0fx+SylDPwIDAQAB ++oxIwEDAOBgNVHQ8BAf8EBAMCBLAwDQYJKoZIhvcNAQELBQADggEBAKlWE0BFzumd ++XtXSiD8AESuDWHAdJ5l+lzwGJ5/qJHQMTYg+7IwVumlf9z2rwTyCRNVCU3t68D7/ ++8d4l52+DcmZExa8PXnkAotNcV4cDps/ZJt+k3stYSAL2zzxOCKEaysd7UvL/b61g ++t0Xyg3jlg5svhJomHuevB/db9oRUCxlSuSTxjeanVyvgXlURBOLT1MaN3tNhtBJM ++RmkpGupNeS6Zwuzi+Ina2/TfmKSwtoKMyiP/QuzH7wAV0BCDsDPT32CYkvuJ9ARh ++QsMK9a3oromDxKx98l9FScYsH6SkPlywXF4ZkimZj4Wtni5kHkeFAbc6KuPanYIL ++eypAAM0Zm4w= + -----END CERTIFICATE----- +diff --git a/examples/puma/client_certs/client.key b/examples/puma/client_certs/client.key +index 371a4a1..9a511c3 100644 +--- a/examples/puma/client_certs/client.key ++++ b/examples/puma/client_certs/client.key +@@ -1,27 +1,27 @@ + -----BEGIN RSA PRIVATE KEY----- +-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 + -----END RSA PRIVATE KEY----- +diff --git a/examples/puma/client_certs/client_expired.crt b/examples/puma/client_certs/client_expired.crt +index 6a6fefa..58e9c98 100644 +--- a/examples/puma/client_certs/client_expired.crt ++++ b/examples/puma/client_certs/client_expired.crt +@@ -1,19 +1,19 @@ + -----BEGIN CERTIFICATE----- + MIIDBDCCAeygAwIBAgIBFzANBgkqhkiG9w0BAQsFADA4MRMwEQYKCZImiZPyLGQB +-GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTELMAkGA1UEAwwCQ0EwHhcNMjMw +-ODAxMDAwMDAwWhcNMjQwODAxMDAwMDAwWjA/MRMwEQYKCZImiZPyLGQBGRYDbmV0 ++GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTELMAkGA1UEAwwCQ0EwHhcNMjQw ++NzAxMDAwMDAwWhcNMjUwNzAxMDAwMDAwWjA/MRMwEQYKCZImiZPyLGQBGRYDbmV0 + MRQwEgYKCZImiZPyLGQBGRYEcHVtYTESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjAN +-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzl14vsZCU7E1qf/a4Yxs/SbIf/Pz +-PW3Thbhno3JAbsTUpf9zkdDRB8fCn+R8SnJVZhCRYhUA3lNdZIskQp1h2Ix9TZxj +-QSo29ixzik0fTd7nd4KC8WOpZUyDs0U2ugmqomJXP0e/AiFpN+3HmgTWJpDx2oET +-Lcdl70+wRBkF2FDRJU/5KvArUnaGXrqW645GH3iXMadQRpEWBxFP/+aiz0FXqd9Z +-IWSoobf03dY/tIaxCrFe2+yljBB6eI/oHWs7Y861JN+nRcJrtp4LmeCdDXzQN7/y +-xDg+NVQy0sEltIMTgMyoIsb1UPD+IkepT9GKd09M6p63BX0SXr5YPhz9iQIDAQAB +-oxIwEDAOBgNVHQ8BAf8EBAMCBLAwDQYJKoZIhvcNAQELBQADggEBAHclwiffmiFl +-uMlhnVbcw5UILFnZLhrT5Ufxg+dpPVpd0s6vZ/emw0QgQHSUwBfo0l4De3rA4ZfK +-wqXv87c38tA9fZ6Schj+0m/pGFbixX3ptw9jm05V79broPgzSflEUKpJiyYJmjnK +-3ZfN1JoxYsd3WUrcbxnoOhNEbHuImyFn6sd1Aw7o4+Zs7GcKvKfY5n+anATy42bL +-ODnB/XJf8sZtevb57ceiKGIoGbVzrdi62QY3uQS8Jv1CAVzGHogW8mAw1yjE94v0 +-vcV7U4/v2KNt2UqWLHjIpeefnN+7scbX4YAz+UXbBZ+1DwAgSZq+oyzrBn2RKggM +-LSUeS8vdfds= ++BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvAuT6k08rCxgTQtwtZ1PB2iaVTAE ++Z/DTKp1bUP+A06DslWT9tng5bxUNMD/8z/D4sOKzNTds9JP9QmJsgme1qlm+pIRQ ++qgejLw6hG3v4ZdTe2CTvfE08lJlwWVU2hoDLDnurXWoQE3SSAzfuoeg48EZ8tjug ++3KkxbCR0GUzk5aof8fskCapybRGvIek/xBkVKwEVhrvNwCvIwvw2SRgGuxHuZNCk ++kq3pptuVC4e14RglByVV0C6MkNMP9CDMXILZfTQRnsqgq67MuB7IUbVPH6VUYqwB ++IIR0MW7lLFLkB6x9QOkCdAXrzqKFeNeWxw2eyV2ueTDQIqsx0fx+SylDPwIDAQAB ++oxIwEDAOBgNVHQ8BAf8EBAMCBLAwDQYJKoZIhvcNAQELBQADggEBAJMDA1om9i0I ++uRNtBBYk0k6/E0Tu08VPzJNsBuO16x6wpG3icESNIBoC04Vt/POxcJGUCxJhs9z6 ++k69lY/hXW7tLDSbKVTetV77j+zzZoHo6W/Hh2hCOwXJwVc1qKc2Aj8of42dSH2vd ++eXL8PCc9Yk+nRCs9R6xUAdE9t06dVUxvRb4B67RjhLUXvC0Q3sXHEbqWZir6aNhW ++NJQ542RBLFM4XKOqrybZblKEMXIIz8lK+hs5qDRe7DWd1alunl1L2zJzXwZUj756 ++l4J81itIG0LcBluOQKTPhYpZCPo0btK9UiUFaCxdkW0k+q4WOcA1xBuz8F6hfd89 ++UGtEB8nmOHU= + -----END CERTIFICATE----- +diff --git a/examples/puma/client_certs/client_expired.key b/examples/puma/client_certs/client_expired.key +index 371a4a1..9a511c3 100644 +--- a/examples/puma/client_certs/client_expired.key ++++ b/examples/puma/client_certs/client_expired.key +@@ -1,27 +1,27 @@ + -----BEGIN RSA PRIVATE KEY----- +-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 + -----END RSA PRIVATE KEY----- +diff --git a/examples/puma/client_certs/client_unknown.crt b/examples/puma/client_certs/client_unknown.crt +index ed467f1..b6b66fe 100644 +--- a/examples/puma/client_certs/client_unknown.crt ++++ b/examples/puma/client_certs/client_unknown.crt +@@ -1,19 +1,19 @@ + -----BEGIN CERTIFICATE----- + MIIDBTCCAe2gAwIBAgIBEzANBgkqhkiG9w0BAQsFADA5MRMwEQYKCZImiZPyLGQB +-GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTEMMAoGA1UEAwwDQ0FVMB4XDTI0 +-MDgwMTAwMDAwMFoXDTI4MDgwMTAwMDAwMFowPzETMBEGCgmSJomT8ixkARkWA25l ++GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTEMMAoGA1UEAwwDQ0FVMB4XDTI1 ++MDcwMTAwMDAwMFoXDTM2MDcwMTAwMDAwMFowPzETMBEGCgmSJomT8ixkARkWA25l + dDEUMBIGCgmSJomT8ixkARkWBHB1bWExEjAQBgNVBAMMCWxvY2FsaG9zdDCCASIw +-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALpCL06kbLE9BNknrrRVfW5YgkoJ +-ih7EaPNNNqmUgnIsLBjPcCZ7qlsMaUa2ft0mRFxniFkccdrHKox1oAZQ4WrOV5Ls +-pcLktNTESkuMG5oiobsASItz125YMoEs/q+cLhErf24EaUAhXjn3/ebvCwtza1il +-7bL1RS0iwfkCS68cQi8MI+tQlBebcSUoWazoitg5YituPKNj493tS1nO5pL3vZuG +-6tNmhLr8lW+3n4Fi8SElC/pBWiIvsUhaUZzRjrcyPeMS7H2+zdJXDgTj++RNyP0U +-TLZzFigeZJXNmHia3uneHw7o3d4fyZERuBl2d990iboLbtPh/9Pf82bBIU0CAwEA +-AaMSMBAwDgYDVR0PAQH/BAQDAgSwMA0GCSqGSIb3DQEBCwUAA4IBAQBO7O5IQJHh +-4ENYDw/kJFdye3l204JSDrFMP8uMIWQLd1RiI22CWjoyhUSfoyumrzykbPNhxf4w +-kj1E+z097/8Q491wxbbLbE1hfNdTtx35dnCUVGPb9lCP4YLK3v3swXw4OklVdsCb +-k/cf8s6BdNKVPdhO0zXRBdCbq2Z2PPpzQtaZ2qH739v2tX6CulB68hUO/hQeQINA +-eJGMck7mlR4FOE76IeHKYy4F2V4S9iNtkqvkf7M0wfdRwZFJqbdZBXTjRpOVMXgr +-XFGvANl9HByFudJJHk8t+NmkIFP6rj5xQSV4i31KQQHMGNr3hCKgkk7X6Wn95BH5 +-FSJcNlLR8BuJ ++DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMAqcKCOd/f/Fi9CPDGvS3/IkhEk ++Q08pKToBNsaybIaoZq0cqjqrRT0/szOe1WfF6mYIeEnN54PlEEn4MVo15BxnqmEi ++Ow0Bh//U0IOgLejxj5XS0xRX/01pGojgjW5wTT+gDu/WFcMWopaRS8c2b5HY2Egw ++5Y0a2nNrMQr+ZEAITGME0mY+nr/CSEJAHRtXqJ/JdwKTcrEWPEFzRdBgQATucCdG ++NYcEyg2iX0suE5l4ocGHIub7/XYnYnABpY4LBVutjQ5LEDOc1RVeLiYJt5GKKnTk ++qUoUSTAuISkFwKCVa1vYQHoTrWKC5mcx697QnB0B2QDQq1+homQpLu+KhpcCAwEA ++AaMSMBAwDgYDVR0PAQH/BAQDAgSwMA0GCSqGSIb3DQEBCwUAA4IBAQBLU/+Nb6ZM ++QV63HgVF2RZ/q2zFjziP4qZS07WYFUl51aOH8xZ4D8wrjI949LHcloRsyky65T4s ++UH7kbgvd1MasHHWn80tcH5Wq2ekUGqdZsH46dmq6/QLzNb1/zdZTNmAwuGf5m9DM ++R+hd6qMbt9a3DZn3cznNXt6/pqoU570fmF/VchZKXj7rfo24niddBKXJbBtQkNhE ++oE0RPCi/mvYeVkMtJKZaX+ua0L/rn7txKqDusWHcsd5Bkmew6gIT1mI+PSNlO6b/ ++wfu9YKTuGIhWbaqNET9T83mNgJs3+acdiphFLZWqsQOmyWC9QTZGjAlVyhFW2SJq ++M15arUrhr8Yu + -----END CERTIFICATE----- +diff --git a/examples/puma/client_certs/client_unknown.key b/examples/puma/client_certs/client_unknown.key +index efa436f..90ea42d 100644 +--- a/examples/puma/client_certs/client_unknown.key ++++ b/examples/puma/client_certs/client_unknown.key +@@ -1,27 +1,27 @@ + -----BEGIN RSA PRIVATE KEY----- +-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 + -----END RSA PRIVATE KEY----- +diff --git a/examples/puma/client_certs/keystore.jks b/examples/puma/client_certs/keystore.jks +index 17e7d5b..574fd32 100644 +--- a/examples/puma/client_certs/keystore.jks ++++ b/examples/puma/client_certs/keystore.jks +@@ -1,27 +1,23 @@ + 0‚$0‚Î *†H†÷  ‚¿‚»0‚·0‚® *†H†÷  ‚Ÿ‚›0‚—0‚“ *†H†÷  +- ‚@0‚<0f *†H†÷  0Y08 *†H†÷  0+¢?›Þð"œ¿è”]2V.%m' 0 *†H†÷  0 `†He*[’G¿· ô(ymÙµÂ^‚Ð6O%û€CÜXlkV†SŸÊ)ƒÐ®tq§Qû©wÎn‰Lû¼¼1áüs?¸Xè^’¶nYCñ”u@Рf(‹[×cÀ4¾,üôÌ AHÛ ®·+¶çbQ–áî”h¯½$ÄÑ¢çã±?-Z,íãǒ•Äó]±$\¨ÉëDãe¿vK€¢zJ8^ä? Ê¢àÉé?Εç5ŒÖ^²Ÿš9†:c¸¹!=¯ßñ©4‰:9ԓ†{v]E!ónžë9…Ã+ºí8%잲-a‹Ñ]žÏ«KS•…ŸŠÑFšFV7ØðËý>”#ø ™ ä`Lq¨²^¿"jÓ:Åän=¿pñ«-zËMO%CYØÒs¡¡·ŸltèÔ5ˆ]„†ˆ‚Ûy[‚$1scŽ”Æs}‰¡¥Ïnlގ{¢pJAg·ùãàÍ˕cïà;".ìvϚÃâ—l3¿aмÏS»?^G(˜CŸ‰A4ÊRWùÌ÷¯ªvŠ$Ƚ"§­0þÒFz8V +-0¤PßígçÚ}™—£6¿W° ©ybžò*Ioœ‹§uöø®›["5ê¼DX-ËÁŒg²íð‚£Dw·¢æòË&Ùm˜ÉOSó~üˆ–˜tUK%«ô‹>>]Eö†_=>å –ä6,Ö-—µž0J … Ú÷¶¹‹êŸœš/Ì‚ÎÁŸbõí¾‚ +-æ³6ËHçD§E)R‰ìo;䬆lð”x­ ½)Ó.~i´ø6€2 M5™¢€»:±’§ÚfÓ¤‚EÔþºÖ­LÒÁ2=îg@Ò!ªó/¦p=À—øÏ̪èBÂÝsãÙªˆârÒrbh +-æqñWÈóÓÁ›v..pöA~¶AM,7߃ûWmXHÐeÃEèH;ÚžLKC‘,-TMjêÅ«ô!KøuojóœNxâ՟Vãoª³-ÿ›5ÿ5U²&$µM&ÿN¬qDX%îÒ „‡ +-ÍÚBJ  Õ,ršN°üú +-®xNû]ÄÑÏO²eZçy-è?Â'g.¡6‡HýçŸhþÓð8¼‘µ|óo‡(Õ½\éEŸÛcµ¹ÌR^&|tÕÇÿ ž¬ ›ã +-Ò$xÖb<Åæ²^ªO%ôÝÆ×&£sTš._fýø7ÿŠ0Ožˆ£·!^ûeKü”ú-ÀÇ8¦¢lB,ÖåbÉ\™½äŽTå@ŠPõ`c +-OúÚ«-Óð 9¥«gŽì$1YP¼§õ‚Û¯ìÁ•øÒ1@0 *†H†÷  1 server0! *†H†÷  1Time 17234156716910‚  *†H†÷  ‚ ++ ‚@0‚<0f *†H†÷  0Y08 *†H†÷  0+À1Ð[ÇEJ*¨OjFWv§<ƒ' 0 *†H†÷  0 `†He*’4þprûšB¬€+I—‚ÐJƱ…úf<é«?±æBõè¨cX]ü¬øPƒZð&QŒ.”5s  î35)Ê Fz!7ŏW$H Íñ2µ¾D=>‘[¿PǤµ” ++¬ª[ɞ²Y󬺔cÉ?…9’ýgökVh‹ÚD~%s IêaÔ\”ø¿{1ÙTùœ¯{–Žëžä¥ÞºSY;/ø}qd¿½~œ’NnæÇ²ï ++nÐÛ.¦„ƒÏ0Áñ)Óq(ÙÿÜ ˆç¶¯EʏÄLÎϲüK–>tXcèí´nÍýd"ÏÃXÜgÕ|šÜYŒT¡h¿ž¹NÎþÕp59KÙò&ÖoÆDº7=uŒï‰À.‚¯–wË2͸µ´b¼ð¡Ã¶þEô¢.~Ê®4’%’zAjô»[-Ñ·‘õ-Áݾ7‘ûÅ´µá) ù;™ìfâ8 |Íp©;¡Õß+Ý6Òê• Ç…ÆÆ çd%|'ÿAx҇ò\ê-­Ù ö̗КŸ'“µ/’÷F\²ú›¯ë«ºþ‡"dn_Éñ1X8™ ++{º€Œâ¼Fö¢Ô¶Ý7ȜgvæÐÿ—€99»k=º¬­&WÌ8F¯ƒSœPs#šš¶üë^¿';ÆÍ ++å.‚VjaÔã6?eIÃ'¡p”¦­_—”%<ôò!!zs¾ï7ÿ»+¶H—fÿå~zê2âóI×®«í•wƒý‚+,øpÑ6ªSè™.SJfÍ+ˆ…1”˜Fã5:Üå¹Á–®]s;!»3–yH>ÿÛ­*A©cË4$áH¨MçPRùl£!‰ÁÆé^Þ8 ã#ñ$‰W1{o£E+ïóA¸Ç Øço"Úñ·–s[ÕIÀBƒWñÈ'òÞß¹3´ñÄ8üB@êpéa,r~ùèýº x”vìkI ++œÂ”Ü÷€jÁìöCµ=Þ¬‡?_S–¿ŸÀ³HлaÔ•W;Âik­J<ÍSYð&ŽxGuùýüŽ8> i.²Y“¤°ÊŸ™ôŒ9’¿Þ÷”¥6™ ++ãŠÛ­{CßÙF°¥rPf3[¹%nëJÚ]z™ &x?QÞ;uò®/¤A+ZÆ] ƒðBŠ(Aí ¬Â®kP¥“5±G:ÎQº¨j’À|֍(ç9¤™ºËJãºLìknCjž§vˆx0­Ûh´QÜy?¤ù÷‰¢ÚHÑûI(1_sˆíR…D“—„+¿»ÈÁ„+Y•ƒco„úDSáRaÊ9&nÇC3[9›’Sˆþ@3F‘ä¦oÖÁ6ýyOõ…‰`+ŸG"I¨Kö,߇w۔xs@±öCÜØHÄ䆢EäŽ=bÇÜ€<Å¡ÂZæø‰%‰q,šb'@ ¸¶YbǛ€âiô£¾%‰õ‹»*™þ5Ýì.ªPd©Ý-¹Òù½BLDÁ·‘½êÙ.o óJ­›BŠ"ê<Ã[î¦81ø]5ìKŽu7[ÎÜ¿84ŒYR¿:lƒõe­…Ó•hŽ€žOÔò4€ýäåâBK^,¹î‚ËŒyny õ;ꑞ´÷OðP1<7öþWA7«“ýU\™^f«‚~§Á¦&T•‚4;Aìç˜Z¹ 1èˆ÷ÖyØë~ï0»ÛLFãÅ(Ò¥XÆi=Wzü¥…øìØÞI”`Áìx™•êW+@Œˆ¥b»H¶™;–¬‚†¶ï¦üâß°RŸã¸1®î!ÒðnƗ¯>?ê½jŠÚÌ,çѐ_·ã—~¡ëцÌÀ ¦Ð¯~ºw‹véêHn ¡o7¼¥â]‡8‘k“>ý/ì=tä& S¢oÖ×ŒÑ ՆÊ]dehÀ€5éWïòy4aì’ lf Æò§–Úr—9ƒ¾zÒ8›œ!‘k=Ú¯²UZ7‚=Ɣ 6o›Ìè‰Þ4zí +-ÄÊʛPP‡¤õ¼‡ŒZo³r‹2¹¤â3Ť ŃáV½Ÿò 1**«Ïå£UïÚcÐSR]Œ½Å@=Š~ d…5?€Ïï:àƒ sƒ[ö(V™Ú÷*˜îÜmýW¿õfR¤Ó_›áVðUL¥yˆúÓ½±,ÀC?-‹ò³.½,±¯vèÈ|ôk ¹Ò_ó †6x£‚è-’µàB`÷¸4Œc›Zñ^Z±Y÷ڟK•ÒB•öZ7œIB[N¤} Ÿ9¥ðxå*`Bý)Ҝ¶bÐ.ä•D°t`ÞÕ%µÓ'©gQÁ»=Jx“Ýù2Ëà.~œ#- [@#~ÿ®bYö“õ!òð†êi¥áÑ(Â[Šð²µ‚Jb/îN1µìH·<$N5 ˆb+XSOK@þV +-%¢:r‹_?òÏú½Lð¿;۔tÖITPov[™¯.ðÄô‰»µÖÍܒù,øtŸŒùE²z.U?d¼î<šz'ƒ(OßÜFgiKnîa¥¿6ÖµÃ+,Æô¡¶o«c÷¢Õ6pkúsžà¹7ÕCµ8¬!/‡*ÓÊê'ý4Ù̀åÌNu—M]„>$dp .ûr6`I#§§ýt[?D—Ë%¨…”U +-$ÈA¥Ù½×ª."]œ­Áqášâ`þßIƒ!U +-©½Ót§5u=­@±åô9ØÂA߄ÉAðãý¤€äÒá^[ +-KAÍ,»òq,Û¼€"^Ž¡¨‰íݔÞ'©ƒÿ÷¨×Ÿ +-Ƈ{¤Öy‰˜­ï–¹;&o ‚Íô9¬‚™Mš°·¦ñf8肑u…œ?]aE…Ëý5´ãœ7¥¯½hŸÈr~BÖæÁ–Æ #rÚ)2)Ñ< 2Z‚é•ã0<]ÔӖÃí4»C¯ŽÎX«[‡¨À¼¤ÅIWöAè¦0ö灻"gTþ܏X§¾þA !ª9(À†¿/åÝn7ý!›W®¶ä•`Ó¨)ÙɶTüDš@)–³†”°HP\Œ‚kI4ÃÔ¾^­›tڄ餂8䜉¯4H/‹úØ¥¤ ^@6þ­vJV.y18D`Ç^§C7 ô·T:³ÉUJMށvYžT…Â59:ø£šÑŸÍ ö‰$:¦^øWk¼sc°Öx…ÆÉ_TjÔË +- N«^‚NFI \¥% ‰9u¨Ã3•Uí\ 艅‹LþÀkžYŠ'sR_<;$$™fü¦,WŒÚÌ+޳vü6¦MVÜ Vz®‘¼\÷΋+ê^51‰Ñ †«œfÅóðµý>ù‚—H ˜æG 9ºÞçÌÁŠì‘ö"µôcÇëÑö—]‡—që÷AÁòèÉ¢ +-‡Œ&%[ƒÏu¥öÒî>»»è㢗dLϛ¯ ù®n#Ï5“]—D·™ýŸ +-U’¦Ҟ£{¬E+xÇ€RH8¨¦iEæ>Q&\À!‹W?ALëƒaAøŎª` ºEi%˜Hu؃ßÔÐ/³¤Á<öÜ»[Hu—3큷0 é*¢”žÌ| ÝÕÌçFàÌ{æä6¬>¯ P¿¡1ùÿ‡‹`¶ø+p•VA CÞ4î¤ÑødÆ?I =,õ!ƒ×c¶ÌÉùL®ú–Á»^0݅xkÈ®”ÃE‰» v ›sÈcò¾äv294ó¦gá‘ä¤Ã·)³àÅ·Ì©ÉúÇ/å9AÒµ“ôѱ¾¶ kÎmjô¢c-uϋ™N9z +-•Ü +-µÿº ¡bûŸTK:E¢€?‡ÂôÝA‹²p?ùf|ª§òV·Œ¹ˆ¼¦{bø~$Tu{^®˜:Æóo´× 0M010  `†He Éxl3kA€UÑßë~–ôöÈR××(q7¤)þUXÖœŸÀÒJÀ¿^ä´ UT^' +\ No newline at end of file ++ç *†H†÷ 0f *†H†÷  0Y08 *†H†÷  0+H͸@Ã5 ÊØÒÂÙ"Ï' 0 *†H†÷  0 `†He*~¢ ÜXÍÝ=¹§]zƒ€‚ ++p(GœžÂ)Ï #õÏs¢>£i¼mh%äN;Có;Îr§¯çÒ+Ù¦uÜ*³®ÈÊèÓ ß‹>{îv’¤L}É ŸÛf$ªÝC”6JÁã§ã¥Û~}1«µx+܂(ô~)çoÃ#þÀÆH¸¦2k\oT´€¥gÓñ”¼Ð†­ Ìçǰ³(Òdò!EŌômàX1òšÄÐÚzÖoóMFi#&æ5 …¸ˆyÙ2‚Û¢¬ÖèÅi ìç6þ>í±ý¼g9óêL{X(Ë|äÌÞœcv#^xŒ^yjܼ‹«Ø¢1âZ…$.ìá oK{‹q˜™ÚA†gIðV>…ë+2¦äT:ýòdÖÖ ´§ávUó…yرçÞü‘í®¢ÞmÃ+E/¡;ó|°Ïs5€.‚˜V515H–Iy$(œhÃ9s·”,è &°ÿP‘kšO–h¥%O ìÕú_øh6vçp¯º#m’QÑÝ^éõ jÚJ¼©^®‚á åxtºÅT5{7{ C8]Å)KƹÍӝáÇSR–3‡Î?†<θô”ùÈ>³ïšw( ++j& MŠÑÀÂ“^:‘™9Ï%»Á¡qìÒ¼aDû‚LÙmčñv>»Ü«ÈА.y­¢>ûՖÜh+øA Ê"¥nlcÊØm;¼ÿÄv͹T~üöh~ÞÁ%1ɯƒH9Ïq‘uûe€jï|ú£Qž§€>¤*Tã3/@—„Ö q¤¦AÝ1ܾ56É5³NŠ©ƒA[烁žehXŒ¤ËAòç¬h$.”}çšT¨ž‹þ°'}ìºÇ ¾Ñ)~ô.Gô³¦5|Ox®ØÕߞÏÎCý¸é»m\f¢}«îYuHºß‡’(X[Ž’ÉßJU|êOŽQ6-NJ¦ÅÏþôhœ$Ô"OU‹Éû@ËašŽ_]`Œ\W¢ºó-~ͨÄ‚¨ÏŸuëÁcÿÿ0SÃðŸù³€lÏïhg˜1~ó£Å#×.cËdÀÎҙ”ן4È¿‹ª}P<.[“riWÓßÚdr6ôÌÙíRY$¼eGÒ×WY^´ò»ži>¯-À€®Xi3Ýõ~2”¥}>#U:Òùòáû°ýŽ¢ùœ“l‘fÔ =¯:±êÊrÚô7¾’ ++l.%AºÀØþ ›ªŒ4XEùF† ‹U&/n%6°ÁŽ7Kú«ÚÈî|ˆ$èýÌE}õ¿V÷‡`—¦Æj…ëxÔ{Ê5嵩Ї‚ æV[/0 ++l{77»¾þ“Eí1ÛÓó ++S ï¥oÏ%‚e À ++>Ÿ4c嶝ÂCÎñÔçÁØó³Ú™À'þr/¢HÛo н ˌØÕBš}6 ¤»”‹1oY¢y á sšxu„ìXÏÇða+b]³(6™ì"ŠáˆóCÅËpM6Z²²Þ¸¹…ú»ÙÐ[–54Њ©á9•1Ìœ=Xð_Ž~÷p‹¤v~zHrXÁóvÇå|%«PÙɏzÐ.ég¶ ÐP”Uy¾V1Ùþ¨ª4ŽÈNÎïƒwñ@Sp>>Ù®ÊT·P`E£2"#:ž0kFÁtßCÜ}ˆ´²¯j$q†ò̏nꎇò*ôŸ>“q i¨ 7ånmý°Ã!À$”4@0ðq¦Døm÷rîsgéï¿ã-џ–’gítÅ>¬hÍt£³A•¸ÀDÿOdz&¬¿~€µÕ•ñ‰ÀI«‰ŸvdJ¬KŸ°Gw W†©§&9?hªOʯGO°ôö¢¾|¨´}«Ëê™òeö>÷Ðt ¯™à ,§y‰½ŸÞdȨùûX6}ŠO z#ü÷»ˆ®/$HðgÕï{Y@ ++]U̳wÂâ1}X›sËà^7Khå5üî=Hšé8×VsºïÕV 怋~ªbÞÝÀEₔÓlvŸl‚ׯ3þP-€r,aƒ3‹ôíòÞS` °Œ2 ÑWʱæçu×½>éÓçç=iҟ•¿·VRÐÞl 7õº¼Ê–$B]åo÷4H©ËÀ~3mÚðd°ï‰·„ŠPë 0SSpie;¡0P:©É£ÿlÍ<4։ª€Ù/=•0 7–a’L1ò©~,æP sɹÚ<`™ƒÜ|›eýUþŽñž¼E˜ûs©­—D¿dRÿ£³`{Y£·eiãÀßN¼)çÛÄÀ;m­·ÎM „Ä\¾:Âèá õ¡ÍMUœGÑiƒz2Åc—Ʊ}JÎdŠZzSdÎ=Ù< u»Áúr™/¡¥FøÕ£Ã RbQ)í"ÌŒ†ÖeÊâ÷!¨)ƒ7½\mŠ‘%Ø´Æ`_®øvã†0‚Ú•ØÔðrËÁÐ A­"§ -B¢ É0šÅüpLCÍ<½³Î…urt¹y,[ø€Ñÿ8óÐY=lêKF1†N0¨Ô~†“¬«›ódɯ¦h6¶þ¼zÄ~6ø”œ¨Å™êh˜_ôB›ôֆRq-àÛbÉiïÒ÷+VîeqpëîšT¹éö¹¾9¢[è±pÈGÆËÞ.}Úÿ²,¬€àK<¢[¸¼CðWD於-·ÞbL¹oÌa(¬+àŸÖþ)%ž@Þ÷ —qå®$&£EÛ)f®ãºqØH ƒë@v¦„Õpiñ5³ ++uý_.u:?ð¥œç5L:­`¡›®àÁA”mfé£*AúÌí´\Všó*Áݨ%e!ž wÿQ¶+g™6{¦ßÁŠª%¼áåsa€£sÒPéŹÛ÷Fþn¨Y°âfTì&TìËðñºDK‡/!T&X‘""Î(™9Þ¸%î–c90=KÞt— u°Sž.Á–D ++áòW̊NŠ=DÜE·8ónæ0M010  `†He ±&Ÿ™\}@×xþõH™¿SÓµiÉ ÆéОÿÂޏж0“Dý“~LÊU–°.ʉ¼±Ù•9' +\ No newline at end of file +diff --git a/examples/puma/client_certs/server.crt b/examples/puma/client_certs/server.crt +index 1335881..3a7cd3d 100644 +--- a/examples/puma/client_certs/server.crt ++++ b/examples/puma/client_certs/server.crt +@@ -1,19 +1,19 @@ + -----BEGIN CERTIFICATE----- + MIIDBDCCAeygAwIBAgIBBzANBgkqhkiG9w0BAQsFADA4MRMwEQYKCZImiZPyLGQB +-GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTELMAkGA1UEAwwCQ0EwHhcNMjQw +-ODAxMDAwMDAwWhcNMjgwODAxMDAwMDAwWjA/MRMwEQYKCZImiZPyLGQBGRYDbmV0 ++GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTELMAkGA1UEAwwCQ0EwHhcNMjUw ++NzAxMDAwMDAwWhcNMzYwNzAxMDAwMDAwWjA/MRMwEQYKCZImiZPyLGQBGRYDbmV0 + MRQwEgYKCZImiZPyLGQBGRYEcHVtYTESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjAN +-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxqbRfVxcH5wKCTGfuZTVisUKUIWS +-TUOWkIoyIfBKVknREnVSN40aw72bs9GDh55F+R2IJ3y9F7TQXo0Y6PJ9tFXZqJMb +-2NHXYTfhQCSN/w5wqKIrWOR7wbA4JHjs6x/vHYnjFVbvbx43M+wceKsMBlQ1eDLz +-Ukr5vjLGASmdgzTq8AUd5bNKiNq+ERyAUTcuwXWC6ndXNdr3vdEgcYnzPWtgM7eo +-1SpewqCqrlSeA1dzXThB8vCFkCNy7DYrJbCuGIIxm1D2garE2814LXztE/rhwdIG +-zonh44/Zc43cFhzJQUhcJ/jOxFovgijHd5lvUfvqj6YoquC5yFVYEfsSwwIDAQAB +-oxIwEDAOBgNVHQ8BAf8EBAMCBLAwDQYJKoZIhvcNAQELBQADggEBAK8iNpb7JRQ+ +-CNHl/dUV2DW9Js1TndISLs0YqAcAJHgzwtp5OPV8GHUV/BF7sf91sHU8y6ivety8 +-QsvG1ToZhWAVJXG+AStgJDM8Iw6g2xZbIY3wP3bBSuxAE5PGdcXM7nRfjwnAJM7i +-Q1gdPcntc5J3dZ1Kt5d9iofI7UMBTuf0Ws+LWG73i/NeRj0lef6+VErQ6M93Yi7/ +-knXVzvRkpK2664fRmUHlavXP2Alleuuibgg8kgJ9M1yjluwwx66LXUbhMClrS/OD +-hPM29fPZmO+XHJ1dtR79DhdmwqX+GOqjD78asYHIg2Yjy3yZsOX6chKvD0MWk6pc +-DyFSu5fEHQ0= ++BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwemh+fx2FupgRmKG7ru3X2m//xDX ++DttQXdXI8OwqwQcWW/7fGxzYXImPGKSYToXUctU7pFM4+PjBvp0l4iZLXANn5lLA ++e3zEUzC6tZEGVol7Id0nRNVqVgt3CXLLmcxyuTwFZmTPM3AwxtxTu6WbGWz0l6v8 ++ElFkIZ023Kb5e/D0GBUVHOJJDcqiaDf18WrzPjJd59VOE6gH8iO4GX2ckzpf2hBq ++VPVsmXi/3sTv+5RlBr5VSNPRq4LxBrARfWU/vTq8Q0u4mc0saLNPB3O3i3iN9wMj ++KKJV3tBNzV72OnsIhs2KprVrcE9bm1XT1U8KTqkpPprOmY+iVWHcjJTa9wIDAQAB ++oxIwEDAOBgNVHQ8BAf8EBAMCBLAwDQYJKoZIhvcNAQELBQADggEBADTBxt0J0+jn ++VWiuVEvkVNLutKP//CbQxwt/h9KsigHdwhBBQ4yeqZ45OnVMh8npTLc+7PHgqwnb ++VUO+0aqIOGJbeEAbGbjxI4ND0LA1sHwKkGRUPIQEETXOB4H4DPiM+HHsUMd+DuPb ++cWn5RqBZByj23wFCp9/Bf6Db8jzVNRnZx26+rjjtP8muQuxeIACjsgt58akLLQEk ++IVvLPoKrnZGxMbKnLejmXGYB8iLeWnF+nrR2+IrJNcBk3A+Fkb92EsJUpernqmzU ++3+Vrx1xeOrm5gRMgJshqUEdqZVeolOsQX6FW7LNV2AtvKHHGm3LtssaR/zHuZ36G ++ONP85Zw7QHA= + -----END CERTIFICATE----- +diff --git a/examples/puma/client_certs/server.key b/examples/puma/client_certs/server.key +index ea6f467..8b890fd 100644 +--- a/examples/puma/client_certs/server.key ++++ b/examples/puma/client_certs/server.key +@@ -1,27 +1,27 @@ + -----BEGIN RSA PRIVATE KEY----- +-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 + -----END RSA PRIVATE KEY----- +diff --git a/examples/puma/client_certs/server.p12 b/examples/puma/client_certs/server.p12 +index 7f7e8ff..12cd7db 100644 +--- a/examples/puma/client_certs/server.p12 ++++ b/examples/puma/client_certs/server.p12 +@@ -1,15 +1,14 @@ +-0‚ L0‚  *†H†÷  ‚ ó‚ ï0‚ ë0‚B *†H†÷  ‚30‚/0‚( *†H†÷ 0W *†H†÷  0J0) *†H†÷  0~Ê.ӟXyp0 *†H†÷  0 `†He*iDíÏ{òÔ¼ø¸‘0]n€‚ÀóƒS)÷9—…el¨!?¬ZáÁ7Ì7Åu\D£3›Ë"ü„*ÒÛ#':•ý9ÃSû! ž6 +-¤–0dÆÂ”d+¹b{#Љ›¯¢Ê!|Þö¸˜ÂL؜#Äm <¨O¢%4/®*ò¢žÍ7óélá·Öߌ,z’3– »Â6s+,ƒÙŽ/x´gòéèAÓRØøö˜ ‹ã<*bs†z· f{ ×7=šp%)‘ÏHŠ®ðahtDñ‡;F…ÖôÿaÐÄ«³²°÷ìDŽ ú6g[o‘£§/!R›÷Í4¾ˆ7V¢ú^¿NY šÿ¥ë½Ö¦ãÏn¿b¾%«ô`ô7?àëAâµô‹~Íö¥À£è–_¦‡þڕrÐmV ‘r}ñSRÿÎø‹ÓöPa!ü؄ö€òß‘ðBš*Ǥ¸ ¢ðÝÁ[ºTÿAi݉?‚qÜ)‹TI›®4‹ßG䌒ç·ïl¿ØÜÀÔýÜ3~ËhüÀ˛\ªðg’‹e+¯ˆ4–Lï?'“®€ddš¢!ÿ¾Ô^_›ËÐù  ˜èòU:PýOw<««¤FõŽì極jò"ô’ÁÎÎjÿ4È)uØiãKO¨Ï#ꄶŒç/Þ² âç2Iù“² ؝³e×Và1rmù, ØP«Ô|àþbV†Oy0‚,Z䵊&ßmpÚ)…«Õ|W›­BÐíÌè§_C¨ ˜¦€ì,äæÂR"Ú¶tÅ &EILóÌL&û@™h5¸opÜñFÌä‡af +-céÆu>í¥`°½#`ڙbý~*NÑEÄ~Y£f§ÿpî¼&ÕÍ+ÒTC§¿Z9Í„)RÊZ˜ï’mS2DJ ¡hVÁìúÕØ6.¬øÚ¸fåZ¹¯ÌBɽüì3†¯Qo3õ…ц“¹JޝHû”o7ܗ㠴TVl,l’þ¯êÚš¶¦@âRuímÖ¹çÍÆSëªùÕð™a r ه³~R +-?’F+yú¦ä^Á­ `ºì“áúH]‰l͉®Ú®LŶ|"_¥˜K£ã +-é87EÔ ÃÑޔ¤&¸ÿžFœIô‚¹“Î(0SÅ,cî¶²œ ò® ûRF¿§¾úEP&ŸñÙ\<*6™ùŒær-¤‘ëèJ Œv›Òlþ’AJm}Ѳ„ðAíO¢ÔØa'Ïæ{L©bî–<šÍ”•ŸºHÇցòLܹ:Û®*)Y’'×ã¿»ŽQtQɵ•¯z¼oáô ÿ­örð8›öŽk}‚ÑòéÂÒN<çõOriáÖÏ3ÙV&CBMàò¿3éÚ¦™Þ°0qdu&ïU&d@@ènÒ|І¬°M êVsŽSµDkBrªk[PÇ)ÕÝÍ!n CýH4¶«/ ñˆîpÃÓÕyvOßÝUKí-Xý”t';¦´y(ҕ$uË`__²u7QY³}†aƒÔÚÂÁYU² åÊdºËй{ŒÐW?Ü½ZrÁg‡d¯×€Gï¦U»]yLA”BxøÜûS߇Zà˜Gw1{׿sVsq +-¡‡Ã¥±¿Ÿé!™#¥Q‚oÿkÔx^Ó¾¾åý˜–‰Fò3¦R×,o—} 9Ã×~«ì@?zÌUÅ„ú¯ÇiD ìnÄÆ~±‘êÝ{Búºahzá/ÞºŒÐøÜ_ýŸxLFl÷*CŽUÿ£Ð´­ÇâØ%Z¦šp‚°‘ÃjMC€éÓö1^¡´ã†ûa§3õ§èg,FˆËDZ,¯,ËXååšÇtî…&S²ƒ´KïFù!…|v|òR>¸8FE¦0êÒ©Þ êŽcXžéë9҇Р+-™ +N²™5÷rXô¶ˆè´’ƒõR0%R÷ù6]Ù!®™¹Æª².(ÁëªÇT–U…’ÚˆöV¢çú´ì@›Iq±Y(í½…áy%è³bÓ5Sá˜Ü©ñbƒ/sø¥j ]j®oÈÌ´æ¡pò¼›#”œ±8àw²”ø—e S!K¦©y:°óÀb6Òø½#GÈÓ*½3†ŽÉwnÿôO~q_‘'Ñç^ M9!ÂçD1Xܸ^FKÏ¡“WÛtK¤¼1¢±3åNÄÕOì*tXÉ÷Ã;ƒ^hͤ®‘g¡eНb5œp¶-Œ8Š:@x3Vbßìö/“ªR®Ôú0IÓ¾»Øüj/£UÜTË®%Ñð$ò•¤0‚¡ *†H†÷  ‚’‚Ž0‚Š0‚† *†H†÷  +- ‚10‚-0W *†H†÷  0J0) *†H†÷  0’ù÷"~n)0 *†H†÷  0 `†He*/†ƒCÞËœ?ìœ$‚‚ÐØð‹{ß`žXg5ûŸönæn‡0ªK¥'obR žÁ$ôÓ\˜Ñ’W„¦÷u˜~v g¸Ò©>ÂöïøéØ¥]·`÷ ¾zšŒ·Á㽙'kWÊ"Y +-Ùº½íw¸=,‰¦/$ûò“OUH&7?Ñʦ%ÉMÆ{þBã–?‹F½\ÇlZ0†ÉÕWhÖ\/OùyÿW°È$ÄÝ]ÏÀÄ../ÅÙ{T±êÛø „Où(ÒºT—gyÖ­åÊOÍáw­¿}úÎr#:8U-ç6Óx&9>“ãÁ æÑ> šÙwd(ÛÚ¤ÔÿkT +-SŽ;œ4ŒêBì‘Ñ÷㲅Ú*÷>§|×ûê›´´OP¨ˆóì«ÍR°¬vžõ䛎¯fV>ÙlC„2¦ ‰Uœ<„Y·Ì™ðÀ ÄÎxcÌά ’Ò +-÷ÛÖ¯‹ŒÑ'7CvyU¤ÉÊ­ËÞ'ÒÅ1AP—tRï§e2*â÷7âcõ~ç7 ÏZHö P-®/‹¿2ehŽ‹ø‹)zzVÉv 0ø&‹kº[ò´Üõ©2▊pþ`+¨`@|–âñ¿œ’.žÔýú.”C~Øe“ó(ù}ÝmäL¥`}­¼Èy¸ú9îóC<ºŽ8ý½­pœ#_õÊÚ½ŽèRRÎϙQ ö! ]†FI`ƒQ@bÆÛÙïΛп~’À}WzKÁ_VŸ1ЏR½‹ý¹Á?qýG€‚÷úÑÕ_/Pƒ«an¦ÒÇÀôݕ$ñÏiƒj4)ÜþϦ@P¼³‰’w‹qàýiœËÏóÈ ¢M.7I„#JɨŽÝӆâT,= ŸÞÇՉY¾kàòBc×?œRâˆÃ ¡Mm;GUÚv4©†®€Ôûü}×1Ÿ¶çu¦ž;_2Ñb¿ð@¥Ñɺûztç¿Þ2foË vée<}7?âÎé¼ÑCcL‹IÇ/Šî\±¢²š~ðýòeÍA uâ ÷¡ $tñª™·Æ¬QdQ·²J #ÒVÓ5Ä}a9‘²^J¾~ ý#ä:‹&cþÅÆ¶²,•‡Úe¦³`ÞîK¥lw 1­[„%Ü| ++îÂN áEʓj=»âÊÅ4ÃýÉdK‹| ?¹€«Úñ¤gLvÎw¯/›s\èã‡ãz¶ŒøÈðÔ?0Âû£v쁽ù±, 7<雙ށ˜—¨¿yÜvàêNûtŸØô]ÃkÚ­P¬/Òàâ©ããnaCyåF3ÿ6«;-•‹„Ûj£%ÅcJÁ[s‡yoo—%ϐã§!­ ’Ln8^;²ˆͶ…w»„JBpÖXsR˜0ù©ùFC>‘6.rŠÎ>¨N›BÆkdÍm j”9¸Lhށ‹©M#,¢lŠP‰í!õ ++W‚¦ïC³Úîþ%ú嗌BàÉáÍ?}­<ƒ£s2oaz ·»­–ïÏÔ LÈѸ0¸›J½ gšÊG\îûûE¾ëÙmÝ9fðΉ†C÷ù˕jqÉ^Ú) rºý–€Xc“f®É„Ý3IÖz;)Ôß§c°Ôo_¼>L·ŠîÌL·ƒžôб’Ô\xŠ›. 5Íf?Z#¤pŒ«I®?³vY~_í*Jú‚mB@Í,õwâûOƒ©ÿ#¤²&T¶<[ 9 âÂÓS,øí̲a"4‚ê}b®•0g„—’6Œ k"®nCÝ8@øÒo‹|H·¿Þµ&“qcǛoz«•C§ªŽÃ3´kÀf–Û ÕÐq ÿ½µûäT@Ú5Øý’ͧvpL_ÚSÛÕ*²•!Zâ9«ÚèG8ŒßêK¬[ÿMê3mäqÍ¢¼˜Ù ûð”¸AV ȶG£ |¼mP–à NDÂwûµìqTyʰ©7Hsj"ýBÜûwºý¸ÏÞ ++RË-W¡×í·/Û8;~FÓ½Yx£I gÉ$¶P"K+5s©&¢Ý'>ûì#ѾHj–zˆÁLåeó,0aÿŠÓŒÿè"{‚hÄÃŒcìw’®;M(‡ 7Žÿä¶¾}¼HFÄ×y~0—¯-Ôæ@fw„~È ++{†^…^y§_Å'\ l×G²µaÿRŒÿ ++”¥KhB¬`,ž<0<µÎÑCt§O”©Ym ++,pP&d9Œ¹?ÙÒ»N•\ñ³¦t$Úà€Ú!¬'ç[»6ÿ=£·zX%¢×Ö³ã³ñÁ §íÉN/·…{Á½µkÂeÂQÅÙ v/r—¡Ó欦ÙD¨Þ¯UI9§Ãi±°?Ænù4 ‡!Àd¥u[ùý ªœK ڐžC|£fܯ«;Bt³GÂA‹&ØÂ„^•³‡¼­ÙíV‹1¤’›qÛ!(OÚÚËRD:uô¹)O¼rYxWr„0Ò}Hmöw!s[ÔÛ'e‘À†›w€l 8T9c¿wu–gÞãÌVK˜Ê°“ïßä}´mÒxƒÑáWС·å,™À¡ b*]Þ֌±q0mÑa©HT_¤0|9QÎ*)±*o›‹ª¿A?G†?µ"]Æ¥§ï#žÝc)‡=<Šv˜“Á»MÍѨ^Ó¿Ðp‚gíH*£®˜-Û$=]Ž] ;õ‹°ÛG6\(À•Iǃš ´Ð fì…ÎÙÍ÷Úñ1‡^ℿ Wɾ¨±jë.edFzêR Î#WdG–޽š-< ~ÀJ–vwÂO 0+À8Í$<Â\uN8GÁˆ{ ”£¡rëAŒXÚ5vù~©2J6ÌÐ)cžSç_,­¦1p¿1P)¥<ó©f›àS—ZwçThé27ù+’Í{€kþÕÅQÛ²ÂɒuÝb0‚© *†H†÷  ‚š‚–0‚’0‚Ž *†H†÷  ++ ‚90‚50_ *†H†÷  0R01 *†H†÷  0$` Çuåߘú·šeð\0 *†H†÷  0 `†He*DÑlÑAdwÓìTŠÑéì»î‚Ð,7áCvÅA+9Í8¹á68|È&òÊ)üØp"™$Ö:K+ß"Ü¢%q&ûE¬P§ÒÂÀA¸…¿I'\^¨U|ÐãýTåoè̵w_òÆñ»r°½.ÌYß¾ÑFëk s,'Sa$ŠO²wZ b¥àk;Èñ.ù!X,À†j4 ++l~uï›VA™xyoÜìﭏW\¶Ì¡±Þ®õî¸D ++ÕÜH >>©{.ˆ­qb”b3'ÊôÓ+&ÔúCÏE«¾êكâ'w{ٙ“KJn‡c¡•´\@Ççç8ëúv5@Ìi{ʸŒ­UôŒ£E×ÅH¯[@fZûŽÚŽ™Î]ÓFÓì+ªptø~€çðIc6“]p‚­mö›d—¹¡/I*ùôïfRg6廀p,wîkîËÏÆøöwô´,¸úžËÿ_À‚øq9Ë=Ê)d‰çK3œ!*Ù½ƒÛÄB~ôˆ4˜Œ#YêÂoI|ˆb&ˆxOÞiù7^©;`dùÒÃńUµ”F—G|=ÈVëæhCÖ­™–(‰'aŸmtJÐóþ•ôBÀßA€Mؾ­ž^¢‚$N¸ô.1¬ê‚œoL£ËªÇhïÕ£þë¸͹ˆ%¥½˜ªs˜™`Ú·¤#ª©gR–'­¾0/p/'kýmžuc6ì¦Àðû’íp\âÂ`‹æÏú”d¡aI„þQ~Òr/ž¼%šMvVœôð݅¼Ži¡UKRi Sƒ |ⳉ ™W/ßÉ?ú²E³Ö¨¦‹’,ˆQ{y¨•ù9A˜Ô”ô_gP²­Ëk*ÏÄüp€ë5öºž¦˜ÃX(¸Â/à‘êt³Ÿ‡ª~f53-N-Ï}"ڑ­Â‘m Ï×EBn«VP–ƒjª°Kôå? / ˜ÔÌñ-(–wÿÒáÞ*ä™ۑ›Æ?hL˜9uî°Ia›!.£†ýð[€§È)!ÑID|ÿÁB~l2ù-Ù»¸‹Sž²…X"Ãpt± ššÆÌe÷m¥¯D§ÜÞD*cä²]´4¢Â >”H¢œ!À, ›g¦-é‚oÝ!t ô¡Ý™ Ý•,,ùÛ« ¢õs¤;7Œð÷²Ke6ªÁ÷ý¨Ùh6? ++™§”M Ök‚ñþvJ›”fâ¡m îDR šS±Îª±Ѥ€È‹¯¯«nÅ¥Vüذ+Œir²ÞDÞWFÖc*ðýÌÉ÷¬þ‹Ù‰ª9™QC_½Ùyʏ.IŸcªµÈqO™ Þ1B0 *†H†÷  1 server0# *†H†÷  1”@y”~(‰ò•i8Å.qwB g0A010  `†He g:‰Ptäu­suŠßé÷ÖØvhË`‚äxƒÏ£y¶ZØ" +\ No newline at end of file +diff --git a/examples/puma/client_certs/unknown_ca.crt b/examples/puma/client_certs/unknown_ca.crt +index 5c50d8f..4b07a87 100644 +--- a/examples/puma/client_certs/unknown_ca.crt ++++ b/examples/puma/client_certs/unknown_ca.crt +@@ -1,19 +1,19 @@ + -----BEGIN CERTIFICATE----- + MIIDEDCCAfigAwIBAgIBETANBgkqhkiG9w0BAQsFADA5MRMwEQYKCZImiZPyLGQB +-GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTEMMAoGA1UEAwwDQ0FVMB4XDTI0 +-MDgwMTAwMDAwMFoXDTI4MDgwMTAwMDAwMFowOTETMBEGCgmSJomT8ixkARkWA25l ++GRYDbmV0MRQwEgYKCZImiZPyLGQBGRYEcHVtYTEMMAoGA1UEAwwDQ0FVMB4XDTI1 ++MDcwMTAwMDAwMFoXDTM2MDcwMTAwMDAwMFowOTETMBEGCgmSJomT8ixkARkWA25l + dDEUMBIGCgmSJomT8ixkARkWBHB1bWExDDAKBgNVBAMMA0NBVTCCASIwDQYJKoZI +-hvcNAQEBBQADggEPADCCAQoCggEBAKh5VmSGmeN97MEPb9Td++UYcWHhYVj+yxi9 +-leDzcLpAgqtd+z0yBYCS2ULRQqomf8uIYODEuWxaepVNjjRN5Y22Hzlodnp+kJ3G +-CXQva6GtwxbTIxyZ21Yn8APPgb7OTHZ/js1EhZpJUSjum19PnSS8rPfQRkr6m2eg +-HKDkzV3jrJXTpNdvUhTi2NVVo0vNzLYV5Kj45vqirlTEesLxdxHtDNx8vanYHaJY +-JY7OryIJhPsxKYplSbQ7ydJuHtpx5SiFjRckw9ddhRzGjYsAQFE2eVBPjhiYJnDL +-tmEnb2e+tgRNiru9ttffpfzN4EG3/d9qnyZV9nua03yn+tqe0sECAwEAAaMjMCEw ++hvcNAQEBBQADggEPADCCAQoCggEBAO17pO0lTeGMVgMplzEn/4IdsVQXt45z1MgS ++3irQEGPfIKkZHnVdPElJnag3pTg5bmFQ/yPOEdbP04Ao8/BvCgvUO6jqkTR9aic2 ++PqnlXbTPeHckjskihhcbcr+ZKO23dBP42U40E+6TakZponUsZs/YlKE4pKUfjsYq ++btVyDxe0SQWxSp85XUNn6Sd2Wm274/wQtjjDdMeMtYANqGRJStKG6qZAe9bYwOlw ++UFddMu2osIV8i5CQcmJnkVW0MagUrpvGZSni6HO9i3h7Y63r+d76NlR+anFPz4+l ++kZKBugfWGI6lC1rSQ7q85ucEJeqSJN77dHGRyNITy2+PrYGcNAECAwEAAaMjMCEw + DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQAD +-ggEBAAp+1M6+Z8T/CA+C0288CRF27tXKn5Kd5Iffrx1Dg7I5HrFGJl87tkzLRoZi +-MKj+FfpF7fJ/QSyQt+UZa53R2vmJig6JUEQwfzXc5Bp+fusJgmkGPZQ1A5tnbwCZ +-TTuyy8Sy9reCWdJkmdDWyK3ah55mjiuOwZ+woA3RAoC9vCRtIT4w08NqrISBYp2i +-NeQCv3gooiQrbJuCUuo56Qm73juJ4T7GXElRMF+SupmhC2SHwFVGAbu0/g6Yc+ye +-i6/T36t/GTT0fG3kKfGfFMq3NCvY3WI3vcPzYtK9fN8QYVy3LjdnsjcTV2L3SaxG +-3fYURa9nn7mrxlMBX88UWLUIPlc= ++ggEBAOgqzVzIQwZAtnhBhZ52J49MQzw7e0jlUoI0nSBNcT1QckxOGNE2jGoh9gHr ++Ti1VlesIEO7v5IXAyDuL66sOWPWzmPdU2uKDoWmUE5ry02dJu4W2OoueTCQYilAg ++vmaPXgH6GySOsazj1LK2RNkAzbj0Kw49bwa4vOxEnrkPCLlZBonEAmMnhOh0t3iP ++TUk2wMTnSJrJ002xDArUQol+sjVXGktYWT/bReERDBnGA6opFqtMVap48kGqgCOV ++6lHEEOg+F86ubhM0wLfdpFp4j4q7aAFQTtapihnLlFXMKiz9imjpuAWllSKh0owP ++ZDowdJZgG1trNkK0oMgfICIYKlk= + -----END CERTIFICATE----- +diff --git a/examples/puma/client_certs/unknown_ca.key b/examples/puma/client_certs/unknown_ca.key +index 830cd91..06e0f03 100644 +--- a/examples/puma/client_certs/unknown_ca.key ++++ b/examples/puma/client_certs/unknown_ca.key +@@ -1,27 +1,27 @@ + -----BEGIN RSA PRIVATE KEY----- +-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 + -----END RSA PRIVATE KEY----- +diff --git a/examples/puma/client_certs/unknown_ca_store.p12 b/examples/puma/client_certs/unknown_ca_store.p12 +index c74c940..04afb8b 100644 +--- a/examples/puma/client_certs/unknown_ca_store.p12 ++++ b/examples/puma/client_certs/unknown_ca_store.p12 +@@ -1,10 +1,16 @@ + 0‚ +-0‚ Ò *†H†÷  ‚  ¿0‚ »0‚ *†H†÷  ‚0‚ÿ0‚ø *†H†÷ 0W *†H†÷  0J0) *†H†÷  0`úZÃîï0 *†H†÷  0 `†He*Š—I£i;à M å ÖÒõ€‚k² ¢vÓ¯‰T+Á«‹5@1õì§Åh|2¤¸ dVò3‰¨¬½siÿ±èT%Ǚô||z³—ùvÞHY¯•ƒÉ}ö5áþÕªàèkvÁë‰èä¶_D7|ˆ,ÌüpX;ÓBwáAP衑Βêç'Ö(æ\xЖ¬¯˜ÍÞ)rxR´ýÛÌO’RrU;‘;«`ƒL³pyå3OÌ q+Žw€ABY×M¶®#J‹²†”¾LjvÄõçŽú6NÁóR‚oO¬#¡ç3Zˆ)ë{2¹¬`­¢^Æ¢£¹Õ“KJG[ *7è » ³{`†G>fdœ4‹Õ+)ÔÁ§1z $ûVÀmޅ¤’ׯ}Âòƾ1r™n¦s Ù[H¢¶éÑ5¢Ü+6ð!,¹ãý80-/㨠¥Q~&ßã5þÕäÍÕ-Ç®öÐu#nzn.mÚ±lÐXÖqÈÎÀÕÜg1Þ°»Jǁ²J +-ãjöd€ìVfÿÀr‘ªÐX­´‚`ïìâôÝÉ{™2âìsï&ŽŽ£Ôºj"º6ËÖcë3ˆpœ+¼‘ØœTú}m‡ìÐ/DÒq_/`ñry*Hm8æô»¤`­±×˜M·c‚ÒÌÑçÔ ú#¾ð§Þ +kÓAWù(øî>Vi €-ࠍ² ·Rûì2ݍi1Ó¶ÏêUørÂT%:H&q…jVQr[®6P©O2X2NL Q“?b¥³Kg}EW‘V¾›ÍÚ±©ÜÃcÓ¶Cá]@*Œ8óæ»Ü«ÐYÅÒïþH9¾‰ÉAv@ãMɽ†›½Í´*ríöÇôƒPf¥/ 7åНm8ý6 ÛòÝûâoª·¼òŽ»XjDgd¿³'Ü,yiGà]Œp~ù¤üûåÇM#]6I³[‘X¬ïe³Ÿç–Œ<é¡;uþ’òÛrý³Øbzíó×Îd.^¶'—~¸‰*~õ7<'»WçͶå̉AýÏ­Li {¡*.â‹{ +Lˆat5IÄPÏ!ÔtׯãÑW%ã áfíîËÎÁg<¿ø·‡$(5”Cœã½ŒAµïڜN–XNón2ؤ‘¡¨±àé+ ä·?߅ÛfÃqf*ÙÌ%2ëŒÝ‡–Wg·ÙéHçE"g[ÈR/ñÁ“C‹Â:Ȋx…Ðï†^|SOžotʧ®ž¬ê…®Úm"Ÿ-xôöŒ6z‰¾v¶l²,ú]݄qµmøøÑ §½ ´í"f¨ è‘áÙwMÈ®g“çœÒ´r<'„Àk^ÈùÕ Õ=„cª‘&·¦¿ÓΨKÐS½Ëa@1B0 *†H†÷  1 server0# *†H†÷  1=¼E +-à•ôÀö€q/õë ÃU‚_0A010  `†He ÕZì@øÕ1ÜõñGíUqÙÍ3=ýÜ(½“;:>Ɇ׽_“Éù·”U‚ +\ No newline at end of file ++,0‚ â *†H†÷  ‚ Ó‚ Ï0‚ Ë0‚ *†H†÷  ‚ 0‚0‚ *†H†÷ 0_ *†H†÷  0R01 *†H†÷  0$£U´?¸#U¥›Ìó ++ãÒA0 *†H†÷  0 `†He*)¥¤™›`Õ÷qŒÄžƒž€‚7"Ðÿ]M™iì€ ++!@_ ++òÂ)fZ‚š$+˜Žö&ŒÂv³¿`¦Í“Ævxå ÝªÂ¦¿°Öuž×S®-Œ~7^ ++)”:eÞÎíAœŽØ €š{mbè×»,Šv+÷k‘uÚùÂBQBÕïg£œ)¢ÝËñ6‡×&fI¯È61৤ˆ¸‰²Dè-.ån² Y"-8 ÎÈçæ7á1»!ÓV‘ùú ++¤fÀeåé%¸Ž{d)ñã>º_×.xqÁ £þ´Vz¬É—zw9/Õ|”±'Ûnž³¡±_‰1#IDH´·ÓR.…(ã͜7ÐVÕ3 ++•„نߡ€$çQfgÏ¢-NG, ++Ën(¥k~n ›dEívkTõž2æÆfìEìÈÖP"lm*× gªH¶?Ñä/#jLሯQ:þ §Øš}º ½eaÖ:fVô<‡fcôÀ¤³ÕÌ'2x•Ý‘Jo`é6R1÷žÔ½ðàŒÈieú6á’LVe&ß<ù X샞¥z®ÆïÖâÞ¢/½¥¨ÊÒcõ[å}W+$¼¥àÎ]2Mh¯ >ip1TаžA¿ìèÿ÷HY¶NîYáB}ÆÃj©æ×ѬÎìYÝ‹U¡‚` ìŽh*_»âˆV¤ 7ôÝ|÷&–k̐+µ?÷¢¸kjü;ª>zÓæQ¬Tózà7¨jšK’Þ0 ÛUç#ĔƒëáëàõlExÑdƒh{¢Â d¨f\{R!%xv7RÏŽ¿IYz.xÂTTq5ñ‰0h¸0·. ƒ±ÙÜ~±»)úb”PBHýíšÖK´juBj[ Î|m$¾£*‡­¢fšéd@ —=²‹ÐN4´Öè‹ý{š’Q·Qª68÷¹¡ï„‡žÀµ +6ýý¾uÄ9¿w‰K¯<ô¯¬¸ÖÏE;ŸÖ?pýÕ÷‹¸q²±¥‹KÀ )óCª$ömpãb‘nêۛw!§…µ 2I§oœ.x+àŸV¨²þ ++º‹ØÝ÷Ó´OLÃuaÖ¾µþ‚zhž•G®åâ®3øgI[Q î¯™¯cÏÕAç¾vŠÙíM)—ÁóqÍá½b°~úӆÌÍtœ¨Cã6œ2Ûÿ½?!­¤¥sö;¬ÀêܶbÓ0‚© *†H†÷  ‚š‚–0‚’0‚Ž *†H†÷  ++ ‚90‚50_ *†H†÷  0R01 *†H†÷  0$Í4gÞsrPÆ93†·Þ0 *†H†÷  0 `†He* W„„}GΫ×v„±%´ É‚Ð]—@º E2Ý×9Ëäø3toèTÂ!d ÊýÁ¢›å97E‰iô€ÁC8Ñ´ª\‰2³±#8É!œÓÐ5X!–ΔÉ.¯¦úRÐ,s9—ÑŽÛø Ѫ#útfkS ¾A2z›Ûãb5ã߂ý¶Ž É6™\s·þ|öüŽ|elo…²ÅM…ëw~%Ղg<…ã¥Å,Aˆ¬+²óCښÁlޗ]\Š|æÏç]Hå•óbG7N²Yzyýт¡™™fVJجî·>Ù¿ÑxRÜzl#Ô­OHð+Ý^–Q±ŒgX«k!t˝A¾4Ž¿ÌhsTNØNõWPUpS*˜q§]gÄ®®ƒgŽAéÊÀö˜„„†rÉ4XE -!’5=©ðí‘Ñ¡Þjõ%*qËì²N`OOW“ò¾|¥ÉnÈv†ó4«ü‹IçŽü§Þ×H[$¯ª| ++š”CÛ§ï5J'¥eÈ1M$àèzheës6ÜPq o’Ž{”o÷h´}\Ê¥U!HêùPì‚5ëý)„P“¿³øN±‘ïêýQ~ –šáÊÆkÑÃaŸ,Nۆ‚öc‡“ÌÇþãÑ*8'ÒÆòNÓaÑË'lÎ4ØHÂq}= ++*®dû{ ÂI缕œåä0Du›5õ pv™’ÓßXÇ"л?›-Ô¬"akÁ¶_ŽÄ=xÕ Ày³>w=㰂äG¢§õÉhx‹0]•ÉsAn•ÕŒMyC?H± D®5Nºyr¬xkèÃæ‘:«dGáe”Åþ¤0{{> §_m¦ØàR-;³p9¼54h°—ÐÃu“ËP0§cÒÁ”æ7L·nºúLjv÷4Úõz$Cýt?/7>‘W¬¤çf¨UÔz÷N¯’ŸçÐÄêKø0ïpÞkÆ¢)|)õ‚.¦‘TEu_'ðr«x×kÒ`‡?½ ¶ïuóê²:â¬fÐáõìϯDB©$´¼ð*/ƒæE;¹¨v« Y¢¢].7Ë`Ë{аrãÖL£aÂwÿ"rÞ÷Iù—ãÑ œ;QDù,dáÆW0V1R”LY(¦E1B0 *†H†÷  1 server0# *†H†÷  1K$…³žM´‚m(Ïð× ++8Û¹0A010  `†He ÑE¯×)ç˜d”kóɧ|ë„ö/>™í,Épvª­æÿZ– +\ No newline at end of file +diff --git a/examples/puma/encrypted_puma_keypair.pem b/examples/puma/encrypted_puma_keypair.pem +index d876594..25becf1 100644 +--- a/examples/puma/encrypted_puma_keypair.pem ++++ b/examples/puma/encrypted_puma_keypair.pem +@@ -1,30 +1,30 @@ + -----BEGIN ENCRYPTED PRIVATE KEY----- +-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 + -----END ENCRYPTED PRIVATE KEY----- +diff --git a/examples/puma/keystore.jks b/examples/puma/keystore.jks +index e36f314..ef92af2 100644 +--- a/examples/puma/keystore.jks ++++ b/examples/puma/keystore.jks +@@ -1,16 +1,8 @@ +-þíþípuma‘C”)0‚þ0 +-+*‚êݝ˟mÍü†‘ÅÞ{–ç˜ÚÁ.¼¡‚ºýû[9GÍ}çDuЍëò{€ÿ˜ìÎä‡ÍÑ&éð¼)‹‹±²Ìâaß5v©ÙíqÝlﳡŸµ¾˜RϺYÇ|•Rrφ úL¾v÷zô§Äy+¯`,ô֐òJ19J ß5ØÜNÏ7x:ËÌæ:ø’Ã¸ÒæÍ´’qõþ´ÈåÀÝ`o2?w‰¬l@¦€Å¬¼âüˆ§¨§rÿŒ6Ý¥±®hs¸ßڅÉg£ó„ÆàÔasŠé_t!{a'=–X]¡l\]iq¶¤ó~~K4°s94çl¹™e1À*Á–BBwߕCåq^tgl{€îkº(¼Ï%§u©3ˆúÂëjùUêt— ’ãœ9#‡Lgº“'°M-ÊáŠü€¥ôû±H +-E,‚?hcSÔÒ±]yB WŠG äcİé;‡-u’:è6"#®Ò牤‚æØ<‚¼bôhbGŸd{fç„æ$Ì]zÃ|åH—–Ñ«ÍØt—´¥ eã'=?Õ:¼£6µJ[Š€»!ðSù³R2­êßp¡Ç±Ò²…ögê­íE›´iìzvv ÷¢:PAI#Ÿ–ژ˄U'£8›ç¶Ó¡lŠÈ*&ln@ÃÔî¡Æÿò«Ü"|^ èÏCmn´M$F2RæµEÀkEî?DK]Ó!$aO/xÔ'½L¨æ2Û[rh ¨œGžð3òl#߀ÇhcòŠ±m1,EÆüÇiçˇ!¼½'µì?fð¥:ç†*}8ƒUSúêZîážËwRàdã(ߙœ>§ ÒòÄDeQƕ‚%M<]xö#‚šh‰2•—Üœ5x[æ6=yØüqsò9ÂÞŠ˜15š.e¤Ç’à÷˯%jßi1ò'Y>þùì.ō˜­ÙÉôîù´‘ú#\ûÛÛ|¶»ÎñZÌ2óµ¶ôcf©0M´âˆò8|çþ¶kVZ}J¨3zÏ+hr¿‡ìÐ{)XÿOҏØj¾liÒ¿‘lÕ#ã¼Öcaq§mýÐýFЖIáñÚRˆN.ðÞ_¬5¤pËMlºKÚ7cãüÞóæƒÆ|7åRc= ®J¼áÑfOí½£!¬å=‰’NE_ƒµÈ¹œ¡ҞÇÐ ó~ÓæMC”¥x3â02Ï0D"ÑeE[GN3I¢"!Åãñô%§£n•ÈLþ°(+ˆ0x°F#²W®¦¢Y0+(ˆ%ps5PNP¾®ÌÎiúG³°2êä6?hoHUÒDäáW¤ë™Ãñnë#Å~穈½êøà—#<åÛ¼äp2¸õN<±F¬/n‚Câgt„˜ñÈ1PZÿ‹ó‰U û;’n¶æüóÝ i#ï„J3Í7=퍂xº$±¼·‹–ŸrÛQ›Ù‹ å"BØ«ve·œQáXÑ\[€t$×QM@}@X%o,ÚØJÈ¡?ÐOƒ˜jë 5‡.l@IœŒyÀ,Cò“$…pÍ%gw½I.œ¿@˜¡7g~6À]ðKÐÿP×ï íÀß³¡%Ó¥«nÀsÇñðµ9ª<î¿9þnÈÜýL&#)7õãX b¹ª™àXKQ;Û ÒÕUÛêxköÈ0ׂñ©=ÿ’-l¾ t«6éöª^@Ç©;KF¹›¦b=¸²ÈTî'{­ÞWô*ÎŽd €VYt€¨oŠæ…€Ñ´Áaøõt ++VP £ˆÎùWÅ×1‡@‘æw”F  ·ÇÞ?u¡ãf;ÀÕD«b!ç($éáÄÝLàAP7)Ïó~$7+ļэgÄ!\¿“¤mí~žî1àæÏ­kø®¤:$oõƒ½—§u1ÌïH£x³… Ú[¡= HwÈeÈÈNel:nº™G¼‘¨·k—,‡üAK†y{Ü Ïܨ ++1¹  y¹‚T6(yç £4zÛT»rθ—NX.509†0‚‚0‚j 0  *†H†÷  091 0 UUS10 U ++ local1 0 U aero1 0 U CA0 250701000000Z 360701000000Z0H1 0 UUS10 U + local1 0 U aero1 0 U CA1 0 U puma0‚"0  *†H†÷ ‚0‚ +-‚ó•Í“@b◯É8ÝÏøUú$VyñþØ`R®÷®­3ðtÀ÷òº@|t¨ŸšÄ¤“íÊàôuüsÇÜÛÿ•›àÌ裁…0‚0 Uÿ001 `†H†øB $"Ruby/OpenSSL Generated Certificate0Uò"e™€CÁõF>¥Xkècäô0 U 0U% 0 +-+0  *†H†÷  ‚Z¦µ3_çò4=¼âhÝ¡þ#ÃÃɅ@3­7¨XQ 3ö!ÿCmÙBKîüo9~á¾.IÀn«A:QÿèJ óòñÜæ[>/Ž£Ï£tʱF\L/óë(j +-Äz,GS×e¶ßé†?Zgɝ0•ƒïÂwa®NhýÉV[úîH´h&Ôà¼àx]KT-“þB¾+½2f(Å债Ï{ס+ãé>MKË1ôî®ØL¶‚OÆ Ó$VÌH¡2!²‘ˆ$8™u\“‹²¥£à!oa‰² œè2*OE‡;݃ÜVÙFád€¦ÎkS>¥46¢S‹Ü!ª—bè4þn­_ +-[•`¨ˆð ÃÀ +\ No newline at end of file ++‚·¬ÙæCÊp’ÿæÃG…äÒ/5°¿nb/‰D€Ý䍸æºÖ™§Þ¨a3z”·?U‹{b•¾ƒyB¢]‰éÉEÄ]'Jꙗ¹° ¿*ÊšXb|«ž¤E¢X×ä}öá)ì’\ªñqb(]˸€/6±75Üaõú™Hjn2Ò6Ü+ª6š“çø®¼–<Ù®PùS0p$L>>ò]÷Y§—°åŠAÆ¢£ î±Ï[d˜óÂW–eÌ4Ì"րò­aÐ[Ŭ kˆ%{_;m%¯}ùG°üpŸ-¡Ã.m º¯ú=¦µTëøßÍg*£Ÿ%XÅnÄß_¡ãj…‡Z5£…0‚0 Uÿ001 `†H†øB $"Ruby/OpenSSL Generated Certificate0Uò"e™€CÁõF>¥Xkècäô0 U 0U% 0 +++0  *†H†÷  ‚W¯skW³‘+<(÷Jï¶VžN5UWÄÆc´×•ûÕNé5úØd ÞxZÒéÀ¨•NîEBʺ‚‡´S ݯÉq­‡cð»‚Gˆ ð™wࡇh}ÿp#'ZPg¥°{§'•‚Ýû›IxX àÁô5âJq„UÆiþj­„;Œv0Wã¿ß §à9e­c{`„\%éÔ!Ãs­(èæ¡„T6C¦sÐ/. oK» ðiq¬Ä4á­$?üçºu—šöNûy̰»NÈ¢¦±·ÁâoÇZ;àSquœHëypUѽz‰^-VØÇféÙ,´]Sen¤÷Õ,&áHJ†šµ¼pwŒØk){dI3$®Í’Dû‹ +\ No newline at end of file +diff --git a/examples/puma/puma_keypair.pem b/examples/puma/puma_keypair.pem +index 1aded78..f1c333e 100644 +--- a/examples/puma/puma_keypair.pem ++++ b/examples/puma/puma_keypair.pem +@@ -1,27 +1,27 @@ + -----BEGIN RSA PRIVATE KEY----- +-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 + -----END RSA PRIVATE KEY----- +diff --git a/examples/puma/server.p12 b/examples/puma/server.p12 +index d928a19..49f76f8 100644 +--- a/examples/puma/server.p12 ++++ b/examples/puma/server.p12 +@@ -1,13 +1,15 @@ + 0‚ +-ˆ0‚ +-> *†H†÷  ‚ +-/‚ +-+0‚ +-'0‚‚ *†H†÷  ‚s0‚o0‚h *†H†÷ 0W *†H†÷  0J0) *†H†÷  0ùØ{T¸ÌÝ0 *†H†÷  0 `†He*‘¯²8\Ã]}̛˜{„<)€‚ÜTHâÏ9ô{#CÀ¼Æ­>üO̱]¼fTƒ®[éªèǨèŽçÁs‡V:·!°þ™^ Y*\Üa õö& àHUty,¨ww ®|z’kj¯$…õ÷»VŠÂr³,+ö0z³øRÞe}Fm.òû»,:øÜ]‡tÐyÅ´µdT‚a–ÈÁ{#,ô ð/ÐzArÊÕìH¿±hîj ±ÿ²ö&'‡$…k†…òÉ.\.tØ6D+߈Ï`ð…?䝲®¥#¿Y;Î-Ñbji b³£ <¿½\JJ¤k2% àÃb´wíÕ½þŒÊBjðõ¿I¡êƒM…ËIÖÜìñèS.‘@Š›Æ0È&V‡¼¾¢ RgXA‹XUhHæÁ+Ji¥ºWœ…ògvò4(ù|ãl¢¿=Šc“nygï«PÊ2 ¼€³¿â•)7©yÊd˜,‰`Æîv|Ãf*‚÷©VH滥\ÿ(šnq éfՓˆæ'‚"Ã×墱ޝ—øm!‰à‚Û!ö9p¸QcŒ¢£ n Ø)4ææWýD„ŽçäiXy“ìÿ¾3¢mÛÁ%Fސ· F,(w–U˸šï- Q˵†K¡ò<È·È¢ï=í·Ý S7‡’ì6Ù^y’Aίc»-«-š÷ LLc‡Š¿B||-*øÕú Yõ.ž'MÞ¸NRyù™bË<ÞþËç Š‘´¶|Ž…/24˜l†ó+µ@ïVéô÷TûÛìP¢Ý RöþI£·ÕCĀ<ô”óc‘ÂBµÙn—¯b”È_÷¸õóWxçäì42y”ʍ]Æ./Ï·c¬é}ã[ »çàè\o¯×’d9þük4Yv¢¼ÀŠÕí˧í_ë3[´Ì¥‰û1’o¦vá,aæ>W…>î^7èˆÂkˆ¬–¾K-{oµ¨A;'ʆ‡9p©–ùŠž÷í’à¦âu6Ò|q"È¡² SïS£·,Åw”4ÖÇàßf£Ðâóƒ.œ¹6Gìòv@U·xf$rýÃëý¬Ìœ¬"NÒ9„²dn¦Þƒ¼͘x¶Ï Ìcê¹s)nX_Æ"[;+‚çìS:;íjv:­™¾cr‘g<ãZŽœI°É8u• 7+}DüµønBƒÓô¯D{øëIÆ¥ƒQ8®·§ŽV¹rJ7I2èlCʲ4¥0öȃÍ̟RPRëÐ_ð†hŒICó“šua—ZØêwºv¡ÇÑwDôEO.X–·ö ë/&ä×ÚÞ?ÉGY¸ XßâgéR’:Mk‡±Tϱc +-† Y0‚ *†H†÷  ‚Ž‚Š0‚†0‚‚ *†H†÷  +- ‚10‚-0W *†H†÷  0J0) *†H†÷  0‹R)?¼ù0 *†H†÷  0 `†He*­lŸïrRQƒžqÈïÕv’‚ÐéZ~knÔ´(|Ԕ³ä[_£¥ù_"šöðïB]_dÆ£…•+¬=o%—îV€}T*Ä55䞷ÿ1`ôpx 2¼¶{ORÈr‚v¤Å3 ZëŘý0À&õ·Í` +-‰O‚®Ý·%M+ÿ7֟4ÔÊMË1èz/ÜÕ2Ö‚A™9žö‚ýâ¶^ʓ!©‰ö‰m€ƒ‰wÓއ —ê/«>å‚TCÃk$j'âÆÙŸæapDV'Ç Bœè«Û¿ý‘šÜf…¦)çù²•à­!oCë˧ñEð; 5ß³ø±ëQˌ]¼è T àÂRi¶2žá…XR©X±C6½f†S'? #ñ|& Ԉe`ð8 #ùJ¤Û÷Þ± Åç´ðýû|v³FµN}äm–q$³ æa׬ðK<ë—EŠ+Y(´?ÿIÍØAÃç?¡–Üç/}ÑÊ}Ád¯J¯3‡ëæo±ö†”ó ˆüi¾,@èxŽõäOhê@+Z¦Ê3, ¦{{õ¾Õ-®òþtÏ&ªÏÞòÀš[t%¤íäªvëÛùÚ´¸ÍÒۜ\ØBjié?êº*[V5Ý=^Hœ>DÃÏ= -s\  qœKX<$²ñGŒ›óÓqG¯án¸<¨EWÛyXjyä÷‘ÓÕf•¼†×ª©òDõVBQ0DR´V6áj~ö“æØ|3€Â8Àðm»¸¸“s{“$ˆó'Jñ¸b¶ÚÒ¦¦´×áýÄn‹)3Ø>ç;ÑÂÙQ .ã|“B¿Ôë~„HÁ_èÏài ¹qÁȺ¥Ø¸†™ÞÜù}hVDò[Fm½…SbP<1ŸÌõ|¨Ê—àY̗~½0TIܔaË`xÇ:´Â“Ûw\_b…‹ê{§âe1±w–Šhúü‘;SÍϏ]ƒ8“• Âxþ×Fl0<ýóJØ¤ñaX#ÐÑæÉ¢xãß?û÷™dÈYŸ½‰ŠØQ+ª8„ÚÈϝ,•³ìš _:‡‰¡Mӏa>ê(LµRÌlÙ§^vfiðV‚¥0 *†H†÷  1 +-puma0# *†H†÷  1ԗS9ÓWˆw#½“Á’øl00A010  `†He ´ †öX(»6#¹ÈÚ+ǐa®OÁJº}¤䟯IŒØa‚È^— +\ No newline at end of file ++˜0‚ ++N *†H†÷  ‚ ++?‚ ++;0‚ ++70‚Š *†H†÷  ‚{0‚w0‚p *†H†÷ 0_ *†H†÷  0R01 *†H†÷  0$ÀéE¥n¢äã©#d”VUép0 *†H†÷  0 `†He*¶ÏtøÐåõo&¥d»[ÒS€‚ð;†•ÌÝÄp™ÄF×qØÛHòÄ¥yѕ2¿hVP9äÏÖúà…|‰Ãf›lk»ÿ ±–nL¸ª‡Äð5$ÜÂ]8Wù:<¦ßâIÏÈÕúI~ #t»_jKÛH5ÊQ¥kç6L ÔÝ÷G ++J³±ƒáœ¦üí¯7_+3Ü*ٟA¾ÜGÃÞ` ˜Ê é–ÀÃ)šÊ•{‰Q“B®XbÖ¾¶•ÔØì Ÿð˜àÅHª"̪N~£aå]ìI4 gƒ-ö“-ukó<¥^àgj+j|[\ä ++ì<­qSÑ2wÏtí®RwZr—¡ç1Ì µ_³3ɒj4‹®Š!ãƒ@sóÜ–øûÍß° Àý$Åfr6 ÎÓcR_͍ o8úf®½$<ûvg(Í §¼8±1Hîvvýä Ü“¹T äÃÿV“t²¿tC¶œKKà.'ò68 µæ”°#žÔ|vú)Â2=ã‰'åI@ŒáQ8ñžÎZ´]ˆÌ*ù©ŒSã ãËV.äãõbNu}oÑZS.ü´xŠMÝ#ñ•SZ.8Áh¼¾ée"n~"* |Ýý–"¨†€‘¯XdϋңùÁÌ.3ÙáBið“0‚¥ *†H†÷  ‚–‚’0‚Ž0‚Š *†H†÷  ++ ‚90‚50_ *†H†÷  0R01 *†H†÷  0$j¿º<ÑÔw^Rä&Üz¾o0 *†H†÷  0 `†He*}Ý+ã/KâVýD֊–€v4‚ÐF¸Ô¹Ìgc¼iÌhi9øïØ{BV 2²ÍzéZ”fŽè¸¡¹a:閟3hÊz´à3_‚⳩wY#ærŸ´ì&K”|èõÛN¿'ëÔµ 2GŸÙ=ç)iy¬îé]Ù ×+ãíîŒØÃ 7jÚÍ¢÷e%H`O=t”²ÎðŠp1¿Bhæ’Ö ++§VAçgµÔ&bCZc˜é˜Õ€B‡-ù #õæܯÛ=pbSFD<:t+Þµ¤ìG”'QKèè-ëmN,&&êŸ^jË?h,8u¡Åt3¤È˜‰‘;œ /8hn’éÙ©äU|L+”³¤°îB«wMå[q1ø¥oû8¶mrp2A,Õñ¨&¡ò•N¡f΀’áÝÎ 9b֑~ ++AŒŠtíàÎt—TÂ–¿vSĤL+LSé›à¹G¼˜z}”Ls4ˆ~Ûx¯ù‰£ým%˜ã© ›Ô‡O¢ö®"r‰*½ê,¸é§lþ%h_ÍãE{µ…pŸ ã]u“›³tC‚aÁ†ú´B%ÁcßÚeä‚Wø_*ÃXöç,n¹jg{sà€7² R^™Ü8°ˆ û¢O€’µï’ ++ð`Þµp릃ÈlÍ¯,ã&·EúÖ]Q0‹˜> ²•Å3:•Z¡LF³Ø`܇%˜loݦ`iý}¼g‰t2O§ZÖ1>0 *†H†÷  1 ++puma0# *†H†÷  1ß7HåÁRnõ햼ñOò„À"ðôK0A010  `†He ªÈ73Úz{DŠâFlýŠ‚½NrHOqkñ4{¸ïˆýƒ’ +\ No newline at end of file diff --git a/patches/series b/patches/series new file mode 100644 index 0000000..f1e77b9 --- /dev/null +++ b/patches/series @@ -0,0 +1,12 @@ +0004-puma.gemspec-drop-git-usage.patch +0011-disable-minitest-extensions.patch +0012-disable-cli-ssl-tests.patch +0013-fix-test-term-not-accepts-new-connections.patch +0014-disable-test-failing-on-amd64.patch +0015-disable-different-output-test.patch +0016-disable-test-failing-on-arm64.patch +0017-disable-test-failing-on-armhf.patch +0018-disable-test-failing-with-ruby3.2.patch +0010-Disable-test-concurrency-without-concurrent_ruby.patch +0019-adapt-test-certs-generation.patch +0020-update-ex-certs.patch diff --git a/puma.1 b/puma.1 new file mode 100644 index 0000000..47a94c3 --- /dev/null +++ b/puma.1 @@ -0,0 +1,165 @@ +.TH PUMA "1" "January 2020" "PUMA 3.12" "User Commands" + +.SH NAME +puma \- fast, concurrent web server for ruby and rack + +.SH USAGE +.BI "puma [options...]" " [rackup file]" +.PP +.B puma [\-h | \-\-help | \-V | \-\-version] + +.SH OPTIONS +.PP +The following options are available: +.TP +.BI "\-b, \-\-bind " URI +URI to bind to (tcp://, unix://, ssl://). +.TP +.BI "\-C, \-\-config " PATH +Load given path as a config file. +.TP +.BI "\-\-control " URL +DEPRECATED alias for \fB\-\-control\-url\fR. +.TP +.BI "\-\-control\-token " TOKEN +The \fITOKEN\fR to use as authentication for the control server. +.TP +.BI "\-\-control\-url " URL +The bind \fIURL\fR to use for the control server and app. Use \fIauto\fR to +use a temp unix server. This requires to use a \fB\-\-control\-token\fR, which +needs to be given with every request to the control server (\fItoken=foo\fR). +.TP +.B \-d, \-\-daemon +Demonize the server into the background. +.TP +.B \-\-debug +Show low level debugging information. +.TP +.BI "\-\-dir " DIR +Change to given directory before starting. +.TP +.BI "\-e, \-\-environment " ENVIRONMENT +The environment to run the Rack app on. Default \fIdevelopment\fR. +.TP +.BI "\-I, \-\-include " PATH +Specify \fB$LOAD_PATH\fR directories. +.TP +.BI "\-p, \-\-port " PORT +Define the TCP port to bind to. Use \fB\-b\fR for more advanced options. +.TP +.BI "\-\-pidfile " PATH +Use the given path as PID file. +.TP +.B \-\-preload +Preload the application. This loads all the application code prior to forking. +Preloading reduces total memory usage of an application and is only available +in cluster mode. +.TP +.B \-\-prune\-bundler +Prune out the bundler env if possible. +.TP +.B \-q, \-\-quiet +Do not log requests internally. Default: \fItrue\fR. +.TP +.B \-v, \-\-log-requests +Log requests as they occur. +.TP +.BI "\-R, \-\-restart\-cmd " CMD +The \fBpuma\fR command to run during a hot restart. Default: \fIinferred\fR. +.TP +.BI "\-S, \-\-state " PATH +Where to store the state details. +.TP +.BI "\-t, \-\-threads " INT +Min:max threads to use. Puma will automatically scale the number of threads, +from the minimum until it caps out at the maximum, based on how much traffic +is present. Default: \fI0:16\fR. +.TP +.B \-\-tcp\-mode +Run the app in raw TCP mode instead of HTTP mode. +.TP +.B \-\-early-hints +Enable early hints support. +.TP +.BI "\-w, \-\-workers " COUNT +Activate cluster mode and define number of worker processes to create. In this +mode workers are forked from a master process. Each child process still has +its own thread pool and the \fB\-t\fR setting is per worker. +.TP +.BI "\-\-tag " NAME +Additional text to display in process listing. +.TP +.BI "\-\-redirect\-stdout " FILE +Redirect \fBSTDOUT\fR to a specific file. +.TP +.BI "\-\-redirect\-stderr " FILE +Redirect \fBSTDERR\fR to a specific file. +.TP +.B \-\-[no\-]redirect\-append +Append to redirected files. +.TP +.B \-h, \-\-help +Show help. +.TP +.B \-V, \-\-version +Print the version information. + +.SH EXAMPLES +.PP +The following examples show how to bind TCP or sockets: +.PP +Bind Puma to a socket with the -b (or --bind) flag: +.RS +.B puma -b tcp://127.0.0.1:9292 +.RE +.PP +To use a UNIX Socket instead of TCP: +.RS +.B puma -b unix:///var/run/puma.sock +.RE +.PP +To change the permissions of the UNIX socket, add a umask parameter: +.RS +.B puma -b 'unix:///var/run/puma.sock?umask=0111' +.RE +.PP +In need of a bit of security use SSL sockets: +.RS +.B puma -b 'ssl://127.0.0.1:9292?key=path_to_key&cert=path_to_cert' +.RE +.PP +The following example show how to Create a control server and use +.BR pumactl (1) +to interact with the control server to restart \fBpuma\fR. +.RS +.B puma --control-url tcp://127.0.0.1:9293 --control-token foo +.br +.B pumactl --control-url 'tcp://127.0.0.1:9293' --control-token foo restart +.RE +.PP + +.SH "CONFIGURATION FILE" +.B puma +will look for a configuration file at \fIconfig/puma.rb\fR. If an environment +is specified, either via the \fB\-e\fR and \fB\-\-environment\fR flags, or +through the \fIRACK_ENV\fR or the \fIRAILS_ENV\fR environment variables, it +looks for configuration at \fIconfig/puma/.rb\fR. +.PP +The \fB\-C\fR flag allows one to pass on a custom configuration location. If +the value specified is a dash (\fI\-\fR) \fBpuma\fR won't look for any +configuration file: +.PP +.RS +.B puma -C \(dq\-\(dq +.RE + +.SH "SEE ALSO" +.PP +There is extensive documentation at <\%https://puma.io/puma/\%> and +<\%https://github.com/puma/puma\%>. + +.SH AUTHOR +.PP +This manual page was written by \fBDaniel Leidert\fP +<\%dleidert@debian\.org\%>, for the Debian GNU/Linux system (but may be used by +others). diff --git a/puma.docs b/puma.docs new file mode 100644 index 0000000..b43bf86 --- /dev/null +++ b/puma.docs @@ -0,0 +1 @@ +README.md diff --git a/puma.examples b/puma.examples new file mode 100644 index 0000000..e39721e --- /dev/null +++ b/puma.examples @@ -0,0 +1 @@ +examples/* diff --git a/puma.lintian-overrides b/puma.lintian-overrides new file mode 100644 index 0000000..711e981 --- /dev/null +++ b/puma.lintian-overrides @@ -0,0 +1,3 @@ +# this is one of several sub-directories; no need to rename it +repeated-path-segment puma [usr/share/doc/puma/examples/puma/] +repeated-path-segment 3.1.0 [usr/lib/x86_64-linux-gnu/rubygems-integration/3.1.0/extensions/x86_64-linux/3.1.0/] diff --git a/puma.manpages b/puma.manpages new file mode 100644 index 0000000..8c2d587 --- /dev/null +++ b/puma.manpages @@ -0,0 +1,2 @@ +debian/puma.1 +debian/pumactl.1 diff --git a/pumactl.1 b/pumactl.1 new file mode 100644 index 0000000..67e70d6 --- /dev/null +++ b/pumactl.1 @@ -0,0 +1,99 @@ +.TH PUMA "1" "January 2020" "PUMA 3.12" "User Commands" + +.SH NAME +pumactl \- command line client for puma + +.SH USAGE +.B pumactl [options...] [commands] +.PP +.B pumactl [\-h | \-\-help | \-V | \-\-version] + +.SH COMMANDS +.TP +.B halt +Halt the server. +.TP +.B restart +Restart the server. +.TP +.B phased-restart +Restart server but phase out old workers while starting new workers one at a +time. +.TP +.B start +Start the server. +.TP +.B stats +Show stats about the server. +.TP +.B status +Show server status. +.TP +.B stop +Stop server. +.TP +.B reload-worker-directory +Reload the worker directory. +.TP +.B gc +Start garbage collector. +.TP +.B gc-stats +Show information about garbage collector. + +.SH OPTIONS +.PP +The following options are available: +.TP +.BI "\-F, \-\-config\-file " PATH +Load given path as a config file. +.TP +.BI "\-T, \-\-control\-token " TOKEN +The \fITOKEN\fR to use as authentication for the control server. +.TP +.BI "\-C, \-\-control\-url " URL +The bind \fIURL\fR to use for the control server and app. Use \fIauto\fR to +use a temp unix server. This requires to use a \fB\-\-control\-token\fR, which +needs to be given with every request to the control server (\fItoken=foo\fR). +.TP +.BI "\-p, \-\-pid " PID +Define the TCP port to bind to. Use \fB\-b\fR for more advanced options. +.TP +.BI "\-P, \-\-pidfile " PATH +Use the given path as PID file. +.TP +.B \-Q, \-\-quiet +Don't display messages. +.TP +.BI "\-S, \-\-state " PATH +Where the state file is. +.TP +.B \-H, \-\-help +Show help. +.TP +.B \-V, \-\-version +Print the version information. + +.SH EXAMPLES +Create a control server and use +.BR pumactl (1) +to interact with the control server to restart \fBpuma\fR. +.RS +.B puma --control-url tcp://127.0.0.1:9293 --control-token foo +.br +.B pumactl --control-url 'tcp://127.0.0.1:9293' --control-token foo restart +.RE +.PP + +.SH "SEE ALSO" +.PP +.BR puma (1) +.PP +There is extensive documentation at <\%https://puma.io/puma/\%> and +<\%https://github.com/puma/puma\%>. + +.SH AUTHOR +.PP +This manual page was written by \fBDaniel Leidert\fP +<\%dleidert@debian\.org\%>, for the Debian GNU/Linux system (but may be used by +others). diff --git a/ruby-tests.rake b/ruby-tests.rake new file mode 100644 index 0000000..67a5a4a --- /dev/null +++ b/ruby-tests.rake @@ -0,0 +1,22 @@ +require 'gem2deb/rake/testtask' + +Gem2Deb::Rake::TestTask.new do |t| + t.libs = ['test'] + t.test_files = FileList['test/**/*_test.rb'] + FileList['test/**/test_*.rb'] - FileList[ + 'test/test_integration_cluster.rb', + 'test/test_worker_gem_independence.rb', + 'test/test_rack_version_restriction.rb', + 'test/test_preserve_bundler_env.rb', + ] + t.verbose = true +end.tap do |t| + exclude = %w[ + test_application_logs_are_flushed_on_write + test_hot_restart_does_not_drop_connections + test_logs_all_localhost_bindings + test_multiple_requests_waiting_on_less_busy_worker + test_term_not_accepts_new_connections + test_prune_bundler_with_multiple_workers + ] + t.options << ' ' << "-e'/" << exclude.join('|') << "/'" +end diff --git a/rules b/rules new file mode 100755 index 0000000..da15652 --- /dev/null +++ b/rules @@ -0,0 +1,14 @@ +#!/usr/bin/make -f + +export GEM2DEB_TEST_RUNNER = --check-dependencies +export DH_RUBY = --gem-install +export DH_RUBY_GEM_INSTALL_EXCLUDE = benchmarks/* docs/* win_gem_test/* tools/* bin/puma-wild +export LANG = C.UTF-8 +export LC_ALL = C.UTF-8 +export TEST_CASE_TIMEOUT = 300 + +%: + dh $@ --buildsystem=ruby --with ruby + +override_dh_installchangelogs: + dh_installchangelogs History.md diff --git a/salsa-ci.yml b/salsa-ci.yml new file mode 100644 index 0000000..33c3a64 --- /dev/null +++ b/salsa-ci.yml @@ -0,0 +1,4 @@ +--- +include: + - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml + - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml diff --git a/source/format b/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/source/lintian-overrides b/source/lintian-overrides new file mode 100644 index 0000000..362d49e --- /dev/null +++ b/source/lintian-overrides @@ -0,0 +1,2 @@ +# no signed tarballs by upstream +puma source: debian-watch-does-not-check-gpg-signature diff --git a/upstream/metadata b/upstream/metadata new file mode 100644 index 0000000..cbe22a2 --- /dev/null +++ b/upstream/metadata @@ -0,0 +1,7 @@ +--- +Archive: GitHub +Bug-Database: https://github.com/puma/puma/issues +Bug-Submit: https://github.com/puma/puma/issues/new +Changelog: https://github.com/puma/puma/releases +Repository: https://github.com/puma/puma.git +Repository-Browse: https://github.com/puma/puma diff --git a/watch b/watch new file mode 100644 index 0000000..b06856f --- /dev/null +++ b/watch @@ -0,0 +1,5 @@ +version=4 +opts="searchmode=plain, \ + filenamemangle=s/.+\/v@ANY_VERSION@/@PACKAGE@-$1\.tar\.gz/" \ +https://api.github.com/repos/puma/puma/tags \ +https://api.github.com/repos/puma/puma/tarball/refs/tags/v@ANY_VERSION@