[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1109424: unblock: puma/6.6.0-4



Package: release.debian.org
Severity: normal
X-Debbugs-Cc: puma@packages.debian.org, athoscribeiro@gmail.com
Control: affects -1 + src:puma
User: release.debian.org@packages.debian.org
Usertags: unblock

Please unblock package puma

[ Reason ]
This includes a different fix for #1078640, without adding Java as a
build dependency.

[ Impact ]
puma will include a new build dependency on Java.

[ Tests ]
Regular builds and autopkgtests should run the upstream unit tests and
these should pass. I also checked the validity of the new certificates
to ensure they are valid for the trixie support period.

[ Risks ]
The fix changes example files used for unit testing purposes and reverts
a recent change which added Java as a build dependency to generate the
example certificates in build time. Any regressions would likely be seen
as FTBFS issues.

[ Checklist ]
  [x] all changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in testing

unblock puma/6.6.0-4
diff -Nru puma-6.6.0/debian/changelog puma-6.6.0/debian/changelog
--- puma-6.6.0/debian/changelog	2025-07-16 16:51:16.000000000 -0300
+++ puma-6.6.0/debian/changelog	2025-07-17 07:20:19.000000000 -0300
@@ -1,3 +1,16 @@
+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 <athos@debian.org>  Thu, 17 Jul 2025 07:20:19 -0300
+
 puma (6.6.0-3) unstable; urgency=medium
 
   * Team upload.
diff -Nru puma-6.6.0/debian/control puma-6.6.0/debian/control
--- puma-6.6.0/debian/control	2025-07-16 16:51:16.000000000 -0300
+++ puma-6.6.0/debian/control	2025-07-17 07:20:19.000000000 -0300
@@ -16,10 +16,7 @@
                ruby-nio4r (>= 2),
                ruby-rack,
                ruby-rackup | ruby-rack (<< 3),
-               ruby-sd-notify,
-	       default-jre-headless <!nocheck>,
-	       openssl <!nocheck>,
-	       ruby-certificate-authority <!nocheck>,
+               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
diff -Nru puma-6.6.0/debian/.gitattributes puma-6.6.0/debian/.gitattributes
--- puma-6.6.0/debian/.gitattributes	2025-07-16 16:51:16.000000000 -0300
+++ puma-6.6.0/debian/.gitattributes	1969-12-31 21:00:00.000000000 -0300
@@ -1,4 +0,0 @@
-.gitattributes export-ignore
-gbp.conf export-ignore
-salsa-ci.yml export-ignore
-kali-ci.yml export-ignore
diff -Nru puma-6.6.0/debian/patches/0019-adapt-test-certs-generation.patch puma-6.6.0/debian/patches/0019-adapt-test-certs-generation.patch
--- puma-6.6.0/debian/patches/0019-adapt-test-certs-generation.patch	1969-12-31 21:00:00.000000000 -0300
+++ puma-6.6.0/debian/patches/0019-adapt-test-certs-generation.patch	2025-07-17 07:20:19.000000000 -0300
@@ -0,0 +1,80 @@
+From: Athos Ribeiro <athos@debian.org>
+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 -Nru puma-6.6.0/debian/patches/0019-do-not-download-ca-gem.patch puma-6.6.0/debian/patches/0019-do-not-download-ca-gem.patch
--- puma-6.6.0/debian/patches/0019-do-not-download-ca-gem.patch	2025-07-16 16:51:16.000000000 -0300
+++ puma-6.6.0/debian/patches/0019-do-not-download-ca-gem.patch	1969-12-31 21:00:00.000000000 -0300
@@ -1,24 +0,0 @@
-From: =?utf-8?q?Timo_R=C3=B6hling?= <roehling@debian.org>
-Date: Wed, 16 Jul 2025 18:35:43 +0200
-Subject: Do not download certificate_authority gem
-
----
- examples/generate_chain_test.rb | 5 +----
- 1 file changed, 1 insertion(+), 4 deletions(-)
-
-diff --git a/examples/generate_chain_test.rb b/examples/generate_chain_test.rb
-index 2676760..dbe89ab 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
- 
diff -Nru puma-6.6.0/debian/patches/0020-update-ex-certs.patch puma-6.6.0/debian/patches/0020-update-ex-certs.patch
--- puma-6.6.0/debian/patches/0020-update-ex-certs.patch	1969-12-31 21:00:00.000000000 -0300
+++ puma-6.6.0/debian/patches/0020-update-ex-certs.patch	2025-07-17 07:20:19.000000000 -0300
@@ -0,0 +1,1499 @@
+From: Athos Ribeiro <athos.ribeiro@canonical.com>
+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
+-	?&??ò,dpuma10	UCA0
240801000000Z
280801000000Z0810
++	?&??ò,dpuma10	UCA0
250701000000Z
360701000000Z0810
+ 	?&??ò,dnet10
+ 	?&??ò,dpuma10	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_ó?óº?.??$~<fv=D±Nëv|?i4l ä\NÁõ\e°Üdk[h³+½Ú¯Ä=ÈUEDÃ?Ï|'ã,Äð°Ü±'CR.??-²41g?mêÕK0??	*?H?÷
 ????0??0?~*?H?÷

+- ?10?-0W	*?H?÷

0J0)	*?H?÷
0? ôø`?0*?H?÷
	0	`?He*Ã}?/(YÕEq·t?â¹?Ð??* í4Tu£³ÆAoÿ`µL!9
¹^r¨­¸¹¥·!	îd*A?+=tÜ¿Þ>?Ï)ù?)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Î?ÿ*<Uy?÷F*?´Ñp¿??/a­ß4W»?UV?îí¦SJ¾§½¾Ú?³Î÷/?Â?3?Xk5?ED?bSU;F-?ÜU.(Aì ø"?5?¸?R1m/³à6¢ÄyÀ@?øøz½ýÙ?Ïéj?·ê_+Ö?pÙ8T!&'Ê×ÈÂa13*½q¬t?£Bºº«¥h?X˼°³F{}èüeAçÕÆûjø5㦢ÍèÁ/1
?s;¥Á?âÓÈÔðÅR
+-?ói(>û??:úøÆ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^?½×f0?ù!Ô?£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ÂZHû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<I°ª?ûD$Q?îì÷&«?1QPR?ÿËmML?	ÖjñÈ0És»*[?¿áOýä¨s??Pi ;تæ¸Bxdñºà>?Ë??¬Í騼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§??<xÒ¾
++Eë?N{×/°ZͰ?ßÊ?Ä)¤Kê²°|{épLúêétz^ûZõ?0>Á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+ù<M}?Ð???ÉÌ­yøÅ³ª,Æ6n??«?Â?â`é«_và¢Øÿ?òï0©Ç­!ÚÇ$.·%®?/ ?°µÖÕ϶½Úô?dÃ:ÁÉðÜô&ö~·Û¤m?ÓA
++@¥dFQùBC~~ÛpR¬ Ì?Tg?D??êÜ/o[Å9?Eí@K-*ð[WU?EÈåâè	ÊÄ?ìªLD£A÷Þiy21:0	*?H?÷
	1ca0#	*?H?÷
	1/??§¹9]#N??lsädºý0A010
	`?He 1Ô
++Ðûúk'¶¤A¯Rýtp?íd(?6?\	4Õ:V£>`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?<pÿ³VëÇïïnÏå?¾ª^0&5 ÈÂXz^¿?¸`;WLt»Íð-lK0$é2i?ª}
? ¨~­cvv¨G!$×??x¡õ,Ê?ÿþ§adý\ É?®:u$?5uË;¬?ªÕ'?Ì£q? ï±FVº%<Z?©&
!J¥Up?ý?¦Vg:@¹?¶«õ?ÒyQv?N6î³¼ù??q«ïôÈá·.õ£°u!,ÍËO­£COÏll?[BÉ+?±±?à?G üʪÜUÇz1ÊÁ\û?~ÃêÏñµÓ®(ÂûZ?;iÍéÅ?H$Ù·?*Ykç!ã"oѧnÈäÉ4qè>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͸µ<V
++À??D£ 1iOl¹Ó?×÷ÖÜ?¶:ÁÜ?Ë©G+Wâ???Ãå>´b¼ð¡Ã¶þEô¢.~Ê®4?%?zAjô»[-Ñ·?õ-Áݾ7??ûÅ´µá)ù;?ìfâ8 |Íp©;¡Õß+Ý6Òê?<j)í$?¸kq6r86¨BéÊ?6Gܪ	1|AÁþ­·±^îd'(?*¦?Óe?ý¿ Þp½£&ßK=L?¾??O.Ìïsá,â[7qâNSqÞs?Þ¶ýá5ä¨ZH?w¡;?¸?ÛÔ?¢D~v0±­ëM#éÿ$èÍ6ï?íÓW¡ì?årH
++;¼9?"?ÛµÜÂ?Ø?r¨H?º:ÿ4 ;<â®awÆ2??sëü?h.ü?¥G¸÷WÀpØ_QÈ?èÅ??DѦS?|¦½ùö?ü
??7¡?Í?=Ì?#2 Lo?»â%@ÚÓæ%é?·pv|Ù!³°4$¹{*ÝP'??O"÷r?o(ùÉ0?+1X?¦³ÿRCMµÒ0Àcj(,ËFo?è?õ,on?)2+??r,çEÉU?>Ç?ÆÆç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?
++ã?Û<Z?½ýÔÒÞûO?Ço,Ofµ!K70$ù? Â<.?¿¢/j±]¨wAµ£ðÏFdÕ?Í/u1@0	*?H?÷
	1server0!	*?H?÷
	1Time 17527482880920?	*?H?÷
 ?
+ ò0?
+ î0?
+-ç	*?H?÷
0f	*?H?÷

0Y08	*?H?÷
0+^AM??óÓJ6Xýk+?ë?K?' 0*?H?÷
	0	`?He*þaØü?]½??îµR3»??
+-puû?|?¾?ÃÀôs!coCpRì"åE?!$âß¶»jTs­å?]rxZ¼yÈlGÔÎÑ?¶¤±Zä!í¸O?ÐOÊÞ?Ú¥08þÄt1/?A?s/?
+-?µ*ðë#n?ù?æ'?ï	Ç?ò@?ãU÷mßÀ¸×¤³µÆÃýÛIÏGuÞ+ñÃ7Èg??olßÈlù§Ù?1?{ØÇ¬l?Gh¹?±{}hÂ?µí#¢Í?)?v3sz?^óh¤Q×?? Ðñ{¬?7åá+í??'ݱòøx´??kï?fòúÄäºÔ??Ò?ÃÄh5ãι¢õ?|?X®Q¡??»Ø3?`?'?/CÅãwÆ%õ¤HR=éßq×?H¢¿ðpù?Ø£[3¢?ZÙ#né?B?Ì|Þ³?ÑÁÞÿõ"³â*ãh ¦?Òv?XÖª?¹5òV§òJÿ?H¿ÞñõRá?¶øP?5ÞBú7-_rTÅpç?2¾W³ %óÉisâ?G¿î?ýdÇQø«Ò0AK¨
+-\ãŧ«?WøÃioÙó???9#ËøSw¦Ý'C î]AI&¾5Åù¶CjQ'*?51²/û??qLª'oIëôLl?ÓË?Z"« ? ¨>­{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Ëà.~?#-[@#~<B&
+-?©Ý$=D\|ø?ØÕÉQ????<·?±|Î?ÄÄg.Àè*±×e¼w?ã?m¢n?ã6JÄís·¢é>ÿ®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Ü*³®È</úpNs2Úª?óùF??èÕz¬Zý,ØR^Ý?^¬Í\ýó&?Xú­È¼Õ­3Bµâ
++yAn¼äE?=}"o?&úëëìÄ$äH?ËÀ`ÒìCA?ÙJfvö·I?nùÆÏ~ѨÖ;?ÅûlÆKð¬4·)SP]?H³wVKéD>ÊèÓ	ß?>?{î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Æ<R²M¶b,? %ÔËñ­l:Æ???M2?ôf<+1?W?#?J.Ô?}g?SªHõ>¹ÍÓ?áÇ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嵩???<BØ1íêÄXtZÖC¹|´Rq¥î[S?cµ?í®É¥?Ö?eå·ð:ìÜS?e5øw£9ÓDa¦8?ºÝ¾ÅÂÄ??'%Èõ?/#¹¢?³Úma»Ú8)e=6TÿrD?°Å¹h¦¤EÉG­Ò&?+ÁnŪ??÷õu?áÊ=ßïó?iÆãÄBíûô	£~5??bùØ?T^?sO?÷0ð?BDÆ<m5@T2²]4Â??	?Í
?6¸f@ªDvÃH?`¬ÅYiú?´©©¬28Þ??£D9m?Ì l[@j'??ð¦æuÖÃÂß3Ç>	æ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ê??ò*ô?>?qi¨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ò©~,æPsɹÚ<`??Ü|?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?¶?ç<Iðñ2ßxRBÞhT²ä5ÕDLg³ @9{B8hM
+-[­¬Î:?ïè=Ç´Vº?X©?ËLK$?õÏ*R?¦??ú­
+-ª½Ð{Äç??ÿ??¹=·cø¿:?|ïfÉ&¨xiV,£eËV?Û:dÖ(?|?ôüv¶É*pú?Ä?ÀËÍ=	Ýa*èË"á?(?ÿ?0?÷çÿÄnVå?	Ä?
ú£BÀÈHuzï?(]¶6Îrêy#ä­OÙÚ?aÂ*Ã^?(
+-??z½?l g¦½?ʦ¢¾¹½Ôõ6ÿ&Çèwó*?õõÜë?§?X?ÏÊË!?3×Ý4?ËHÝ|c
+-Q×pn_E??êy3ì?Ûú½õjlç?zÍÂq??qͶ??}`?$/s?:¤ÎëÃùÔ iyáu»«ÙÂ???µCD ?K$	qå?ÔdohÝ_ÜN!?oD÷<Nkàï?´Ã?âÚ]r~ÓõJ&þ'cÿ~ÁÛß??hVÃf?Iä?½u? XÎÒ%àV;$ç:Kò*?x;øµó¶ô§#?Ï??¦¥ü?¬Ipóy??A°O?Õý¸3MaÔ@3L]V:Jlô¡508²4tÐÏϹqÃ÷ý?µ;Õ?¨Ô?¶héf?üéÊÉÎ"\vìAñhüWùD^ºæN¥t·cZÕóÌêhÁ)ÕY9cüSxð³íM0}üÁç\Ék}£1B0	*?H?÷
	1server0#	*?H?÷
	1QìwBI×ùç[÷?$ϳ|C?0A010
	`?He ×Wc^WXßjêbèC'q+Tcµfh?T?3t?ÚÚÔ¨p?ý?Õt
+\ No newline at end of file
++0?
\0?
	*?H?÷
 ?
?ÿ0?û0?J	*?H?÷
 ?;0?70?0	*?H?÷
0_	*?H?÷

0R01	*?H?÷
0$&¤¯??3øÐ8îF²¥X³0*?H?÷
	0	`?He*K&?f?#ÑûC:o$?t??À?ôM?|¥?ó´l??EÍ?Ǻbø?h¡
++"¨ýs6CТ?þ?MÆéVO1?%eú	¨;??.­-5Frþ-8<?!è«Ó?Ä´çÁ)yî?g*B?UÄ4?¼À?)û¼?CzBM×ar¡âÜX´¾óú
qÓ?ÂrL â?w¯ª?Ø?n׸5>u¦?;_2Ñb¿ð@¥Ñɺûztç¿Þ2foË vée<}7?âÎé¼ÑCcL?IÇ/?î?\±¢²??~ðýòeÍA uâ÷¡	$tñª?·Æ¬QdQ·²J? #ÒVÓ5Ä}a9?²^J¾~	ý#ä:?&cþÅÆ¶?²,??Úe¦³`ÞîK¥lw1­[?%Ü|?
++îÂ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Ímj?9¸LhÞ??©M#,¢l?P?í!õ
++W?¦ïC³Úîþ%úå??BàÉáÍ?}­<?£s2oaz ·»­?ïÏ?Ô LÈѸ0¸?J½g?ÊG\îûûE¾ëÙmÝ9fðÎ??C÷ùË?jqÉ^Ú) rºý??<v£¯"Z6?3AÙB???¯µ?¬?¬]é.7 ñ(½kk½Ï¤?Ö?°kQt¹QÒlæ/jþ0eÍ-Ö®_?f>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?KRiS?
|â³? ?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*<U×?Æ/ý?:l=gÀßP°½[<ÿ?
++^I!?g,wG¬©T?U?áL¥8Òס?ºZÃ?ý`©?µWZL#_TÚwsZjß©a°51?íÆÈi5-<3ýw»b±1?X;e+?*¾2?m¹ò6û¸ÂÓ?Â×¥ÊW`:q?#¼)
Àµ£ ÍQÑ?tçÝeº¢W?2»?£¶l¨_Q?~l¹?.Ý¡Ì$OÚ@?¤gtÃ?.¬1h?Å#TÓõ?q@¿^Y`é??¯«©l?
?Ü®D?vg=G_D,??E]b/I?gÖóÁJ{*ÁYøÏͳ£z?MÁÓg(j?¬
++?oO+>ðýÌÉ÷¬þ?Ù?ª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²¢<j	ù ËÏ`òB©º?áÅ?hÒb?¬Æ±ðe?î
C¾V?3§ujÐêéße
lK¼pÑ«??Ì??»	ÒðÅtb)~½Mè5@òö¿ð)v?+?CE¯?KÏÏè¿_4
¸qlµê]j~¤)ü{®«BÇydÌ?mÍY???i ³?ÉO	6ICx7´ãºD}?Iµ¿­/n"%µ£2eßBc{?
+-?_®é[ÒGmitö]æ9$ºÎò¹¤ý?B?/гl?ohø30 ÿýn¥8yÍj×Å??<C???×yÆÅ½ü?û?EòCA`ØÄ!???m?ì®Cz?ï*
+-?ÊÚ)?f??DÏÀa?2t	/«P??1?KW2­Ç´ôC ×?ìã³±löÊáþ?@Ð,ù¯X
v>vÓ¯?T+Á«?5@1õì§Åh|2¤¸	dVò3?¨¬½siÿ±èT%Ç?ô<M??J¸Mçæº?¸jKí­ø¬}?ðþº Í?yÄ:âC´	?ÒÆîûbÏD²Åw%?Và
ëc¸%´??Ü¢æÏeM*#ü2	K1)µçVpÉ^n?E
8µPQ#µ?«íïÆûá?§Ï/}¥±±û¨¥1?/(ÃàÜ$???ÚI< TI¾~?å9­ß?øVXÆôZÃnòp¡?Ó?¹!
+-ñæ¡?xKónó¦?ö(ÇØØ? Îù?ðÿõ8ºÙÞ4%öü=A??ß(¾ày?¨?¦*?z?ܺ?xsÜ``ôRBBáÍìÌ{øQ(|Á?<è$|?±ñ&*.¾ëüX³õYYþ@%Á?Mu§VW©?Å!ÑÃ,?¬åÄ,ÑvÌ?=?(aÚUürx?íäæ@9BñJ²?hdDÜÞá?Û?%øÇå[É?;N?/-ÑäÝ?Üdñ³Ý?\bÞ´Ð?Ù36ÊgI­°NdF*ÐyÇyÖñ>||z³?ùvÞHY¯??É}ö5áþÕªàèkvÁë?èä¶_D7|?,ÌüpX;ÓBwáAPè¡?Î?êç'Ö(æ\xÐ?¬¯??ÍÞ)rxR´ýÛÌO?RrU;?;«`?L³pyå3OÌ q+?w?AB?Y×M¶®#J</åþÊu*Ñ«s?H?<I$o?ªCò?I?ñh:=±70?¡	*?H?÷
 ????0??0??*?H?÷

+- ?10?-0W	*?H?÷

0J0)	*?H?÷
0åA×ú¾0*?H?÷
	0	`?He*1îøe?Ùýý?ZÌh½c?Ð<ÖWLg1?ï±V§:ùü¦ø?%«®b¶O?MÝÑ,w]*$\âõ?íÃY·±??»
b}-äLÄíI¸º?(ïðÇ?kÄ­(Eµ?F×?/?N$p5²£DncðLúªoâïò%¬Ö¨~t{js6ÖgÈç+ëø¢üÁ,àÀ?õVsJ?= ??µcËeì?+?i5??&{ÃM¢vuzÃÇÎVHêH??^?O¬=H?³ÍÓá?²?ïüÉ?'FöA?uÚ?f?Ü#?ºu?BM]Ú?ë¼¢
+-`¶ÿôX0-Òêøßá?eÊÿÞ«f?ÀGf?³8P´1ª?]Û	]§A/ü?;VÁÖ?(¹]Üm?¯úÂN0.í?çÒ¥)dmFÍiÙ?*"	S
+-I?¸y¾^þ%+-}áªwOç0c#
`5.*µ ?íf©rC¸äy?0sð*3?¯?#½¨ÔI-\!Q}«®zû9,ÒpA?wÈÖ*\MÎÃO.ذ?Â?±?ÎÀ|üèáÆ®?Sk
>?²??¾Ç?vÄõç?ú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<b뮬?VêBäè,>ë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?<H)¸?9<)È?óK??j9ÌëYÿ@?è( hÿ¸¼Ê<W5=Aí?Ü]ø?¢| ÃÅé.W¤I?A¡¢<ïA÷)?Ì#?+Í
	ü­Á?G?
++ÕeJtÂÀ]G¹²åÒoú^??L¯Y?üc?Èÿ?®a?ZG:Õæ?áýæò~$Ãüµ.W~R®Ð?R«¤öN?½?oaÕ5tûHDR?D?I²2^?[[´K,k?t<ÝÏU?4?r}?ÎÂ.ì5HùÊ?Ö±Õ?b?Zú8ÞoÚ?<PÆS?H.¼?ê2¯??ã%ö@Æ?$
++rä?vÏøû	éf¼l¸®¹?;%Ôæ\?fÓ1÷8õ©è¯²Æmw·?ª¿~É(üÒ?nâ¢Áç¶Å:?dùh«qÀ?Üåx¡Ã½Vå??Ñ[?kî`e|??1?â?÷¢(?î±®p?¿®¬?Å?²ÞN7ô?j?F?qe?aÀ¸c²tÃe$ù4%øu.%èNmPU+KK0n¡%Y&7>?{?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@Ã<Z\P!ÈIjµ?h4D?´¦ÊAþÚ
 ^+
+-5ãÄøîº3×ÃÌ]Y@=¦¦?ìÜæÇ%Ȥ1c?3j®ð?˨b1ü?^?åL?=eª?»"À©fðµr?í?%:2?ô-Q=mß&A.åÖúc:)X?e~èÜýøs%oÉÏ:ZuåJ¢.4ï&?×P
+-¹ÉàÞE²ÏqûFS?·?t?Î?AÜËtrࣣÀ oa°G??@¾x®¸Ä­Í°D5d?=?÷GFIwiã¤A?ÀGÎI²ö=]'ö¶<Ë_
ñ)IKÀ?ueÔvb6tÕ»Õ/??eUZWÔYà?,?çíæÁþ1ú¸|)?³ûRÍ?Þ?1Oºl?Èî?Ú?ä?Jù$]¾gê]9?Ïk8Í	PYº'/'ó?øi?¤:G?û?Øg)
Ãe¸
+-ßñU??ª?NñU
>Ôî¡Æÿò«Ü"|^	èÏCmn´M$<QÕ:TùØ6?c?<¬Îe?
+-ÌÆ¾Wÿh±Ç6¦¦Æ?Þòý?ÚArûê?1¬t
+-@
+-
+-K?¢?äVµ6ã³ì²æ	Û?÷SY\#õ$LuÌõ°¡pî»÷?VñÜûÉ0?x?Ú×Ýå¡?=Oë³(ÓiÁ1EW=º4y1}eC?QK?¨ßüwnoZ9l/81!»U<?£?£}dobuéC9(Ñ?ëZQ??|þËÙO?y¤b?»ôå??ÐË;Þ2²õ¨ª=Î]6Å?tµV®¶þ¤<ÒʽjÏ?i?îÞ¨Mðþ_¿µ|??ý=*?fú)á_\%O¬´uºá¸w??TÖ?Ú³=#1±qúW@a?Lÿ?j?ͽï7ôA£õïõe*X!?oÜͶy_®³Pu?èÍAîéÀk@^?]ÀEܱjS=J??mg[?+ÏÏý²Äé5}Ϊõ`IL??õE?b¸ø?¸ÿ6X.509?0??0?j 0
	*?H?÷
0910	UUS10U
+-local1
0Uaero10	UCA0
240801000000Z
280801000000Z0H10	UUS10U
++þíþípuma?ðdÑ0?ý0
+++*?ë&ä¨DÅ?¾"?ìQÉ}Ûú?ÊÅsâ?ßíbù¨íÅ©³lÂ?¥IÖW2ó'ó²$?7÷pé?Ku¤9Iiz¥Íø	¼?»Ñû?µmdö?8{®o°mj¬^1\?ìö§Zg»±Ñ×gKyþ=êH®N?®S+à3?ëö?*QÛÚMÝ¡êo±ËyÊnüâã?¨U?°YÐ3EæËܽ`¯¹ÝÞ??ÒcµìN¢Y?-ßwüNÔÌ?¼ö~¤?~äÁ6ïì2¬¿JѺn½¢??&º?JØ?-rÌ6+ßæЫ??ñÓ?ÊLtgóëíçÄ? atÞ?L?ü?nzoýª?ú§ö>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?÷
0910	UUS10U
++local1
0Uaero10	UCA0
250701000000Z
360701000000Z0H10	UUS10U
+ local1
0Uaero10	UCA1
0Upuma0?"0
	*?H?÷
?0?
+-?ó?Í?@bâ?¯É8ÝÏøUú$VyñþØ<m$&0??%ºÀ?»É­p¶"Çÿ©bÌÕ3Ü?êäÚÛR??~çSøéuôÐb´Üêì­1ãÁ?²b?d«?ÞGÌCè?@mÞ!-4A??b![¡ó?ÈB¸g}Dcf?Æ<??vH¤»¨WEÌ??{M®r¸Û?âp~b?0à­w?ä? Ø?Ç@£ö²ù'Ý`?É©öÖôËBgr6?z#ZqÀ$2j®baåfÏO>`R?®÷®­3ðtÀ÷òº@|t¨??Ĥ?íÊàôuüsÇÜÛÿ??àÌè£??0??0Uÿ001	`?H?øB
$"Ruby/OpenSSL Generated Certificate0Uò"e??CÁõ?F>¥Xkèc?äô0U 0U%0
+-+0
	*?H?÷
?Z¦µ3_çò4=¼âhÝ¡þ#ÃÃÉ?@3­7¨XQ3ö!ÿ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?äô0U 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Ô´(|Ô?³ä[_£¥ù_"??ö<oÖ~7¦?S¨áÈ
+-Ij,éð?Öµ==¨æ±fñ¡Ö$/£`ÑAS¡Lm-úÕs?»¶jvÍß`?.ÓD{ý¨?m=q1ºê¯?3§??²oX?OÔ°Aç?
+-4`G|O4áP=&??¬y8_ÚÃIÅÂBO	?ôÀù!i3:Í?[£>ðï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Ë?]¼è
<M?·º¢B8Î!YÚ???ÉýÏ 
+-½XHTu¥ê?û^A®?mÌ?þî] á)w?¹ ¥²©­Äð?â6÷?¶ÑV^	mã·Y%Ûï´¼?õÚ躯À¼ly6+ÅÎOÐþuÝ?SoI}?T5~?ç_g~e	:HOfr÷X"µ.D?c¿*æ?i±7SRý? àÅ¡ã?×sCúm?
vüÁo¾?©²ÌS'pÚï¬ÊÂ>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?ÚÈÏ?,?³ì? _?:?<q¨ò¹ÙÈ?kAÎ4]k~ãM±ËÍÒ:Ü£Æë(X>?¡<WϦ?ñ½s}­âVd%ÿA6=R^}ö½|)·'Ò(§MrYâñ??m»I¤÷×§¸??i">MÓ?a>ê(LµRÌlÙ§^vfiðV?¥</?Õ????Ñ۹Ũ?/j1>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Ï?Ò£ùÁÌ<S¼?±ö?¶ÏþDqoKWO"S×A^¤¾??iaßÝô?
l¸?Á¨~GwÃ,¿LÚwn¿o?N£@Úà:?³;ôb³Ó?6»ñ7AÝÖ¬Ú?d
?MyQ·­Cdgí%?XÁ§{xÒóÕiß9ª??·ÇHãm^"¬
++DOá.K"Á7Kä¨|wDÃH??õ*??ó¶CÓxõ*g¬ÂárÖ*eÀr٥°£¹¹Ç®Öí²é%$Xé?iOr7ú¦?ÊâÔî¥
++Ú<Ú|[i-äeö\q#hº7fy?H¦?:zyØð???LbÝú-d,:w~?{?ÕÏ[)¡4ÅÛAJ1&ËW[ùjOM]UO{U1RÁÑ¡'ÍÁ??Äì¼¢÷Û?'bÉÙ?!??<?Ó?­8?Ú¹Ôõs<Ê5ÑÜ?£(¬nM¤Ù=ô$hïl?qæm|?iD©þ|?K¸µ?%Ò?kc«Øópx9??-?
%ûåL?¹=7°Zz"?Ü?~?z°û?D?UüÎi¹<ÜÛMLµÇåòÔ©Vw¯êß?C??/+Ø?Î?8+?:uCØAê@?±IÕÔ?Ò\FÜÃ?âc,Üu????-üV£?ý'Ê?ØìËJ?!K?S?íÜ&3x/ê?ÿÝ­mEè?æÆÙ%¦.Wáf?4?%ëþúb¾qq!m?/iÎö°Q'Ü?·I[01A>.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¤È?<fë¨?tôs£Yy?h÷P?qÇVA3äÇ?­°$pF;`î¥??ãE¯GÌËgVof?oÁ?£Ý|Y¨Ç 0`kKÀ??ÿW&m 5YÛ®áPû!¦²8òÖñh:tÀH[.ÂsÁ¨øtóÅ12}6w×åÁE`µ?³W?ß?8]{ÅkÞ´&¯[??ç´Íkt	?g|sÇl-øV)?u6?·)øa?ÓË÷Þ6¢jDÑ&Î{þá]±Aô/¶{»?öqnn:~GSøMO;¬??Ѱ?âõrcêk?îD¼þ?ÊÁ?ô³Íf0Ë#寽?\³À6½Ò?£Øxr$ð?ÃúöÃ???P·?¬Ù?M-Û;ñ>??;?/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??µï?
++ð`Þ<I¿³¦Ý?÷q÷Ù$2c?¢?¥Á?èÔH?£å?Ð?¹~WïûAbµ?Á¥?-C<{HR?:ÆþNí
?é?½E¦X'&Ò73/.ìD\?©z®??áåp?/£Ø%åÒÏfã?H6Ò?)»Í°?â
ANÂ^?|$?âÙB?¾Í?QdÈ?¾¡{âùÉjä§dÐìÒn?n5MÛ«æ/`?ÂŹñ©#è?i~ê??§MÈ)ê?óÉ´-d-Í-ØRf?CR	Æf!I*ÇÎùÕ?ò?M_fÖÂ¥??´^üÉO¸×qs¨×?5ÚÐé¾g?Í?e¯J èV^˵ |µÎi¬R¿%G?NCÜâ0W??pöY|Ñ\??é?a±òHµ\VåÚ¡´§2©cÈ«C?8ÞòÀÄèkã`vÒÄspÓ?þ?ZÜ¡Ë`M(êjBP??ëLP?ð¡Í¼ð¡8w÷?¿O_oK=?9dhË?Æ6?@>µpë¦?Èl?ͯ,ã&·EúÖ]Q0??><xy¯H?9W½Ü6ô©4C¥>	 ²?Å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 -Nru puma-6.6.0/debian/patches/series puma-6.6.0/debian/patches/series
--- puma-6.6.0/debian/patches/series	2025-07-16 16:51:16.000000000 -0300
+++ puma-6.6.0/debian/patches/series	2025-07-17 07:20:19.000000000 -0300
@@ -8,4 +8,5 @@
 0017-disable-test-failing-on-armhf.patch
 0018-disable-test-failing-with-ruby3.2.patch
 0010-Disable-test-concurrency-without-concurrent_ruby.patch
-0019-do-not-download-ca-gem.patch
+0019-adapt-test-certs-generation.patch
+0020-update-ex-certs.patch
diff -Nru puma-6.6.0/debian/README.source puma-6.6.0/debian/README.source
--- puma-6.6.0/debian/README.source	2025-07-16 16:51:16.000000000 -0300
+++ puma-6.6.0/debian/README.source	2025-07-17 07:20:19.000000000 -0300
@@ -1,3 +1,20 @@
+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:
diff -Nru puma-6.6.0/debian/rules puma-6.6.0/debian/rules
--- puma-6.6.0/debian/rules	2025-07-16 16:51:16.000000000 -0300
+++ puma-6.6.0/debian/rules	2025-07-17 07:20:19.000000000 -0300
@@ -12,12 +12,3 @@
 
 override_dh_installchangelogs:
 	dh_installchangelogs History.md
-
-EXAMPLES_CERT_DIR = examples/puma
-execute_before_dh_auto_test:
-	cp -r $(EXAMPLES_CERT_DIR) $(EXAMPLES_CERT_DIR).upstream
-	examples/generate_all_certs
-
-execute_before_dh_clean:
-	if test -d $(EXAMPLES_CERT_DIR).upstream; then rm -r $(EXAMPLES_CERT_DIR) && mv $(EXAMPLES_CERT_DIR).upstream $(EXAMPLES_CERT_DIR); fi
-

Reply to: