]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
added unit tests for DER
authorEthan Thompson <ethan.thompson@networkradius.com>
Thu, 13 Feb 2025 20:56:28 +0000 (15:56 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 13 Feb 2025 21:56:40 +0000 (16:56 -0500)
src/tests/unit/protocols/der/csrs.txt [new file with mode: 0644]
src/tests/unit/protocols/der/dictionary.test [new file with mode: 0644]
src/tests/unit/protocols/der/pkcs10.txt [new file with mode: 0644]
src/tests/unit/protocols/der/x509certs.txt [new file with mode: 0644]

diff --git a/src/tests/unit/protocols/der/csrs.txt b/src/tests/unit/protocols/der/csrs.txt
new file mode 100644 (file)
index 0000000..ff8b976
--- /dev/null
@@ -0,0 +1,16 @@
+# -*- text -*-
+# Copyright (C) 2025 The FreeRADIUS Server project and contributors
+# This work is licensed under CC-BY version 4.0 https://creativecommons.org/licenses/by/4.0
+# Version $Id$
+proto der
+proto-dictionary der
+fuzzer-out der
+max-buffer-size 2048
+
+encode-pair CertificateRequest = { certificationRequestInfo = { version = 0, subject = { RelativeDistinguishedName = { AttributeTypeandValue = { OID = "2.5.4.3", Value-Thing = "test" } } }, subjectPublicKeyInfo = { algorithm = { OID = "1.3.101.112" }, subjectPublicKey = 0x00fb16e6bd645fb03d755d0c207042bf80aa7cba385becdb9c19fcfe0bc95b1898 }, Attributes = { Attribute-thing = { OID = "1.2.840.113549.1.9.14", Extensions = { joint-iso-itu-t = { ds = { certificateExtension = { subjectAltName = { otherName = { type-id = "1.3.6.1.4.1.311.20.2.3", Value-thing = { userPrincipalName = "address@domain.test" } } } } } } } } } }, signatureAlgorithm = { OID = "1.3.101.112" }, signature = 0x00529e457a71c5d6b67344653eef0885fbf0f56dfc83445d1dcd6cf6b25e389e5b6ef222e31cedda21f393616a6a66568383506adcbec571bec87f8c9902c1390b }
+match 30 81 d0 30 81 83 02 01 00 30 0f 31 0d 30 0b 06 03 55 04 03 0c 04 74 65 73 74 30 2a 30 05 06 03 2b 65 70 03 21 00 fb 16 e6 bd 64 5f b0 3d 75 5d 0c 20 70 42 bf 80 aa 7c ba 38 5b ec db 9c 19 fc fe 0b c9 5b 18 98 a0 41 30 3f 06 09 2a 86 48 86 f7 0d 01 09 0e 31 32 30 30 30 2e 06 03 55 1d 11 04 27 30 25 a0 23 06 0a 2b 06 01 04 01 82 37 14 02 03 a0 15 0c 13 61 64 64 72 65 73 73 40 64 6f 6d 61 69 6e 2e 74 65 73 74 30 05 06 03 2b 65 70 03 41 00 52 9e 45 7a 71 c5 d6 b6 73 44 65 3e ef 08 85 fb f0 f5 6d fc 83 44 5d 1d cd 6c f6 b2 5e 38 9e 5b 6e f2 22 e3 1c ed da 21 f3 93 61 6a 6a 66 56 83 83 50 6a dc be c5 71 be c8 7f 8c 99 02 c1 39 0b
+
+proto-dictionary-root CertificateRequest
+
+decode-pair 30 81 D0 30 81 83 02 01 00 30 0F 31 0D 30 0B 06 03 55 04 03 0C 04 74 65 73 74 30 2A 30 05 06 03 2B 65 70 03 21 00 FB 16 E6 BD 64 5F B0 3D 75 5D 0C 20 70 42 BF 80 AA 7C BA 38 5B EC DB 9C 19 FC FE 0B C9 5B 18 98 A0 41 30 3F 06 09 2A 86 48 86 F7 0D 01 09 0E 31 32 30 30 30 2E 06 03 55 1D 11 04 27 30 25 A0 23 06 0A 2B 06 01 04 01 82 37 14 02 03 A0 15 0C 13 61 64 64 72 65 73 73 40 64 6F 6D 61 69 6E 2E 74 65 73 74 30 05 06 03 2B 65 70 03 41 00 52 9E 45 7A 71 C5 D6 B6 73 44 65 3E EF 08 85 FB F0 F5 6D FC 83 44 5D 1D CD 6C F6 B2 5E 38 9E 5B 6E F2 22 E3 1C ED DA 21 F3 93 61 6A 6A 66 56 83 83 50 6A DC BE C5 71 BE C8 7F 8C 99 02 C1 39 0B
+match CertificateRequest = { certificationRequestInfo = { version = 0, subject = { RelativeDistinguishedName = { AttributeTypeandValue = { OID = "2.5.4.3", Value-Thing = "test" } } }, subjectPublicKeyInfo = { algorithm = { OID = "1.3.101.112" }, subjectPublicKey = 0x00fb16e6bd645fb03d755d0c207042bf80aa7cba385becdb9c19fcfe0bc95b1898 }, Attributes = { Attribute-thing = { OID = "1.2.840.113549.1.9.14", Extensions = { joint-iso-itu-t = { ds = { certificateExtension = { subjectAltName = { otherName = { type-id = "1.3.6.1.4.1.311.20.2.3", Value-thing = { userPrincipalName = "address@domain.test" } } } } } } } } } }, signatureAlgorithm = { OID = "1.3.101.112" }, signature = 0x00529e457a71c5d6b67344653eef0885fbf0f56dfc83445d1dcd6cf6b25e389e5b6ef222e31cedda21f393616a6a66568383506adcbec571bec87f8c9902c1390b }
diff --git a/src/tests/unit/protocols/der/dictionary.test b/src/tests/unit/protocols/der/dictionary.test
new file mode 100644 (file)
index 0000000..f56d2f8
--- /dev/null
@@ -0,0 +1,183 @@
+# -*- text -*-
+# Copyright (C) 2025 The FreeRADIUS Server project and contributors
+# This work is licensed under CC-BY version 4.0 https://creativecommons.org/licenses/by/4.0
+# Version $Id$
+DEFINE Certificate-Extensions                          x509_extensions ref=OID-Tree
+
+DEFINE Issuer                                          tlv is_pairs
+BEGIN Issuer
+DEFINE RelativeDistinguishedName                       set
+BEGIN RelativeDistinguishedName
+DEFINE AttributeTypeAndValue                           group ref=OID-Tree,sequence_of=set,is_pair
+END RelativeDistinguishedName
+END Issuer
+
+DEFINE Issuer-Set                                      tlv is_pairs
+BEGIN Issuer-Set
+DEFINE RelativeDistinguishedName                       tlv
+BEGIN RelativeDistinguishedName
+DEFINE AttributeTypeAndValue                           group ref=OID-Tree,sequence_of=set,is_pair
+END RelativeDistinguishedName
+END Issuer-Set
+
+DEFINE Test-Seq-Of                                     sequence sequence_of=integer
+BEGIN Test-Seq-Of
+DEFINE Test-First-Integer                              int64
+END Test-Seq-Of
+
+DEFINE Test-Set-Of                                     tlv der_type=set,set_of=integer
+BEGIN Test-Set-Of
+DEFINE Test-First-Integer                              int64
+END Test-Set-Of
+
+DEFINE Test-Set-Of-Group                               group ref=Test-Set-Of,der_type=set,set_of=integer
+
+DEFINE Test-Boolean                                    bool
+
+DEFINE Test-Integer                                    int64
+
+DEFINE Foo                                             struct der_type=sequence
+BEGIN Foo
+MEMBER         Test-Integer                            int64
+END Foo
+
+DEFINE Bar                                             struct
+BEGIN Bar
+MEMBER         Test-Boolean                            bool
+END Bar
+
+DEFINE Foo-Bar                                         struct der_type=sequence
+BEGIN Foo-Bar
+MEMBER         Test-Integer                            int64 has_default
+VALUE  Test-Integer                    DEFAULT                 1
+MEMBER         Test-Boolean                            bool
+END Foo-Bar
+
+DEFINE Test-Bitstring                                  octets der_type=bitstring
+
+DEFINE Seq-Bitstring-Octets                            struct
+BEGIN Seq-Bitstring-Octets
+MEMBER         Test-Bitstring                          octets
+END Seq-Bitstring-Octets
+
+DEFINE Bitstring-Struct                                struct der_type=bitstring
+BEGIN Bitstring-Struct
+MEMBER         foo                                     bit[8]
+MEMBER         bar                                     bit[4]
+MEMBER         foo-bar                                 bit[4]
+END Bitstring-Struct
+
+DEFINE Bitstring-Struct-7                              struct der_type=bitstring
+BEGIN Bitstring-Struct-7
+MEMBER         foo                                     bit[2]
+MEMBER         bar                                     bit[1]
+MEMBER         foo-bar                                 bit[4]
+END Bitstring-Struct-7
+
+DEFINE Octetstring                                     octets
+
+DEFINE Seq-Octetstring                                 struct
+BEGIN Seq-Octetstring
+MEMBER         Octetstring                             octets
+END Seq-Octetstring
+
+DEFINE Test-NULL                                       bool der_type=null
+
+DEFINE Seq-Null                                        struct
+BEGIN Seq-Null
+MEMBER         Test-Null                               bool der_type=null
+END Seq-Null
+
+DEFINE Seq-Integer-Null                                struct
+BEGIN Seq-Integer-Null
+MEMBER         Test-Integer                            int64
+MEMBER         Test-Null                               bool der_type=null
+END Seq-Integer-Null
+
+DEFINE Test-Oid                                        string der_type=oid
+
+DEFINE Seq-Oid                                         struct der_type=sequence
+BEGIN Seq-Oid
+MEMBER         Test-Oid                                string der_type=oid
+END Seq-Oid
+
+DEFINE Test-Enumerated                                 int64 der_type=enumerated
+
+DEFINE Test-String                                     string
+
+DEFINE Test-String-Max                                 string max=5
+
+#DEFINE Test-String-UTF8         string der_type=utf8string
+DEFINE Test-String-UTF8                                utf8string
+
+DEFINE Test-String-Custom                              utf8string
+
+DEFINE Test-String-Printable                           printablestring
+
+DEFINE Test-String-T61                                 t61string
+
+DEFINE Test-String-IA5                                 ia5string
+
+DEFINE Test-String-Visible                             visiblestring
+
+DEFINE Test-String-General                             generalstring
+
+DEFINE Test-String-Universal                           universalstring
+
+DEFINE Seq-String                                      struct
+BEGIN Seq-String
+MEMBER         Test-String                             string
+END Seq-String
+
+DEFINE Test-Date                                       date
+
+DEFINE Test-UTC                                        utctime
+
+DEFINE Test-Generalized-Time                           generalizedtime
+
+DEFINE Seq-Date                                        struct
+BEGIN Seq-Date
+MEMBER         Test-Date                               date
+END Seq-Date
+
+DEFINE Set-Bool-Integer                                struct
+BEGIN Set-Bool-Integer
+MEMBER         Test-Bool                               bool
+MEMBER         Test-Integer                            int64
+END Set-Bool-Integer
+
+DEFINE Test-Context-Specific                           bool class=context-specific,tagnum=0,der_type=boolean
+
+DEFINE Test-Sequence-TLV                               sequence
+BEGIN Test-Sequence-TLV
+DEFINE Test-Integer                                    int64
+DEFINE Test-Boolean                                    bool
+END Test-Sequence-TLV
+
+DEFINE Test-TLV                                        tlv
+BEGIN Test-TLV
+DEFINE Test-Integer                                    int64
+DEFINE Test-Boolean                                    bool
+END Test-TLV
+
+DEFINE Test-Sequence-GROUP                             group der_type=sequence,ref=Test-TLV
+
+DEFINE Test-Set-Struct                                 struct der_type=set
+BEGIN Test-Set-Struct
+MEMBER         Test-Boolean                            bool
+MEMBER         Test-Integer                            int64
+END Test-Set-Struct
+
+DEFINE Test-Set-Bad-Struct                             struct der_type=set
+BEGIN Test-Set-Bad-Struct
+MEMBER         Test-Integer                            int64
+MEMBER         Test-Boolean                            bool
+END Test-Set-Bad-Struct
+
+DEFINE Test-Set-TLV                                    set
+BEGIN Test-Set-TLV
+DEFINE Test-Integer                                    int64
+DEFINE Test-Boolean                                    bool
+END Test-Set-TLV
+
+DEFINE Test-Set-GROUP                                  group der_type=set,ref=Test-TLV
diff --git a/src/tests/unit/protocols/der/pkcs10.txt b/src/tests/unit/protocols/der/pkcs10.txt
new file mode 100644 (file)
index 0000000..2a37f76
--- /dev/null
@@ -0,0 +1,963 @@
+# -*- text -*-
+# Copyright (C) 2025 The FreeRADIUS Server project and contributors
+# This work is licensed under CC-BY version 4.0 https://creativecommons.org/licenses/by/4.0
+# Version $Id$
+proto der
+proto-dictionary der
+load-dictionary dictionary.test
+fuzzer-out der
+max-buffer-size 2048
+
+proto-dictionary-root Issuer
+decode-pair 30 3F 31 24 30 22 06 03 55 04 0A 13 1B 44 69 67 69 74 61 6C 20 53 69 67 6E 61 74 75 72 65 20 54 72 75 73 74 20 43 6F 2E 31 17 30 15 06 03 55 04 03 13 0E 44 53 54 20 52 6F 6F 74 20 43 41 20 58 33
+match Issuer = { RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { organizationName = "Digital Signature Trust Co." } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { commonName = "DST Root CA X3" } } } } } }
+
+proto-dictionary-root Certificate-Extensions
+#decode-pair A3 82 01 7D 30 82 01 79 30 12 06 03 55 1D 13 01 01 FF 04 08 30 06 01 01 FF 02 01 00 30 0E 06 03 55 1D 0F 01 01 FF 04 04 03 02 01 86 30 7F 06 08 2B 06 01 05 05 07 01 01 04 73 30 71 30 32 06 08 2B 06 01 05 05 07 30 01 86 26 68 74 74 70 3A 2F 2F 69 73 72 67 2E 74 72 75 73 74 69 64 2E 6F 63 73 70 2E 69 64 65 6E 74 72 75 73 74 2E 63 6F 6D 30 3B 06 08 2B 06 01 05 05 07 30 02 86 2F 68 74 74 70 3A 2F 2F 61 70 70 73 2E 69 64 65 6E 74 72 75 73 74 2E 63 6F 6D 2F 72 6F 6F 74 73 2F 64 73 74 72 6F 6F 74 63 61 78 33 2E 70 37 63 30 1F 06 03 55 1D 23 04 18 30 16 80 14 C4 A7 B1 A4 7B 2C 71 FA DB E1 4B 90 75 FF C4 15 60 85 89 10 30 54 06 03 55 1D 20 04 4D 30 4B 30 08 06 06 67 81 0C 01 02 01 30 3F 06 0B 2B 06 01 04 01 82 DF 13 01 01 01 30 30 30 2E 06 08 2B 06 01 05 05 07 02 01 16 22 68 74 74 70 3A 2F 2F 63 70 73 2E 72 6F 6F 74 2D 78 31 2E 6C 65 74 73 65 6E 63 72 79 70 74 2E 6F 72 67 30 3C 06 03 55 1D 1F 04 35 30 33 30 31 A0 2F A0 2D 86 2B 68 74 74 70 3A 2F 2F 63 72 6C 2E 69 64 65 6E 74 72 75 73 74 2E 63 6F 6D 2F 44 53 54 52 4F 4F 54 43 41 58 33 43 52 4C 2E 63 72 6C 30 1D 06 03 55 1D 0E 04 16 04 14 A8 4A 6A 63 04 7D DD BA E6 D1 39 B7 A6 45 65 EF F3 A8 EC A1
+#match Certificate-Extensions = { Critical = { joint-iso-itu-t = { ds = { certificateExtension = { basicConstraints = { cA = yes, pathLenConstraint = 0 } } } }, joint-iso-itu-t = { ds = { certificateExtension = { keyUsage = { digitalSignature = yes, nonRepudation = no, keyEncipherment = no, dataEncipherment = no, keyAgreement = no, keyCertSign = yes, cRLSign = yes, encipherOnly = no } } } } }, iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { pe = { authorityInfoAccess = { accessDescription = { accessMethod = "1.3.6.1.5.5.7.48.1", accessLocation = { uniformResourceIdentifier = "http://isrg.trustid.ocsp.identrust.com" } }, accessDescription = { accessMethod = "1.3.6.1.5.5.7.48.2", accessLocation = { uniformResourceIdentifier = "http://apps.identrust.com/roots/dstrootcax3.p7c" } } } } } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { authorityKeyIdentifier = { keyIdentifier = 0xc4a7b1a47b2c71fadbe14b9075ffc41560858910 } } } }, joint-iso-itu-t = { ds = { certificateExtension = { certificatePolicies = { policyInformation = { policyIdentifier = "2.23.140.1.2.1" }, policyInformation = { policyIdentifier = "1.3.6.1.4.1.44947.1.1.1", policyQualifiers = { policyQualifierInfo = { iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { raw.2 = { raw.1 = 0x1622687474703a2f2f6370732e726f6f742d78312e6c657473656e63727970742e6f7267 } } } } } } } } } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { cRLDIstributionPoints = { distributionPoint = { distributionPointName = { fullName = { uniformResourceIdentifier = "http://crl.identrust.com/DSTROOTCAX3CRL.crl" } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { subjectKeyIdentifier = 0xa84a6a63047dddbae6d139b7a64565eff3a8eca1 } } } }
+
+proto-dictionary-root Certificate-Extensions
+decode-pair a3 0f 30 0d 30 0b 06 02 2b 04 04 05 30 71 30 32 01
+match Certificate-Extensions = { iso = { identified-organization = { raw.4 = 0x3071303201 } } }
+
+proto-dictionary-root Octetstring
+decode-pair 04 73 3071303206082b060105050730018626687474703a2f2f697372672e747275737469642e6f6373702e6964656e74727573742e636f6d303b06082b06010505073002862f687474703a2f2f617070732e6964656e74727573742e636f6d2f726f6f74732f647374726f6f74636178332e703763
+match Octetstring = 0x3071303206082b060105050730018626687474703a2f2f697372672e747275737469642e6f6373702e6964656e74727573742e636f6d303b06082b06010505073002862f687474703a2f2f617070732e6964656e74727573742e636f6d2f726f6f74732f647374726f6f74636178332e703763
+
+proto-dictionary-root Certificate-Extensions
+decode-pair a3 81 84 30 81 81 30 7f 06 08 2b 06 01 05 05 07 01 01 04 73 30 71 30 32 06 08 2b 06 01 05 05 07 30 01 86 26 68 74 74 70 3a 2f 2f 69 73 72 67 2e 74 72 75 73 74 69 64 2e 6f 63 73 70 2e 69 64 65 6e 74 72 75 73 74 2e 63 6f 6d 30 3b 06 08 2b 06 01 05 05 07 30 02 86 2f 68 74 74 70 3a 2f 2f 61 70 70 73 2e 69 64 65 6e 74 72 75 73 74 2e 63 6f 6d 2f 72 6f 6f 74 73 2f 64 73 74 72 6f 6f 74 63 61 78 33 2e 70 37 63
+match Certificate-Extensions = { iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { pe = { authorityInfoAccess = { accessDescription = { accessMethod = "1.3.6.1.5.5.7.48.1", accessLocation = { uniformResourceIdentifier = "http://isrg.trustid.ocsp.identrust.com" } }, accessDescription = { accessMethod = "1.3.6.1.5.5.7.48.2", accessLocation = { uniformResourceIdentifier = "http://apps.identrust.com/roots/dstrootcax3.p7c" } } } } } } } } } } } }
+
+decode-pair a3 82 01 7d 30 82 01 79 30 7f 06 08 2b 06 01 05 05 07 01 01 04 73 30 71 30 32 06 08 2b 06 01 05 05 07 30 01 86 26 68 74 74 70 3a 2f 2f 69 73 72 67 2e 74 72 75 73 74 69 64 2e 6f 63 73 70 2e 69 64 65 6e 74 72 75 73 74 2e 63 6f 6d 30 3b 06 08 2b 06 01 05 05 07 30 02 86 2f 68 74 74 70 3a 2f 2f 61 70 70 73 2e 69 64 65 6e 74 72 75 73 74 2e 63 6f 6d 2f 72 6f 6f 74 73 2f 64 73 74 72 6f 6f 74 63 61 78 33 2e 70 37 63 30 1f 06 03 55 1d 23 04 18 30 16 80 14 c4 a7 b1 a4 7b 2c 71 fa db e1 4b 90 75 ff c4 15 60 85 89 10 30 54 06 03 55 1d 20 04 4d 30 4b 30 08 06 06 67 81 0c 01 02 01 30 3f 06 0b 2b 06 01 04 01 82 df 13 01 01 01 30 30 30 2e 06 08 2b 06 01 05 05 07 02 01 16 22 68 74 74 70 3a 2f 2f 63 70 73 2e 72 6f 6f 74 2d 78 31 2e 6c 65 74 73 65 6e 63 72 79 70 74 2e 6f 72 67 30 3c 06 03 55 1d 1f 04 35 30 33 30 31 a0 2f a0 2d 86 2b 68 74 74 70 3a 2f 2f 63 72 6c 2e 69 64 65 6e 74 72 75 73 74 2e 63 6f 6d 2f 44 53 54 52 4f 4f 54 43 41 58 33 43 52 4c 2e 63 72 6c 30 1d 06 03 55 1d 0e 04 16 04 14 a8 4a 6a 63 04 7d dd ba e6 d1 39 b7 a6 45 65 ef f3 a8 ec a1 30 12 06 03 55 1d 13 01 01 ff 04 08 30 06 01 01 ff 02 01 00 30 0e 06 03 55 1d 0f 01 01 ff 04 04 03 02 01 86
+match Certificate-Extensions = { Critical = { joint-iso-itu-t = { ds = { certificateExtension = { basicConstraints = { cA = yes, pathLenConstraint = 0 } } } }, joint-iso-itu-t = { ds = { certificateExtension = { keyUsage = { digitalSignature = yes, nonRepudation = no, keyEncipherment = no, dataEncipherment = no, keyAgreement = no, keyCertSign = yes, cRLSign = yes, encipherOnly = no } } } } }, iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { pe = { authorityInfoAccess = { accessDescription = { accessMethod = "1.3.6.1.5.5.7.48.1", accessLocation = { uniformResourceIdentifier = "http://isrg.trustid.ocsp.identrust.com" } }, accessDescription = { accessMethod = "1.3.6.1.5.5.7.48.2", accessLocation = { uniformResourceIdentifier = "http://apps.identrust.com/roots/dstrootcax3.p7c" } } } } } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { authorityKeyIdentifier = { keyIdentifier = 0xc4a7b1a47b2c71fadbe14b9075ffc41560858910 } } } }, joint-iso-itu-t = { ds = { certificateExtension = { certificatePolicies = { policyInformation = { policyIdentifier = "2.23.140.1.2.1" }, policyInformation = { policyIdentifier = "1.3.6.1.4.1.44947.1.1.1", policyQualifiers = { policyQualifierInfo = { iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { raw.2 = { raw.1 = 0x1622687474703a2f2f6370732e726f6f742d78312e6c657473656e63727970742e6f7267 } } } } } } } } } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { cRLDIstributionPoints = { distributionPoint = { distributionPointName = { fullName = { uniformResourceIdentifier = "http://crl.identrust.com/DSTROOTCAX3CRL.crl" } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { subjectKeyIdentifier = 0xa84a6a63047dddbae6d139b7a64565eff3a8eca1 } } } }
+
+proto-dictionary der
+encode-pair Certificate-Extensions = { iso = { identified-organization = { raw.4 = 0x3071303201 } } }
+match a3 0f 30 0d 30 0b 06 02 2b 04 04 05 30 71 30 32 01
+
+encode-pair Certificate-Extensions = { iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { pe = { raw.1 = 0x3071303206082b060105050730018626687474703a2f2f697372672e747275737469642e6f6373702e6964656e74727573742e636f6d303b06082b06010505073002862f687474703a2f2f617070732e6964656e74727573742e636f6d2f726f6f74732f647374726f6f74636178332e703763 } } } } } } } } }
+match a3 81 84 30 81 81 30 7f 06 08 2b 06 01 05 05 07 01 01 04 73 30 71 30 32 06 08 2b 06 01 05 05 07 30 01 86 26 68 74 74 70 3a 2f 2f 69 73 72 67 2e 74 72 75 73 74 69 64 2e 6f 63 73 70 2e 69 64 65 6e 74 72 75 73 74 2e 63 6f 6d 30 3b 06 08 2b 06 01 05 05 07 30 02 86 2f 68 74 74 70 3a 2f 2f 61 70 70 73 2e 69 64 65 6e 74 72 75 73 74 2e 63 6f 6d 2f 72 6f 6f 74 73 2f 64 73 74 72 6f 6f 74 63 61 78 33 2e 70 37 63
+
+encode-pair Certificate-Extensions = { Critical = { joint-iso-itu-t = { ds = { certificateExtension = { raw.19 = 0x30060101ff020100 } } }, joint-iso-itu-t = { ds = { certificateExtension = { raw.15 = 0x03020186 } } } }, iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { pe = { raw.1 = 0x3071303206082b060105050730018626687474703a2f2f697372672e747275737469642e6f6373702e6964656e74727573742e636f6d303b06082b06010505073002862f687474703a2f2f617070732e6964656e74727573742e636f6d2f726f6f74732f647374726f6f74636178332e703763 } } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { raw.35 = 0x30168014c4a7b1a47b2c71fadbe14b9075ffc41560858910 } } }, joint-iso-itu-t = { ds = { certificateExtension = { raw.32 = 0x304b3008060667810c010201303f060b2b0601040182df130101013030302e06082b060105050702011622687474703a2f2f6370732e726f6f742d78312e6c657473656e63727970742e6f7267 } } }, joint-iso-itu-t = { ds = { certificateExtension = { raw.31 = 0x30333031a02fa02d862b687474703a2f2f63726c2e6964656e74727573742e636f6d2f445354524f4f544341583343524c2e63726c } } }, joint-iso-itu-t = { ds = { certificateExtension = { raw.14 = 0x0414a84a6a63047dddbae6d139b7a64565eff3a8eca1 } } } }
+match a3 82 01 7d 30 82 01 79 30 12 06 03 55 1d 13 01 01 ff 04 08 30 06 01 01 ff 02 01 00 30 0e 06 03 55 1d 0f 01 01 ff 04 04 03 02 01 86 30 7f 06 08 2b 06 01 05 05 07 01 01 04 73 30 71 30 32 06 08 2b 06 01 05 05 07 30 01 86 26 68 74 74 70 3a 2f 2f 69 73 72 67 2e 74 72 75 73 74 69 64 2e 6f 63 73 70 2e 69 64 65 6e 74 72 75 73 74 2e 63 6f 6d 30 3b 06 08 2b 06 01 05 05 07 30 02 86 2f 68 74 74 70 3a 2f 2f 61 70 70 73 2e 69 64 65 6e 74 72 75 73 74 2e 63 6f 6d 2f 72 6f 6f 74 73 2f 64 73 74 72 6f 6f 74 63 61 78 33 2e 70 37 63 30 1f 06 03 55 1d 23 04 18 30 16 80 14 c4 a7 b1 a4 7b 2c 71 fa db e1 4b 90 75 ff c4 15 60 85 89 10 30 54 06 03 55 1d 20 04 4d 30 4b 30 08 06 06 67 81 0c 01 02 01 30 3f 06 0b 2b 06 01 04 01 82 df 13 01 01 01 30 30 30 2e 06 08 2b 06 01 05 05 07 02 01 16 22 68 74 74 70 3a 2f 2f 63 70 73 2e 72 6f 6f 74 2d 78 31 2e 6c 65 74 73 65 6e 63 72 79 70 74 2e 6f 72 67 30 3c 06 03 55 1d 1f 04 35 30 33 30 31 a0 2f a0 2d 86 2b 68 74 74 70 3a 2f 2f 63 72 6c 2e 69 64 65 6e 74 72 75 73 74 2e 63 6f 6d 2f 44 53 54 52 4f 4f 54 43 41 58 33 43 52 4c 2e 63 72 6c 30 1d 06 03 55 1d 0e 04 16 04 14 a8 4a 6a 63 04 7d dd ba e6 d1 39 b7 a6 45 65 ef f3 a8 ec a1
+
+proto-dictionary-root Issuer
+decode-pair 30 3F 31 24 30 22 06 03 55 04 0A 13 1B 44 69 67 69 74 61 6C 20 53 69 67 6E 61 74 75 72 65 20 54 72 75 73 74 20 43 6F 2E 31 17 30 15 06 03 55 04 03 13 0E 44 53 54 20 52 6F 6F 74 20 43 41 20 58 33
+match Issuer = { RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { organizationName = "Digital Signature Trust Co." } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { commonName = "DST Root CA X3" } } } } } }
+
+decode-pair 30 4A 31 0B 30 09 06 03 55 04 06 13 02 55 53 31 16 30 14 06 03 55 04 0A 13 0D 4C 65 74 27 73 20 45 6E 63 72 79 70 74 31 23 30 21 06 03 55 04 03 13 1A 4C 65 74 27 73 20 45 6E 63 72 79 70 74 20 41 75 74 68 6F 72 69 74 79 20 58 33
+match Issuer = { RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { countryName = "US" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { organizationName = "Let's Encrypt" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { commonName = "Let's Encrypt Authority X3" } } } } } }
+
+proto-dictionary-root Issuer-Set
+decode-pair 31 3F 31 24 30 22 06 03 55 04 0A 13 1B 44 69 67 69 74 61 6C 20 53 69 67 6E 61 74 75 72 65 20 54 72 75 73 74 20 43 6F 2E 31 17 30 15 06 03 55 04 03 13 0E 44 53 54 20 52 6F 6F 74 20 43 41 20 58 33
+match Issuer-Set = { RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { organizationName = "Digital Signature Trust Co." } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { commonName = "DST Root CA X3" } } } } } }
+
+proto-dictionary-root Test-Seq-Of
+
+decode-pair 30 06 02 01 01 02 01 02
+match Test-Seq-Of = { Test-First-Integer = 1, Test-First-Integer = 2 }
+
+proto-dictionary-root Test-Seq-Of
+
+decode-pair 30 06 02 01 01 01 01 FF
+match Attribute Test-Seq-Of is a sequence-of, but received tag 1
+
+proto-dictionary-root Test-Set-Of
+
+decode-pair 31 06 02 01 01 02 01 02
+match Test-Set-Of = { Test-First-Integer = 1, Test-First-Integer = 2 }
+
+decode-pair 31 07 02 02 00 80 02 01 02
+match Set tags are not in ascending order. Previous item has more data
+
+proto-dictionary-root Test-Set-Of
+
+decode-pair 31 06 02 01 01 01 01 FF
+match Attribute Test-Set-Of is a set-of type 2, but found type 1
+
+proto-dictionary-root Test-String-Max
+
+decode-pair 16 02 68 69
+match Test-String-Max = "hi"
+
+decode-pair 1681f7496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Data length (247) exceeds max size (5)
+
+proto-dictionary-root Foo
+
+# Test the fuzzer with a dictionary of DER-encoded PKCS#10 requests
+
+decode-pair 30 03 02 01 80
+match Foo = { Test-Integer = -128 }
+
+decode-pair 30 03 02 01 7F
+match Foo = { Test-Integer = 127 }
+
+decode-pair 30 04 02 02 00 80
+match Foo = { Test-Integer = 128 }
+
+decode-pair 30 04 02 02 FF 80
+match Integer is not correctly DER encoded. First two bytes are all 0s or all 1s.
+
+decode-pair 30 04 02 02 00 70
+match Integer is not correctly DER encoded. First two bytes are all 0s or all 1s.
+
+decode-pair 30 04 02 02 80 00
+match Foo = { Test-Integer = -32768 }
+
+decode-pair 30 04 02 02 7F FF
+match Foo = { Test-Integer = 32767 }
+
+decode-pair 30 05 02 03 00 80 00
+match Foo = { Test-Integer = 32768 }
+
+decode-pair 30 05 02 03 FF 80 00
+match Integer is not correctly DER encoded. First two bytes are all 0s or all 1s.
+
+decode-pair 30 05 02 03 00 70 00
+match Integer is not correctly DER encoded. First two bytes are all 0s or all 1s.
+
+decode-pair 30 05 02 03 80 00 00
+match Foo = { Test-Integer = -8388608 }
+
+decode-pair 30 05 02 03 7F FF FF
+match Foo = { Test-Integer = 8388607 }
+
+decode-pair 30 06 02 04 00 80 00 00
+match Foo = { Test-Integer = 8388608 }
+
+decode-pair 30 06 02 04 FF 80 00 00
+match Integer is not correctly DER encoded. First two bytes are all 0s or all 1s.
+
+decode-pair 30 06 02 04 00 70 00 00
+match Integer is not correctly DER encoded. First two bytes are all 0s or all 1s.
+
+decode-pair 30 06 02 04 80 00 00 00
+match Foo = { Test-Integer = -2147483648 }
+
+decode-pair 30 06 02 04 7F FF FF FF
+match Foo = { Test-Integer = 2147483647 }
+
+decode-pair 30 07 02 05 00 80 00 00 00
+match Foo = { Test-Integer = 2147483648 }
+
+decode-pair 30 07 02 05 FF 80 00 00 00
+match Integer is not correctly DER encoded. First two bytes are all 0s or all 1s.
+
+decode-pair 30 07 02 05 00 70 00 00 00
+match Integer is not correctly DER encoded. First two bytes are all 0s or all 1s.
+
+decode-pair 30 07 02 05 80 00 00 00 00
+match Foo = { Test-Integer = -549755813888 }
+
+decode-pair 30 07 02 05 7F FF FF FF FF
+match Foo = { Test-Integer = 549755813887 }
+
+decode-pair 30 08 02 06 00 80 00 00 00 00
+match Foo = { Test-Integer = 549755813888 }
+
+decode-pair 30 08 02 06 FF 80 00 00 00 00
+match Integer is not correctly DER encoded. First two bytes are all 0s or all 1s.
+
+decode-pair 30 08 02 06 00 70 00 00 00 00
+match Integer is not correctly DER encoded. First two bytes are all 0s or all 1s.
+
+decode-pair 30 08 02 06 80 00 00 00 00 00
+match Foo = { Test-Integer = -140737488355328 }
+
+decode-pair 30 08 02 06 7F FF FF FF FF FF
+match Foo = { Test-Integer = 140737488355327 }
+
+decode-pair 30 09 02 07 00 80 00 00 00 00 00
+match Foo = { Test-Integer = 140737488355328 }
+
+decode-pair 30 09 02 07 FF 80 00 00 00 00 00
+match Integer is not correctly DER encoded. First two bytes are all 0s or all 1s.
+
+decode-pair 30 09 02 07 00 70 00 00 00 00 00
+match Integer is not correctly DER encoded. First two bytes are all 0s or all 1s.
+
+decode-pair 30 09 02 07 80 00 00 00 00 00 00
+match Foo = { Test-Integer = -36028797018963968 }
+
+decode-pair 30 09 02 07 7F FF FF FF FF FF FF
+match Foo = { Test-Integer = 36028797018963967 }
+
+decode-pair 30 0A 02 08 00 80 00 00 00 00 00 00
+match Foo = { Test-Integer = 36028797018963968 }
+
+decode-pair 30 0A 02 08 FF 80 00 00 00 00 00 00
+match Integer is not correctly DER encoded. First two bytes are all 0s or all 1s.
+
+decode-pair 30 0A 02 08 00 70 00 00 00 00 00 00
+match Integer is not correctly DER encoded. First two bytes are all 0s or all 1s.
+
+decode-pair 30 0A 02 08 80 00 00 00 00 00 00 00
+match Foo = { Test-Integer = -9223372036854775808 }
+
+decode-pair 30 0A 02 08 7F FF FF FF FF FF FF FF
+match Foo = { Test-Integer = 9223372036854775807 }
+
+decode-pair 30 0B 02 09 00 80 00 00 00 00 00 00 00
+match Integer too large (9)
+
+decode-pair 30 13 02 11 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+match Integer too large (17)
+
+proto-dictionary-root Bar
+
+decode-pair 30 03 01 01 00
+match Bar = { Test-Boolean = no }
+
+decode-pair 30 03 01 01 FF
+match Bar = { Test-Boolean = yes }
+
+decode-pair 30 03 01 01 01
+match Boolean is not correctly DER encoded (0x00 or 0xff).
+
+proto-dictionary-root Foo-Bar
+
+decode-pair 30 06 02 01 09 01 01 00
+match Foo-Bar = { Test-Integer = 9, Test-Boolean = no }
+
+decode-pair 30 06 02 01 09 01 01 FF
+match Foo-Bar = { Test-Integer = 9, Test-Boolean = yes }
+
+decode-pair 30 06 02 01 01 01 01 FF
+match Foo-Bar = { Test-Integer = ::DEFAULT, Test-Boolean = yes }
+
+decode-pair 30 03 01 01 FF
+match Foo-Bar = { Test-Integer = ::DEFAULT, Test-Boolean = yes }
+
+decode-pair 30 06 02 01 09 01 01 01
+match Boolean is not correctly DER encoded (0x00 or 0xff).
+
+decode-pair 30 06 02 02 09 01 01 FF
+match Length field too large (127): Failed decoding header
+
+proto-dictionary-root SEQ-BITSTRING-OCTETS
+
+decode-pair 30 04 03 02 00 01
+match Seq-Bitstring-Octets = { Test-Bitstring = 0x0001 }
+
+decode-pair 30 03 03 01 00
+match Seq-Bitstring-Octets = { Test-Bitstring = 0x00 }
+
+decode-pair 30 04 03 02 01 02
+match Seq-Bitstring-Octets = { Test-Bitstring = 0x0102 }
+
+decode-pair 30 04 03 02 01 03
+match Seq-Bitstring-Octets = { Test-Bitstring = 0x0102 }
+
+decode-pair 30 05 03 03 01 03 03
+match Seq-Bitstring-Octets = { Test-Bitstring = 0x010302 }
+
+decode-pair 30 09 03 07 04 0A 3B 5F 29 1C D0
+match Seq-Bitstring-Octets = { Test-Bitstring = 0x040a3b5f291cd0 }
+
+decode-pair 30 09 03 07 04 0A 3B 5F 29 1C DF
+match Seq-Bitstring-Octets = { Test-Bitstring = 0x040a3b5f291cd0 }
+
+decode-pair 30 04 03 01
+match Insufficient data for length field (4): Failed decoding header
+
+decode-pair 30 04 03 01 08
+match Insufficient data for length field (4): Failed decoding header
+
+decode-pair 30 04 03 01 01
+match Insufficient data for length field (4): Failed decoding header
+
+proto-dictionary-root Bitstring-Struct
+
+decode-pair 03 02 00 01
+match Bitstring-Struct = { foo = 1 }
+
+decode-pair 03 02 00 00
+match Bitstring-Struct = { foo = 0 }
+
+decode-pair 03 03 00 FB FB
+match Bitstring-Struct = { foo = 251, bar = 15, foo-bar = 11 }
+
+decode-pair 03 03 00 FF FF
+match Bitstring-Struct = { foo = 255, bar = 15, foo-bar = 15 }
+
+decode-pair 03 04 00 FF FF FF
+# match Bitstring structure decoder didn't consume all data
+
+proto-dictionary-root Bitstring-Struct-7
+
+decode-pair 03 02 01 FB
+match Bitstring-Struct-7 = { foo = 3, bar = yes, foo-bar = 13 }
+
+proto-dictionary-root Octetstring
+
+decode-pair 04 01 00
+match Octetstring = 0x00
+
+decode-pair 04 01 FF
+match Octetstring = 0xff
+
+decode-pair 04 08 ff ff ff ff ff ff ff ff
+match Octetstring = 0xffffffffffffffff
+
+proto-dictionary-root Seq-Octetstring
+
+decode-pair 30 03 04 01 00
+match Seq-Octetstring = { Octetstring = 0x00 }
+
+decode-pair 30 03 04 01 FF
+match Seq-Octetstring = { Octetstring = 0xff }
+
+decode-pair 30 0A 04 08 ff ff ff ff ff ff ff ff
+match Seq-Octetstring = { Octetstring = 0xffffffffffffffff }
+
+proto-dictionary-root Test-Null
+
+decode-pair 05 00
+match Test-NULL = no
+
+proto-dictionary-root Test-Enumerated
+
+decode-pair 0a 02 04 d2
+match Test-Enumerated = 1234
+
+proto-dictionary-root Seq-Null
+
+decode-pair 30 02 05 00
+match Seq-Null = { Test-Null = no }
+
+decode-pair 30 02 05 01
+match Insufficient data for length field (1): Failed decoding header
+
+proto-dictionary-root Seq-Integer-Null
+
+decode-pair 30 05 02 01 01 05 00
+match Seq-Integer-Null = { Test-Integer = 1, Test-Null = no }
+
+proto-dictionary-root Test-Oid
+
+decode-pair 06 03 88 37 03
+match Test-Oid = "2.999.3"
+
+decode-pair 06 09 2a 86 48 86 f7 0d 01 01 0B
+match Test-Oid = "1.2.840.113549.1.1.11"
+
+decode-pair 06 0A 2a 86 48 ff 86 f7 0d 01 01 0b
+match Test-Oid = "1.2.840.266451853.1.1.11"
+
+decode-pair 06 0B 2a 86 48 ff ff 86 f7 0d 01 01 0b
+match Test-Oid = "1.2.840.34357754765.1.1.11"
+
+decode-pair 06 0C 2a 86 48 ff ff ff 86 f7 0d 01 01 0b
+match Test-Oid = "1.2.840.4398044527501.1.1.11"
+
+decode-pair 06 0C 2a 86 48 ff ff ff ff 7f 0d 01 01 0b
+match Test-Oid = "1.2.840.34359738367.13.1.1.11"
+
+decode-pair 06 0D 2a 86 48 ff ff ff ff ff 7f 0d 01 01 0b
+match Test-Oid = "1.2.840.4398046511103.13.1.1.11"
+
+decode-pair 06 0e 2a 86 48 ff ff ff ff ff ff 7f 0d 01 01 0b
+match Test-Oid = "1.2.840.562949953421311.13.1.1.11"
+
+decode-pair 06 0f 2a 86 48 ff ff ff ff ff ff ff 7f 0d 01 01 0b
+match Test-Oid = "1.2.840.72057594037927935.13.1.1.11"
+
+decode-pair 06 10 2a 86 48 ff ff ff ff ff ff ff ff 7f 0d 01 01 0b
+match Test-Oid = "1.2.840.9223372036854775807.13.1.1.11"
+
+decode-pair 06 11 2a 86 48 ff ff ff ff ff ff ff ff ff 7f 0d 01 01 0b
+match OID subidentifier too large (9 chunks)
+
+decode-pair 06 12 2a 86 48 ff ff ff ff ff ff ff ff ff 86 f7 0d 01 01 0b
+match OID subidentifier too large (9 chunks)
+
+decode-pair 06 19 2a 86 48 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 86 f7 0d 01 01 0b
+match OID subidentifier too large (9 chunks)
+
+proto-dictionary-root Seq-Oid
+
+decode-pair 30 05 06 03 88 37 03
+match Seq-Oid = { Test-Oid = "2.999.3" }
+
+decode-pair 30 0b 06 09 2a 86 48 86 f7 0d 01 01 0B
+match Seq-Oid = { Test-Oid = "1.2.840.113549.1.1.11" }
+
+decode-pair 30 0C 06 0A 2a 86 48 ff 86 f7 0d 01 01 0b
+match Seq-Oid = { Test-Oid = "1.2.840.266451853.1.1.11" }
+
+decode-pair 30 0d 06 0B 2a 86 48 ff ff 86 f7 0d 01 01 0b
+match Seq-Oid = { Test-Oid = "1.2.840.34357754765.1.1.11" }
+
+decode-pair 30 0e 06 0C 2a 86 48 ff ff ff 86 f7 0d 01 01 0b
+match Seq-Oid = { Test-Oid = "1.2.840.4398044527501.1.1.11" }
+
+decode-pair 30 0e 06 0C 2a 86 48 ff ff ff ff 7f 0d 01 01 0b
+match Seq-Oid = { Test-Oid = "1.2.840.34359738367.13.1.1.11" }
+
+decode-pair 30 0f 06 0D 2a 86 48 ff ff ff ff ff 7f 0d 01 01 0b
+match Seq-Oid = { Test-Oid = "1.2.840.4398046511103.13.1.1.11" }
+
+decode-pair 30 10 06 0e 2a 86 48 ff ff ff ff ff ff 7f 0d 01 01 0b
+match Seq-Oid = { Test-Oid = "1.2.840.562949953421311.13.1.1.11" }
+
+decode-pair 30 11 06 0f 2a 86 48 ff ff ff ff ff ff ff 7f 0d 01 01 0b
+match Seq-Oid = { Test-Oid = "1.2.840.72057594037927935.13.1.1.11" }
+
+decode-pair 30 12 06 10 2a 86 48 ff ff ff ff ff ff ff ff 7f 0d 01 01 0b
+match Seq-Oid = { Test-Oid = "1.2.840.9223372036854775807.13.1.1.11" }
+
+decode-pair 30 13 06 11 2a 86 48 ff ff ff ff ff ff ff ff ff 7f 0d 01 01 0b
+match OID subidentifier too large (9 chunks)
+
+decode-pair 30 14 06 12 2a 86 48 ff ff ff ff ff ff ff ff ff 86 f7 0d 01 01 0b
+match OID subidentifier too large (9 chunks)
+
+decode-pair 30 1b 06 19 2a 86 48 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 86 f7 0d 01 01 0b
+match OID subidentifier too large (9 chunks)
+
+proto-dictionary-root Test-String
+
+# Test IA5String
+decode-pair 16 02 68 69
+match Test-String = "hi"
+
+decode-pair 1681f7496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort."
+
+decode-pair 16820783496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e20497420686164206120706572666563746c7920726f756e6420646f6f72206c696b65206120706f7274686f6c652c207061696e74656420677265656e2c20776974682061207368696e792079656c6c6f77206272617373206b6e6f6220696e20746865206578616374206d6964646c652e2054686520646f6f72206f70656e6564206f6e20746f206120747562652d7368617065642068616c6c206c696b6520612074756e6e656c3a2061207665727920636f6d666f727461626c652074756e6e656c20776974686f757420736d6f6b652c20776974682070616e656c6c65642077616c6c732c20616e6420666c6f6f72732074696c656420616e642063617270657465642c2070726f7669646564207769746820706f6c69736865642063686169727320616e64206c6f747320616e64206c6f7473206f66207065677320666f72206861747320616e6420636f61747320e280932074686520686f626269742077617320666f6e64206f662076697369746f72732e205468652074756e6e656c20776f756e64206f6e20616e64206f6e2c20676f696e6720666169726c7920627574206e6f7420717569746520737472616967687420696e746f207468652073696465206f66207468652068696c6c20e28093205468652048696c6c2c20617320616c6c207468652070656f706c6520666f72206d616e79206d696c657320726f756e642063616c6c656420697420e2809320616e64206d616e79206c6974746c6520726f756e6420646f6f7273206f70656e6564206f7574206f662069742c206669727374206f6e206f6e65207369646520616e64207468656e206f6e20616e6f746865722e204e6f20676f696e6720757073746169727320666f722074686520686f626269743a20626564726f6f6d732c2062617468726f6f6d732c2063656c6c6172732c2070616e747269657320286c6f7473206f66207468657365292c2077617264726f62657320286865206861642077686f6c6520726f6f6d73206465766f74656420746f20636c6f74686573292c206b69746368656e732c2064696e696e672d726f6f6d732c20616c6c2077657265206f6e207468652073616d6520666c6f6f722c20616e6420696e64656564206f6e207468652073616d6520706173736167652e20546865206265737420726f6f6d73207765726520616c6c206f6e20746865206c6566742d68616e6420736964652028676f696e6720696e292c20666f72207468657365207765726520746865206f6e6c79206f6e657320746f20686176652077696e646f77732c20646565702d73657420726f756e642077696e646f7773206c6f6f6b696e67206f766572206869732067617264656e2c20616e64206d6561646f7773206265796f6e642c20736c6f70696e6720646f776e20746f207468652072697665722e205468697320686f6262697420776173206120766572792077656c6c2d746f2d646f20686f626269742c20616e6420686973206e616d65207761732042616767696e732e205468652042616767696e7365732068617665206c6976656420696e20746865206e65696768626f7572686f6f64206f66205468652048696c6c20666f722074696d65206f7574206f66206d696e642c20616e642070656f706c6520636f6e73696465726564207468656d2076657279207265737065637461626c652c206e6f74206f6e6c792062656361757365206d6f7374206f66207468656d207765726520726963682c2062757420616c736f20626563617573652074686579206e657665722068616420616e7920616476656e7475726573206f722064696420616e797468696e6720756e65787065637465643a20796f7520636f756c642074656c6c207768617420612042616767696e7320776f756c6420736179206f6e20616e79207175657374696f6e20776974686f75742074686520626f74686572206f662061736b696e672068696d2e205468697320697320612073746f7279206f6620686f7720612042616767696e732068616420616e20616476656e747572652c20616e6420666f756e642068696d73656c6620646f696e6720616e6420736179696e67207468696e677320616c746f67657468657220756e65787065637465642e204865206d61792068617665206c6f737420746865206e65696768626f757273e2809920726573706563742c20627574206865206761696e656420e280932077656c6c2c20796f752077696c6c207365652077686574686572206865206761696e656420616e797468696e6720696e2074686520656e642e
+match Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats â€“ the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill â€“ The Hill, as all the people for many miles round called it â€“ and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours’ respect, but he gained â€“ well, you will see whether he gained anything in the end."
+
+# Test UTF8String
+decode-pair 0c81f7496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort."
+
+decode-pair 0c820783496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e20497420686164206120706572666563746c7920726f756e6420646f6f72206c696b65206120706f7274686f6c652c207061696e74656420677265656e2c20776974682061207368696e792079656c6c6f77206272617373206b6e6f6220696e20746865206578616374206d6964646c652e2054686520646f6f72206f70656e6564206f6e20746f206120747562652d7368617065642068616c6c206c696b6520612074756e6e656c3a2061207665727920636f6d666f727461626c652074756e6e656c20776974686f757420736d6f6b652c20776974682070616e656c6c65642077616c6c732c20616e6420666c6f6f72732074696c656420616e642063617270657465642c2070726f7669646564207769746820706f6c69736865642063686169727320616e64206c6f747320616e64206c6f7473206f66207065677320666f72206861747320616e6420636f61747320e280932074686520686f626269742077617320666f6e64206f662076697369746f72732e205468652074756e6e656c20776f756e64206f6e20616e64206f6e2c20676f696e6720666169726c7920627574206e6f7420717569746520737472616967687420696e746f207468652073696465206f66207468652068696c6c20e28093205468652048696c6c2c20617320616c6c207468652070656f706c6520666f72206d616e79206d696c657320726f756e642063616c6c656420697420e2809320616e64206d616e79206c6974746c6520726f756e6420646f6f7273206f70656e6564206f7574206f662069742c206669727374206f6e206f6e65207369646520616e64207468656e206f6e20616e6f746865722e204e6f20676f696e6720757073746169727320666f722074686520686f626269743a20626564726f6f6d732c2062617468726f6f6d732c2063656c6c6172732c2070616e747269657320286c6f7473206f66207468657365292c2077617264726f62657320286865206861642077686f6c6520726f6f6d73206465766f74656420746f20636c6f74686573292c206b69746368656e732c2064696e696e672d726f6f6d732c20616c6c2077657265206f6e207468652073616d6520666c6f6f722c20616e6420696e64656564206f6e207468652073616d6520706173736167652e20546865206265737420726f6f6d73207765726520616c6c206f6e20746865206c6566742d68616e6420736964652028676f696e6720696e292c20666f72207468657365207765726520746865206f6e6c79206f6e657320746f20686176652077696e646f77732c20646565702d73657420726f756e642077696e646f7773206c6f6f6b696e67206f766572206869732067617264656e2c20616e64206d6561646f7773206265796f6e642c20736c6f70696e6720646f776e20746f207468652072697665722e205468697320686f6262697420776173206120766572792077656c6c2d746f2d646f20686f626269742c20616e6420686973206e616d65207761732042616767696e732e205468652042616767696e7365732068617665206c6976656420696e20746865206e65696768626f7572686f6f64206f66205468652048696c6c20666f722074696d65206f7574206f66206d696e642c20616e642070656f706c6520636f6e73696465726564207468656d2076657279207265737065637461626c652c206e6f74206f6e6c792062656361757365206d6f7374206f66207468656d207765726520726963682c2062757420616c736f20626563617573652074686579206e657665722068616420616e7920616476656e7475726573206f722064696420616e797468696e6720756e65787065637465643a20796f7520636f756c642074656c6c207768617420612042616767696e7320776f756c6420736179206f6e20616e79207175657374696f6e20776974686f75742074686520626f74686572206f662061736b696e672068696d2e205468697320697320612073746f7279206f6620686f7720612042616767696e732068616420616e20616476656e747572652c20616e6420666f756e642068696d73656c6620646f696e6720616e6420736179696e67207468696e677320616c746f67657468657220756e65787065637465642e204865206d61792068617665206c6f737420746865206e65696768626f757273e2809920726573706563742c20627574206865206761696e656420e280932077656c6c2c20796f752077696c6c207365652077686574686572206865206761696e656420616e797468696e6720696e2074686520656e642e
+match Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats â€“ the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill â€“ The Hill, as all the people for many miles round called it â€“ and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours’ respect, but he gained â€“ well, you will see whether he gained anything in the end."
+
+decode-pair 0c 04 f0 9f 98 8e
+match Test-String = "😎"
+
+decode-pair 0c 04 f0 9f 98
+match Insufficient data for length field (4): Failed decoding header
+
+# Test PrintableString
+decode-pair 13 02 68 69
+match Test-String = "hi"
+
+decode-pair 134a4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a30313233343536373839202728292b2c2d2e2f3a3d3f
+match Test-String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 '()+,-./:=?"
+
+decode-pair 1381f7496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort."
+
+decode-pair 138208af496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort."
+
+decode-pair 13820779496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e20497420686164206120706572666563746c7920726f756e6420646f6f72206c696b65206120706f7274686f6c652c207061696e74656420677265656e2c20776974682061207368696e792079656c6c6f77206272617373206b6e6f6220696e20746865206578616374206d6964646c652e2054686520646f6f72206f70656e6564206f6e20746f206120747562652d7368617065642068616c6c206c696b6520612074756e6e656c3a2061207665727920636f6d666f727461626c652074756e6e656c20776974686f757420736d6f6b652c20776974682070616e656c6c65642077616c6c732c20616e6420666c6f6f72732074696c656420616e642063617270657465642c2070726f7669646564207769746820706f6c69736865642063686169727320616e64206c6f747320616e64206c6f7473206f66207065677320666f72206861747320616e6420636f617473202d2074686520686f626269742077617320666f6e64206f662076697369746f72732e205468652074756e6e656c20776f756e64206f6e20616e64206f6e2c20676f696e6720666169726c7920627574206e6f7420717569746520737472616967687420696e746f207468652073696465206f66207468652068696c6c202d205468652048696c6c2c20617320616c6c207468652070656f706c6520666f72206d616e79206d696c657320726f756e642063616c6c6564206974202d20616e64206d616e79206c6974746c6520726f756e6420646f6f7273206f70656e6564206f7574206f662069742c206669727374206f6e206f6e65207369646520616e64207468656e206f6e20616e6f746865722e204e6f20676f696e6720757073746169727320666f722074686520686f626269743a20626564726f6f6d732c2062617468726f6f6d732c2063656c6c6172732c2070616e747269657320286c6f7473206f66207468657365292c2077617264726f62657320286865206861642077686f6c6520726f6f6d73206465766f74656420746f20636c6f74686573292c206b69746368656e732c2064696e696e672d726f6f6d732c20616c6c2077657265206f6e207468652073616d6520666c6f6f722c20616e6420696e64656564206f6e207468652073616d6520706173736167652e20546865206265737420726f6f6d73207765726520616c6c206f6e20746865206c6566742d68616e6420736964652028676f696e6720696e292c20666f72207468657365207765726520746865206f6e6c79206f6e657320746f20686176652077696e646f77732c20646565702d73657420726f756e642077696e646f7773206c6f6f6b696e67206f766572206869732067617264656e2c20616e64206d6561646f7773206265796f6e642c20736c6f70696e6720646f776e20746f207468652072697665722e205468697320686f6262697420776173206120766572792077656c6c2d746f2d646f20686f626269742c20616e6420686973206e616d65207761732042616767696e732e205468652042616767696e7365732068617665206c6976656420696e20746865206e65696768626f7572686f6f64206f66205468652048696c6c20666f722074696d65206f7574206f66206d696e642c20616e642070656f706c6520636f6e73696465726564207468656d2076657279207265737065637461626c652c206e6f74206f6e6c792062656361757365206d6f7374206f66207468656d207765726520726963682c2062757420616c736f20626563617573652074686579206e657665722068616420616e7920616476656e7475726573206f722064696420616e797468696e6720756e65787065637465643a20796f7520636f756c642074656c6c207768617420612042616767696e7320776f756c6420736179206f6e20616e79207175657374696f6e20776974686f75742074686520626f74686572206f662061736b696e672068696d2e205468697320697320612073746f7279206f6620686f7720612042616767696e732068616420616e20616476656e747572652c20616e6420666f756e642068696d73656c6620646f696e6720616e6420736179696e67207468696e677320616c746f67657468657220756e65787065637465642e204865206d61792068617665206c6f737420746865206e65696768626f7572732720726573706563742c20627574206865206761696e6564202d2077656c6c2c20796f752077696c6c207365652077686574686572206865206761696e656420616e797468696e6720696e2074686520656e642e
+match Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats - the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill - The Hill, as all the people for many miles round called it - and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours' respect, but he gained - well, you will see whether he gained anything in the end."
+
+decode-pair 13 01 21
+match Invalid character in a string (33)
+
+# Test T61String
+decode-pair 140c68656c6c6f20746865726521
+match Test-String = "hello there!"
+
+decode-pair 1481f7496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort."
+
+decode-pair 14820779496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e20497420686164206120706572666563746c7920726f756e6420646f6f72206c696b65206120706f7274686f6c652c207061696e74656420677265656e2c20776974682061207368696e792079656c6c6f77206272617373206b6e6f6220696e20746865206578616374206d6964646c652e2054686520646f6f72206f70656e6564206f6e20746f206120747562652d7368617065642068616c6c206c696b6520612074756e6e656c3a2061207665727920636f6d666f727461626c652074756e6e656c20776974686f757420736d6f6b652c20776974682070616e656c6c65642077616c6c732c20616e6420666c6f6f72732074696c656420616e642063617270657465642c2070726f7669646564207769746820706f6c69736865642063686169727320616e64206c6f747320616e64206c6f7473206f66207065677320666f72206861747320616e6420636f617473202d2074686520686f626269742077617320666f6e64206f662076697369746f72732e205468652074756e6e656c20776f756e64206f6e20616e64206f6e2c20676f696e6720666169726c7920627574206e6f7420717569746520737472616967687420696e746f207468652073696465206f66207468652068696c6c202d205468652048696c6c2c20617320616c6c207468652070656f706c6520666f72206d616e79206d696c657320726f756e642063616c6c6564206974202d20616e64206d616e79206c6974746c6520726f756e6420646f6f7273206f70656e6564206f7574206f662069742c206669727374206f6e206f6e65207369646520616e64207468656e206f6e20616e6f746865722e204e6f20676f696e6720757073746169727320666f722074686520686f626269743a20626564726f6f6d732c2062617468726f6f6d732c2063656c6c6172732c2070616e747269657320286c6f7473206f66207468657365292c2077617264726f62657320286865206861642077686f6c6520726f6f6d73206465766f74656420746f20636c6f74686573292c206b69746368656e732c2064696e696e672d726f6f6d732c20616c6c2077657265206f6e207468652073616d6520666c6f6f722c20616e6420696e64656564206f6e207468652073616d6520706173736167652e20546865206265737420726f6f6d73207765726520616c6c206f6e20746865206c6566742d68616e6420736964652028676f696e6720696e292c20666f72207468657365207765726520746865206f6e6c79206f6e657320746f20686176652077696e646f77732c20646565702d73657420726f756e642077696e646f7773206c6f6f6b696e67206f766572206869732067617264656e2c20616e64206d6561646f7773206265796f6e642c20736c6f70696e6720646f776e20746f207468652072697665722e205468697320686f6262697420776173206120766572792077656c6c2d746f2d646f20686f626269742c20616e6420686973206e616d65207761732042616767696e732e205468652042616767696e7365732068617665206c6976656420696e20746865206e65696768626f7572686f6f64206f66205468652048696c6c20666f722074696d65206f7574206f66206d696e642c20616e642070656f706c6520636f6e73696465726564207468656d2076657279207265737065637461626c652c206e6f74206f6e6c792062656361757365206d6f7374206f66207468656d207765726520726963682c2062757420616c736f20626563617573652074686579206e657665722068616420616e7920616476656e7475726573206f722064696420616e797468696e6720756e65787065637465643a20796f7520636f756c642074656c6c207768617420612042616767696e7320776f756c6420736179206f6e20616e79207175657374696f6e20776974686f75742074686520626f74686572206f662061736b696e672068696d2e205468697320697320612073746f7279206f6620686f7720612042616767696e732068616420616e20616476656e747572652c20616e6420666f756e642068696d73656c6620646f696e6720616e6420736179696e67207468696e677320616c746f67657468657220756e65787065637465642e204865206d61792068617665206c6f737420746865206e65696768626f7572732720726573706563742c20627574206865206761696e6564202d2077656c6c2c20796f752077696c6c207365652077686574686572206865206761696e656420616e797468696e6720696e2074686520656e642e
+match Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats - the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill - The Hill, as all the people for many miles round called it - and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours' respect, but he gained - well, you will see whether he gained anything in the end."
+
+# Test VisibleString
+decode-pair 1a0c68656c6c6f20746865726521
+match Test-String = "hello there!"
+
+decode-pair 1a81f7496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort."
+
+decode-pair 1a820779496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e20497420686164206120706572666563746c7920726f756e6420646f6f72206c696b65206120706f7274686f6c652c207061696e74656420677265656e2c20776974682061207368696e792079656c6c6f77206272617373206b6e6f6220696e20746865206578616374206d6964646c652e2054686520646f6f72206f70656e6564206f6e20746f206120747562652d7368617065642068616c6c206c696b6520612074756e6e656c3a2061207665727920636f6d666f727461626c652074756e6e656c20776974686f757420736d6f6b652c20776974682070616e656c6c65642077616c6c732c20616e6420666c6f6f72732074696c656420616e642063617270657465642c2070726f7669646564207769746820706f6c69736865642063686169727320616e64206c6f747320616e64206c6f7473206f66207065677320666f72206861747320616e6420636f617473202d2074686520686f626269742077617320666f6e64206f662076697369746f72732e205468652074756e6e656c20776f756e64206f6e20616e64206f6e2c20676f696e6720666169726c7920627574206e6f7420717569746520737472616967687420696e746f207468652073696465206f66207468652068696c6c202d205468652048696c6c2c20617320616c6c207468652070656f706c6520666f72206d616e79206d696c657320726f756e642063616c6c6564206974202d20616e64206d616e79206c6974746c6520726f756e6420646f6f7273206f70656e6564206f7574206f662069742c206669727374206f6e206f6e65207369646520616e64207468656e206f6e20616e6f746865722e204e6f20676f696e6720757073746169727320666f722074686520686f626269743a20626564726f6f6d732c2062617468726f6f6d732c2063656c6c6172732c2070616e747269657320286c6f7473206f66207468657365292c2077617264726f62657320286865206861642077686f6c6520726f6f6d73206465766f74656420746f20636c6f74686573292c206b69746368656e732c2064696e696e672d726f6f6d732c20616c6c2077657265206f6e207468652073616d6520666c6f6f722c20616e6420696e64656564206f6e207468652073616d6520706173736167652e20546865206265737420726f6f6d73207765726520616c6c206f6e20746865206c6566742d68616e6420736964652028676f696e6720696e292c20666f72207468657365207765726520746865206f6e6c79206f6e657320746f20686176652077696e646f77732c20646565702d73657420726f756e642077696e646f7773206c6f6f6b696e67206f766572206869732067617264656e2c20616e64206d6561646f7773206265796f6e642c20736c6f70696e6720646f776e20746f207468652072697665722e205468697320686f6262697420776173206120766572792077656c6c2d746f2d646f20686f626269742c20616e6420686973206e616d65207761732042616767696e732e205468652042616767696e7365732068617665206c6976656420696e20746865206e65696768626f7572686f6f64206f66205468652048696c6c20666f722074696d65206f7574206f66206d696e642c20616e642070656f706c6520636f6e73696465726564207468656d2076657279207265737065637461626c652c206e6f74206f6e6c792062656361757365206d6f7374206f66207468656d207765726520726963682c2062757420616c736f20626563617573652074686579206e657665722068616420616e7920616476656e7475726573206f722064696420616e797468696e6720756e65787065637465643a20796f7520636f756c642074656c6c207768617420612042616767696e7320776f756c6420736179206f6e20616e79207175657374696f6e20776974686f75742074686520626f74686572206f662061736b696e672068696d2e205468697320697320612073746f7279206f6620686f7720612042616767696e732068616420616e20616476656e747572652c20616e6420666f756e642068696d73656c6620646f696e6720616e6420736179696e67207468696e677320616c746f67657468657220756e65787065637465642e204865206d61792068617665206c6f737420746865206e65696768626f7572732720726573706563742c20627574206865206761696e6564202d2077656c6c2c20796f752077696c6c207365652077686574686572206865206761696e656420616e797468696e6720696e2074686520656e642e
+match Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats - the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill - The Hill, as all the people for many miles round called it - and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours' respect, but he gained - well, you will see whether he gained anything in the end."
+
+# Test GeneralString
+decode-pair 1b0c68656c6c6f20746865726521
+match Test-String = "hello there!"
+
+decode-pair 1b81f7496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort."
+
+decode-pair 1b820779496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e20497420686164206120706572666563746c7920726f756e6420646f6f72206c696b65206120706f7274686f6c652c207061696e74656420677265656e2c20776974682061207368696e792079656c6c6f77206272617373206b6e6f6220696e20746865206578616374206d6964646c652e2054686520646f6f72206f70656e6564206f6e20746f206120747562652d7368617065642068616c6c206c696b6520612074756e6e656c3a2061207665727920636f6d666f727461626c652074756e6e656c20776974686f757420736d6f6b652c20776974682070616e656c6c65642077616c6c732c20616e6420666c6f6f72732074696c656420616e642063617270657465642c2070726f7669646564207769746820706f6c69736865642063686169727320616e64206c6f747320616e64206c6f7473206f66207065677320666f72206861747320616e6420636f617473202d2074686520686f626269742077617320666f6e64206f662076697369746f72732e205468652074756e6e656c20776f756e64206f6e20616e64206f6e2c20676f696e6720666169726c7920627574206e6f7420717569746520737472616967687420696e746f207468652073696465206f66207468652068696c6c202d205468652048696c6c2c20617320616c6c207468652070656f706c6520666f72206d616e79206d696c657320726f756e642063616c6c6564206974202d20616e64206d616e79206c6974746c6520726f756e6420646f6f7273206f70656e6564206f7574206f662069742c206669727374206f6e206f6e65207369646520616e64207468656e206f6e20616e6f746865722e204e6f20676f696e6720757073746169727320666f722074686520686f626269743a20626564726f6f6d732c2062617468726f6f6d732c2063656c6c6172732c2070616e747269657320286c6f7473206f66207468657365292c2077617264726f62657320286865206861642077686f6c6520726f6f6d73206465766f74656420746f20636c6f74686573292c206b69746368656e732c2064696e696e672d726f6f6d732c20616c6c2077657265206f6e207468652073616d6520666c6f6f722c20616e6420696e64656564206f6e207468652073616d6520706173736167652e20546865206265737420726f6f6d73207765726520616c6c206f6e20746865206c6566742d68616e6420736964652028676f696e6720696e292c20666f72207468657365207765726520746865206f6e6c79206f6e657320746f20686176652077696e646f77732c20646565702d73657420726f756e642077696e646f7773206c6f6f6b696e67206f766572206869732067617264656e2c20616e64206d6561646f7773206265796f6e642c20736c6f70696e6720646f776e20746f207468652072697665722e205468697320686f6262697420776173206120766572792077656c6c2d746f2d646f20686f626269742c20616e6420686973206e616d65207761732042616767696e732e205468652042616767696e7365732068617665206c6976656420696e20746865206e65696768626f7572686f6f64206f66205468652048696c6c20666f722074696d65206f7574206f66206d696e642c20616e642070656f706c6520636f6e73696465726564207468656d2076657279207265737065637461626c652c206e6f74206f6e6c792062656361757365206d6f7374206f66207468656d207765726520726963682c2062757420616c736f20626563617573652074686579206e657665722068616420616e7920616476656e7475726573206f722064696420616e797468696e6720756e65787065637465643a20796f7520636f756c642074656c6c207768617420612042616767696e7320776f756c6420736179206f6e20616e79207175657374696f6e20776974686f75742074686520626f74686572206f662061736b696e672068696d2e205468697320697320612073746f7279206f6620686f7720612042616767696e732068616420616e20616476656e747572652c20616e6420666f756e642068696d73656c6620646f696e6720616e6420736179696e67207468696e677320616c746f67657468657220756e65787065637465642e204865206d61792068617665206c6f737420746865206e65696768626f7572732720726573706563742c20627574206865206761696e6564202d2077656c6c2c20796f752077696c6c207365652077686574686572206865206761696e656420616e797468696e6720696e2074686520656e642e
+match Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats - the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill - The Hill, as all the people for many miles round called it - and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours' respect, but he gained - well, you will see whether he gained anything in the end."
+
+# Test UniversalString
+decode-pair 1c0c68656c6c6f20746865726521
+match Test-String = "hello there!"
+
+decode-pair 1c81f7496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort."
+
+decode-pair 1c820779496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e20497420686164206120706572666563746c7920726f756e6420646f6f72206c696b65206120706f7274686f6c652c207061696e74656420677265656e2c20776974682061207368696e792079656c6c6f77206272617373206b6e6f6220696e20746865206578616374206d6964646c652e2054686520646f6f72206f70656e6564206f6e20746f206120747562652d7368617065642068616c6c206c696b6520612074756e6e656c3a2061207665727920636f6d666f727461626c652074756e6e656c20776974686f757420736d6f6b652c20776974682070616e656c6c65642077616c6c732c20616e6420666c6f6f72732074696c656420616e642063617270657465642c2070726f7669646564207769746820706f6c69736865642063686169727320616e64206c6f747320616e64206c6f7473206f66207065677320666f72206861747320616e6420636f617473202d2074686520686f626269742077617320666f6e64206f662076697369746f72732e205468652074756e6e656c20776f756e64206f6e20616e64206f6e2c20676f696e6720666169726c7920627574206e6f7420717569746520737472616967687420696e746f207468652073696465206f66207468652068696c6c202d205468652048696c6c2c20617320616c6c207468652070656f706c6520666f72206d616e79206d696c657320726f756e642063616c6c6564206974202d20616e64206d616e79206c6974746c6520726f756e6420646f6f7273206f70656e6564206f7574206f662069742c206669727374206f6e206f6e65207369646520616e64207468656e206f6e20616e6f746865722e204e6f20676f696e6720757073746169727320666f722074686520686f626269743a20626564726f6f6d732c2062617468726f6f6d732c2063656c6c6172732c2070616e747269657320286c6f7473206f66207468657365292c2077617264726f62657320286865206861642077686f6c6520726f6f6d73206465766f74656420746f20636c6f74686573292c206b69746368656e732c2064696e696e672d726f6f6d732c20616c6c2077657265206f6e207468652073616d6520666c6f6f722c20616e6420696e64656564206f6e207468652073616d6520706173736167652e20546865206265737420726f6f6d73207765726520616c6c206f6e20746865206c6566742d68616e6420736964652028676f696e6720696e292c20666f72207468657365207765726520746865206f6e6c79206f6e657320746f20686176652077696e646f77732c20646565702d73657420726f756e642077696e646f7773206c6f6f6b696e67206f766572206869732067617264656e2c20616e64206d6561646f7773206265796f6e642c20736c6f70696e6720646f776e20746f207468652072697665722e205468697320686f6262697420776173206120766572792077656c6c2d746f2d646f20686f626269742c20616e6420686973206e616d65207761732042616767696e732e205468652042616767696e7365732068617665206c6976656420696e20746865206e65696768626f7572686f6f64206f66205468652048696c6c20666f722074696d65206f7574206f66206d696e642c20616e642070656f706c6520636f6e73696465726564207468656d2076657279207265737065637461626c652c206e6f74206f6e6c792062656361757365206d6f7374206f66207468656d207765726520726963682c2062757420616c736f20626563617573652074686579206e657665722068616420616e7920616476656e7475726573206f722064696420616e797468696e6720756e65787065637465643a20796f7520636f756c642074656c6c207768617420612042616767696e7320776f756c6420736179206f6e20616e79207175657374696f6e20776974686f75742074686520626f74686572206f662061736b696e672068696d2e205468697320697320612073746f7279206f6620686f7720612042616767696e732068616420616e20616476656e747572652c20616e6420666f756e642068696d73656c6620646f696e6720616e6420736179696e67207468696e677320616c746f67657468657220756e65787065637465642e204865206d61792068617665206c6f737420746865206e65696768626f7572732720726573706563742c20627574206865206761696e6564202d2077656c6c2c20796f752077696c6c207365652077686574686572206865206761696e656420616e797468696e6720696e2074686520656e642e
+match Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats - the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill - The Hill, as all the people for many miles round called it - and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours' respect, but he gained - well, you will see whether he gained anything in the end."
+
+proto-dictionary-root Seq-String
+
+# Test IA5String
+decode-pair 30 04 16 02 68 69
+match Seq-String = { Test-String = "hi" }
+
+decode-pair 30 81 fa 16 81 f7 496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Seq-String = { Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort." }
+
+decode-pair 30 82 07 87 16 82 07 83 496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e20497420686164206120706572666563746c7920726f756e6420646f6f72206c696b65206120706f7274686f6c652c207061696e74656420677265656e2c20776974682061207368696e792079656c6c6f77206272617373206b6e6f6220696e20746865206578616374206d6964646c652e2054686520646f6f72206f70656e6564206f6e20746f206120747562652d7368617065642068616c6c206c696b6520612074756e6e656c3a2061207665727920636f6d666f727461626c652074756e6e656c20776974686f757420736d6f6b652c20776974682070616e656c6c65642077616c6c732c20616e6420666c6f6f72732074696c656420616e642063617270657465642c2070726f7669646564207769746820706f6c69736865642063686169727320616e64206c6f747320616e64206c6f7473206f66207065677320666f72206861747320616e6420636f61747320e280932074686520686f626269742077617320666f6e64206f662076697369746f72732e205468652074756e6e656c20776f756e64206f6e20616e64206f6e2c20676f696e6720666169726c7920627574206e6f7420717569746520737472616967687420696e746f207468652073696465206f66207468652068696c6c20e28093205468652048696c6c2c20617320616c6c207468652070656f706c6520666f72206d616e79206d696c657320726f756e642063616c6c656420697420e2809320616e64206d616e79206c6974746c6520726f756e6420646f6f7273206f70656e6564206f7574206f662069742c206669727374206f6e206f6e65207369646520616e64207468656e206f6e20616e6f746865722e204e6f20676f696e6720757073746169727320666f722074686520686f626269743a20626564726f6f6d732c2062617468726f6f6d732c2063656c6c6172732c2070616e747269657320286c6f7473206f66207468657365292c2077617264726f62657320286865206861642077686f6c6520726f6f6d73206465766f74656420746f20636c6f74686573292c206b69746368656e732c2064696e696e672d726f6f6d732c20616c6c2077657265206f6e207468652073616d6520666c6f6f722c20616e6420696e64656564206f6e207468652073616d6520706173736167652e20546865206265737420726f6f6d73207765726520616c6c206f6e20746865206c6566742d68616e6420736964652028676f696e6720696e292c20666f72207468657365207765726520746865206f6e6c79206f6e657320746f20686176652077696e646f77732c20646565702d73657420726f756e642077696e646f7773206c6f6f6b696e67206f766572206869732067617264656e2c20616e64206d6561646f7773206265796f6e642c20736c6f70696e6720646f776e20746f207468652072697665722e205468697320686f6262697420776173206120766572792077656c6c2d746f2d646f20686f626269742c20616e6420686973206e616d65207761732042616767696e732e205468652042616767696e7365732068617665206c6976656420696e20746865206e65696768626f7572686f6f64206f66205468652048696c6c20666f722074696d65206f7574206f66206d696e642c20616e642070656f706c6520636f6e73696465726564207468656d2076657279207265737065637461626c652c206e6f74206f6e6c792062656361757365206d6f7374206f66207468656d207765726520726963682c2062757420616c736f20626563617573652074686579206e657665722068616420616e7920616476656e7475726573206f722064696420616e797468696e6720756e65787065637465643a20796f7520636f756c642074656c6c207768617420612042616767696e7320776f756c6420736179206f6e20616e79207175657374696f6e20776974686f75742074686520626f74686572206f662061736b696e672068696d2e205468697320697320612073746f7279206f6620686f7720612042616767696e732068616420616e20616476656e747572652c20616e6420666f756e642068696d73656c6620646f696e6720616e6420736179696e67207468696e677320616c746f67657468657220756e65787065637465642e204865206d61792068617665206c6f737420746865206e65696768626f757273e2809920726573706563742c20627574206865206761696e656420e280932077656c6c2c20796f752077696c6c207365652077686574686572206865206761696e656420616e797468696e6720696e2074686520656e642e
+match Seq-String = { Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats â€“ the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill â€“ The Hill, as all the people for many miles round called it â€“ and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours’ respect, but he gained â€“ well, you will see whether he gained anything in the end." }
+
+# Test UTF8String
+decode-pair 30 04 0c 02 68 69
+match Seq-String = { Test-String = "hi" }
+
+decode-pair 30 81 fa 0c 81 f7 496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Seq-String = { Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort." }
+
+decode-pair 30 82 07 87 0c 82 07 83 496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e20497420686164206120706572666563746c7920726f756e6420646f6f72206c696b65206120706f7274686f6c652c207061696e74656420677265656e2c20776974682061207368696e792079656c6c6f77206272617373206b6e6f6220696e20746865206578616374206d6964646c652e2054686520646f6f72206f70656e6564206f6e20746f206120747562652d7368617065642068616c6c206c696b6520612074756e6e656c3a2061207665727920636f6d666f727461626c652074756e6e656c20776974686f757420736d6f6b652c20776974682070616e656c6c65642077616c6c732c20616e6420666c6f6f72732074696c656420616e642063617270657465642c2070726f7669646564207769746820706f6c69736865642063686169727320616e64206c6f747320616e64206c6f7473206f66207065677320666f72206861747320616e6420636f61747320e280932074686520686f626269742077617320666f6e64206f662076697369746f72732e205468652074756e6e656c20776f756e64206f6e20616e64206f6e2c20676f696e6720666169726c7920627574206e6f7420717569746520737472616967687420696e746f207468652073696465206f66207468652068696c6c20e28093205468652048696c6c2c20617320616c6c207468652070656f706c6520666f72206d616e79206d696c657320726f756e642063616c6c656420697420e2809320616e64206d616e79206c6974746c6520726f756e6420646f6f7273206f70656e6564206f7574206f662069742c206669727374206f6e206f6e65207369646520616e64207468656e206f6e20616e6f746865722e204e6f20676f696e6720757073746169727320666f722074686520686f626269743a20626564726f6f6d732c2062617468726f6f6d732c2063656c6c6172732c2070616e747269657320286c6f7473206f66207468657365292c2077617264726f62657320286865206861642077686f6c6520726f6f6d73206465766f74656420746f20636c6f74686573292c206b69746368656e732c2064696e696e672d726f6f6d732c20616c6c2077657265206f6e207468652073616d6520666c6f6f722c20616e6420696e64656564206f6e207468652073616d6520706173736167652e20546865206265737420726f6f6d73207765726520616c6c206f6e20746865206c6566742d68616e6420736964652028676f696e6720696e292c20666f72207468657365207765726520746865206f6e6c79206f6e657320746f20686176652077696e646f77732c20646565702d73657420726f756e642077696e646f7773206c6f6f6b696e67206f766572206869732067617264656e2c20616e64206d6561646f7773206265796f6e642c20736c6f70696e6720646f776e20746f207468652072697665722e205468697320686f6262697420776173206120766572792077656c6c2d746f2d646f20686f626269742c20616e6420686973206e616d65207761732042616767696e732e205468652042616767696e7365732068617665206c6976656420696e20746865206e65696768626f7572686f6f64206f66205468652048696c6c20666f722074696d65206f7574206f66206d696e642c20616e642070656f706c6520636f6e73696465726564207468656d2076657279207265737065637461626c652c206e6f74206f6e6c792062656361757365206d6f7374206f66207468656d207765726520726963682c2062757420616c736f20626563617573652074686579206e657665722068616420616e7920616476656e7475726573206f722064696420616e797468696e6720756e65787065637465643a20796f7520636f756c642074656c6c207768617420612042616767696e7320776f756c6420736179206f6e20616e79207175657374696f6e20776974686f75742074686520626f74686572206f662061736b696e672068696d2e205468697320697320612073746f7279206f6620686f7720612042616767696e732068616420616e20616476656e747572652c20616e6420666f756e642068696d73656c6620646f696e6720616e6420736179696e67207468696e677320616c746f67657468657220756e65787065637465642e204865206d61792068617665206c6f737420746865206e65696768626f757273e2809920726573706563742c20627574206865206761696e656420e280932077656c6c2c20796f752077696c6c207365652077686574686572206865206761696e656420616e797468696e6720696e2074686520656e642e
+match Seq-String = { Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats â€“ the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill â€“ The Hill, as all the people for many miles round called it â€“ and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours’ respect, but he gained â€“ well, you will see whether he gained anything in the end." }
+
+decode-pair 30 06 0c 04 f0 9f 98 8e
+match Seq-String = { Test-String = "😎" }
+
+decode-pair 30 06 0c 04 f0 9f 98
+match Insufficient data for length field (6): Failed decoding header
+
+# Test PrintableString
+decode-pair 30 04 13 02 68 69
+match Seq-String = { Test-String = "hi" }
+
+decode-pair 30 4c 13 4a 4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a30313233343536373839202728292b2c2d2e2f3a3d3f
+match Seq-String = { Test-String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 '()+,-./:=?" }
+
+decode-pair 30 81 fa 13 81 f7 496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Seq-String = { Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort." }
+
+decode-pair 30 82 08 b3 13 82 08 af 496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Seq-String = { Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort." }
+
+decode-pair 30 82 07 7D 13 82 07 79 496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e20497420686164206120706572666563746c7920726f756e6420646f6f72206c696b65206120706f7274686f6c652c207061696e74656420677265656e2c20776974682061207368696e792079656c6c6f77206272617373206b6e6f6220696e20746865206578616374206d6964646c652e2054686520646f6f72206f70656e6564206f6e20746f206120747562652d7368617065642068616c6c206c696b6520612074756e6e656c3a2061207665727920636f6d666f727461626c652074756e6e656c20776974686f757420736d6f6b652c20776974682070616e656c6c65642077616c6c732c20616e6420666c6f6f72732074696c656420616e642063617270657465642c2070726f7669646564207769746820706f6c69736865642063686169727320616e64206c6f747320616e64206c6f7473206f66207065677320666f72206861747320616e6420636f617473202d2074686520686f626269742077617320666f6e64206f662076697369746f72732e205468652074756e6e656c20776f756e64206f6e20616e64206f6e2c20676f696e6720666169726c7920627574206e6f7420717569746520737472616967687420696e746f207468652073696465206f66207468652068696c6c202d205468652048696c6c2c20617320616c6c207468652070656f706c6520666f72206d616e79206d696c657320726f756e642063616c6c6564206974202d20616e64206d616e79206c6974746c6520726f756e6420646f6f7273206f70656e6564206f7574206f662069742c206669727374206f6e206f6e65207369646520616e64207468656e206f6e20616e6f746865722e204e6f20676f696e6720757073746169727320666f722074686520686f626269743a20626564726f6f6d732c2062617468726f6f6d732c2063656c6c6172732c2070616e747269657320286c6f7473206f66207468657365292c2077617264726f62657320286865206861642077686f6c6520726f6f6d73206465766f74656420746f20636c6f74686573292c206b69746368656e732c2064696e696e672d726f6f6d732c20616c6c2077657265206f6e207468652073616d6520666c6f6f722c20616e6420696e64656564206f6e207468652073616d6520706173736167652e20546865206265737420726f6f6d73207765726520616c6c206f6e20746865206c6566742d68616e6420736964652028676f696e6720696e292c20666f72207468657365207765726520746865206f6e6c79206f6e657320746f20686176652077696e646f77732c20646565702d73657420726f756e642077696e646f7773206c6f6f6b696e67206f766572206869732067617264656e2c20616e64206d6561646f7773206265796f6e642c20736c6f70696e6720646f776e20746f207468652072697665722e205468697320686f6262697420776173206120766572792077656c6c2d746f2d646f20686f626269742c20616e6420686973206e616d65207761732042616767696e732e205468652042616767696e7365732068617665206c6976656420696e20746865206e65696768626f7572686f6f64206f66205468652048696c6c20666f722074696d65206f7574206f66206d696e642c20616e642070656f706c6520636f6e73696465726564207468656d2076657279207265737065637461626c652c206e6f74206f6e6c792062656361757365206d6f7374206f66207468656d207765726520726963682c2062757420616c736f20626563617573652074686579206e657665722068616420616e7920616476656e7475726573206f722064696420616e797468696e6720756e65787065637465643a20796f7520636f756c642074656c6c207768617420612042616767696e7320776f756c6420736179206f6e20616e79207175657374696f6e20776974686f75742074686520626f74686572206f662061736b696e672068696d2e205468697320697320612073746f7279206f6620686f7720612042616767696e732068616420616e20616476656e747572652c20616e6420666f756e642068696d73656c6620646f696e6720616e6420736179696e67207468696e677320616c746f67657468657220756e65787065637465642e204865206d61792068617665206c6f737420746865206e65696768626f7572732720726573706563742c20627574206865206761696e6564202d2077656c6c2c20796f752077696c6c207365652077686574686572206865206761696e656420616e797468696e6720696e2074686520656e642e
+match Seq-String = { Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats - the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill - The Hill, as all the people for many miles round called it - and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours' respect, but he gained - well, you will see whether he gained anything in the end." }
+
+decode-pair 30 03 13 01 21
+match Invalid character in a string (33)
+
+# Test T61String
+decode-pair 30 04 14 02 68 69
+match Seq-String = { Test-String = "hi" }
+
+decode-pair 30 4c 14 4a 4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a30313233343536373839202728292b2c2d2e2f3a3d3f
+match Seq-String = { Test-String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 '()+,-./:=?" }
+
+decode-pair 30 81 fa 14 81 f7 496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Seq-String = { Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort." }
+
+decode-pair 30 82 08 b3 14 82 08 af 496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Seq-String = { Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort." }
+
+decode-pair 30 82 07 7D 14 82 07 79 496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e20497420686164206120706572666563746c7920726f756e6420646f6f72206c696b65206120706f7274686f6c652c207061696e74656420677265656e2c20776974682061207368696e792079656c6c6f77206272617373206b6e6f6220696e20746865206578616374206d6964646c652e2054686520646f6f72206f70656e6564206f6e20746f206120747562652d7368617065642068616c6c206c696b6520612074756e6e656c3a2061207665727920636f6d666f727461626c652074756e6e656c20776974686f757420736d6f6b652c20776974682070616e656c6c65642077616c6c732c20616e6420666c6f6f72732074696c656420616e642063617270657465642c2070726f7669646564207769746820706f6c69736865642063686169727320616e64206c6f747320616e64206c6f7473206f66207065677320666f72206861747320616e6420636f617473202d2074686520686f626269742077617320666f6e64206f662076697369746f72732e205468652074756e6e656c20776f756e64206f6e20616e64206f6e2c20676f696e6720666169726c7920627574206e6f7420717569746520737472616967687420696e746f207468652073696465206f66207468652068696c6c202d205468652048696c6c2c20617320616c6c207468652070656f706c6520666f72206d616e79206d696c657320726f756e642063616c6c6564206974202d20616e64206d616e79206c6974746c6520726f756e6420646f6f7273206f70656e6564206f7574206f662069742c206669727374206f6e206f6e65207369646520616e64207468656e206f6e20616e6f746865722e204e6f20676f696e6720757073746169727320666f722074686520686f626269743a20626564726f6f6d732c2062617468726f6f6d732c2063656c6c6172732c2070616e747269657320286c6f7473206f66207468657365292c2077617264726f62657320286865206861642077686f6c6520726f6f6d73206465766f74656420746f20636c6f74686573292c206b69746368656e732c2064696e696e672d726f6f6d732c20616c6c2077657265206f6e207468652073616d6520666c6f6f722c20616e6420696e64656564206f6e207468652073616d6520706173736167652e20546865206265737420726f6f6d73207765726520616c6c206f6e20746865206c6566742d68616e6420736964652028676f696e6720696e292c20666f72207468657365207765726520746865206f6e6c79206f6e657320746f20686176652077696e646f77732c20646565702d73657420726f756e642077696e646f7773206c6f6f6b696e67206f766572206869732067617264656e2c20616e64206d6561646f7773206265796f6e642c20736c6f70696e6720646f776e20746f207468652072697665722e205468697320686f6262697420776173206120766572792077656c6c2d746f2d646f20686f626269742c20616e6420686973206e616d65207761732042616767696e732e205468652042616767696e7365732068617665206c6976656420696e20746865206e65696768626f7572686f6f64206f66205468652048696c6c20666f722074696d65206f7574206f66206d696e642c20616e642070656f706c6520636f6e73696465726564207468656d2076657279207265737065637461626c652c206e6f74206f6e6c792062656361757365206d6f7374206f66207468656d207765726520726963682c2062757420616c736f20626563617573652074686579206e657665722068616420616e7920616476656e7475726573206f722064696420616e797468696e6720756e65787065637465643a20796f7520636f756c642074656c6c207768617420612042616767696e7320776f756c6420736179206f6e20616e79207175657374696f6e20776974686f75742074686520626f74686572206f662061736b696e672068696d2e205468697320697320612073746f7279206f6620686f7720612042616767696e732068616420616e20616476656e747572652c20616e6420666f756e642068696d73656c6620646f696e6720616e6420736179696e67207468696e677320616c746f67657468657220756e65787065637465642e204865206d61792068617665206c6f737420746865206e65696768626f7572732720726573706563742c20627574206865206761696e6564202d2077656c6c2c20796f752077696c6c207365652077686574686572206865206761696e656420616e797468696e6720696e2074686520656e642e
+match Seq-String = { Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats - the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill - The Hill, as all the people for many miles round called it - and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours' respect, but he gained - well, you will see whether he gained anything in the end." }
+
+# Test VisibleString
+decode-pair 30 04 1A 02 68 69
+match Seq-String = { Test-String = "hi" }
+
+decode-pair 30 4c 1A 4a 4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a30313233343536373839202728292b2c2d2e2f3a3d3f
+match Seq-String = { Test-String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 '()+,-./:=?" }
+
+decode-pair 30 81 fa 1A 81 f7 496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Seq-String = { Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort." }
+
+decode-pair 30 82 08 b3 1A 82 08 af 496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Seq-String = { Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort." }
+
+decode-pair 30 82 07 7D 1A 82 07 79 496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e20497420686164206120706572666563746c7920726f756e6420646f6f72206c696b65206120706f7274686f6c652c207061696e74656420677265656e2c20776974682061207368696e792079656c6c6f77206272617373206b6e6f6220696e20746865206578616374206d6964646c652e2054686520646f6f72206f70656e6564206f6e20746f206120747562652d7368617065642068616c6c206c696b6520612074756e6e656c3a2061207665727920636f6d666f727461626c652074756e6e656c20776974686f757420736d6f6b652c20776974682070616e656c6c65642077616c6c732c20616e6420666c6f6f72732074696c656420616e642063617270657465642c2070726f7669646564207769746820706f6c69736865642063686169727320616e64206c6f747320616e64206c6f7473206f66207065677320666f72206861747320616e6420636f617473202d2074686520686f626269742077617320666f6e64206f662076697369746f72732e205468652074756e6e656c20776f756e64206f6e20616e64206f6e2c20676f696e6720666169726c7920627574206e6f7420717569746520737472616967687420696e746f207468652073696465206f66207468652068696c6c202d205468652048696c6c2c20617320616c6c207468652070656f706c6520666f72206d616e79206d696c657320726f756e642063616c6c6564206974202d20616e64206d616e79206c6974746c6520726f756e6420646f6f7273206f70656e6564206f7574206f662069742c206669727374206f6e206f6e65207369646520616e64207468656e206f6e20616e6f746865722e204e6f20676f696e6720757073746169727320666f722074686520686f626269743a20626564726f6f6d732c2062617468726f6f6d732c2063656c6c6172732c2070616e747269657320286c6f7473206f66207468657365292c2077617264726f62657320286865206861642077686f6c6520726f6f6d73206465766f74656420746f20636c6f74686573292c206b69746368656e732c2064696e696e672d726f6f6d732c20616c6c2077657265206f6e207468652073616d6520666c6f6f722c20616e6420696e64656564206f6e207468652073616d6520706173736167652e20546865206265737420726f6f6d73207765726520616c6c206f6e20746865206c6566742d68616e6420736964652028676f696e6720696e292c20666f72207468657365207765726520746865206f6e6c79206f6e657320746f20686176652077696e646f77732c20646565702d73657420726f756e642077696e646f7773206c6f6f6b696e67206f766572206869732067617264656e2c20616e64206d6561646f7773206265796f6e642c20736c6f70696e6720646f776e20746f207468652072697665722e205468697320686f6262697420776173206120766572792077656c6c2d746f2d646f20686f626269742c20616e6420686973206e616d65207761732042616767696e732e205468652042616767696e7365732068617665206c6976656420696e20746865206e65696768626f7572686f6f64206f66205468652048696c6c20666f722074696d65206f7574206f66206d696e642c20616e642070656f706c6520636f6e73696465726564207468656d2076657279207265737065637461626c652c206e6f74206f6e6c792062656361757365206d6f7374206f66207468656d207765726520726963682c2062757420616c736f20626563617573652074686579206e657665722068616420616e7920616476656e7475726573206f722064696420616e797468696e6720756e65787065637465643a20796f7520636f756c642074656c6c207768617420612042616767696e7320776f756c6420736179206f6e20616e79207175657374696f6e20776974686f75742074686520626f74686572206f662061736b696e672068696d2e205468697320697320612073746f7279206f6620686f7720612042616767696e732068616420616e20616476656e747572652c20616e6420666f756e642068696d73656c6620646f696e6720616e6420736179696e67207468696e677320616c746f67657468657220756e65787065637465642e204865206d61792068617665206c6f737420746865206e65696768626f7572732720726573706563742c20627574206865206761696e6564202d2077656c6c2c20796f752077696c6c207365652077686574686572206865206761696e656420616e797468696e6720696e2074686520656e642e
+match Seq-String = { Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats - the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill - The Hill, as all the people for many miles round called it - and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours' respect, but he gained - well, you will see whether he gained anything in the end." }
+
+# Test GeneralString
+decode-pair 30 04 1B 02 68 69
+match Seq-String = { Test-String = "hi" }
+
+decode-pair 30 4c 1B 4a 4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a30313233343536373839202728292b2c2d2e2f3a3d3f
+match Seq-String = { Test-String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 '()+,-./:=?" }
+
+decode-pair 30 81 fa 1B 81 f7 496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Seq-String = { Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort." }
+
+decode-pair 30 82 08 b3 1B 82 08 af 496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Seq-String = { Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort." }
+
+decode-pair 30 82 07 7D 1B 82 07 79 496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e20497420686164206120706572666563746c7920726f756e6420646f6f72206c696b65206120706f7274686f6c652c207061696e74656420677265656e2c20776974682061207368696e792079656c6c6f77206272617373206b6e6f6220696e20746865206578616374206d6964646c652e2054686520646f6f72206f70656e6564206f6e20746f206120747562652d7368617065642068616c6c206c696b6520612074756e6e656c3a2061207665727920636f6d666f727461626c652074756e6e656c20776974686f757420736d6f6b652c20776974682070616e656c6c65642077616c6c732c20616e6420666c6f6f72732074696c656420616e642063617270657465642c2070726f7669646564207769746820706f6c69736865642063686169727320616e64206c6f747320616e64206c6f7473206f66207065677320666f72206861747320616e6420636f617473202d2074686520686f626269742077617320666f6e64206f662076697369746f72732e205468652074756e6e656c20776f756e64206f6e20616e64206f6e2c20676f696e6720666169726c7920627574206e6f7420717569746520737472616967687420696e746f207468652073696465206f66207468652068696c6c202d205468652048696c6c2c20617320616c6c207468652070656f706c6520666f72206d616e79206d696c657320726f756e642063616c6c6564206974202d20616e64206d616e79206c6974746c6520726f756e6420646f6f7273206f70656e6564206f7574206f662069742c206669727374206f6e206f6e65207369646520616e64207468656e206f6e20616e6f746865722e204e6f20676f696e6720757073746169727320666f722074686520686f626269743a20626564726f6f6d732c2062617468726f6f6d732c2063656c6c6172732c2070616e747269657320286c6f7473206f66207468657365292c2077617264726f62657320286865206861642077686f6c6520726f6f6d73206465766f74656420746f20636c6f74686573292c206b69746368656e732c2064696e696e672d726f6f6d732c20616c6c2077657265206f6e207468652073616d6520666c6f6f722c20616e6420696e64656564206f6e207468652073616d6520706173736167652e20546865206265737420726f6f6d73207765726520616c6c206f6e20746865206c6566742d68616e6420736964652028676f696e6720696e292c20666f72207468657365207765726520746865206f6e6c79206f6e657320746f20686176652077696e646f77732c20646565702d73657420726f756e642077696e646f7773206c6f6f6b696e67206f766572206869732067617264656e2c20616e64206d6561646f7773206265796f6e642c20736c6f70696e6720646f776e20746f207468652072697665722e205468697320686f6262697420776173206120766572792077656c6c2d746f2d646f20686f626269742c20616e6420686973206e616d65207761732042616767696e732e205468652042616767696e7365732068617665206c6976656420696e20746865206e65696768626f7572686f6f64206f66205468652048696c6c20666f722074696d65206f7574206f66206d696e642c20616e642070656f706c6520636f6e73696465726564207468656d2076657279207265737065637461626c652c206e6f74206f6e6c792062656361757365206d6f7374206f66207468656d207765726520726963682c2062757420616c736f20626563617573652074686579206e657665722068616420616e7920616476656e7475726573206f722064696420616e797468696e6720756e65787065637465643a20796f7520636f756c642074656c6c207768617420612042616767696e7320776f756c6420736179206f6e20616e79207175657374696f6e20776974686f75742074686520626f74686572206f662061736b696e672068696d2e205468697320697320612073746f7279206f6620686f7720612042616767696e732068616420616e20616476656e747572652c20616e6420666f756e642068696d73656c6620646f696e6720616e6420736179696e67207468696e677320616c746f67657468657220756e65787065637465642e204865206d61792068617665206c6f737420746865206e65696768626f7572732720726573706563742c20627574206865206761696e6564202d2077656c6c2c20796f752077696c6c207365652077686574686572206865206761696e656420616e797468696e6720696e2074686520656e642e
+match Seq-String = { Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats - the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill - The Hill, as all the people for many miles round called it - and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours' respect, but he gained - well, you will see whether he gained anything in the end." }
+
+# Test UniversalString
+decode-pair 30 04 1c 02 68 69
+match Seq-String = { Test-String = "hi" }
+
+decode-pair 30 4c 1c 4a 4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a30313233343536373839202728292b2c2d2e2f3a3d3f
+match Seq-String = { Test-String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 '()+,-./:=?" }
+
+decode-pair 30 81 fa 1c 81 f7 496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Seq-String = { Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort." }
+
+decode-pair 30 82 08 b3 1c 82 08 af 496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e
+match Seq-String = { Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort.In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort." }
+
+decode-pair 30 82 07 7D 1c 82 07 79 496e206120686f6c6520696e207468652067726f756e64207468657265206c69766564206120686f626269742e204e6f742061206e617374792c2064697274792c2077657420686f6c652c2066696c6c656420776974682074686520656e6473206f6620776f726d7320616e6420616e206f6f7a7920736d656c6c2c206e6f72207965742061206472792c20626172652c2073616e647920686f6c652077697468206e6f7468696e6720696e20697420746f2073697420646f776e206f6e206f7220746f206561743a20697420776173206120686f626269742d686f6c652c20616e642074686174206d65616e7320636f6d666f72742e20497420686164206120706572666563746c7920726f756e6420646f6f72206c696b65206120706f7274686f6c652c207061696e74656420677265656e2c20776974682061207368696e792079656c6c6f77206272617373206b6e6f6220696e20746865206578616374206d6964646c652e2054686520646f6f72206f70656e6564206f6e20746f206120747562652d7368617065642068616c6c206c696b6520612074756e6e656c3a2061207665727920636f6d666f727461626c652074756e6e656c20776974686f757420736d6f6b652c20776974682070616e656c6c65642077616c6c732c20616e6420666c6f6f72732074696c656420616e642063617270657465642c2070726f7669646564207769746820706f6c69736865642063686169727320616e64206c6f747320616e64206c6f7473206f66207065677320666f72206861747320616e6420636f617473202d2074686520686f626269742077617320666f6e64206f662076697369746f72732e205468652074756e6e656c20776f756e64206f6e20616e64206f6e2c20676f696e6720666169726c7920627574206e6f7420717569746520737472616967687420696e746f207468652073696465206f66207468652068696c6c202d205468652048696c6c2c20617320616c6c207468652070656f706c6520666f72206d616e79206d696c657320726f756e642063616c6c6564206974202d20616e64206d616e79206c6974746c6520726f756e6420646f6f7273206f70656e6564206f7574206f662069742c206669727374206f6e206f6e65207369646520616e64207468656e206f6e20616e6f746865722e204e6f20676f696e6720757073746169727320666f722074686520686f626269743a20626564726f6f6d732c2062617468726f6f6d732c2063656c6c6172732c2070616e747269657320286c6f7473206f66207468657365292c2077617264726f62657320286865206861642077686f6c6520726f6f6d73206465766f74656420746f20636c6f74686573292c206b69746368656e732c2064696e696e672d726f6f6d732c20616c6c2077657265206f6e207468652073616d6520666c6f6f722c20616e6420696e64656564206f6e207468652073616d6520706173736167652e20546865206265737420726f6f6d73207765726520616c6c206f6e20746865206c6566742d68616e6420736964652028676f696e6720696e292c20666f72207468657365207765726520746865206f6e6c79206f6e657320746f20686176652077696e646f77732c20646565702d73657420726f756e642077696e646f7773206c6f6f6b696e67206f766572206869732067617264656e2c20616e64206d6561646f7773206265796f6e642c20736c6f70696e6720646f776e20746f207468652072697665722e205468697320686f6262697420776173206120766572792077656c6c2d746f2d646f20686f626269742c20616e6420686973206e616d65207761732042616767696e732e205468652042616767696e7365732068617665206c6976656420696e20746865206e65696768626f7572686f6f64206f66205468652048696c6c20666f722074696d65206f7574206f66206d696e642c20616e642070656f706c6520636f6e73696465726564207468656d2076657279207265737065637461626c652c206e6f74206f6e6c792062656361757365206d6f7374206f66207468656d207765726520726963682c2062757420616c736f20626563617573652074686579206e657665722068616420616e7920616476656e7475726573206f722064696420616e797468696e6720756e65787065637465643a20796f7520636f756c642074656c6c207768617420612042616767696e7320776f756c6420736179206f6e20616e79207175657374696f6e20776974686f75742074686520626f74686572206f662061736b696e672068696d2e205468697320697320612073746f7279206f6620686f7720612042616767696e732068616420616e20616476656e747572652c20616e6420666f756e642068696d73656c6620646f696e6720616e6420736179696e67207468696e677320616c746f67657468657220756e65787065637465642e204865206d61792068617665206c6f737420746865206e65696768626f7572732720726573706563742c20627574206865206761696e6564202d2077656c6c2c20796f752077696c6c207365652077686574686572206865206761696e656420616e797468696e6720696e2074686520656e642e
+match Seq-String = { Test-String = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats - the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill - The Hill, as all the people for many miles round called it - and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours' respect, but he gained - well, you will see whether he gained anything in the end." }
+
+proto-dictionary-root Test-Date
+
+decode-pair 17 0D 31 39 31 32 31 36 30 33 30 32 31 30 5A
+match Test-Date = "2019-12-16T03:02:10Z"
+
+# Test GeneralizedTime
+decode-pair 180f32303139313231363033303231305a
+match Test-Date = "2019-12-16T03:02:10Z"
+
+decode-pair 18 13 32 30 31 35313233313233353935392e3132335a
+match Test-Date = "2015-12-31T23:59:59Z"
+
+decode-pair 181132303139313231363033303231302e305a
+match Test-Date = "2019-12-16T03:02:10Z"
+
+decode-pair 181132303139313231363033303231302e315a
+match Test-Date = "2019-12-16T03:02:10Z"
+
+decode-pair 181232303139313231363033303231302e30315a
+match Test-Date = "2019-12-16T03:02:10Z"
+
+decode-pair 181432303139313231363033303231302e303030315a
+match Test-Date = "2019-12-16T03:02:10Z"
+
+decode-pair 181632303139313231363033303231302e3030303030315a
+match Test-Date = "2019-12-16T03:02:10Z"
+
+decode-pair 18 13 32 303139313231363033303231302e30303031
+match Test-Date = "2019-12-16T03:02:10Z"
+
+decode-pair 18 0D 31 39 31 32 31 36 30 33 30 32 31 30 5A
+match Insufficient data for generalized time or incorrect length
+
+decode-pair 18 14 32 30 31 39 31 32 31 36 30 33 00 32 31 30 2e 30 30 30 31 5a
+match Generalized time contains null byte
+
+decode-pair 18 14 32 30 31 39 31 32 31 36 30 33 30 32 31 30 2e 30 30 00 31 5a
+match Generalized time contains null byte in subseconds
+
+decode-pair 18 10 32 30 31 39 31 32 31 36 30 33 30 32 31 30 2e 5a
+match Insufficient data for subseconds
+
+proto-dictionary-root Seq-Date
+
+decode-pair 30 0F 17 0D 31 39 31 32 31 36 30 33 30 32 31 30 5A
+match Seq-Date = { Test-Date = "2019-12-16T03:02:10Z" }
+
+# Test GeneralizedTime
+decode-pair 30 11 180f32303139313231363033303231305a
+match Seq-Date = { Test-Date = "2019-12-16T03:02:10Z" }
+
+# Test Set
+proto-dictionary-root Set-Bool-Integer
+
+decode-pair 3106010100020109
+match Set-Bool-Integer = { Test-Bool = no, Test-Integer = 9 }
+
+decode-pair 3106020109010100
+match Expected parent type 'int64', got attribute Test-Bool of type bool
+
+# Test sub_type
+proto der
+proto-dictionary der
+proto-dictionary-root Test-String-UTF8
+
+decode-pair 0c 04 f0 9f 98 8e
+match Test-String-UTF8 = "😎"
+
+# Test Context-Specific
+proto-dictionary-root Test-Context-Specific
+
+decode-pair 80 01 00
+match Test-Context-Specific = no
+
+# Test-Encode
+#proto der
+#proto-dictionary pkcs10
+#fuzzer-out der
+
+proto-dictionary-root Test-Boolean
+
+decode-pair 01 01 FF
+match Test-Boolean = yes
+
+# proto der
+proto-dictionary der
+# proto-dictionary-root Test-Boolean
+
+encode-pair Test-Boolean = yes
+match 01 01 ff
+
+encode-pair Test-Boolean = no
+match 01 01 00
+
+encode-pair Test-Integer = 1
+match 02 01 01
+
+encode-pair Test-Integer = 549755813887
+match 02 05 7f ff ff ff ff
+
+encode-pair Test-Integer = 9223372036854775807
+match 02 08 7f ff ff ff ff ff ff ff
+
+# Test Bitstring
+
+encode-pair Test-Bitstring = 0x040a3b5f291cd0
+match 03 07 04 0a 3b 5f 29 1c d0
+
+encode-pair Bitstring-Struct = { foo = 1 }
+match 03 02 00 01
+
+encode-pair Bitstring-Struct = { foo = 0 }
+match 03 02 00 00
+
+encode-pair Bitstring-Struct = { foo = 251, bar = 15, foo-bar = 11 }
+match 03 03 00 fb fb
+
+encode-pair Bitstring-Struct = { foo = 255, bar = 15, foo-bar = 15 }
+match 03 03 00 ff ff
+
+encode-pair Octetstring = 0x00
+match 04 01 00
+
+encode-pair Octetstring = 0xff
+match 04 01 ff
+
+encode-pair Octetstring = 0xffffffffffffffff
+match 04 08 ff ff ff ff ff ff ff ff
+
+encode-pair Test-NULL = 0
+match 05 00
+
+encode-pair Test-NULL = 1
+match 05 00
+
+encode-pair Test-NULL = 1234
+match 05 00
+
+# Test Enumerated Encoding
+encode-pair Test-Enumerated = 1234
+match 0a 02 04 d2
+
+encode-pair Test-Enumerated = A
+match Failed parsing string as type 'int64'
+
+# Test UTC Time
+encode-pair Test-UTC = "2019-12-16T03:02:10Z"
+match 17 0d 31 39 31 32 31 36 30 33 30 32 31 30 5a
+
+# Test GeneralizedTime
+encode-pair Test-Generalized-Time = "2019-12-16T03:02:10Z"
+match 18 0f 32 30 31 39 31 32 31 36 30 33 30 32 31 30 5a
+
+encode-pair Test-Generalized-Time = "2019-12-16T03:02:10.0000Z"
+match 18 0f 32 30 31 39 31 32 31 36 30 33 30 32 31 30 5a
+
+encode-pair Test-Generalized-Time = "2019-12-16T03:02:10.0100Z"
+match 18 12 32 30 31 39 31 32 31 36 30 33 30 32 31 30 2e 30 31 5a
+
+encode-pair Test-Generalized-Time = "2015-12-31T23:59:59.1230Z"
+match 18 13 32 30 31 35 31 32 33 31 32 33 35 39 35 39 2e 31 32 33 5a
+
+encode-pair Test-String = "foo"
+match 0c 03 66 6f 6f
+
+# Test UTF8 Encoding
+
+encode-pair Test-String-UTF8 = "In a hole in the ground there lived a hobbit."
+match 0c 2d 49 6e 20 61 20 68 6f 6c 65 20 69 6e 20 74 68 65 20 67 72 6f 75 6e 64 20 74 68 65 72 65 20 6c 69 76 65 64 20 61 20 68 6f 62 62 69 74 2e
+
+# Test PrintableString Encoding
+
+encode-pair Test-String-Printable = "In a hole in the ground there lived a hobbit."
+match 13 2d 49 6e 20 61 20 68 6f 6c 65 20 69 6e 20 74 68 65 20 67 72 6f 75 6e 64 20 74 68 65 72 65 20 6c 69 76 65 64 20 61 20 68 6f 62 62 69 74 2e
+
+encode-pair Test-String-Printable = "Bad character !"
+match 13 0f 42 61 64 20 63 68 61 72 61 63 74 65 72 20 21
+
+# Test T61String Encoding
+
+encode-pair Test-String-T61 = "In a hole in the ground there lived a hobbit."
+match 14 2d 49 6e 20 61 20 68 6f 6c 65 20 69 6e 20 74 68 65 20 67 72 6f 75 6e 64 20 74 68 65 72 65 20 6c 69 76 65 64 20 61 20 68 6f 62 62 69 74 2e
+
+encode-pair Test-String-T61 = "Bad character {}"
+match 14 10 42 61 64 20 63 68 61 72 61 63 74 65 72 20 7b 7d
+
+# Test IA5String Encoding
+
+encode-pair Test-String-IA5 = "In a hole in the ground there lived a hobbit."
+match 16 2d 49 6e 20 61 20 68 6f 6c 65 20 69 6e 20 74 68 65 20 67 72 6f 75 6e 64 20 74 68 65 72 65 20 6c 69 76 65 64 20 61 20 68 6f 62 62 69 74 2e
+
+# Test VisibleString Encoding
+encode-pair Test-String-Visible = "In a hole in the ground there lived a hobbit."
+match 1a 2d 49 6e 20 61 20 68 6f 6c 65 20 69 6e 20 74 68 65 20 67 72 6f 75 6e 64 20 74 68 65 72 65 20 6c 69 76 65 64 20 61 20 68 6f 62 62 69 74 2e
+
+# Test GeneralString Encoding
+encode-pair Test-String-General = "In a hole in the ground there lived a hobbit."
+match 1b 2d 49 6e 20 61 20 68 6f 6c 65 20 69 6e 20 74 68 65 20 67 72 6f 75 6e 64 20 74 68 65 72 65 20 6c 69 76 65 64 20 61 20 68 6f 62 62 69 74 2e
+
+# Test UniversalString Encoding
+encode-pair Test-String-Universal = "In a hole in the ground there lived a hobbit."
+match 1c 2d 49 6e 20 61 20 68 6f 6c 65 20 69 6e 20 74 68 65 20 67 72 6f 75 6e 64 20 74 68 65 72 65 20 6c 69 76 65 64 20 61 20 68 6f 62 62 69 74 2e
+
+max-buffer-size 2048
+
+# Test UTF8 Encoding
+
+encode-pair Test-String-UTF8 = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats â€“ the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill â€“ The Hill, as all the people for many miles round called it â€“ and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours’ respect, but he gained â€“ well, you will see whether he gained anything in the end."
+match 0c 82 07 83 49 6e 20 61 20 68 6f 6c 65 20 69 6e 20 74 68 65 20 67 72 6f 75 6e 64 20 74 68 65 72 65 20 6c 69 76 65 64 20 61 20 68 6f 62 62 69 74 2e 20 4e 6f 74 20 61 20 6e 61 73 74 79 2c 20 64 69 72 74 79 2c 20 77 65 74 20 68 6f 6c 65 2c 20 66 69 6c 6c 65 64 20 77 69 74 68 20 74 68 65 20 65 6e 64 73 20 6f 66 20 77 6f 72 6d 73 20 61 6e 64 20 61 6e 20 6f 6f 7a 79 20 73 6d 65 6c 6c 2c 20 6e 6f 72 20 79 65 74 20 61 20 64 72 79 2c 20 62 61 72 65 2c 20 73 61 6e 64 79 20 68 6f 6c 65 20 77 69 74 68 20 6e 6f 74 68 69 6e 67 20 69 6e 20 69 74 20 74 6f 20 73 69 74 20 64 6f 77 6e 20 6f 6e 20 6f 72 20 74 6f 20 65 61 74 3a 20 69 74 20 77 61 73 20 61 20 68 6f 62 62 69 74 2d 68 6f 6c 65 2c 20 61 6e 64 20 74 68 61 74 20 6d 65 61 6e 73 20 63 6f 6d 66 6f 72 74 2e 20 49 74 20 68 61 64 20 61 20 70 65 72 66 65 63 74 6c 79 20 72 6f 75 6e 64 20 64 6f 6f 72 20 6c 69 6b 65 20 61 20 70 6f 72 74 68 6f 6c 65 2c 20 70 61 69 6e 74 65 64 20 67 72 65 65 6e 2c 20 77 69 74 68 20 61 20 73 68 69 6e 79 20 79 65 6c 6c 6f 77 20 62 72 61 73 73 20 6b 6e 6f 62 20 69 6e 20 74 68 65 20 65 78 61 63 74 20 6d 69 64 64 6c 65 2e 20 54 68 65 20 64 6f 6f 72 20 6f 70 65 6e 65 64 20 6f 6e 20 74 6f 20 61 20 74 75 62 65 2d 73 68 61 70 65 64 20 68 61 6c 6c 20 6c 69 6b 65 20 61 20 74 75 6e 6e 65 6c 3a 20 61 20 76 65 72 79 20 63 6f 6d 66 6f 72 74 61 62 6c 65 20 74 75 6e 6e 65 6c 20 77 69 74 68 6f 75 74 20 73 6d 6f 6b 65 2c 20 77 69 74 68 20 70 61 6e 65 6c 6c 65 64 20 77 61 6c 6c 73 2c 20 61 6e 64 20 66 6c 6f 6f 72 73 20 74 69 6c 65 64 20 61 6e 64 20 63 61 72 70 65 74 65 64 2c 20 70 72 6f 76 69 64 65 64 20 77 69 74 68 20 70 6f 6c 69 73 68 65 64 20 63 68 61 69 72 73 20 61 6e 64 20 6c 6f 74 73 20 61 6e 64 20 6c 6f 74 73 20 6f 66 20 70 65 67 73 20 66 6f 72 20 68 61 74 73 20 61 6e 64 20 63 6f 61 74 73 20 e2 80 93 20 74 68 65 20 68 6f 62 62 69 74 20 77 61 73 20 66 6f 6e 64 20 6f 66 20 76 69 73 69 74 6f 72 73 2e 20 54 68 65 20 74 75 6e 6e 65 6c 20 77 6f 75 6e 64 20 6f 6e 20 61 6e 64 20 6f 6e 2c 20 67 6f 69 6e 67 20 66 61 69 72 6c 79 20 62 75 74 20 6e 6f 74 20 71 75 69 74 65 20 73 74 72 61 69 67 68 74 20 69 6e 74 6f 20 74 68 65 20 73 69 64 65 20 6f 66 20 74 68 65 20 68 69 6c 6c 20 e2 80 93 20 54 68 65 20 48 69 6c 6c 2c 20 61 73 20 61 6c 6c 20 74 68 65 20 70 65 6f 70 6c 65 20 66 6f 72 20 6d 61 6e 79 20 6d 69 6c 65 73 20 72 6f 75 6e 64 20 63 61 6c 6c 65 64 20 69 74 20 e2 80 93 20 61 6e 64 20 6d 61 6e 79 20 6c 69 74 74 6c 65 20 72 6f 75 6e 64 20 64 6f 6f 72 73 20 6f 70 65 6e 65 64 20 6f 75 74 20 6f 66 20 69 74 2c 20 66 69 72 73 74 20 6f 6e 20 6f 6e 65 20 73 69 64 65 20 61 6e 64 20 74 68 65 6e 20 6f 6e 20 61 6e 6f 74 68 65 72 2e 20 4e 6f 20 67 6f 69 6e 67 20 75 70 73 74 61 69 72 73 20 66 6f 72 20 74 68 65 20 68 6f 62 62 69 74 3a 20 62 65 64 72 6f 6f 6d 73 2c 20 62 61 74 68 72 6f 6f 6d 73 2c 20 63 65 6c 6c 61 72 73 2c 20 70 61 6e 74 72 69 65 73 20 28 6c 6f 74 73 20 6f 66 20 74 68 65 73 65 29 2c 20 77 61 72 64 72 6f 62 65 73 20 28 68 65 20 68 61 64 20 77 68 6f 6c 65 20 72 6f 6f 6d 73 20 64 65 76 6f 74 65 64 20 74 6f 20 63 6c 6f 74 68 65 73 29 2c 20 6b 69 74 63 68 65 6e 73 2c 20 64 69 6e 69 6e 67 2d 72 6f 6f 6d 73 2c 20 61 6c 6c 20 77 65 72 65 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 66 6c 6f 6f 72 2c 20 61 6e 64 20 69 6e 64 65 65 64 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 70 61 73 73 61 67 65 2e 20 54 68 65 20 62 65 73 74 20 72 6f 6f 6d 73 20 77 65 72 65 20 61 6c 6c 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 28 67 6f 69 6e 67 20 69 6e 29 2c 20 66 6f 72 20 74 68 65 73 65 20 77 65 72 65 20 74 68 65 20 6f 6e 6c 79 20 6f 6e 65 73 20 74 6f 20 68 61 76 65 20 77 69 6e 64 6f 77 73 2c 20 64 65 65 70 2d 73 65 74 20 72 6f 75 6e 64 20 77 69 6e 64 6f 77 73 20 6c 6f 6f 6b 69 6e 67 20 6f 76 65 72 20 68 69 73 20 67 61 72 64 65 6e 2c 20 61 6e 64 20 6d 65 61 64 6f 77 73 20 62 65 79 6f 6e 64 2c 20 73 6c 6f 70 69 6e 67 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 72 69 76 65 72 2e 20 54 68 69 73 20 68 6f 62 62 69 74 20 77 61 73 20 61 20 76 65 72 79 20 77 65 6c 6c 2d 74 6f 2d 64 6f 20 68 6f 62 62 69 74 2c 20 61 6e 64 20 68 69 73 20 6e 61 6d 65 20 77 61 73 20 42 61 67 67 69 6e 73 2e 20 54 68 65 20 42 61 67 67 69 6e 73 65 73 20 68 61 76 65 20 6c 69 76 65 64 20 69 6e 20 74 68 65 20 6e 65 69 67 68 62 6f 75 72 68 6f 6f 64 20 6f 66 20 54 68 65 20 48 69 6c 6c 20 66 6f 72 20 74 69 6d 65 20 6f 75 74 20 6f 66 20 6d 69 6e 64 2c 20 61 6e 64 20 70 65 6f 70 6c 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 68 65 6d 20 76 65 72 79 20 72 65 73 70 65 63 74 61 62 6c 65 2c 20 6e 6f 74 20 6f 6e 6c 79 20 62 65 63 61 75 73 65 20 6d 6f 73 74 20 6f 66 20 74 68 65 6d 20 77 65 72 65 20 72 69 63 68 2c 20 62 75 74 20 61 6c 73 6f 20 62 65 63 61 75 73 65 20 74 68 65 79 20 6e 65 76 65 72 20 68 61 64 20 61 6e 79 20 61 64 76 65 6e 74 75 72 65 73 20 6f 72 20 64 69 64 20 61 6e 79 74 68 69 6e 67 20 75 6e 65 78 70 65 63 74 65 64 3a 20 79 6f 75 20 63 6f 75 6c 64 20 74 65 6c 6c 20 77 68 61 74 20 61 20 42 61 67 67 69 6e 73 20 77 6f 75 6c 64 20 73 61 79 20 6f 6e 20 61 6e 79 20 71 75 65 73 74 69 6f 6e 20 77 69 74 68 6f 75 74 20 74 68 65 20 62 6f 74 68 65 72 20 6f 66 20 61 73 6b 69 6e 67 20 68 69 6d 2e 20 54 68 69 73 20 69 73 20 61 20 73 74 6f 72 79 20 6f 66 20 68 6f 77 20 61 20 42 61 67 67 69 6e 73 20 68 61 64 20 61 6e 20 61 64 76 65 6e 74 75 72 65 2c 20 61 6e 64 20 66 6f 75 6e 64 20 68 69 6d 73 65 6c 66 20 64 6f 69 6e 67 20 61 6e 64 20 73 61 79 69 6e 67 20 74 68 69 6e 67 73 20 61 6c 74 6f 67 65 74 68 65 72 20 75 6e 65 78 70 65 63 74 65 64 2e 20 48 65 20 6d 61 79 20 68 61 76 65 20 6c 6f 73 74 20 74 68 65 20 6e 65 69 67 68 62 6f 75 72 73 e2 80 99 20 72 65 73 70 65 63 74 2c 20 62 75 74 20 68 65 20 67 61 69 6e 65 64 20 e2 80 93 20 77 65 6c 6c 2c 20 79 6f 75 20 77 69 6c 6c 20 73 65 65 20 77 68 65 74 68 65 72 20 68 65 20 67 61 69 6e 65 64 20 61 6e 79 74 68 69 6e 67 20 69 6e 20 74 68 65 20 65 6e 64 2e
+
+# Test PrintableString Encoding
+
+encode-pair Test-String-Printable = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats - the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill - The Hill, as all the people for many miles round called it - and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours' respect, but he gained - well, you will see whether he gained anything in the end."
+match 13 82 07 79 49 6e 20 61 20 68 6f 6c 65 20 69 6e 20 74 68 65 20 67 72 6f 75 6e 64 20 74 68 65 72 65 20 6c 69 76 65 64 20 61 20 68 6f 62 62 69 74 2e 20 4e 6f 74 20 61 20 6e 61 73 74 79 2c 20 64 69 72 74 79 2c 20 77 65 74 20 68 6f 6c 65 2c 20 66 69 6c 6c 65 64 20 77 69 74 68 20 74 68 65 20 65 6e 64 73 20 6f 66 20 77 6f 72 6d 73 20 61 6e 64 20 61 6e 20 6f 6f 7a 79 20 73 6d 65 6c 6c 2c 20 6e 6f 72 20 79 65 74 20 61 20 64 72 79 2c 20 62 61 72 65 2c 20 73 61 6e 64 79 20 68 6f 6c 65 20 77 69 74 68 20 6e 6f 74 68 69 6e 67 20 69 6e 20 69 74 20 74 6f 20 73 69 74 20 64 6f 77 6e 20 6f 6e 20 6f 72 20 74 6f 20 65 61 74 3a 20 69 74 20 77 61 73 20 61 20 68 6f 62 62 69 74 2d 68 6f 6c 65 2c 20 61 6e 64 20 74 68 61 74 20 6d 65 61 6e 73 20 63 6f 6d 66 6f 72 74 2e 20 49 74 20 68 61 64 20 61 20 70 65 72 66 65 63 74 6c 79 20 72 6f 75 6e 64 20 64 6f 6f 72 20 6c 69 6b 65 20 61 20 70 6f 72 74 68 6f 6c 65 2c 20 70 61 69 6e 74 65 64 20 67 72 65 65 6e 2c 20 77 69 74 68 20 61 20 73 68 69 6e 79 20 79 65 6c 6c 6f 77 20 62 72 61 73 73 20 6b 6e 6f 62 20 69 6e 20 74 68 65 20 65 78 61 63 74 20 6d 69 64 64 6c 65 2e 20 54 68 65 20 64 6f 6f 72 20 6f 70 65 6e 65 64 20 6f 6e 20 74 6f 20 61 20 74 75 62 65 2d 73 68 61 70 65 64 20 68 61 6c 6c 20 6c 69 6b 65 20 61 20 74 75 6e 6e 65 6c 3a 20 61 20 76 65 72 79 20 63 6f 6d 66 6f 72 74 61 62 6c 65 20 74 75 6e 6e 65 6c 20 77 69 74 68 6f 75 74 20 73 6d 6f 6b 65 2c 20 77 69 74 68 20 70 61 6e 65 6c 6c 65 64 20 77 61 6c 6c 73 2c 20 61 6e 64 20 66 6c 6f 6f 72 73 20 74 69 6c 65 64 20 61 6e 64 20 63 61 72 70 65 74 65 64 2c 20 70 72 6f 76 69 64 65 64 20 77 69 74 68 20 70 6f 6c 69 73 68 65 64 20 63 68 61 69 72 73 20 61 6e 64 20 6c 6f 74 73 20 61 6e 64 20 6c 6f 74 73 20 6f 66 20 70 65 67 73 20 66 6f 72 20 68 61 74 73 20 61 6e 64 20 63 6f 61 74 73 20 2d 20 74 68 65 20 68 6f 62 62 69 74 20 77 61 73 20 66 6f 6e 64 20 6f 66 20 76 69 73 69 74 6f 72 73 2e 20 54 68 65 20 74 75 6e 6e 65 6c 20 77 6f 75 6e 64 20 6f 6e 20 61 6e 64 20 6f 6e 2c 20 67 6f 69 6e 67 20 66 61 69 72 6c 79 20 62 75 74 20 6e 6f 74 20 71 75 69 74 65 20 73 74 72 61 69 67 68 74 20 69 6e 74 6f 20 74 68 65 20 73 69 64 65 20 6f 66 20 74 68 65 20 68 69 6c 6c 20 2d 20 54 68 65 20 48 69 6c 6c 2c 20 61 73 20 61 6c 6c 20 74 68 65 20 70 65 6f 70 6c 65 20 66 6f 72 20 6d 61 6e 79 20 6d 69 6c 65 73 20 72 6f 75 6e 64 20 63 61 6c 6c 65 64 20 69 74 20 2d 20 61 6e 64 20 6d 61 6e 79 20 6c 69 74 74 6c 65 20 72 6f 75 6e 64 20 64 6f 6f 72 73 20 6f 70 65 6e 65 64 20 6f 75 74 20 6f 66 20 69 74 2c 20 66 69 72 73 74 20 6f 6e 20 6f 6e 65 20 73 69 64 65 20 61 6e 64 20 74 68 65 6e 20 6f 6e 20 61 6e 6f 74 68 65 72 2e 20 4e 6f 20 67 6f 69 6e 67 20 75 70 73 74 61 69 72 73 20 66 6f 72 20 74 68 65 20 68 6f 62 62 69 74 3a 20 62 65 64 72 6f 6f 6d 73 2c 20 62 61 74 68 72 6f 6f 6d 73 2c 20 63 65 6c 6c 61 72 73 2c 20 70 61 6e 74 72 69 65 73 20 28 6c 6f 74 73 20 6f 66 20 74 68 65 73 65 29 2c 20 77 61 72 64 72 6f 62 65 73 20 28 68 65 20 68 61 64 20 77 68 6f 6c 65 20 72 6f 6f 6d 73 20 64 65 76 6f 74 65 64 20 74 6f 20 63 6c 6f 74 68 65 73 29 2c 20 6b 69 74 63 68 65 6e 73 2c 20 64 69 6e 69 6e 67 2d 72 6f 6f 6d 73 2c 20 61 6c 6c 20 77 65 72 65 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 66 6c 6f 6f 72 2c 20 61 6e 64 20 69 6e 64 65 65 64 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 70 61 73 73 61 67 65 2e 20 54 68 65 20 62 65 73 74 20 72 6f 6f 6d 73 20 77 65 72 65 20 61 6c 6c 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 28 67 6f 69 6e 67 20 69 6e 29 2c 20 66 6f 72 20 74 68 65 73 65 20 77 65 72 65 20 74 68 65 20 6f 6e 6c 79 20 6f 6e 65 73 20 74 6f 20 68 61 76 65 20 77 69 6e 64 6f 77 73 2c 20 64 65 65 70 2d 73 65 74 20 72 6f 75 6e 64 20 77 69 6e 64 6f 77 73 20 6c 6f 6f 6b 69 6e 67 20 6f 76 65 72 20 68 69 73 20 67 61 72 64 65 6e 2c 20 61 6e 64 20 6d 65 61 64 6f 77 73 20 62 65 79 6f 6e 64 2c 20 73 6c 6f 70 69 6e 67 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 72 69 76 65 72 2e 20 54 68 69 73 20 68 6f 62 62 69 74 20 77 61 73 20 61 20 76 65 72 79 20 77 65 6c 6c 2d 74 6f 2d 64 6f 20 68 6f 62 62 69 74 2c 20 61 6e 64 20 68 69 73 20 6e 61 6d 65 20 77 61 73 20 42 61 67 67 69 6e 73 2e 20 54 68 65 20 42 61 67 67 69 6e 73 65 73 20 68 61 76 65 20 6c 69 76 65 64 20 69 6e 20 74 68 65 20 6e 65 69 67 68 62 6f 75 72 68 6f 6f 64 20 6f 66 20 54 68 65 20 48 69 6c 6c 20 66 6f 72 20 74 69 6d 65 20 6f 75 74 20 6f 66 20 6d 69 6e 64 2c 20 61 6e 64 20 70 65 6f 70 6c 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 68 65 6d 20 76 65 72 79 20 72 65 73 70 65 63 74 61 62 6c 65 2c 20 6e 6f 74 20 6f 6e 6c 79 20 62 65 63 61 75 73 65 20 6d 6f 73 74 20 6f 66 20 74 68 65 6d 20 77 65 72 65 20 72 69 63 68 2c 20 62 75 74 20 61 6c 73 6f 20 62 65 63 61 75 73 65 20 74 68 65 79 20 6e 65 76 65 72 20 68 61 64 20 61 6e 79 20 61 64 76 65 6e 74 75 72 65 73 20 6f 72 20 64 69 64 20 61 6e 79 74 68 69 6e 67 20 75 6e 65 78 70 65 63 74 65 64 3a 20 79 6f 75 20 63 6f 75 6c 64 20 74 65 6c 6c 20 77 68 61 74 20 61 20 42 61 67 67 69 6e 73 20 77 6f 75 6c 64 20 73 61 79 20 6f 6e 20 61 6e 79 20 71 75 65 73 74 69 6f 6e 20 77 69 74 68 6f 75 74 20 74 68 65 20 62 6f 74 68 65 72 20 6f 66 20 61 73 6b 69 6e 67 20 68 69 6d 2e 20 54 68 69 73 20 69 73 20 61 20 73 74 6f 72 79 20 6f 66 20 68 6f 77 20 61 20 42 61 67 67 69 6e 73 20 68 61 64 20 61 6e 20 61 64 76 65 6e 74 75 72 65 2c 20 61 6e 64 20 66 6f 75 6e 64 20 68 69 6d 73 65 6c 66 20 64 6f 69 6e 67 20 61 6e 64 20 73 61 79 69 6e 67 20 74 68 69 6e 67 73 20 61 6c 74 6f 67 65 74 68 65 72 20 75 6e 65 78 70 65 63 74 65 64 2e 20 48 65 20 6d 61 79 20 68 61 76 65 20 6c 6f 73 74 20 74 68 65 20 6e 65 69 67 68 62 6f 75 72 73 27 20 72 65 73 70 65 63 74 2c 20 62 75 74 20 68 65 20 67 61 69 6e 65 64 20 2d 20 77 65 6c 6c 2c 20 79 6f 75 20 77 69 6c 6c 20 73 65 65 20 77 68 65 74 68 65 72 20 68 65 20 67 61 69 6e 65 64 20 61 6e 79 74 68 69 6e 67 20 69 6e 20 74 68 65 20 65 6e 64 2e
+
+# Test T61String Encoding
+encode-pair Test-String-T61 = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats - the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill - The Hill, as all the people for many miles round called it - and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours' respect, but he gained - well, you will see whether he gained anything in the end."
+match 14 82 07 79 49 6e 20 61 20 68 6f 6c 65 20 69 6e 20 74 68 65 20 67 72 6f 75 6e 64 20 74 68 65 72 65 20 6c 69 76 65 64 20 61 20 68 6f 62 62 69 74 2e 20 4e 6f 74 20 61 20 6e 61 73 74 79 2c 20 64 69 72 74 79 2c 20 77 65 74 20 68 6f 6c 65 2c 20 66 69 6c 6c 65 64 20 77 69 74 68 20 74 68 65 20 65 6e 64 73 20 6f 66 20 77 6f 72 6d 73 20 61 6e 64 20 61 6e 20 6f 6f 7a 79 20 73 6d 65 6c 6c 2c 20 6e 6f 72 20 79 65 74 20 61 20 64 72 79 2c 20 62 61 72 65 2c 20 73 61 6e 64 79 20 68 6f 6c 65 20 77 69 74 68 20 6e 6f 74 68 69 6e 67 20 69 6e 20 69 74 20 74 6f 20 73 69 74 20 64 6f 77 6e 20 6f 6e 20 6f 72 20 74 6f 20 65 61 74 3a 20 69 74 20 77 61 73 20 61 20 68 6f 62 62 69 74 2d 68 6f 6c 65 2c 20 61 6e 64 20 74 68 61 74 20 6d 65 61 6e 73 20 63 6f 6d 66 6f 72 74 2e 20 49 74 20 68 61 64 20 61 20 70 65 72 66 65 63 74 6c 79 20 72 6f 75 6e 64 20 64 6f 6f 72 20 6c 69 6b 65 20 61 20 70 6f 72 74 68 6f 6c 65 2c 20 70 61 69 6e 74 65 64 20 67 72 65 65 6e 2c 20 77 69 74 68 20 61 20 73 68 69 6e 79 20 79 65 6c 6c 6f 77 20 62 72 61 73 73 20 6b 6e 6f 62 20 69 6e 20 74 68 65 20 65 78 61 63 74 20 6d 69 64 64 6c 65 2e 20 54 68 65 20 64 6f 6f 72 20 6f 70 65 6e 65 64 20 6f 6e 20 74 6f 20 61 20 74 75 62 65 2d 73 68 61 70 65 64 20 68 61 6c 6c 20 6c 69 6b 65 20 61 20 74 75 6e 6e 65 6c 3a 20 61 20 76 65 72 79 20 63 6f 6d 66 6f 72 74 61 62 6c 65 20 74 75 6e 6e 65 6c 20 77 69 74 68 6f 75 74 20 73 6d 6f 6b 65 2c 20 77 69 74 68 20 70 61 6e 65 6c 6c 65 64 20 77 61 6c 6c 73 2c 20 61 6e 64 20 66 6c 6f 6f 72 73 20 74 69 6c 65 64 20 61 6e 64 20 63 61 72 70 65 74 65 64 2c 20 70 72 6f 76 69 64 65 64 20 77 69 74 68 20 70 6f 6c 69 73 68 65 64 20 63 68 61 69 72 73 20 61 6e 64 20 6c 6f 74 73 20 61 6e 64 20 6c 6f 74 73 20 6f 66 20 70 65 67 73 20 66 6f 72 20 68 61 74 73 20 61 6e 64 20 63 6f 61 74 73 20 2d 20 74 68 65 20 68 6f 62 62 69 74 20 77 61 73 20 66 6f 6e 64 20 6f 66 20 76 69 73 69 74 6f 72 73 2e 20 54 68 65 20 74 75 6e 6e 65 6c 20 77 6f 75 6e 64 20 6f 6e 20 61 6e 64 20 6f 6e 2c 20 67 6f 69 6e 67 20 66 61 69 72 6c 79 20 62 75 74 20 6e 6f 74 20 71 75 69 74 65 20 73 74 72 61 69 67 68 74 20 69 6e 74 6f 20 74 68 65 20 73 69 64 65 20 6f 66 20 74 68 65 20 68 69 6c 6c 20 2d 20 54 68 65 20 48 69 6c 6c 2c 20 61 73 20 61 6c 6c 20 74 68 65 20 70 65 6f 70 6c 65 20 66 6f 72 20 6d 61 6e 79 20 6d 69 6c 65 73 20 72 6f 75 6e 64 20 63 61 6c 6c 65 64 20 69 74 20 2d 20 61 6e 64 20 6d 61 6e 79 20 6c 69 74 74 6c 65 20 72 6f 75 6e 64 20 64 6f 6f 72 73 20 6f 70 65 6e 65 64 20 6f 75 74 20 6f 66 20 69 74 2c 20 66 69 72 73 74 20 6f 6e 20 6f 6e 65 20 73 69 64 65 20 61 6e 64 20 74 68 65 6e 20 6f 6e 20 61 6e 6f 74 68 65 72 2e 20 4e 6f 20 67 6f 69 6e 67 20 75 70 73 74 61 69 72 73 20 66 6f 72 20 74 68 65 20 68 6f 62 62 69 74 3a 20 62 65 64 72 6f 6f 6d 73 2c 20 62 61 74 68 72 6f 6f 6d 73 2c 20 63 65 6c 6c 61 72 73 2c 20 70 61 6e 74 72 69 65 73 20 28 6c 6f 74 73 20 6f 66 20 74 68 65 73 65 29 2c 20 77 61 72 64 72 6f 62 65 73 20 28 68 65 20 68 61 64 20 77 68 6f 6c 65 20 72 6f 6f 6d 73 20 64 65 76 6f 74 65 64 20 74 6f 20 63 6c 6f 74 68 65 73 29 2c 20 6b 69 74 63 68 65 6e 73 2c 20 64 69 6e 69 6e 67 2d 72 6f 6f 6d 73 2c 20 61 6c 6c 20 77 65 72 65 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 66 6c 6f 6f 72 2c 20 61 6e 64 20 69 6e 64 65 65 64 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 70 61 73 73 61 67 65 2e 20 54 68 65 20 62 65 73 74 20 72 6f 6f 6d 73 20 77 65 72 65 20 61 6c 6c 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 28 67 6f 69 6e 67 20 69 6e 29 2c 20 66 6f 72 20 74 68 65 73 65 20 77 65 72 65 20 74 68 65 20 6f 6e 6c 79 20 6f 6e 65 73 20 74 6f 20 68 61 76 65 20 77 69 6e 64 6f 77 73 2c 20 64 65 65 70 2d 73 65 74 20 72 6f 75 6e 64 20 77 69 6e 64 6f 77 73 20 6c 6f 6f 6b 69 6e 67 20 6f 76 65 72 20 68 69 73 20 67 61 72 64 65 6e 2c 20 61 6e 64 20 6d 65 61 64 6f 77 73 20 62 65 79 6f 6e 64 2c 20 73 6c 6f 70 69 6e 67 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 72 69 76 65 72 2e 20 54 68 69 73 20 68 6f 62 62 69 74 20 77 61 73 20 61 20 76 65 72 79 20 77 65 6c 6c 2d 74 6f 2d 64 6f 20 68 6f 62 62 69 74 2c 20 61 6e 64 20 68 69 73 20 6e 61 6d 65 20 77 61 73 20 42 61 67 67 69 6e 73 2e 20 54 68 65 20 42 61 67 67 69 6e 73 65 73 20 68 61 76 65 20 6c 69 76 65 64 20 69 6e 20 74 68 65 20 6e 65 69 67 68 62 6f 75 72 68 6f 6f 64 20 6f 66 20 54 68 65 20 48 69 6c 6c 20 66 6f 72 20 74 69 6d 65 20 6f 75 74 20 6f 66 20 6d 69 6e 64 2c 20 61 6e 64 20 70 65 6f 70 6c 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 68 65 6d 20 76 65 72 79 20 72 65 73 70 65 63 74 61 62 6c 65 2c 20 6e 6f 74 20 6f 6e 6c 79 20 62 65 63 61 75 73 65 20 6d 6f 73 74 20 6f 66 20 74 68 65 6d 20 77 65 72 65 20 72 69 63 68 2c 20 62 75 74 20 61 6c 73 6f 20 62 65 63 61 75 73 65 20 74 68 65 79 20 6e 65 76 65 72 20 68 61 64 20 61 6e 79 20 61 64 76 65 6e 74 75 72 65 73 20 6f 72 20 64 69 64 20 61 6e 79 74 68 69 6e 67 20 75 6e 65 78 70 65 63 74 65 64 3a 20 79 6f 75 20 63 6f 75 6c 64 20 74 65 6c 6c 20 77 68 61 74 20 61 20 42 61 67 67 69 6e 73 20 77 6f 75 6c 64 20 73 61 79 20 6f 6e 20 61 6e 79 20 71 75 65 73 74 69 6f 6e 20 77 69 74 68 6f 75 74 20 74 68 65 20 62 6f 74 68 65 72 20 6f 66 20 61 73 6b 69 6e 67 20 68 69 6d 2e 20 54 68 69 73 20 69 73 20 61 20 73 74 6f 72 79 20 6f 66 20 68 6f 77 20 61 20 42 61 67 67 69 6e 73 20 68 61 64 20 61 6e 20 61 64 76 65 6e 74 75 72 65 2c 20 61 6e 64 20 66 6f 75 6e 64 20 68 69 6d 73 65 6c 66 20 64 6f 69 6e 67 20 61 6e 64 20 73 61 79 69 6e 67 20 74 68 69 6e 67 73 20 61 6c 74 6f 67 65 74 68 65 72 20 75 6e 65 78 70 65 63 74 65 64 2e 20 48 65 20 6d 61 79 20 68 61 76 65 20 6c 6f 73 74 20 74 68 65 20 6e 65 69 67 68 62 6f 75 72 73 27 20 72 65 73 70 65 63 74 2c 20 62 75 74 20 68 65 20 67 61 69 6e 65 64 20 2d 20 77 65 6c 6c 2c 20 79 6f 75 20 77 69 6c 6c 20 73 65 65 20 77 68 65 74 68 65 72 20 68 65 20 67 61 69 6e 65 64 20 61 6e 79 74 68 69 6e 67 20 69 6e 20 74 68 65 20 65 6e 64 2e
+
+# Test IA5String Encoding
+encode-pair Test-String-IA5 = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats â€“ the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill â€“ The Hill, as all the people for many miles round called it â€“ and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours’ respect, but he gained â€“ well, you will see whether he gained anything in the end."
+match 16 82 07 83 49 6e 20 61 20 68 6f 6c 65 20 69 6e 20 74 68 65 20 67 72 6f 75 6e 64 20 74 68 65 72 65 20 6c 69 76 65 64 20 61 20 68 6f 62 62 69 74 2e 20 4e 6f 74 20 61 20 6e 61 73 74 79 2c 20 64 69 72 74 79 2c 20 77 65 74 20 68 6f 6c 65 2c 20 66 69 6c 6c 65 64 20 77 69 74 68 20 74 68 65 20 65 6e 64 73 20 6f 66 20 77 6f 72 6d 73 20 61 6e 64 20 61 6e 20 6f 6f 7a 79 20 73 6d 65 6c 6c 2c 20 6e 6f 72 20 79 65 74 20 61 20 64 72 79 2c 20 62 61 72 65 2c 20 73 61 6e 64 79 20 68 6f 6c 65 20 77 69 74 68 20 6e 6f 74 68 69 6e 67 20 69 6e 20 69 74 20 74 6f 20 73 69 74 20 64 6f 77 6e 20 6f 6e 20 6f 72 20 74 6f 20 65 61 74 3a 20 69 74 20 77 61 73 20 61 20 68 6f 62 62 69 74 2d 68 6f 6c 65 2c 20 61 6e 64 20 74 68 61 74 20 6d 65 61 6e 73 20 63 6f 6d 66 6f 72 74 2e 20 49 74 20 68 61 64 20 61 20 70 65 72 66 65 63 74 6c 79 20 72 6f 75 6e 64 20 64 6f 6f 72 20 6c 69 6b 65 20 61 20 70 6f 72 74 68 6f 6c 65 2c 20 70 61 69 6e 74 65 64 20 67 72 65 65 6e 2c 20 77 69 74 68 20 61 20 73 68 69 6e 79 20 79 65 6c 6c 6f 77 20 62 72 61 73 73 20 6b 6e 6f 62 20 69 6e 20 74 68 65 20 65 78 61 63 74 20 6d 69 64 64 6c 65 2e 20 54 68 65 20 64 6f 6f 72 20 6f 70 65 6e 65 64 20 6f 6e 20 74 6f 20 61 20 74 75 62 65 2d 73 68 61 70 65 64 20 68 61 6c 6c 20 6c 69 6b 65 20 61 20 74 75 6e 6e 65 6c 3a 20 61 20 76 65 72 79 20 63 6f 6d 66 6f 72 74 61 62 6c 65 20 74 75 6e 6e 65 6c 20 77 69 74 68 6f 75 74 20 73 6d 6f 6b 65 2c 20 77 69 74 68 20 70 61 6e 65 6c 6c 65 64 20 77 61 6c 6c 73 2c 20 61 6e 64 20 66 6c 6f 6f 72 73 20 74 69 6c 65 64 20 61 6e 64 20 63 61 72 70 65 74 65 64 2c 20 70 72 6f 76 69 64 65 64 20 77 69 74 68 20 70 6f 6c 69 73 68 65 64 20 63 68 61 69 72 73 20 61 6e 64 20 6c 6f 74 73 20 61 6e 64 20 6c 6f 74 73 20 6f 66 20 70 65 67 73 20 66 6f 72 20 68 61 74 73 20 61 6e 64 20 63 6f 61 74 73 20 e2 80 93 20 74 68 65 20 68 6f 62 62 69 74 20 77 61 73 20 66 6f 6e 64 20 6f 66 20 76 69 73 69 74 6f 72 73 2e 20 54 68 65 20 74 75 6e 6e 65 6c 20 77 6f 75 6e 64 20 6f 6e 20 61 6e 64 20 6f 6e 2c 20 67 6f 69 6e 67 20 66 61 69 72 6c 79 20 62 75 74 20 6e 6f 74 20 71 75 69 74 65 20 73 74 72 61 69 67 68 74 20 69 6e 74 6f 20 74 68 65 20 73 69 64 65 20 6f 66 20 74 68 65 20 68 69 6c 6c 20 e2 80 93 20 54 68 65 20 48 69 6c 6c 2c 20 61 73 20 61 6c 6c 20 74 68 65 20 70 65 6f 70 6c 65 20 66 6f 72 20 6d 61 6e 79 20 6d 69 6c 65 73 20 72 6f 75 6e 64 20 63 61 6c 6c 65 64 20 69 74 20 e2 80 93 20 61 6e 64 20 6d 61 6e 79 20 6c 69 74 74 6c 65 20 72 6f 75 6e 64 20 64 6f 6f 72 73 20 6f 70 65 6e 65 64 20 6f 75 74 20 6f 66 20 69 74 2c 20 66 69 72 73 74 20 6f 6e 20 6f 6e 65 20 73 69 64 65 20 61 6e 64 20 74 68 65 6e 20 6f 6e 20 61 6e 6f 74 68 65 72 2e 20 4e 6f 20 67 6f 69 6e 67 20 75 70 73 74 61 69 72 73 20 66 6f 72 20 74 68 65 20 68 6f 62 62 69 74 3a 20 62 65 64 72 6f 6f 6d 73 2c 20 62 61 74 68 72 6f 6f 6d 73 2c 20 63 65 6c 6c 61 72 73 2c 20 70 61 6e 74 72 69 65 73 20 28 6c 6f 74 73 20 6f 66 20 74 68 65 73 65 29 2c 20 77 61 72 64 72 6f 62 65 73 20 28 68 65 20 68 61 64 20 77 68 6f 6c 65 20 72 6f 6f 6d 73 20 64 65 76 6f 74 65 64 20 74 6f 20 63 6c 6f 74 68 65 73 29 2c 20 6b 69 74 63 68 65 6e 73 2c 20 64 69 6e 69 6e 67 2d 72 6f 6f 6d 73 2c 20 61 6c 6c 20 77 65 72 65 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 66 6c 6f 6f 72 2c 20 61 6e 64 20 69 6e 64 65 65 64 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 70 61 73 73 61 67 65 2e 20 54 68 65 20 62 65 73 74 20 72 6f 6f 6d 73 20 77 65 72 65 20 61 6c 6c 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 28 67 6f 69 6e 67 20 69 6e 29 2c 20 66 6f 72 20 74 68 65 73 65 20 77 65 72 65 20 74 68 65 20 6f 6e 6c 79 20 6f 6e 65 73 20 74 6f 20 68 61 76 65 20 77 69 6e 64 6f 77 73 2c 20 64 65 65 70 2d 73 65 74 20 72 6f 75 6e 64 20 77 69 6e 64 6f 77 73 20 6c 6f 6f 6b 69 6e 67 20 6f 76 65 72 20 68 69 73 20 67 61 72 64 65 6e 2c 20 61 6e 64 20 6d 65 61 64 6f 77 73 20 62 65 79 6f 6e 64 2c 20 73 6c 6f 70 69 6e 67 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 72 69 76 65 72 2e 20 54 68 69 73 20 68 6f 62 62 69 74 20 77 61 73 20 61 20 76 65 72 79 20 77 65 6c 6c 2d 74 6f 2d 64 6f 20 68 6f 62 62 69 74 2c 20 61 6e 64 20 68 69 73 20 6e 61 6d 65 20 77 61 73 20 42 61 67 67 69 6e 73 2e 20 54 68 65 20 42 61 67 67 69 6e 73 65 73 20 68 61 76 65 20 6c 69 76 65 64 20 69 6e 20 74 68 65 20 6e 65 69 67 68 62 6f 75 72 68 6f 6f 64 20 6f 66 20 54 68 65 20 48 69 6c 6c 20 66 6f 72 20 74 69 6d 65 20 6f 75 74 20 6f 66 20 6d 69 6e 64 2c 20 61 6e 64 20 70 65 6f 70 6c 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 68 65 6d 20 76 65 72 79 20 72 65 73 70 65 63 74 61 62 6c 65 2c 20 6e 6f 74 20 6f 6e 6c 79 20 62 65 63 61 75 73 65 20 6d 6f 73 74 20 6f 66 20 74 68 65 6d 20 77 65 72 65 20 72 69 63 68 2c 20 62 75 74 20 61 6c 73 6f 20 62 65 63 61 75 73 65 20 74 68 65 79 20 6e 65 76 65 72 20 68 61 64 20 61 6e 79 20 61 64 76 65 6e 74 75 72 65 73 20 6f 72 20 64 69 64 20 61 6e 79 74 68 69 6e 67 20 75 6e 65 78 70 65 63 74 65 64 3a 20 79 6f 75 20 63 6f 75 6c 64 20 74 65 6c 6c 20 77 68 61 74 20 61 20 42 61 67 67 69 6e 73 20 77 6f 75 6c 64 20 73 61 79 20 6f 6e 20 61 6e 79 20 71 75 65 73 74 69 6f 6e 20 77 69 74 68 6f 75 74 20 74 68 65 20 62 6f 74 68 65 72 20 6f 66 20 61 73 6b 69 6e 67 20 68 69 6d 2e 20 54 68 69 73 20 69 73 20 61 20 73 74 6f 72 79 20 6f 66 20 68 6f 77 20 61 20 42 61 67 67 69 6e 73 20 68 61 64 20 61 6e 20 61 64 76 65 6e 74 75 72 65 2c 20 61 6e 64 20 66 6f 75 6e 64 20 68 69 6d 73 65 6c 66 20 64 6f 69 6e 67 20 61 6e 64 20 73 61 79 69 6e 67 20 74 68 69 6e 67 73 20 61 6c 74 6f 67 65 74 68 65 72 20 75 6e 65 78 70 65 63 74 65 64 2e 20 48 65 20 6d 61 79 20 68 61 76 65 20 6c 6f 73 74 20 74 68 65 20 6e 65 69 67 68 62 6f 75 72 73 e2 80 99 20 72 65 73 70 65 63 74 2c 20 62 75 74 20 68 65 20 67 61 69 6e 65 64 20 e2 80 93 20 77 65 6c 6c 2c 20 79 6f 75 20 77 69 6c 6c 20 73 65 65 20 77 68 65 74 68 65 72 20 68 65 20 67 61 69 6e 65 64 20 61 6e 79 74 68 69 6e 67 20 69 6e 20 74 68 65 20 65 6e 64 2e
+
+# Test VisibleString Encoding
+encode-pair Test-String-Visible = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats - the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill - The Hill, as all the people for many miles round called it - and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours' respect, but he gained - well, you will see whether he gained anything in the end."
+match 1a 82 07 79 49 6e 20 61 20 68 6f 6c 65 20 69 6e 20 74 68 65 20 67 72 6f 75 6e 64 20 74 68 65 72 65 20 6c 69 76 65 64 20 61 20 68 6f 62 62 69 74 2e 20 4e 6f 74 20 61 20 6e 61 73 74 79 2c 20 64 69 72 74 79 2c 20 77 65 74 20 68 6f 6c 65 2c 20 66 69 6c 6c 65 64 20 77 69 74 68 20 74 68 65 20 65 6e 64 73 20 6f 66 20 77 6f 72 6d 73 20 61 6e 64 20 61 6e 20 6f 6f 7a 79 20 73 6d 65 6c 6c 2c 20 6e 6f 72 20 79 65 74 20 61 20 64 72 79 2c 20 62 61 72 65 2c 20 73 61 6e 64 79 20 68 6f 6c 65 20 77 69 74 68 20 6e 6f 74 68 69 6e 67 20 69 6e 20 69 74 20 74 6f 20 73 69 74 20 64 6f 77 6e 20 6f 6e 20 6f 72 20 74 6f 20 65 61 74 3a 20 69 74 20 77 61 73 20 61 20 68 6f 62 62 69 74 2d 68 6f 6c 65 2c 20 61 6e 64 20 74 68 61 74 20 6d 65 61 6e 73 20 63 6f 6d 66 6f 72 74 2e 20 49 74 20 68 61 64 20 61 20 70 65 72 66 65 63 74 6c 79 20 72 6f 75 6e 64 20 64 6f 6f 72 20 6c 69 6b 65 20 61 20 70 6f 72 74 68 6f 6c 65 2c 20 70 61 69 6e 74 65 64 20 67 72 65 65 6e 2c 20 77 69 74 68 20 61 20 73 68 69 6e 79 20 79 65 6c 6c 6f 77 20 62 72 61 73 73 20 6b 6e 6f 62 20 69 6e 20 74 68 65 20 65 78 61 63 74 20 6d 69 64 64 6c 65 2e 20 54 68 65 20 64 6f 6f 72 20 6f 70 65 6e 65 64 20 6f 6e 20 74 6f 20 61 20 74 75 62 65 2d 73 68 61 70 65 64 20 68 61 6c 6c 20 6c 69 6b 65 20 61 20 74 75 6e 6e 65 6c 3a 20 61 20 76 65 72 79 20 63 6f 6d 66 6f 72 74 61 62 6c 65 20 74 75 6e 6e 65 6c 20 77 69 74 68 6f 75 74 20 73 6d 6f 6b 65 2c 20 77 69 74 68 20 70 61 6e 65 6c 6c 65 64 20 77 61 6c 6c 73 2c 20 61 6e 64 20 66 6c 6f 6f 72 73 20 74 69 6c 65 64 20 61 6e 64 20 63 61 72 70 65 74 65 64 2c 20 70 72 6f 76 69 64 65 64 20 77 69 74 68 20 70 6f 6c 69 73 68 65 64 20 63 68 61 69 72 73 20 61 6e 64 20 6c 6f 74 73 20 61 6e 64 20 6c 6f 74 73 20 6f 66 20 70 65 67 73 20 66 6f 72 20 68 61 74 73 20 61 6e 64 20 63 6f 61 74 73 20 2d 20 74 68 65 20 68 6f 62 62 69 74 20 77 61 73 20 66 6f 6e 64 20 6f 66 20 76 69 73 69 74 6f 72 73 2e 20 54 68 65 20 74 75 6e 6e 65 6c 20 77 6f 75 6e 64 20 6f 6e 20 61 6e 64 20 6f 6e 2c 20 67 6f 69 6e 67 20 66 61 69 72 6c 79 20 62 75 74 20 6e 6f 74 20 71 75 69 74 65 20 73 74 72 61 69 67 68 74 20 69 6e 74 6f 20 74 68 65 20 73 69 64 65 20 6f 66 20 74 68 65 20 68 69 6c 6c 20 2d 20 54 68 65 20 48 69 6c 6c 2c 20 61 73 20 61 6c 6c 20 74 68 65 20 70 65 6f 70 6c 65 20 66 6f 72 20 6d 61 6e 79 20 6d 69 6c 65 73 20 72 6f 75 6e 64 20 63 61 6c 6c 65 64 20 69 74 20 2d 20 61 6e 64 20 6d 61 6e 79 20 6c 69 74 74 6c 65 20 72 6f 75 6e 64 20 64 6f 6f 72 73 20 6f 70 65 6e 65 64 20 6f 75 74 20 6f 66 20 69 74 2c 20 66 69 72 73 74 20 6f 6e 20 6f 6e 65 20 73 69 64 65 20 61 6e 64 20 74 68 65 6e 20 6f 6e 20 61 6e 6f 74 68 65 72 2e 20 4e 6f 20 67 6f 69 6e 67 20 75 70 73 74 61 69 72 73 20 66 6f 72 20 74 68 65 20 68 6f 62 62 69 74 3a 20 62 65 64 72 6f 6f 6d 73 2c 20 62 61 74 68 72 6f 6f 6d 73 2c 20 63 65 6c 6c 61 72 73 2c 20 70 61 6e 74 72 69 65 73 20 28 6c 6f 74 73 20 6f 66 20 74 68 65 73 65 29 2c 20 77 61 72 64 72 6f 62 65 73 20 28 68 65 20 68 61 64 20 77 68 6f 6c 65 20 72 6f 6f 6d 73 20 64 65 76 6f 74 65 64 20 74 6f 20 63 6c 6f 74 68 65 73 29 2c 20 6b 69 74 63 68 65 6e 73 2c 20 64 69 6e 69 6e 67 2d 72 6f 6f 6d 73 2c 20 61 6c 6c 20 77 65 72 65 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 66 6c 6f 6f 72 2c 20 61 6e 64 20 69 6e 64 65 65 64 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 70 61 73 73 61 67 65 2e 20 54 68 65 20 62 65 73 74 20 72 6f 6f 6d 73 20 77 65 72 65 20 61 6c 6c 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 28 67 6f 69 6e 67 20 69 6e 29 2c 20 66 6f 72 20 74 68 65 73 65 20 77 65 72 65 20 74 68 65 20 6f 6e 6c 79 20 6f 6e 65 73 20 74 6f 20 68 61 76 65 20 77 69 6e 64 6f 77 73 2c 20 64 65 65 70 2d 73 65 74 20 72 6f 75 6e 64 20 77 69 6e 64 6f 77 73 20 6c 6f 6f 6b 69 6e 67 20 6f 76 65 72 20 68 69 73 20 67 61 72 64 65 6e 2c 20 61 6e 64 20 6d 65 61 64 6f 77 73 20 62 65 79 6f 6e 64 2c 20 73 6c 6f 70 69 6e 67 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 72 69 76 65 72 2e 20 54 68 69 73 20 68 6f 62 62 69 74 20 77 61 73 20 61 20 76 65 72 79 20 77 65 6c 6c 2d 74 6f 2d 64 6f 20 68 6f 62 62 69 74 2c 20 61 6e 64 20 68 69 73 20 6e 61 6d 65 20 77 61 73 20 42 61 67 67 69 6e 73 2e 20 54 68 65 20 42 61 67 67 69 6e 73 65 73 20 68 61 76 65 20 6c 69 76 65 64 20 69 6e 20 74 68 65 20 6e 65 69 67 68 62 6f 75 72 68 6f 6f 64 20 6f 66 20 54 68 65 20 48 69 6c 6c 20 66 6f 72 20 74 69 6d 65 20 6f 75 74 20 6f 66 20 6d 69 6e 64 2c 20 61 6e 64 20 70 65 6f 70 6c 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 68 65 6d 20 76 65 72 79 20 72 65 73 70 65 63 74 61 62 6c 65 2c 20 6e 6f 74 20 6f 6e 6c 79 20 62 65 63 61 75 73 65 20 6d 6f 73 74 20 6f 66 20 74 68 65 6d 20 77 65 72 65 20 72 69 63 68 2c 20 62 75 74 20 61 6c 73 6f 20 62 65 63 61 75 73 65 20 74 68 65 79 20 6e 65 76 65 72 20 68 61 64 20 61 6e 79 20 61 64 76 65 6e 74 75 72 65 73 20 6f 72 20 64 69 64 20 61 6e 79 74 68 69 6e 67 20 75 6e 65 78 70 65 63 74 65 64 3a 20 79 6f 75 20 63 6f 75 6c 64 20 74 65 6c 6c 20 77 68 61 74 20 61 20 42 61 67 67 69 6e 73 20 77 6f 75 6c 64 20 73 61 79 20 6f 6e 20 61 6e 79 20 71 75 65 73 74 69 6f 6e 20 77 69 74 68 6f 75 74 20 74 68 65 20 62 6f 74 68 65 72 20 6f 66 20 61 73 6b 69 6e 67 20 68 69 6d 2e 20 54 68 69 73 20 69 73 20 61 20 73 74 6f 72 79 20 6f 66 20 68 6f 77 20 61 20 42 61 67 67 69 6e 73 20 68 61 64 20 61 6e 20 61 64 76 65 6e 74 75 72 65 2c 20 61 6e 64 20 66 6f 75 6e 64 20 68 69 6d 73 65 6c 66 20 64 6f 69 6e 67 20 61 6e 64 20 73 61 79 69 6e 67 20 74 68 69 6e 67 73 20 61 6c 74 6f 67 65 74 68 65 72 20 75 6e 65 78 70 65 63 74 65 64 2e 20 48 65 20 6d 61 79 20 68 61 76 65 20 6c 6f 73 74 20 74 68 65 20 6e 65 69 67 68 62 6f 75 72 73 27 20 72 65 73 70 65 63 74 2c 20 62 75 74 20 68 65 20 67 61 69 6e 65 64 20 2d 20 77 65 6c 6c 2c 20 79 6f 75 20 77 69 6c 6c 20 73 65 65 20 77 68 65 74 68 65 72 20 68 65 20 67 61 69 6e 65 64 20 61 6e 79 74 68 69 6e 67 20 69 6e 20 74 68 65 20 65 6e 64 2e
+
+# Test GeneralString Encoding
+encode-pair Test-String-General = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats - the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill - The Hill, as all the people for many miles round called it - and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours' respect, but he gained - well, you will see whether he gained anything in the end."
+match 1b 82 07 79 49 6e 20 61 20 68 6f 6c 65 20 69 6e 20 74 68 65 20 67 72 6f 75 6e 64 20 74 68 65 72 65 20 6c 69 76 65 64 20 61 20 68 6f 62 62 69 74 2e 20 4e 6f 74 20 61 20 6e 61 73 74 79 2c 20 64 69 72 74 79 2c 20 77 65 74 20 68 6f 6c 65 2c 20 66 69 6c 6c 65 64 20 77 69 74 68 20 74 68 65 20 65 6e 64 73 20 6f 66 20 77 6f 72 6d 73 20 61 6e 64 20 61 6e 20 6f 6f 7a 79 20 73 6d 65 6c 6c 2c 20 6e 6f 72 20 79 65 74 20 61 20 64 72 79 2c 20 62 61 72 65 2c 20 73 61 6e 64 79 20 68 6f 6c 65 20 77 69 74 68 20 6e 6f 74 68 69 6e 67 20 69 6e 20 69 74 20 74 6f 20 73 69 74 20 64 6f 77 6e 20 6f 6e 20 6f 72 20 74 6f 20 65 61 74 3a 20 69 74 20 77 61 73 20 61 20 68 6f 62 62 69 74 2d 68 6f 6c 65 2c 20 61 6e 64 20 74 68 61 74 20 6d 65 61 6e 73 20 63 6f 6d 66 6f 72 74 2e 20 49 74 20 68 61 64 20 61 20 70 65 72 66 65 63 74 6c 79 20 72 6f 75 6e 64 20 64 6f 6f 72 20 6c 69 6b 65 20 61 20 70 6f 72 74 68 6f 6c 65 2c 20 70 61 69 6e 74 65 64 20 67 72 65 65 6e 2c 20 77 69 74 68 20 61 20 73 68 69 6e 79 20 79 65 6c 6c 6f 77 20 62 72 61 73 73 20 6b 6e 6f 62 20 69 6e 20 74 68 65 20 65 78 61 63 74 20 6d 69 64 64 6c 65 2e 20 54 68 65 20 64 6f 6f 72 20 6f 70 65 6e 65 64 20 6f 6e 20 74 6f 20 61 20 74 75 62 65 2d 73 68 61 70 65 64 20 68 61 6c 6c 20 6c 69 6b 65 20 61 20 74 75 6e 6e 65 6c 3a 20 61 20 76 65 72 79 20 63 6f 6d 66 6f 72 74 61 62 6c 65 20 74 75 6e 6e 65 6c 20 77 69 74 68 6f 75 74 20 73 6d 6f 6b 65 2c 20 77 69 74 68 20 70 61 6e 65 6c 6c 65 64 20 77 61 6c 6c 73 2c 20 61 6e 64 20 66 6c 6f 6f 72 73 20 74 69 6c 65 64 20 61 6e 64 20 63 61 72 70 65 74 65 64 2c 20 70 72 6f 76 69 64 65 64 20 77 69 74 68 20 70 6f 6c 69 73 68 65 64 20 63 68 61 69 72 73 20 61 6e 64 20 6c 6f 74 73 20 61 6e 64 20 6c 6f 74 73 20 6f 66 20 70 65 67 73 20 66 6f 72 20 68 61 74 73 20 61 6e 64 20 63 6f 61 74 73 20 2d 20 74 68 65 20 68 6f 62 62 69 74 20 77 61 73 20 66 6f 6e 64 20 6f 66 20 76 69 73 69 74 6f 72 73 2e 20 54 68 65 20 74 75 6e 6e 65 6c 20 77 6f 75 6e 64 20 6f 6e 20 61 6e 64 20 6f 6e 2c 20 67 6f 69 6e 67 20 66 61 69 72 6c 79 20 62 75 74 20 6e 6f 74 20 71 75 69 74 65 20 73 74 72 61 69 67 68 74 20 69 6e 74 6f 20 74 68 65 20 73 69 64 65 20 6f 66 20 74 68 65 20 68 69 6c 6c 20 2d 20 54 68 65 20 48 69 6c 6c 2c 20 61 73 20 61 6c 6c 20 74 68 65 20 70 65 6f 70 6c 65 20 66 6f 72 20 6d 61 6e 79 20 6d 69 6c 65 73 20 72 6f 75 6e 64 20 63 61 6c 6c 65 64 20 69 74 20 2d 20 61 6e 64 20 6d 61 6e 79 20 6c 69 74 74 6c 65 20 72 6f 75 6e 64 20 64 6f 6f 72 73 20 6f 70 65 6e 65 64 20 6f 75 74 20 6f 66 20 69 74 2c 20 66 69 72 73 74 20 6f 6e 20 6f 6e 65 20 73 69 64 65 20 61 6e 64 20 74 68 65 6e 20 6f 6e 20 61 6e 6f 74 68 65 72 2e 20 4e 6f 20 67 6f 69 6e 67 20 75 70 73 74 61 69 72 73 20 66 6f 72 20 74 68 65 20 68 6f 62 62 69 74 3a 20 62 65 64 72 6f 6f 6d 73 2c 20 62 61 74 68 72 6f 6f 6d 73 2c 20 63 65 6c 6c 61 72 73 2c 20 70 61 6e 74 72 69 65 73 20 28 6c 6f 74 73 20 6f 66 20 74 68 65 73 65 29 2c 20 77 61 72 64 72 6f 62 65 73 20 28 68 65 20 68 61 64 20 77 68 6f 6c 65 20 72 6f 6f 6d 73 20 64 65 76 6f 74 65 64 20 74 6f 20 63 6c 6f 74 68 65 73 29 2c 20 6b 69 74 63 68 65 6e 73 2c 20 64 69 6e 69 6e 67 2d 72 6f 6f 6d 73 2c 20 61 6c 6c 20 77 65 72 65 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 66 6c 6f 6f 72 2c 20 61 6e 64 20 69 6e 64 65 65 64 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 70 61 73 73 61 67 65 2e 20 54 68 65 20 62 65 73 74 20 72 6f 6f 6d 73 20 77 65 72 65 20 61 6c 6c 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 28 67 6f 69 6e 67 20 69 6e 29 2c 20 66 6f 72 20 74 68 65 73 65 20 77 65 72 65 20 74 68 65 20 6f 6e 6c 79 20 6f 6e 65 73 20 74 6f 20 68 61 76 65 20 77 69 6e 64 6f 77 73 2c 20 64 65 65 70 2d 73 65 74 20 72 6f 75 6e 64 20 77 69 6e 64 6f 77 73 20 6c 6f 6f 6b 69 6e 67 20 6f 76 65 72 20 68 69 73 20 67 61 72 64 65 6e 2c 20 61 6e 64 20 6d 65 61 64 6f 77 73 20 62 65 79 6f 6e 64 2c 20 73 6c 6f 70 69 6e 67 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 72 69 76 65 72 2e 20 54 68 69 73 20 68 6f 62 62 69 74 20 77 61 73 20 61 20 76 65 72 79 20 77 65 6c 6c 2d 74 6f 2d 64 6f 20 68 6f 62 62 69 74 2c 20 61 6e 64 20 68 69 73 20 6e 61 6d 65 20 77 61 73 20 42 61 67 67 69 6e 73 2e 20 54 68 65 20 42 61 67 67 69 6e 73 65 73 20 68 61 76 65 20 6c 69 76 65 64 20 69 6e 20 74 68 65 20 6e 65 69 67 68 62 6f 75 72 68 6f 6f 64 20 6f 66 20 54 68 65 20 48 69 6c 6c 20 66 6f 72 20 74 69 6d 65 20 6f 75 74 20 6f 66 20 6d 69 6e 64 2c 20 61 6e 64 20 70 65 6f 70 6c 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 68 65 6d 20 76 65 72 79 20 72 65 73 70 65 63 74 61 62 6c 65 2c 20 6e 6f 74 20 6f 6e 6c 79 20 62 65 63 61 75 73 65 20 6d 6f 73 74 20 6f 66 20 74 68 65 6d 20 77 65 72 65 20 72 69 63 68 2c 20 62 75 74 20 61 6c 73 6f 20 62 65 63 61 75 73 65 20 74 68 65 79 20 6e 65 76 65 72 20 68 61 64 20 61 6e 79 20 61 64 76 65 6e 74 75 72 65 73 20 6f 72 20 64 69 64 20 61 6e 79 74 68 69 6e 67 20 75 6e 65 78 70 65 63 74 65 64 3a 20 79 6f 75 20 63 6f 75 6c 64 20 74 65 6c 6c 20 77 68 61 74 20 61 20 42 61 67 67 69 6e 73 20 77 6f 75 6c 64 20 73 61 79 20 6f 6e 20 61 6e 79 20 71 75 65 73 74 69 6f 6e 20 77 69 74 68 6f 75 74 20 74 68 65 20 62 6f 74 68 65 72 20 6f 66 20 61 73 6b 69 6e 67 20 68 69 6d 2e 20 54 68 69 73 20 69 73 20 61 20 73 74 6f 72 79 20 6f 66 20 68 6f 77 20 61 20 42 61 67 67 69 6e 73 20 68 61 64 20 61 6e 20 61 64 76 65 6e 74 75 72 65 2c 20 61 6e 64 20 66 6f 75 6e 64 20 68 69 6d 73 65 6c 66 20 64 6f 69 6e 67 20 61 6e 64 20 73 61 79 69 6e 67 20 74 68 69 6e 67 73 20 61 6c 74 6f 67 65 74 68 65 72 20 75 6e 65 78 70 65 63 74 65 64 2e 20 48 65 20 6d 61 79 20 68 61 76 65 20 6c 6f 73 74 20 74 68 65 20 6e 65 69 67 68 62 6f 75 72 73 27 20 72 65 73 70 65 63 74 2c 20 62 75 74 20 68 65 20 67 61 69 6e 65 64 20 2d 20 77 65 6c 6c 2c 20 79 6f 75 20 77 69 6c 6c 20 73 65 65 20 77 68 65 74 68 65 72 20 68 65 20 67 61 69 6e 65 64 20 61 6e 79 74 68 69 6e 67 20 69 6e 20 74 68 65 20 65 6e 64 2e
+
+# Test UniversalString Encoding
+encode-pair Test-String-Universal = "In a hole in the ground there lived a hobbit. Not a nasty, dirty, wet hole, filled with the ends of worms and an oozy smell, nor yet a dry, bare, sandy hole with nothing in it to sit down on or to eat: it was a hobbit-hole, and that means comfort. It had a perfectly round door like a porthole, painted green, with a shiny yellow brass knob in the exact middle. The door opened on to a tube-shaped hall like a tunnel: a very comfortable tunnel without smoke, with panelled walls, and floors tiled and carpeted, provided with polished chairs and lots and lots of pegs for hats and coats - the hobbit was fond of visitors. The tunnel wound on and on, going fairly but not quite straight into the side of the hill - The Hill, as all the people for many miles round called it - and many little round doors opened out of it, first on one side and then on another. No going upstairs for the hobbit: bedrooms, bathrooms, cellars, pantries (lots of these), wardrobes (he had whole rooms devoted to clothes), kitchens, dining-rooms, all were on the same floor, and indeed on the same passage. The best rooms were all on the left-hand side (going in), for these were the only ones to have windows, deep-set round windows looking over his garden, and meadows beyond, sloping down to the river. This hobbit was a very well-to-do hobbit, and his name was Baggins. The Bagginses have lived in the neighbourhood of The Hill for time out of mind, and people considered them very respectable, not only because most of them were rich, but also because they never had any adventures or did anything unexpected: you could tell what a Baggins would say on any question without the bother of asking him. This is a story of how a Baggins had an adventure, and found himself doing and saying things altogether unexpected. He may have lost the neighbours' respect, but he gained - well, you will see whether he gained anything in the end."
+match 1c 82 07 79 49 6e 20 61 20 68 6f 6c 65 20 69 6e 20 74 68 65 20 67 72 6f 75 6e 64 20 74 68 65 72 65 20 6c 69 76 65 64 20 61 20 68 6f 62 62 69 74 2e 20 4e 6f 74 20 61 20 6e 61 73 74 79 2c 20 64 69 72 74 79 2c 20 77 65 74 20 68 6f 6c 65 2c 20 66 69 6c 6c 65 64 20 77 69 74 68 20 74 68 65 20 65 6e 64 73 20 6f 66 20 77 6f 72 6d 73 20 61 6e 64 20 61 6e 20 6f 6f 7a 79 20 73 6d 65 6c 6c 2c 20 6e 6f 72 20 79 65 74 20 61 20 64 72 79 2c 20 62 61 72 65 2c 20 73 61 6e 64 79 20 68 6f 6c 65 20 77 69 74 68 20 6e 6f 74 68 69 6e 67 20 69 6e 20 69 74 20 74 6f 20 73 69 74 20 64 6f 77 6e 20 6f 6e 20 6f 72 20 74 6f 20 65 61 74 3a 20 69 74 20 77 61 73 20 61 20 68 6f 62 62 69 74 2d 68 6f 6c 65 2c 20 61 6e 64 20 74 68 61 74 20 6d 65 61 6e 73 20 63 6f 6d 66 6f 72 74 2e 20 49 74 20 68 61 64 20 61 20 70 65 72 66 65 63 74 6c 79 20 72 6f 75 6e 64 20 64 6f 6f 72 20 6c 69 6b 65 20 61 20 70 6f 72 74 68 6f 6c 65 2c 20 70 61 69 6e 74 65 64 20 67 72 65 65 6e 2c 20 77 69 74 68 20 61 20 73 68 69 6e 79 20 79 65 6c 6c 6f 77 20 62 72 61 73 73 20 6b 6e 6f 62 20 69 6e 20 74 68 65 20 65 78 61 63 74 20 6d 69 64 64 6c 65 2e 20 54 68 65 20 64 6f 6f 72 20 6f 70 65 6e 65 64 20 6f 6e 20 74 6f 20 61 20 74 75 62 65 2d 73 68 61 70 65 64 20 68 61 6c 6c 20 6c 69 6b 65 20 61 20 74 75 6e 6e 65 6c 3a 20 61 20 76 65 72 79 20 63 6f 6d 66 6f 72 74 61 62 6c 65 20 74 75 6e 6e 65 6c 20 77 69 74 68 6f 75 74 20 73 6d 6f 6b 65 2c 20 77 69 74 68 20 70 61 6e 65 6c 6c 65 64 20 77 61 6c 6c 73 2c 20 61 6e 64 20 66 6c 6f 6f 72 73 20 74 69 6c 65 64 20 61 6e 64 20 63 61 72 70 65 74 65 64 2c 20 70 72 6f 76 69 64 65 64 20 77 69 74 68 20 70 6f 6c 69 73 68 65 64 20 63 68 61 69 72 73 20 61 6e 64 20 6c 6f 74 73 20 61 6e 64 20 6c 6f 74 73 20 6f 66 20 70 65 67 73 20 66 6f 72 20 68 61 74 73 20 61 6e 64 20 63 6f 61 74 73 20 2d 20 74 68 65 20 68 6f 62 62 69 74 20 77 61 73 20 66 6f 6e 64 20 6f 66 20 76 69 73 69 74 6f 72 73 2e 20 54 68 65 20 74 75 6e 6e 65 6c 20 77 6f 75 6e 64 20 6f 6e 20 61 6e 64 20 6f 6e 2c 20 67 6f 69 6e 67 20 66 61 69 72 6c 79 20 62 75 74 20 6e 6f 74 20 71 75 69 74 65 20 73 74 72 61 69 67 68 74 20 69 6e 74 6f 20 74 68 65 20 73 69 64 65 20 6f 66 20 74 68 65 20 68 69 6c 6c 20 2d 20 54 68 65 20 48 69 6c 6c 2c 20 61 73 20 61 6c 6c 20 74 68 65 20 70 65 6f 70 6c 65 20 66 6f 72 20 6d 61 6e 79 20 6d 69 6c 65 73 20 72 6f 75 6e 64 20 63 61 6c 6c 65 64 20 69 74 20 2d 20 61 6e 64 20 6d 61 6e 79 20 6c 69 74 74 6c 65 20 72 6f 75 6e 64 20 64 6f 6f 72 73 20 6f 70 65 6e 65 64 20 6f 75 74 20 6f 66 20 69 74 2c 20 66 69 72 73 74 20 6f 6e 20 6f 6e 65 20 73 69 64 65 20 61 6e 64 20 74 68 65 6e 20 6f 6e 20 61 6e 6f 74 68 65 72 2e 20 4e 6f 20 67 6f 69 6e 67 20 75 70 73 74 61 69 72 73 20 66 6f 72 20 74 68 65 20 68 6f 62 62 69 74 3a 20 62 65 64 72 6f 6f 6d 73 2c 20 62 61 74 68 72 6f 6f 6d 73 2c 20 63 65 6c 6c 61 72 73 2c 20 70 61 6e 74 72 69 65 73 20 28 6c 6f 74 73 20 6f 66 20 74 68 65 73 65 29 2c 20 77 61 72 64 72 6f 62 65 73 20 28 68 65 20 68 61 64 20 77 68 6f 6c 65 20 72 6f 6f 6d 73 20 64 65 76 6f 74 65 64 20 74 6f 20 63 6c 6f 74 68 65 73 29 2c 20 6b 69 74 63 68 65 6e 73 2c 20 64 69 6e 69 6e 67 2d 72 6f 6f 6d 73 2c 20 61 6c 6c 20 77 65 72 65 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 66 6c 6f 6f 72 2c 20 61 6e 64 20 69 6e 64 65 65 64 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 70 61 73 73 61 67 65 2e 20 54 68 65 20 62 65 73 74 20 72 6f 6f 6d 73 20 77 65 72 65 20 61 6c 6c 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68 61 6e 64 20 73 69 64 65 20 28 67 6f 69 6e 67 20 69 6e 29 2c 20 66 6f 72 20 74 68 65 73 65 20 77 65 72 65 20 74 68 65 20 6f 6e 6c 79 20 6f 6e 65 73 20 74 6f 20 68 61 76 65 20 77 69 6e 64 6f 77 73 2c 20 64 65 65 70 2d 73 65 74 20 72 6f 75 6e 64 20 77 69 6e 64 6f 77 73 20 6c 6f 6f 6b 69 6e 67 20 6f 76 65 72 20 68 69 73 20 67 61 72 64 65 6e 2c 20 61 6e 64 20 6d 65 61 64 6f 77 73 20 62 65 79 6f 6e 64 2c 20 73 6c 6f 70 69 6e 67 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 72 69 76 65 72 2e 20 54 68 69 73 20 68 6f 62 62 69 74 20 77 61 73 20 61 20 76 65 72 79 20 77 65 6c 6c 2d 74 6f 2d 64 6f 20 68 6f 62 62 69 74 2c 20 61 6e 64 20 68 69 73 20 6e 61 6d 65 20 77 61 73 20 42 61 67 67 69 6e 73 2e 20 54 68 65 20 42 61 67 67 69 6e 73 65 73 20 68 61 76 65 20 6c 69 76 65 64 20 69 6e 20 74 68 65 20 6e 65 69 67 68 62 6f 75 72 68 6f 6f 64 20 6f 66 20 54 68 65 20 48 69 6c 6c 20 66 6f 72 20 74 69 6d 65 20 6f 75 74 20 6f 66 20 6d 69 6e 64 2c 20 61 6e 64 20 70 65 6f 70 6c 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 68 65 6d 20 76 65 72 79 20 72 65 73 70 65 63 74 61 62 6c 65 2c 20 6e 6f 74 20 6f 6e 6c 79 20 62 65 63 61 75 73 65 20 6d 6f 73 74 20 6f 66 20 74 68 65 6d 20 77 65 72 65 20 72 69 63 68 2c 20 62 75 74 20 61 6c 73 6f 20 62 65 63 61 75 73 65 20 74 68 65 79 20 6e 65 76 65 72 20 68 61 64 20 61 6e 79 20 61 64 76 65 6e 74 75 72 65 73 20 6f 72 20 64 69 64 20 61 6e 79 74 68 69 6e 67 20 75 6e 65 78 70 65 63 74 65 64 3a 20 79 6f 75 20 63 6f 75 6c 64 20 74 65 6c 6c 20 77 68 61 74 20 61 20 42 61 67 67 69 6e 73 20 77 6f 75 6c 64 20 73 61 79 20 6f 6e 20 61 6e 79 20 71 75 65 73 74 69 6f 6e 20 77 69 74 68 6f 75 74 20 74 68 65 20 62 6f 74 68 65 72 20 6f 66 20 61 73 6b 69 6e 67 20 68 69 6d 2e 20 54 68 69 73 20 69 73 20 61 20 73 74 6f 72 79 20 6f 66 20 68 6f 77 20 61 20 42 61 67 67 69 6e 73 20 68 61 64 20 61 6e 20 61 64 76 65 6e 74 75 72 65 2c 20 61 6e 64 20 66 6f 75 6e 64 20 68 69 6d 73 65 6c 66 20 64 6f 69 6e 67 20 61 6e 64 20 73 61 79 69 6e 67 20 74 68 69 6e 67 73 20 61 6c 74 6f 67 65 74 68 65 72 20 75 6e 65 78 70 65 63 74 65 64 2e 20 48 65 20 6d 61 79 20 68 61 76 65 20 6c 6f 73 74 20 74 68 65 20 6e 65 69 67 68 62 6f 75 72 73 27 20 72 65 73 70 65 63 74 2c 20 62 75 74 20 68 65 20 67 61 69 6e 65 64 20 2d 20 77 65 6c 6c 2c 20 79 6f 75 20 77 69 6c 6c 20 73 65 65 20 77 68 65 74 68 65 72 20 68 65 20 67 61 69 6e 65 64 20 61 6e 79 74 68 69 6e 67 20 69 6e 20 74 68 65 20 65 6e 64 2e
+
+# Test Sequence
+
+encode-pair Foo = { Test-Integer = 127 }
+match 30 03 02 01 7f
+
+encode-pair Foo-Bar = { Test-Integer = 9, Test-Boolean = no }
+match 30 06 02 01 09 01 01 00
+
+encode-pair Foo-Bar = { Test-Integer = 9, Test-Boolean = yes }
+match 30 06 02 01 09 01 01 ff
+
+encode-pair Test-Sequence-TLV  = { Test-Integer = 9, Test-Boolean = no }
+match 30 06 02 01 09 01 01 00
+
+encode-pair Test-Sequence-TLV  = { Test-Integer = 9, Test-Boolean = yes }
+match 30 06 02 01 09 01 01 ff
+
+encode-pair Test-Sequence-Group = { Test-Integer = 9 }
+match 30 03 02 01 09
+
+encode-pair Test-Sequence-Group = { Test-Integer = 9, Test-Boolean = yes }
+match 30 06 02 01 09 01 01 ff
+
+encode-pair Test-Set-Struct = { Test-Integer = 9, Test-Boolean = no }
+match 31 06 01 01 00 02 01 09
+
+encode-pair Test-Set-Struct = { Test-Integer = 9, Test-Boolean = yes }
+match 31 06 01 01 ff 02 01 09
+
+encode-pair Test-Set-TLV  = { Test-Integer = 9, Test-Boolean = no }
+match 31 06 01 01 00 02 01 09
+
+encode-pair Test-Set-TLV  = { Test-Integer = 9, Test-Boolean = yes }
+match 31 06 01 01 ff 02 01 09
+
+encode-pair Test-Set-GROUP = { Test-Integer = 9 }
+match 31 03 02 01 09
+
+encode-pair Test-Set-GROUP = { Test-Integer = 9, Test-Boolean = yes }
+match 31 06 01 01 ff 02 01 09
+
+encode-pair Test-Oid = "2.999.3"
+match 06 03 88 37 03
+
+encode-pair Test-Oid = "1.2.840.113549.1.1.11"
+match 06 09 2a 86 48 86 f7 0d 01 01 0b
+
+encode-pair Test-Oid = "1.2.840.266451853.1.1.11"
+match 06 0a 2a 86 48 ff 86 f7 0d 01 01 0b
+
+encode-pair Test-Oid = "1.2.840.34357754765.1.1.11"
+match 06 0b 2a 86 48 ff ff 86 f7 0d 01 01 0b
+
+encode-pair Test-Oid = "1.2.840.4398044527501.1.1.11"
+match 06 0c 2a 86 48 ff ff ff 86 f7 0d 01 01 0b
+
+encode-pair Test-Oid = "1.2.840.34359738367.13.1.1.11"
+match 06 0c 2a 86 48 ff ff ff ff 7f 0d 01 01 0b
+
+encode-pair Test-Oid = "1.2.840.4398046511103.13.1.1.11"
+match 06 0d 2a 86 48 ff ff ff ff ff 7f 0d 01 01 0b
+
+encode-pair Test-Oid = "1.2.840.562949953421311.13.1.1.11"
+match 06 0e 2a 86 48 ff ff ff ff ff ff 7f 0d 01 01 0b
+
+encode-pair Test-Oid = "1.2.840.72057594037927935.13.1.1.11"
+match 06 0f 2a 86 48 ff ff ff ff ff ff ff 7f 0d 01 01 0b
+
+encode-pair Test-Oid = "1.2.840.9223372036854775807.13.1.1.11"
+match 06 10 2a 86 48 ff ff ff ff ff ff ff ff 7f 0d 01 01 0b
+
+encode-pair Seq-Oid = { Test-Oid = "1.2.840.113549.1.1.11" }
+match 30 0b 06 09 2a 86 48 86 f7 0d 01 01 0b
+
+encode-pair Seq-Oid = { Test-Oid = "1.2.840.266451853.1.1.11" }
+match 30 0c 06 0a 2a 86 48 ff 86 f7 0d 01 01 0b
+
+encode-pair Seq-Oid = { Test-Oid = "1.2.840.34357754765.1.1.11" }
+match 30 0d 06 0b 2a 86 48 ff ff 86 f7 0d 01 01 0b
+
+encode-pair Seq-Oid = { Test-Oid = "1.2.840.4398044527501.1.1.11" }
+match 30 0e 06 0c 2a 86 48 ff ff ff 86 f7 0d 01 01 0b
+
+encode-pair Seq-Oid = { Test-Oid = "1.2.840.34359738367.13.1.1.11" }
+match 30 0e 06 0c 2a 86 48 ff ff ff ff 7f 0d 01 01 0b
+
+encode-pair Seq-Oid = { Test-Oid = "1.2.840.4398046511103.13.1.1.11" }
+match 30 0f 06 0d 2a 86 48 ff ff ff ff ff 7f 0d 01 01 0b
+
+encode-pair Seq-Oid = { Test-Oid = "1.2.840.562949953421311.13.1.1.11" }
+match 30 10 06 0e 2a 86 48 ff ff ff ff ff ff 7f 0d 01 01 0b
+
+encode-pair Seq-Oid = { Test-Oid = "1.2.840.72057594037927935.13.1.1.11" }
+match 30 11 06 0f 2a 86 48 ff ff ff ff ff ff ff 7f 0d 01 01 0b
+
+encode-pair Seq-Oid = { Test-Oid = "1.2.840.9223372036854775807.13.1.1.11" }
+match 30 12 06 10 2a 86 48 ff ff ff ff ff ff ff ff 7f 0d 01 01 0b
+
+encode-pair Test-Seq-Of = { Test-First-Integer = 1, Test-First-Integer = 2 }
+match 30 06 02 01 01 02 01 02
+
+encode-pair Test-Set-Of = { Test-First-Integer = 1, Test-First-Integer = 2580 }
+match 31 07 02 01 01 02 02 0a 14
+
+encode-pair Test-Set-Of = { Test-First-Integer = 2, Test-First-Integer = 1 }
+match 31 06 02 01 01 02 01 02
+
+encode-pair Test-Set-Of-Group = { Test-First-Integer = 2, Test-First-Integer = 1 }
+match 31 06 02 01 01 02 01 02
+
+encode-pair Foo-Bar = { Test-Integer = 1, Test-Boolean = yes }
+match 30 03 01 01 ff
+
+encode-pair Issuer = { RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { organizationName = "Digital Signature Trust Co." } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { commonName = "DST Root CA X3" } } } } } }
+match 30 3f 31 24 30 22 06 03 55 04 0a 13 1b 44 69 67 69 74 61 6c 20 53 69 67 6e 61 74 75 72 65 20 54 72 75 73 74 20 43 6f 2e 31 17 30 15 06 03 55 04 03 13 0e 44 53 54 20 52 6f 6f 74 20 43 41 20 58 33
diff --git a/src/tests/unit/protocols/der/x509certs.txt b/src/tests/unit/protocols/der/x509certs.txt
new file mode 100644 (file)
index 0000000..b22b667
--- /dev/null
@@ -0,0 +1,29 @@
+# -*- text -*-
+# Copyright (C) 2025 The FreeRADIUS Server project and contributors
+# This work is licensed under CC-BY version 4.0 https://creativecommons.org/licenses/by/4.0
+# Version $Id$
+proto der
+proto-dictionary der
+fuzzer-out der
+max-buffer-size 2048
+
+proto-dictionary-root Certificate
+decode-pair 30 82 04 92 30 82 03 7a a0 03 02 01 02 02 10 0a 01 41 42 00 00 01 53 85 73 6a 0b 85 ec a7 08 30 0d 06 09 2a 86 48 86 f7 0d 01 01 0b 05 00 30 3f 31 24 30 22 06 03 55 04 0a 13 1b 44 69 67 69 74 61 6c 20 53 69 67 6e 61 74 75 72 65 20 54 72 75 73 74 20 43 6f 2e 31 17 30 15 06 03 55 04 03 13 0e 44 53 54 20 52 6f 6f 74 20 43 41 20 58 33 30 1e 17 0d 31 36 30 33 31 37 31 36 34 30 34 36 5a 17 0d 32 31 30 33 31 37 31 36 34 30 34 36 5a 30 4a 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 16 30 14 06 03 55 04 0a 13 0d 4c 65 74 27 73 20 45 6e 63 72 79 70 74 31 23 30 21 06 03 55 04 03 13 1a 4c 65 74 27 73 20 45 6e 63 72 79 70 74 20 41 75 74 68 6f 72 69 74 79 20 58 33 30 82 01 22 30 0d 06 09 2a 86 48 86 f7 0d 01 01 01 05 00 03 82 01 0f 00 30 82 01 0a 02 82 01 01 00 9c d3 0c f0 5a e5 2e 47 b7 72 5d 37 83 b3 68 63 30 ea d7 35 26 19 25 e1 bd be 35 f1 70 92 2f b7 b8 4b 41 05 ab a9 9e 35 08 58 ec b1 2a c4 68 87 0b a3 e3 75 e4 e6 f3 a7 62 71 ba 79 81 60 1f d7 91 9a 9f f3 d0 78 67 71 c8 69 0e 95 91 cf fe e6 99 e9 60 3c 48 cc 7e ca 4d 77 12 24 9d 47 1b 5a eb b9 ec 1e 37 00 1c 9c ac 7b a7 05 ea ce 4a eb bd 41 e5 36 98 b9 cb fd 6d 3c 96 68 df 23 2a 42 90 0c 86 74 67 c8 7f a5 9a b8 52 61 14 13 3f 65 e9 82 87 cb db fa 0e 56 f6 86 89 f3 85 3f 97 86 af b0 dc 1a ef 6b 0d 95 16 7d c4 2b a0 65 b2 99 04 36 75 80 6b ac 4a f3 1b 90 49 78 2f a2 96 4f 2a 20 25 29 04 c6 74 c0 d0 31 cd 8f 31 38 95 16 ba a8 33 b8 43 f1 b1 1f c3 30 7f a2 79 31 13 3d 2d 36 f8 e3 fc f2 33 6a b9 39 31 c5 af c4 8d 0d 1d 64 16 33 aa fa 84 29 b6 d4 0b c0 d8 7d c3 93 02 03 01 00 01 a3 82 01 7d 30 82 01 79 30 12 06 03 55 1d 13 01 01 ff 04 08 30 06 01 01 ff 02 01 00 30 0e 06 03 55 1d 0f 01 01 ff 04 04 03 02 01 86 30 7f 06 08 2b 06 01 05 05 07 01 01 04 73 30 71 30 32 06 08 2b 06 01 05 05 07 30 01 86 26 68 74 74 70 3a 2f 2f 69 73 72 67 2e 74 72 75 73 74 69 64 2e 6f 63 73 70 2e 69 64 65 6e 74 72 75 73 74 2e 63 6f 6d 30 3b 06 08 2b 06 01 05 05 07 30 02 86 2f 68 74 74 70 3a 2f 2f 61 70 70 73 2e 69 64 65 6e 74 72 75 73 74 2e 63 6f 6d 2f 72 6f 6f 74 73 2f 64 73 74 72 6f 6f 74 63 61 78 33 2e 70 37 63 30 1f 06 03 55 1d 23 04 18 30 16 80 14 c4 a7 b1 a4 7b 2c 71 fa db e1 4b 90 75 ff c4 15 60 85 89 10 30 54 06 03 55 1d 20 04 4d 30 4b 30 08 06 06 67 81 0c 01 02 01 30 3f 06 0b 2b 06 01 04 01 82 df 13 01 01 01 30 30 30 2e 06 08 2b 06 01 05 05 07 02 01 16 22 68 74 74 70 3a 2f 2f 63 70 73 2e 72 6f 6f 74 2d 78 31 2e 6c 65 74 73 65 6e 63 72 79 70 74 2e 6f 72 67 30 3c 06 03 55 1d 1f 04 35 30 33 30 31 a0 2f a0 2d 86 2b 68 74 74 70 3a 2f 2f 63 72 6c 2e 69 64 65 6e 74 72 75 73 74 2e 63 6f 6d 2f 44 53 54 52 4f 4f 54 43 41 58 33 43 52 4c 2e 63 72 6c 30 1d 06 03 55 1d 0e 04 16 04 14 a8 4a 6a 63 04 7d dd ba e6 d1 39 b7 a6 45 65 ef f3 a8 ec a1 30 0d 06 09 2a 86 48 86 f7 0d 01 01 0b 05 00 03 82 01 01 00 dd 33 d7 11 f3 63 58 38 dd 18 15 fb 09 55 be 76 56 b9 70 48 a5 69 47 27 7b c2 24 08 92 f1 5a 1f 4a 12 29 37 24 74 51 1c 62 68 b8 cd 95 70 67 e5 f7 a4 bc 4e 28 51 cd 9b e8 ae 87 9d ea d8 ba 5a a1 01 9a dc f0 dd 6a 1d 6a d8 3e 57 23 9e a6 1e 04 62 9a ff d7 05 ca b7 1f 3f c0 0a 48 bc 94 b0 b6 65 62 e0 c1 54 e5 a3 2a ad 20 c4 e9 e6 bb dc c8 f6 b5 c3 32 a3 98 cc 77 a8 e6 79 65 07 2b cb 28 fe 3a 16 52 81 ce 52 0c 2e 5f 83 e8 d5 06 33 fb 77 6c ce 40 ea 32 9e 1f 92 5c 41 c1 74 6c 5b 5d 0a 5f 33 cc 4d 9f ac 38 f0 2f 7b 2c 62 9d d9 a3 91 6f 25 1b 2f 90 b1 19 46 3d f6 7e 1b a6 7a 87 b9 a3 7a 6d 18 fa 25 a5 91 87 15 e0 f2 16 2f 58 b0 06 2f 2c 68 26 c6 4b 98 cd da 9f 0c f9 7f 90 ed 43 4a 12 44 4e 6f 73 7a 28 ea a4 aa 6e 7b 4c 7d 87 dd e0 c9 02 44 a7 87 af c3 34 5b b4 42
+match Certificate = { tbsCertificate = { version = { VersionNum = 2 }, serialNumber = 0x0a0141420000015385736a0b85eca708, signature = { iso = { member-body = { us = { rsadsi = { pkcs = { pkcs-1 = { sha256WithRSAEncryption = no } } } } } } }, issuer = { RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { organizationName = "Digital Signature Trust Co." } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { commonName = "DST Root CA X3" } } } } } }, validity = { notBefore = "2016-03-17T16:40:46Z", notAfter = "2021-03-17T16:40:46Z" }, subject = { RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { countryName = "US" } } } } }, RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { organizationName = "Let's Encrypt" } } } } }, RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { commonName = "Let's Encrypt Authority X3" } } } } } }, subjectPublicKeyInfo = { algorithm = { iso = { member-body = { us = { rsadsi = { pkcs = { pkcs-1 = { rsaEncryption = no } } } } } } }, subjectPublicKey = 0x003082010a02820101009cd30cf05ae52e47b7725d3783b3686330ead735261925e1bdbe35f170922fb7b84b4105aba99e350858ecb12ac468870ba3e375e4e6f3a76271ba7981601fd7919a9ff3d0786771c8690e9591cffee699e9603c48cc7eca4d7712249d471b5aebb9ec1e37001c9cac7ba705eace4aebbd41e53698b9cbfd6d3c9668df232a42900c867467c87fa59ab8526114133f65e98287cbdbfa0e56f68689f3853f9786afb0dc1aef6b0d95167dc42ba065b299043675806bac4af31b9049782fa2964f2a20252904c674c0d031cd8f31389516baa833b843f1b11fc3307fa27931133d2d36f8e3fcf2336ab93931c5afc48d0d1d641633aafa8429b6d40bc0d87dc3930203010001 }, extensions = { Critical = { joint-iso-itu-t = { ds = { certificateExtension = { basicConstraints = { cA = yes, pathLenConstraint = 0 } } } }, joint-iso-itu-t = { ds = { certificateExtension = { keyUsage = { digitalSignature = yes, nonRepudation = no, keyEncipherment = no, dataEncipherment = no, keyAgreement = no, keyCertSign = yes, cRLSign = yes, encipherOnly = no } } } } }, iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { pe = { authorityInfoAccess = { accessDescription = { accessMethod = "1.3.6.1.5.5.7.48.1", accessLocation = { uniformResourceIdentifier = "http://isrg.trustid.ocsp.identrust.com" } }, accessDescription = { accessMethod = "1.3.6.1.5.5.7.48.2", accessLocation = { uniformResourceIdentifier = "http://apps.identrust.com/roots/dstrootcax3.p7c" } } } } } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { authorityKeyIdentifier = { keyIdentifier = 0xc4a7b1a47b2c71fadbe14b9075ffc41560858910 } } } }, joint-iso-itu-t = { ds = { certificateExtension = { certificatePolicies = { policyInformation = { policyIdentifier = "2.23.140.1.2.1" }, policyInformation = { policyIdentifier = "1.3.6.1.4.1.44947.1.1.1", policyQualifiers = { policyQualifierInfo = { iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { raw.2 = { raw.1 = 0x1622687474703a2f2f6370732e726f6f742d78312e6c657473656e63727970742e6f7267 } } } } } } } } } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { cRLDIstributionPoints = { distributionPoint = { distributionPointName = { fullName = { uniformResourceIdentifier = "http://crl.identrust.com/DSTROOTCAX3CRL.crl" } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { subjectKeyIdentifier = 0xa84a6a63047dddbae6d139b7a64565eff3a8eca1 } } } } }, signatureAlgorithm = { iso = { member-body = { us = { rsadsi = { pkcs = { pkcs-1 = { sha256WithRSAEncryption = no } } } } } } }, signature = 0x00dd33d711f3635838dd1815fb0955be7656b97048a56947277bc2240892f15a1f4a1229372474511c6268b8cd957067e5f7a4bc4e2851cd9be8ae879dead8ba5aa1019adcf0dd6a1d6ad83e57239ea61e04629affd705cab71f3fc00a48bc94b0b66562e0c154e5a32aad20c4e9e6bbdcc8f6b5c332a398cc77a8e67965072bcb28fe3a165281ce520c2e5f83e8d50633fb776cce40ea329e1f925c41c1746c5b5d0a5f33cc4d9fac38f02f7b2c629dd9a3916f251b2f90b119463df67e1ba67a87b9a37a6d18fa25a5918715e0f2162f58b0062f2c6826c64b98cdda9f0cf97f90ed434a12444e6f737a28eaa4aa6e7b4c7d87dde0c90244a787afc3345bb442 }
+
+decode-pair 30 82 06 17 30 82 05 9d a0 03 02 01 02 02 13 33 00 00 4a 3e 86 50 65 e6 81 d8 c8 7b 00 00 00 00 4a 3e 30 0a 06 08 2a 86 48 ce 3d 04 03 03 30 5d 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 1e 30 1c 06 03 55 04 0a 13 15 4d 69 63 72 6f 73 6f 66 74 20 43 6f 72 70 6f 72 61 74 69 6f 6e 31 2e 30 2c 06 03 55 04 03 13 25 4d 69 63 72 6f 73 6f 66 74 20 41 7a 75 72 65 20 45 43 43 20 54 4c 53 20 49 73 73 75 69 6e 67 20 43 41 20 30 37 30 1e 17 0d 32 34 31 30 32 38 32 30 33 33 31 33 5a 17 0d 32 35 31 30 32 33 32 30 33 33 31 33 5a 30 6a 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 0b 30 09 06 03 55 04 08 13 02 57 41 31 10 30 0e 06 03 55 04 07 13 07 52 65 64 6d 6f 6e 64 31 1e 30 1c 06 03 55 04 0a 13 15 4d 69 63 72 6f 73 6f 66 74 20 43 6f 72 70 6f 72 61 74 69 6f 6e 31 1c 30 1a 06 03 55 04 03 13 13 6c 65 61 72 6e 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 30 59 30 13 06 07 2a 86 48 ce 3d 02 01 06 08 2a 86 48 ce 3d 03 01 07 03 42 00 04 bc 91 b5 25 05 f2 a2 1e fe 02 23 22 ca 02 53 34 1e e9 96 07 3d fd 10 f9 f7 d3 0e bd af e3 c3 fb a7 9f 3e f7 e8 cc be 9c f2 99 a5 15 d2 79 e3 a0 43 9c 03 c9 c1 90 eb 2a a6 3e f8 ac 45 7c 26 07 a3 82 04 2d 30 82 04 29 30 82 01 7d 06 0a 2b 06 01 04 01 d6 79 02 04 02 04 82 01 6d 04 82 01 69 01 67 00 76 00 12 f1 4e 34 bd 53 72 4c 84 06 19 c3 8f 3f 7a 13 f8 e7 b5 62 87 88 9c 6d 30 05 84 eb e5 86 26 3a 00 00 01 92 d4 de 62 25 00 00 04 03 00 47 30 45 02 21 00 f1 c1 0a 24 64 e5 ec b6 63 1b 35 ec 32 0a 41 02 2c 63 75 91 d1 12 cd f0 8b 1c 8a 75 2e 48 c2 41 02 20 4a 35 b1 ab 4f 35 b1 bb aa 71 a2 e1 44 d7 e8 d4 47 6f 87 a7 fa 5a 95 98 16 50 6c 34 53 72 9c e1 00 76 00 7d 59 1e 12 e1 78 2a 7b 1c 61 67 7c 5e fd f8 d0 87 5c 14 a0 4e 95 9e b9 03 2f d9 0e 8c 2e 79 b8 00 00 01 92 d4 de 60 f7 00 00 04 03 00 47 30 45 02 20 30 e3 c4 ca a6 39 19 84 0a ff 5e f8 e5 5e f4 72 1c 6e da 63 a0 ab 00 01 c7 12 06 7b 22 3a 0f ec 02 21 00 80 5f ad 84 78 fc e7 52 c5 d3 c4 ab 5f 24 f2 7d 5c 7b e7 94 70 54 e6 22 de 5b b0 e6 30 bd c4 ac 00 75 00 1a 04 ff 49 d0 54 1d 40 af f6 a0 c3 bf f1 d8 c4 67 2f 4e ec ee 23 40 68 98 6b 17 40 2e dc 89 7d 00 00 01 92 d4 de 61 05 00 00 04 03 00 46 30 44 02 20 7b d6 d9 a2 f2 8b 48 31 96 7b fe af 5e d3 12 3c 7b 1e 89 af 6a 33 12 2c ce 5a cf 65 fc 5d f5 00 02 20 36 7e 05 ab 77 f6 f8 f1 42 fa cd b6 b2 8d f6 97 7a b5 2c 3a 6b 00 8b c3 50 a3 5e ba 86 32 16 5b 30 27 06 09 2b 06 01 04 01 82 37 15 0a 04 1a 30 18 30 0a 06 08 2b 06 01 05 05 07 03 02 30 0a 06 08 2b 06 01 05 05 07 03 01 30 3c 06 09 2b 06 01 04 01 82 37 15 07 04 2f 30 2d 06 25 2b 06 01 04 01 82 37 15 08 87 bd d7 1b 81 e7 eb 46 82 81 9d 2e 8e d0 0c 87 f0 da 1d 5d 82 84 e5 69 82 f3 a7 3e 02 01 64 02 01 26 30 81 b4 06 08 2b 06 01 05 05 07 01 01 04 81 a7 30 81 a4 30 73 06 08 2b 06 01 05 05 07 30 02 86 67 68 74 74 70 3a 2f 2f 77 77 77 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 70 6b 69 6f 70 73 2f 63 65 72 74 73 2f 4d 69 63 72 6f 73 6f 66 74 25 32 30 41 7a 75 72 65 25 32 30 45 43 43 25 32 30 54 4c 53 25 32 30 49 73 73 75 69 6e 67 25 32 30 43 41 25 32 30 30 37 25 32 30 2d 25 32 30 78 73 69 67 6e 2e 63 72 74 30 2d 06 08 2b 06 01 05 05 07 30 01 86 21 68 74 74 70 3a 2f 2f 6f 6e 65 6f 63 73 70 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 6f 63 73 70 30 1d 06 03 55 1d 0e 04 16 04 14 66 04 97 38 47 6c 00 11 7e 16 74 57 b7 8b 2e ae 04 33 2c 56 30 0e 06 03 55 1d 0f 01 01 ff 04 04 03 02 07 80 30 37 06 03 55 1d 11 04 30 30 2e 82 17 77 77 77 2e 6c 65 61 72 6e 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 82 13 6c 65 61 72 6e 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 30 0c 06 03 55 1d 13 01 01 ff 04 02 30 00 30 6a 06 03 55 1d 1f 04 63 30 61 30 5f a0 5d a0 5b 86 59 68 74 74 70 3a 2f 2f 77 77 77 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 70 6b 69 6f 70 73 2f 63 72 6c 2f 4d 69 63 72 6f 73 6f 66 74 25 32 30 41 7a 75 72 65 25 32 30 45 43 43 25 32 30 54 4c 53 25 32 30 49 73 73 75 69 6e 67 25 32 30 43 41 25 32 30 30 37 2e 63 72 6c 30 66 06 03 55 1d 20 04 5f 30 5d 30 51 06 0c 2b 06 01 04 01 82 37 4c 83 7d 01 01 30 41 30 3f 06 08 2b 06 01 05 05 07 02 01 16 33 68 74 74 70 3a 2f 2f 77 77 77 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 70 6b 69 6f 70 73 2f 44 6f 63 73 2f 52 65 70 6f 73 69 74 6f 72 79 2e 68 74 6d 30 08 06 06 67 81 0c 01 02 02 30 1f 06 03 55 1d 23 04 18 30 16 80 14 c3 5e ac 40 76 c0 06 4d e3 2b 94 99 30 60 73 34 98 29 c6 51 30 1d 06 03 55 1d 25 04 16 30 14 06 08 2b 06 01 05 05 07 03 02 06 08 2b 06 01 05 05 07 03 01 30 0a 06 08 2a 86 48 ce 3d 04 03 03 03 68 00 30 65 02 30 46 da 82 e0 40 1e ed a2 71 cc 45 24 5c 26 fa 80 91 a8 cf 49 32 a7 1c 81 f2 79 24 7a de dd 19 bc 62 8d 8a bf e1 9a cd d6 f4 16 b1 e1 56 2d 23 9d 02 31 00 97 18 e1 45 9e f9 3b cb 67 c0 6e 38 86 70 ab 38 49 93 ad e2 26 b0 d0 73 36 ba 53 46 d0 8f 3f ca 55 3e 9c df f5 f4 0e a3 67 e1 cc fe a9 a3 50 89
+match Certificate = { tbsCertificate = { version = { VersionNum = 2 }, serialNumber = 0x3300004a3e865065e681d8c87b000000004a3e, signature = { iso = { member-body = { us = { ansi-x962 = { signatures = { ecdsa-with-SHA2 = { ecdsa-with-SHA384 = ::DEFAULT } } } } } } }, issuer = { RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { countryName = "US" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { organizationName = "Microsoft Corporation" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { commonName = "Microsoft Azure ECC TLS Issuing CA 07" } } } } } }, validity = { notBefore = "2024-10-28T20:33:13Z", notAfter = "2025-10-23T20:33:13Z" }, subject = { RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { countryName = "US" } } } } }, RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { stateOrProvinceName = "WA" } } } } }, RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { localityName = "Redmond" } } } } }, RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { organizationName = "Microsoft Corporation" } } } } }, RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { commonName = "learn.microsoft.com" } } } } } }, subjectPublicKeyInfo = { algorithm = { iso = { member-body = { us = { ansi-x962 = { keyType = { ecPublicKey = "1.2.840.10045.3.1.7" } } } } } }, subjectPublicKey = 0x0004bc91b52505f2a21efe022322ca0253341ee996073dfd10f9f7d30ebdafe3c3fba79f3ef7e8ccbe9cf299a515d279e3a0439c03c9c190eb2aa63ef8ac457c2607 }, extensions = { Critical = { joint-iso-itu-t = { ds = { certificateExtension = { keyUsage = { digitalSignature = yes, nonRepudation = no, keyEncipherment = no, dataEncipherment = no, keyAgreement = no, keyCertSign = no, cRLSign = no, encipherOnly = no } } } }, joint-iso-itu-t = { ds = { certificateExtension = { basicConstraints = { cA = ::DEFAULT } } } } }, iso = { identified-organization = { dod = { internet = { raw.4 = { raw.1 = { raw.11129 = { raw.2 = { raw.4 = { raw.2 = 0x04820169016700760012f14e34bd53724c840619c38f3f7a13f8e7b56287889c6d300584ebe586263a00000192d4de62250000040300473045022100f1c10a2464e5ecb6631b35ec320a41022c637591d112cdf08b1c8a752e48c24102204a35b1ab4f35b1bbaa71a2e144d7e8d4476f87a7fa5a959816506c3453729ce10076007d591e12e1782a7b1c61677c5efdf8d0875c14a04e959eb9032fd90e8c2e79b800000192d4de60f70000040300473045022030e3c4caa63919840aff5ef8e55ef4721c6eda63a0ab0001c712067b223a0fec022100805fad8478fce752c5d3c4ab5f24f27d5c7be7947054e622de5bb0e630bdc4ac0075001a04ff49d0541d40aff6a0c3bff1d8c4672f4eecee234068986b17402edc897d00000192d4de6105000004030046304402207bd6d9a2f28b4831967bfeaf5ed3123c7b1e89af6a33122cce5acf65fc5df5000220367e05ab77f6f8f142facdb6b28df6977ab52c3a6b008bc350a35eba8632165b } } } } } } } } }, iso = { identified-organization = { dod = { internet = { raw.4 = { raw.1 = { raw.311 = { raw.21 = { raw.10 = 0x3018300a06082b06010505070302300a06082b06010505070301 } } } } } } } }, iso = { identified-organization = { dod = { internet = { raw.4 = { raw.1 = { raw.311 = { raw.21 = { raw.7 = 0x302d06252b060104018237150887bdd71b81e7eb4682819d2e8ed00c87f0da1d5d8284e56982f3a73e020164020126 } } } } } } } }, iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { pe = { authorityInfoAccess = { accessDescription = { accessMethod = "1.3.6.1.5.5.7.48.2", accessLocation = { uniformResourceIdentifier = "http://www.microsoft.com/pkiops/certs/Microsoft\%20Azure\%20ECC\%20TLS\%20Issuing\%20CA\%2007\%20-\%20xsign.crt" } }, accessDescription = { accessMethod = "1.3.6.1.5.5.7.48.1", accessLocation = { uniformResourceIdentifier = "http://oneocsp.microsoft.com/ocsp" } } } } } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { subjectKeyIdentifier = 0x66049738476c00117e167457b78b2eae04332c56 } } }, joint-iso-itu-t = { ds = { certificateExtension = { subjectAltName = { dNSName = "www.learn.microsoft.com", dNSName = "learn.microsoft.com" } } } }, joint-iso-itu-t = { ds = { certificateExtension = { cRLDIstributionPoints = { distributionPoint = { distributionPointName = { fullName = { uniformResourceIdentifier = "http://www.microsoft.com/pkiops/crl/Microsoft\%20Azure\%20ECC\%20TLS\%20Issuing\%20CA\%2007.crl" } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { certificatePolicies = { policyInformation = { policyIdentifier = "1.3.6.1.4.1.311.76.509.1.1", policyQualifiers = { policyQualifierInfo = { iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { raw.2 = { raw.1 = 0x1633687474703a2f2f7777772e6d6963726f736f66742e636f6d2f706b696f70732f446f63732f5265706f7369746f72792e68746d } } } } } } } } } } }, policyInformation = { policyIdentifier = "2.23.140.1.2.2" } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { authorityKeyIdentifier = { keyIdentifier = 0xc35eac4076c0064de32b9499306073349829c651 } } } }, joint-iso-itu-t = { ds = { certificateExtension = { extKeyUsage = { keyPurposeId = "1.3.6.1.5.5.7.3.2", keyPurposeId = "1.3.6.1.5.5.7.3.1" } } } } } }, signatureAlgorithm = { iso = { member-body = { us = { ansi-x962 = { signatures = { ecdsa-with-SHA2 = { ecdsa-with-SHA384 = ::DEFAULT } } } } } } }, signature = 0x003065023046da82e0401eeda271cc45245c26fa8091a8cf4932a71c81f279247adedd19bc628d8abfe19acdd6f416b1e1562d239d0231009718e1459ef93bcb67c06e388670ab384993ade226b0d07336ba5346d08f3fca553e9cdff5f40ea367e1ccfea9a35089 }
+
+decode-pair 30 82 06 22 30 82 05 0A A0 03 02 01 02 02 14 04 63 6F 8C 80 F7 FC F6 C2 53 C3 B1 E5 1A 9F 83 90 21 63 B6 30 0D 06 09 2A 86 48 86 F7 0D 01 01 0B 05 00 30 75 31 0B 30 09 06 03 55 04 06 13 02 55 53 31 13 30 11 06 03 55 04 08 0C 0A 43 61 6C 69 66 6F 72 6E 69 61 31 16 30 14 06 03 55 04 07 0C 0D 53 61 6E 20 46 72 61 6E 63 69 73 63 6F 31 15 30 13 06 03 55 04 0A 0C 0C 45 78 61 6D 70 6C 65 20 43 6F 72 70 31 22 30 20 06 09 2A 86 48 86 F7 0D 01 09 01 16 13 65 78 61 6D 70 6C 65 40 65 78 61 6D 70 6C 65 2E 63 6F 6D 30 1E 17 0D 32 35 30 31 31 37 31 35 31 30 34 31 5A 17 0D 32 35 30 32 31 36 31 35 31 30 34 31 5A 30 75 31 0B 30 09 06 03 55 04 06 13 02 55 53 31 13 30 11 06 03 55 04 08 0C 0A 43 61 6C 69 66 6F 72 6E 69 61 31 16 30 14 06 03 55 04 07 0C 0D 53 61 6E 20 46 72 61 6E 63 69 73 63 6F 31 15 30 13 06 03 55 04 0A 0C 0C 45 78 61 6D 70 6C 65 20 43 6F 72 70 31 22 30 20 06 09 2A 86 48 86 F7 0D 01 09 01 16 13 65 78 61 6D 70 6C 65 40 65 78 61 6D 70 6C 65 2E 63 6F 6D 30 82 01 22 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03 82 01 0F 00 30 82 01 0A 02 82 01 01 00 C8 FE A4 8B F8 64 A8 FF 53 1D A1 9E BF B9 0F BD 64 B3 51 F0 BB ED BB B2 A6 0E 8D 64 9F 0C 88 E5 20 11 8A A2 57 AF BC D0 AE 33 90 AD 55 E3 B7 F3 56 E6 BA 53 4C 59 A9 40 CE 49 BF DE 50 61 95 E1 A5 29 C7 C6 55 3B 90 70 37 E7 7A 40 8D 4B 41 5C 56 0F 26 20 C7 53 8B D5 F8 3D 29 6A 45 7C FF D6 DA D4 9D 97 B7 12 9E 55 48 4D 6A 96 C4 FE 13 8A 55 0A 5C 23 13 32 E1 84 99 37 08 C3 E0 1D 0D FC BE 37 0B E1 1C BE 42 BC 99 2F 33 C6 4C C0 0E 04 77 61 9F 22 91 9F 1C BA C5 23 30 E5 73 C0 8B C1 77 D4 C1 1A B7 24 1E 7D C2 81 41 20 62 89 41 05 2F D3 4E A8 C8 92 1F DD D1 03 31 05 0F A0 CE 6D 28 A4 E9 FF CB D1 7D 27 C9 08 AA 2C 87 04 EA B5 F3 1D 6E 98 AD 80 AA A6 49 CA E8 83 08 58 63 F5 8C 02 42 BA 66 26 BB 6A 44 29 EB 88 AB 13 04 7C 58 ED 07 56 54 2B D6 F8 28 73 3A AD 33 AE 37 8B 02 03 01 00 01 A3 82 02 A8 30 82 02 A4 30 0E 06 03 55 1D 0F 01 01 FF 04 04 03 02 03 A8 30 1D 06 03 55 1D 25 04 16 30 14 06 08 2B 06 01 05 05 07 03 01 06 08 2B 06 01 05 05 07 03 02 30 0F 06 03 55 1D 13 01 01 FF 04 05 30 03 01 01 FF 30 27 06 03 55 1D 11 04 20 30 1E 82 0B 65 78 61 6D 70 6C 65 2E 63 6F 6D 82 0F 77 77 77 2E 65 78 61 6D 70 6C 65 2E 63 6F 6D 30 27 06 03 55 1D 1F 04 20 30 1E 30 1C A0 1A A0 18 86 16 68 74 74 70 3A 2F 2F 65 78 61 6D 70 6C 65 2E 63 6F 6D 2F 63 72 6C 30 33 06 08 2B 06 01 05 05 07 01 01 04 27 30 25 30 23 06 08 2B 06 01 05 05 07 30 01 86 17 68 74 74 70 3A 2F 2F 65 78 61 6D 70 6C 65 2E 63 6F 6D 2F 6F 63 73 70 30 1D 06 03 55 1D 0E 04 16 04 14 D1 AE 81 F4 07 4F ED 5A BE 29 C7 1A 17 91 54 CD D3 9E 1A 1A 30 81 9C 06 03 55 1D 23 04 81 94 30 81 91 A1 79 A4 77 30 75 31 0B 30 09 06 03 55 04 06 13 02 55 53 31 13 30 11 06 03 55 04 08 0C 0A 43 61 6C 69 66 6F 72 6E 69 61 31 16 30 14 06 03 55 04 07 0C 0D 53 61 6E 20 46 72 61 6E 63 69 73 63 6F 31 15 30 13 06 03 55 04 0A 0C 0C 45 78 61 6D 70 6C 65 20 43 6F 72 70 31 22 30 20 06 09 2A 86 48 86 F7 0D 01 09 01 16 13 65 78 61 6D 70 6C 65 40 65 78 61 6D 70 6C 65 2E 63 6F 6D 82 14 04 63 6F 8C 80 F7 FC F6 C2 53 C3 B1 E5 1A 9F 83 90 21 63 B6 30 7C 06 03 55 1D 20 04 75 30 73 30 71 06 04 2A 03 04 05 30 69 30 22 06 08 2B 06 01 05 05 07 02 01 16 16 68 74 74 70 3A 2F 2F 65 78 61 6D 70 6C 65 2E 63 6F 6D 2F 63 70 73 30 43 06 08 2B 06 01 05 05 07 02 02 30 37 30 21 1A 11 4F 72 67 61 6E 69 73 61 74 69 6F 6E 20 4E 61 6D 65 30 0C 02 01 01 02 01 02 02 01 03 02 01 04 1A 12 45 78 70 6C 69 63 69 74 20 54 65 78 74 20 48 65 72 65 30 27 06 03 55 1D 12 04 20 30 1E 82 0B 65 78 61 6D 70 6C 65 2E 63 6F 6D 82 0F 77 77 77 2E 65 78 61 6D 70 6C 65 2E 63 6F 6D 30 33 06 03 55 1D 1C 01 01 FF 04 29 30 27 A0 1E A0 1C 86 1A 68 74 74 70 3A 2F 2F 6D 79 68 6F 73 74 2E 63 6F 6D 2F 6D 79 63 61 2E 63 72 6C 83 02 05 60 84 01 FF 30 0C 06 03 55 1D 24 04 05 30 03 80 01 01 30 0A 06 03 55 1D 36 04 03 02 01 02 30 27 06 08 2B 06 01 05 05 07 01 0B 04 1B 30 19 30 17 06 08 2B 06 01 05 05 07 30 02 86 0B 65 78 61 6D 70 6C 65 2E 63 6F 6D 30 0D 06 09 2A 86 48 86 F7 0D 01 01 0B 05 00 03 82 01 01 00 6A 02 D2 76 67 BA 04 A4 C5 FD EA D5 4F 42 FF 2E 63 B9 89 0A 28 A3 6F 51 3A 2F 48 DF A3 30 58 AB 82 6A D3 BE 45 2F C9 DB 50 D0 F5 B7 D7 E9 77 85 23 E4 44 65 63 1D 1F 31 61 8B 69 85 E2 3C C5 15 A9 23 DD D4 B5 2A BC 7A EA 77 E7 22 EB E0 20 A1 30 0B 11 DC 98 D4 D7 1A 03 98 10 25 66 7D AF 2D 9E 89 01 DB 35 0E 86 F9 B6 D9 F5 EE 1E 20 B3 8C 4C 05 BF EB 04 2B 2C DA A3 B5 58 2D 26 8A 97 43 DF 2D 4E 56 E8 C5 D7 86 F3 08 71 E8 CA 17 6F 66 FC 96 8E C6 B8 C8 13 0D 42 A4 18 6E A6 2A 06 73 4A 50 21 FA 7A 3F D3 35 25 BC 45 87 BF E9 27 10 2B 99 55 9F B6 01 C5 E0 8A 4F 8B 49 00 32 ED 4C FA 50 B0 53 8F A3 79 C4 66 D5 5B 54 C3 EE 93 77 24 DB 4C 8D E8 58 EC A8 64 F5 91 9C D5 94 29 11 FC 8E 3C 32 FC A5 D2 4D 4D 17 85 E8 3C A4 DD FF 64 94 0D 0D 6F 1F F8 64 87 2A 8B 15 8D 04 E6 62
+match Certificate = { tbsCertificate = { version = { VersionNum = 2 }, serialNumber = 0x04636f8c80f7fcf6c253c3b1e51a9f83902163b6, signature = { iso = { member-body = { us = { rsadsi = { pkcs = { pkcs-1 = { sha256WithRSAEncryption = no } } } } } } }, issuer = { RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { countryName = "US" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { stateOrProvinceName = "California" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { localityName = "San Francisco" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { organizationName = "Example Corp" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { iso = { member-body = { us = { rsadsi = { pkcs = { raw.9 = { raw.1 = 0x16136578616d706c65406578616d706c652e636f6d } } } } } } } } }, validity = { notBefore = "2025-01-17T15:10:41Z", notAfter = "2025-02-16T15:10:41Z" }, subject = { RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { countryName = "US" } } } } }, RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { stateOrProvinceName = "California" } } } } }, RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { localityName = "San Francisco" } } } } }, RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { organizationName = "Example Corp" } } } } }, RelativeDistinguishedName = { AttributeTypeandValue = { iso = { member-body = { us = { rsadsi = { pkcs = { raw.9 = { raw.1 = 0x16136578616d706c65406578616d706c652e636f6d } } } } } } } } }, subjectPublicKeyInfo = { algorithm = { iso = { member-body = { us = { rsadsi = { pkcs = { pkcs-1 = { rsaEncryption = no } } } } } } }, subjectPublicKey = 0x003082010a0282010100c8fea48bf864a8ff531da19ebfb90fbd64b351f0bbedbbb2a60e8d649f0c88e520118aa257afbcd0ae3390ad55e3b7f356e6ba534c59a940ce49bfde506195e1a529c7c6553b907037e77a408d4b415c560f2620c7538bd5f83d296a457cffd6dad49d97b7129e55484d6a96c4fe138a550a5c231332e184993708c3e01d0dfcbe370be11cbe42bc992f33c64cc00e0477619f22919f1cbac52330e573c08bc177d4c11ab7241e7dc2814120628941052fd34ea8c8921fddd10331050fa0ce6d28a4e9ffcbd17d27c908aa2c8704eab5f31d6e98ad80aaa649cae883085863f58c0242ba6626bb6a4429eb88ab13047c58ed0756542bd6f828733aad33ae378b0203010001 }, extensions = { Critical = { joint-iso-itu-t = { ds = { certificateExtension = { keyUsage = { digitalSignature = yes, nonRepudation = no, keyEncipherment = yes, dataEncipherment = no, keyAgreement = yes, keyCertSign = no, cRLSign = no, encipherOnly = no } } } }, joint-iso-itu-t = { ds = { certificateExtension = { basicConstraints = { cA = yes } } } }, joint-iso-itu-t = { ds = { certificateExtension = { raw.28 = 0x3027a01ea01c861a687474703a2f2f6d79686f73742e636f6d2f6d7963612e63726c830205608401ff } } } }, joint-iso-itu-t = { ds = { certificateExtension = { extKeyUsage = { keyPurposeId = "1.3.6.1.5.5.7.3.1", keyPurposeId = "1.3.6.1.5.5.7.3.2" } } } }, joint-iso-itu-t = { ds = { certificateExtension = { subjectAltName = { dNSName = "example.com", dNSName = "www.example.com" } } } }, joint-iso-itu-t = { ds = { certificateExtension = { cRLDIstributionPoints = { distributionPoint = { distributionPointName = { fullName = { uniformResourceIdentifier = "http://example.com/crl" } } } } } } }, iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { pe = { authorityInfoAccess = { accessDescription = { accessMethod = "1.3.6.1.5.5.7.48.1", accessLocation = { uniformResourceIdentifier = "http://example.com/ocsp" } } } } } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { subjectKeyIdentifier = 0xd1ae81f4074fed5abe29c71a179154cdd39e1a1a } } }, joint-iso-itu-t = { ds = { certificateExtension = { authorityKeyIdentifier = { authorityCertIssuer = { directoryName = { RDNSequence = { RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { countryName = "US" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { stateOrProvinceName = "California" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { localityName = "San Francisco" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { organizationName = "Example Corp" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { iso = { member-body = { us = { rsadsi = { pkcs = { raw.9 = { raw.1 = 0x16136578616d706c65406578616d706c652e636f6d } } } } } } } } } } }, authorityCertSerialNumber = 0x04636f8c80f7fcf6c253c3b1e51a9f83902163b6 } } } }, joint-iso-itu-t = { ds = { certificateExtension = { certificatePolicies = { policyInformation = { policyIdentifier = "1.2.3.4.5", policyQualifiers = { policyQualifierInfo = { iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { raw.2 = { raw.1 = 0x1616687474703a2f2f6578616d706c652e636f6d2f637073 } } } } } } } } }, policyQualifierInfo = { iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { raw.2 = { raw.2 = 0x303730211a114f7267616e69736174696f6e204e616d65300c0201010201020201030201041a124578706c6963697420546578742048657265 } } } } } } } } } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { raw.18 = 0x301e820b6578616d706c652e636f6d820f7777772e6578616d706c652e636f6d } } }, joint-iso-itu-t = { ds = { certificateExtension = { policyConstraints = { requireExplicitPolicy = 0x01 } } } }, joint-iso-itu-t = { ds = { certificateExtension = { inhibitAnyPolicy = 2 } } }, iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { pe = { subjectInfoAccess = { accessDescription = { accessMethod = "1.3.6.1.5.5.7.48.2", accessLocation = { uniformResourceIdentifier = "example.com" } } } } } } } } } } } } }, signatureAlgorithm = { iso = { member-body = { us = { rsadsi = { pkcs = { pkcs-1 = { sha256WithRSAEncryption = no } } } } } } }, signature = 0x006a02d27667ba04a4c5fdead54f42ff2e63b9890a28a36f513a2f48dfa33058ab826ad3be452fc9db50d0f5b7d7e9778523e44465631d1f31618b6985e23cc515a923ddd4b52abc7aea77e722ebe020a1300b11dc98d4d71a03981025667daf2d9e8901db350e86f9b6d9f5ee1e20b38c4c05bfeb042b2cdaa3b5582d268a9743df2d4e56e8c5d786f30871e8ca176f66fc968ec6b8c8130d42a4186ea62a06734a5021fa7a3fd33525bc4587bfe927102b99559fb601c5e08a4f8b490032ed4cfa50b0538fa379c466d55b54c3ee937724db4c8de858eca864f5919cd5942911fc8e3c32fca5d24d4d1785e83ca4ddff64940d0d6f1ff864872a8b158d04e662 }
+
+proto-dictionary der
+
+encode-pair Certificate = { tbsCertificate = { version = { VersionNum = 2 }, serialNumber = 0x3300004a3e865065e681d8c87b000000004a3e, signature = { iso = { member-body = { us = { ansi-x962 = { signatures = { ecdsa-with-SHA2 = { ecdsa-with-SHA384 = ::DEFAULT } } } } } } }, issuer = { RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { countryName = "US" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { organizationName = "Microsoft Corporation" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { commonName = "Microsoft Azure ECC TLS Issuing CA 07" } } } } } }, validity = { notBefore = "2024-10-28T20:33:13Z", notAfter = "2025-10-23T20:33:13Z" }, subject = { RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { countryName = "US" } } } } }, RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { stateOrProvinceName = "WA" } } } } }, RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { localityName = "Redmond" } } } } }, RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { organizationName = "Microsoft Corporation" } } } } }, RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { commonName = "learn.microsoft.com" } } } } } }, subjectPublicKeyInfo = { algorithm = { iso = { member-body = { us = { ansi-x962 = { keyType = { ecPublicKey = "1.2.840.10045.3.1.7" } } } } } }, subjectPublicKey = 0x0004bc91b52505f2a21efe022322ca0253341ee996073dfd10f9f7d30ebdafe3c3fba79f3ef7e8ccbe9cf299a515d279e3a0439c03c9c190eb2aa63ef8ac457c2607 }, extensions = { Critical = { joint-iso-itu-t = { ds = { certificateExtension = { keyUsage = { digitalSignature = yes, nonRepudation = no, keyEncipherment = no, dataEncipherment = no, keyAgreement = no, keyCertSign = no, cRLSign = no, encipherOnly = no } } } }, joint-iso-itu-t = { ds = { certificateExtension = { basicConstraints = { cA = ::DEFAULT } } } } }, iso = { identified-organization = { dod = { internet = { raw.4 = { raw.1 = { raw.11129 = { raw.2 = { raw.4 = { raw.2 = 0x04820169016700760012f14e34bd53724c840619c38f3f7a13f8e7b56287889c6d300584ebe586263a00000192d4de62250000040300473045022100f1c10a2464e5ecb6631b35ec320a41022c637591d112cdf08b1c8a752e48c24102204a35b1ab4f35b1bbaa71a2e144d7e8d4476f87a7fa5a959816506c3453729ce10076007d591e12e1782a7b1c61677c5efdf8d0875c14a04e959eb9032fd90e8c2e79b800000192d4de60f70000040300473045022030e3c4caa63919840aff5ef8e55ef4721c6eda63a0ab0001c712067b223a0fec022100805fad8478fce752c5d3c4ab5f24f27d5c7be7947054e622de5bb0e630bdc4ac0075001a04ff49d0541d40aff6a0c3bff1d8c4672f4eecee234068986b17402edc897d00000192d4de6105000004030046304402207bd6d9a2f28b4831967bfeaf5ed3123c7b1e89af6a33122cce5acf65fc5df5000220367e05ab77f6f8f142facdb6b28df6977ab52c3a6b008bc350a35eba8632165b } } } } } } } } }, iso = { identified-organization = { dod = { internet = { raw.4 = { raw.1 = { raw.311 = { raw.21 = { raw.10 = 0x3018300a06082b06010505070302300a06082b06010505070301 } } } } } } } }, iso = { identified-organization = { dod = { internet = { raw.4 = { raw.1 = { raw.311 = { raw.21 = { raw.7 = 0x302d06252b060104018237150887bdd71b81e7eb4682819d2e8ed00c87f0da1d5d8284e56982f3a73e020164020126 } } } } } } } }, iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { pe = { authorityInfoAccess = { accessDescription = { accessMethod = "1.3.6.1.5.5.7.48.2", accessLocation = { uniformResourceIdentifier = "http://www.microsoft.com/pkiops/certs/Microsoft\%20Azure\%20ECC\%20TLS\%20Issuing\%20CA\%2007\%20-\%20xsign.crt" } }, accessDescription = { accessMethod = "1.3.6.1.5.5.7.48.1", accessLocation = { uniformResourceIdentifier = "http://oneocsp.microsoft.com/ocsp" } } } } } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { subjectKeyIdentifier = 0x66049738476c00117e167457b78b2eae04332c56 } } }, joint-iso-itu-t = { ds = { certificateExtension = { subjectAltName = { dNSName = "www.learn.microsoft.com", dNSName = "learn.microsoft.com" } } } }, joint-iso-itu-t = { ds = { certificateExtension = { cRLDIstributionPoints = { distributionPoint = { distributionPointName = { fullName = { uniformResourceIdentifier = "http://www.microsoft.com/pkiops/crl/Microsoft\%20Azure\%20ECC\%20TLS\%20Issuing\%20CA\%2007.crl" } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { certificatePolicies = { policyInformation = { policyIdentifier = "1.3.6.1.4.1.311.76.509.1.1", policyQualifiers = { policyQualifierInfo = { iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { raw.2 = { raw.1 = 0x1633687474703a2f2f7777772e6d6963726f736f66742e636f6d2f706b696f70732f446f63732f5265706f7369746f72792e68746d } } } } } } } } } } }, policyInformation = { policyIdentifier = "2.23.140.1.2.2" } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { authorityKeyIdentifier = { keyIdentifier = 0xc35eac4076c0064de32b9499306073349829c651 } } } }, joint-iso-itu-t = { ds = { certificateExtension = { extKeyUsage = { keyPurposeId = "1.3.6.1.5.5.7.3.2", keyPurposeId = "1.3.6.1.5.5.7.3.1" } } } } } }, signatureAlgorithm = { iso = { member-body = { us = { ansi-x962 = { signatures = { ecdsa-with-SHA2 = { ecdsa-with-SHA384 = ::DEFAULT } } } } } } }, signature = 0x003065023046da82e0401eeda271cc45245c26fa8091a8cf4932a71c81f279247adedd19bc628d8abfe19acdd6f416b1e1562d239d0231009718e1459ef93bcb67c06e388670ab384993ade226b0d07336ba5346d08f3fca553e9cdff5f40ea367e1ccfea9a35089 }
+match 30 82 06 17 30 82 05 9d a0 03 02 01 02 02 13 33 00 00 4a 3e 86 50 65 e6 81 d8 c8 7b 00 00 00 00 4a 3e 30 0a 06 08 2a 86 48 ce 3d 04 03 03 30 5d 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 1e 30 1c 06 03 55 04 0a 13 15 4d 69 63 72 6f 73 6f 66 74 20 43 6f 72 70 6f 72 61 74 69 6f 6e 31 2e 30 2c 06 03 55 04 03 13 25 4d 69 63 72 6f 73 6f 66 74 20 41 7a 75 72 65 20 45 43 43 20 54 4c 53 20 49 73 73 75 69 6e 67 20 43 41 20 30 37 30 1e 17 0d 32 34 31 30 32 38 32 30 33 33 31 33 5a 17 0d 32 35 31 30 32 33 32 30 33 33 31 33 5a 30 6a 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 0b 30 09 06 03 55 04 08 0c 02 57 41 31 10 30 0e 06 03 55 04 07 0c 07 52 65 64 6d 6f 6e 64 31 1e 30 1c 06 03 55 04 0a 13 15 4d 69 63 72 6f 73 6f 66 74 20 43 6f 72 70 6f 72 61 74 69 6f 6e 31 1c 30 1a 06 03 55 04 03 13 13 6c 65 61 72 6e 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 30 59 30 13 06 07 2a 86 48 ce 3d 02 01 06 08 2a 86 48 ce 3d 03 01 07 03 42 00 04 bc 91 b5 25 05 f2 a2 1e fe 02 23 22 ca 02 53 34 1e e9 96 07 3d fd 10 f9 f7 d3 0e bd af e3 c3 fb a7 9f 3e f7 e8 cc be 9c f2 99 a5 15 d2 79 e3 a0 43 9c 03 c9 c1 90 eb 2a a6 3e f8 ac 45 7c 26 07 a3 82 04 2d 30 82 04 29 30 0e 06 03 55 1d 0f 01 01 ff 04 04 03 02 07 80 30 0c 06 03 55 1d 13 01 01 ff 04 02 30 00 30 82 01 7d 06 0a 2b 06 01 04 01 d6 79 02 04 02 04 82 01 6d 04 82 01 69 01 67 00 76 00 12 f1 4e 34 bd 53 72 4c 84 06 19 c3 8f 3f 7a 13 f8 e7 b5 62 87 88 9c 6d 30 05 84 eb e5 86 26 3a 00 00 01 92 d4 de 62 25 00 00 04 03 00 47 30 45 02 21 00 f1 c1 0a 24 64 e5 ec b6 63 1b 35 ec 32 0a 41 02 2c 63 75 91 d1 12 cd f0 8b 1c 8a 75 2e 48 c2 41 02 20 4a 35 b1 ab 4f 35 b1 bb aa 71 a2 e1 44 d7 e8 d4 47 6f 87 a7 fa 5a 95 98 16 50 6c 34 53 72 9c e1 00 76 00 7d 59 1e 12 e1 78 2a 7b 1c 61 67 7c 5e fd f8 d0 87 5c 14 a0 4e 95 9e b9 03 2f d9 0e 8c 2e 79 b8 00 00 01 92 d4 de 60 f7 00 00 04 03 00 47 30 45 02 20 30 e3 c4 ca a6 39 19 84 0a ff 5e f8 e5 5e f4 72 1c 6e da 63 a0 ab 00 01 c7 12 06 7b 22 3a 0f ec 02 21 00 80 5f ad 84 78 fc e7 52 c5 d3 c4 ab 5f 24 f2 7d 5c 7b e7 94 70 54 e6 22 de 5b b0 e6 30 bd c4 ac 00 75 00 1a 04 ff 49 d0 54 1d 40 af f6 a0 c3 bf f1 d8 c4 67 2f 4e ec ee 23 40 68 98 6b 17 40 2e dc 89 7d 00 00 01 92 d4 de 61 05 00 00 04 03 00 46 30 44 02 20 7b d6 d9 a2 f2 8b 48 31 96 7b fe af 5e d3 12 3c 7b 1e 89 af 6a 33 12 2c ce 5a cf 65 fc 5d f5 00 02 20 36 7e 05 ab 77 f6 f8 f1 42 fa cd b6 b2 8d f6 97 7a b5 2c 3a 6b 00 8b c3 50 a3 5e ba 86 32 16 5b 30 27 06 09 2b 06 01 04 01 82 37 15 0a 04 1a 30 18 30 0a 06 08 2b 06 01 05 05 07 03 02 30 0a 06 08 2b 06 01 05 05 07 03 01 30 3c 06 09 2b 06 01 04 01 82 37 15 07 04 2f 30 2d 06 25 2b 06 01 04 01 82 37 15 08 87 bd d7 1b 81 e7 eb 46 82 81 9d 2e 8e d0 0c 87 f0 da 1d 5d 82 84 e5 69 82 f3 a7 3e 02 01 64 02 01 26 30 81 b4 06 08 2b 06 01 05 05 07 01 01 04 81 a7 30 81 a4 30 73 06 08 2b 06 01 05 05 07 30 02 86 67 68 74 74 70 3a 2f 2f 77 77 77 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 70 6b 69 6f 70 73 2f 63 65 72 74 73 2f 4d 69 63 72 6f 73 6f 66 74 25 32 30 41 7a 75 72 65 25 32 30 45 43 43 25 32 30 54 4c 53 25 32 30 49 73 73 75 69 6e 67 25 32 30 43 41 25 32 30 30 37 25 32 30 2d 25 32 30 78 73 69 67 6e 2e 63 72 74 30 2d 06 08 2b 06 01 05 05 07 30 01 86 21 68 74 74 70 3a 2f 2f 6f 6e 65 6f 63 73 70 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 6f 63 73 70 30 1d 06 03 55 1d 0e 04 16 04 14 66 04 97 38 47 6c 00 11 7e 16 74 57 b7 8b 2e ae 04 33 2c 56 30 37 06 03 55 1d 11 04 30 30 2e 82 17 77 77 77 2e 6c 65 61 72 6e 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 82 13 6c 65 61 72 6e 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 30 6a 06 03 55 1d 1f 04 63 30 61 30 5f a0 5d a0 5b 86 59 68 74 74 70 3a 2f 2f 77 77 77 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 70 6b 69 6f 70 73 2f 63 72 6c 2f 4d 69 63 72 6f 73 6f 66 74 25 32 30 41 7a 75 72 65 25 32 30 45 43 43 25 32 30 54 4c 53 25 32 30 49 73 73 75 69 6e 67 25 32 30 43 41 25 32 30 30 37 2e 63 72 6c 30 66 06 03 55 1d 20 04 5f 30 5d 30 51 06 0c 2b 06 01 04 01 82 37 4c 83 7d 01 01 30 41 30 3f 06 08 2b 06 01 05 05 07 02 01 16 33 68 74 74 70 3a 2f 2f 77 77 77 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 70 6b 69 6f 70 73 2f 44 6f 63 73 2f 52 65 70 6f 73 69 74 6f 72 79 2e 68 74 6d 30 08 06 06 67 81 0c 01 02 02 30 1f 06 03 55 1d 23 04 18 30 16 80 14 c3 5e ac 40 76 c0 06 4d e3 2b 94 99 30 60 73 34 98 29 c6 51 30 1d 06 03 55 1d 25 04 16 30 14 06 08 2b 06 01 05 05 07 03 02 06 08 2b 06 01 05 05 07 03 01 30 0a 06 08 2a 86 48 ce 3d 04 03 03 03 68 00 30 65 02 30 46 da 82 e0 40 1e ed a2 71 cc 45 24 5c 26 fa 80 91 a8 cf 49 32 a7 1c 81 f2 79 24 7a de dd 19 bc 62 8d 8a bf e1 9a cd d6 f4 16 b1 e1 56 2d 23 9d 02 31 00 97 18 e1 45 9e f9 3b cb 67 c0 6e 38 86 70 ab 38 49 93 ad e2 26 b0 d0 73 36 ba 53 46 d0 8f 3f ca 55 3e 9c df f5 f4 0e a3 67 e1 cc fe a9 a3 50 89
+
+encode-pair Certificate = { tbsCertificate = { version = { VersionNum = 2 }, serialNumber = 0x04636f8c80f7fcf6c253c3b1e51a9f83902163b6, signature = { iso = { member-body = { us = { rsadsi = { pkcs = { pkcs-1 = { sha256WithRSAEncryption = no } } } } } } }, issuer = { RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { countryName = "US" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { stateOrProvinceName = "California" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { localityName = "San Francisco" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { organizationName = "Example Corp" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { iso = { member-body = { us = { rsadsi = { pkcs = { raw.9 = { raw.1 = 0x16136578616d706c65406578616d706c652e636f6d } } } } } } } } }, validity = { notBefore = "2025-01-17T15:10:41Z", notAfter = "2025-02-16T15:10:41Z" }, subject = { RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { countryName = "US" } } } } }, RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { stateOrProvinceName = "California" } } } } }, RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { localityName = "San Francisco" } } } } }, RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { organizationName = "Example Corp" } } } } }, RelativeDistinguishedName = { AttributeTypeandValue = { iso = { member-body = { us = { rsadsi = { pkcs = { raw.9 = { raw.1 = 0x16136578616d706c65406578616d706c652e636f6d } } } } } } } } }, subjectPublicKeyInfo = { algorithm = { iso = { member-body = { us = { rsadsi = { pkcs = { pkcs-1 = { rsaEncryption = no } } } } } } }, subjectPublicKey = 0x003082010a0282010100c8fea48bf864a8ff531da19ebfb90fbd64b351f0bbedbbb2a60e8d649f0c88e520118aa257afbcd0ae3390ad55e3b7f356e6ba534c59a940ce49bfde506195e1a529c7c6553b907037e77a408d4b415c560f2620c7538bd5f83d296a457cffd6dad49d97b7129e55484d6a96c4fe138a550a5c231332e184993708c3e01d0dfcbe370be11cbe42bc992f33c64cc00e0477619f22919f1cbac52330e573c08bc177d4c11ab7241e7dc2814120628941052fd34ea8c8921fddd10331050fa0ce6d28a4e9ffcbd17d27c908aa2c8704eab5f31d6e98ad80aaa649cae883085863f58c0242ba6626bb6a4429eb88ab13047c58ed0756542bd6f828733aad33ae378b0203010001 }, extensions = { Critical = { joint-iso-itu-t = { ds = { certificateExtension = { keyUsage = { digitalSignature = yes, nonRepudation = no, keyEncipherment = yes, dataEncipherment = no, keyAgreement = yes, keyCertSign = no, cRLSign = no, encipherOnly = no } } } }, joint-iso-itu-t = { ds = { certificateExtension = { basicConstraints = { cA = yes } } } }, joint-iso-itu-t = { ds = { certificateExtension = { raw.28 = 0x3027a01ea01c861a687474703a2f2f6d79686f73742e636f6d2f6d7963612e63726c830205608401ff } } } }, joint-iso-itu-t = { ds = { certificateExtension = { extKeyUsage = { keyPurposeId = "1.3.6.1.5.5.7.3.1", keyPurposeId = "1.3.6.1.5.5.7.3.2" } } } }, joint-iso-itu-t = { ds = { certificateExtension = { subjectAltName = { dNSName = "example.com", dNSName = "www.example.com" } } } }, joint-iso-itu-t = { ds = { certificateExtension = { cRLDIstributionPoints = { distributionPoint = { distributionPointName = { fullName = { uniformResourceIdentifier = "http://example.com/crl" } } } } } } }, iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { pe = { authorityInfoAccess = { accessDescription = { accessMethod = "1.3.6.1.5.5.7.48.1", accessLocation = { uniformResourceIdentifier = "http://example.com/ocsp" } } } } } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { subjectKeyIdentifier = 0xd1ae81f4074fed5abe29c71a179154cdd39e1a1a } } }, joint-iso-itu-t = { ds = { certificateExtension = { authorityKeyIdentifier = { authorityCertIssuer = { directoryName = { RDNSequence = { RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { countryName = "US" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { stateOrProvinceName = "California" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { localityName = "San Francisco" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { organizationName = "Example Corp" } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { iso = { member-body = { us = { rsadsi = { pkcs = { raw.9 = { raw.1 = 0x16136578616d706c65406578616d706c652e636f6d } } } } } } } } } } }, authorityCertSerialNumber = 0x04636f8c80f7fcf6c253c3b1e51a9f83902163b6 } } } }, joint-iso-itu-t = { ds = { certificateExtension = { certificatePolicies = { policyInformation = { policyIdentifier = "1.2.3.4.5", policyQualifiers = { policyQualifierInfo = { iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { raw.2 = { raw.1 = 0x1616687474703a2f2f6578616d706c652e636f6d2f637073 } } } } } } } } }, policyQualifierInfo = { iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { raw.2 = { raw.2 = 0x303730211a114f7267616e69736174696f6e204e616d65300c0201010201020201030201041a124578706c6963697420546578742048657265 } } } } } } } } } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { raw.18 = 0x301e820b6578616d706c652e636f6d820f7777772e6578616d706c652e636f6d } } }, joint-iso-itu-t = { ds = { certificateExtension = { policyConstraints = { requireExplicitPolicy = 0x01 } } } }, joint-iso-itu-t = { ds = { certificateExtension = { inhibitAnyPolicy = 2 } } }, iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { pe = { subjectInfoAccess = { accessDescription = { accessMethod = "1.3.6.1.5.5.7.48.2", accessLocation = { uniformResourceIdentifier = "example.com" } } } } } } } } } } } } }, signatureAlgorithm = { iso = { member-body = { us = { rsadsi = { pkcs = { pkcs-1 = { sha256WithRSAEncryption = no } } } } } } }, signature = 0x006a02d27667ba04a4c5fdead54f42ff2e63b9890a28a36f513a2f48dfa33058ab826ad3be452fc9db50d0f5b7d7e9778523e44465631d1f31618b6985e23cc515a923ddd4b52abc7aea77e722ebe020a1300b11dc98d4d71a03981025667daf2d9e8901db350e86f9b6d9f5ee1e20b38c4c05bfeb042b2cdaa3b5582d268a9743df2d4e56e8c5d786f30871e8ca176f66fc968ec6b8c8130d42a4186ea62a06734a5021fa7a3fd33525bc4587bfe927102b99559fb601c5e08a4f8b490032ed4cfa50b0538fa379c466d55b54c3ee937724db4c8de858eca864f5919cd5942911fc8e3c32fca5d24d4d1785e83ca4ddff64940d0d6f1ff864872a8b158d04e662 }
+match 30 82 06 22 30 82 05 0a a0 03 02 01 02 02 14 04 63 6f 8c 80 f7 fc f6 c2 53 c3 b1 e5 1a 9f 83 90 21 63 b6 30 0d 06 09 2a 86 48 86 f7 0d 01 01 0b 05 00 30 75 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 13 30 11 06 03 55 04 08 0c 0a 43 61 6c 69 66 6f 72 6e 69 61 31 16 30 14 06 03 55 04 07 0c 0d 53 61 6e 20 46 72 61 6e 63 69 73 63 6f 31 15 30 13 06 03 55 04 0a 13 0c 45 78 61 6d 70 6c 65 20 43 6f 72 70 31 22 30 20 06 09 2a 86 48 86 f7 0d 01 09 01 16 13 65 78 61 6d 70 6c 65 40 65 78 61 6d 70 6c 65 2e 63 6f 6d 30 1e 17 0d 32 35 30 31 31 37 31 35 31 30 34 31 5a 17 0d 32 35 30 32 31 36 31 35 31 30 34 31 5a 30 75 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 13 30 11 06 03 55 04 08 0c 0a 43 61 6c 69 66 6f 72 6e 69 61 31 16 30 14 06 03 55 04 07 0c 0d 53 61 6e 20 46 72 61 6e 63 69 73 63 6f 31 15 30 13 06 03 55 04 0a 13 0c 45 78 61 6d 70 6c 65 20 43 6f 72 70 31 22 30 20 06 09 2a 86 48 86 f7 0d 01 09 01 16 13 65 78 61 6d 70 6c 65 40 65 78 61 6d 70 6c 65 2e 63 6f 6d 30 82 01 22 30 0d 06 09 2a 86 48 86 f7 0d 01 01 01 05 00 03 82 01 0f 00 30 82 01 0a 02 82 01 01 00 c8 fe a4 8b f8 64 a8 ff 53 1d a1 9e bf b9 0f bd 64 b3 51 f0 bb ed bb b2 a6 0e 8d 64 9f 0c 88 e5 20 11 8a a2 57 af bc d0 ae 33 90 ad 55 e3 b7 f3 56 e6 ba 53 4c 59 a9 40 ce 49 bf de 50 61 95 e1 a5 29 c7 c6 55 3b 90 70 37 e7 7a 40 8d 4b 41 5c 56 0f 26 20 c7 53 8b d5 f8 3d 29 6a 45 7c ff d6 da d4 9d 97 b7 12 9e 55 48 4d 6a 96 c4 fe 13 8a 55 0a 5c 23 13 32 e1 84 99 37 08 c3 e0 1d 0d fc be 37 0b e1 1c be 42 bc 99 2f 33 c6 4c c0 0e 04 77 61 9f 22 91 9f 1c ba c5 23 30 e5 73 c0 8b c1 77 d4 c1 1a b7 24 1e 7d c2 81 41 20 62 89 41 05 2f d3 4e a8 c8 92 1f dd d1 03 31 05 0f a0 ce 6d 28 a4 e9 ff cb d1 7d 27 c9 08 aa 2c 87 04 ea b5 f3 1d 6e 98 ad 80 aa a6 49 ca e8 83 08 58 63 f5 8c 02 42 ba 66 26 bb 6a 44 29 eb 88 ab 13 04 7c 58 ed 07 56 54 2b d6 f8 28 73 3a ad 33 ae 37 8b 02 03 01 00 01 a3 82 02 a8 30 82 02 a4 30 0e 06 03 55 1d 0f 01 01 ff 04 04 03 02 03 a8 30 0f 06 03 55 1d 13 01 01 ff 04 05 30 03 01 01 ff 30 33 06 03 55 1d 1c 01 01 ff 04 29 30 27 a0 1e a0 1c 86 1a 68 74 74 70 3a 2f 2f 6d 79 68 6f 73 74 2e 63 6f 6d 2f 6d 79 63 61 2e 63 72 6c 83 02 05 60 84 01 ff 30 1d 06 03 55 1d 25 04 16 30 14 06 08 2b 06 01 05 05 07 03 01 06 08 2b 06 01 05 05 07 03 02 30 27 06 03 55 1d 11 04 20 30 1e 82 0b 65 78 61 6d 70 6c 65 2e 63 6f 6d 82 0f 77 77 77 2e 65 78 61 6d 70 6c 65 2e 63 6f 6d 30 27 06 03 55 1d 1f 04 20 30 1e 30 1c a0 1a a0 18 86 16 68 74 74 70 3a 2f 2f 65 78 61 6d 70 6c 65 2e 63 6f 6d 2f 63 72 6c 30 33 06 08 2b 06 01 05 05 07 01 01 04 27 30 25 30 23 06 08 2b 06 01 05 05 07 30 01 86 17 68 74 74 70 3a 2f 2f 65 78 61 6d 70 6c 65 2e 63 6f 6d 2f 6f 63 73 70 30 1d 06 03 55 1d 0e 04 16 04 14 d1 ae 81 f4 07 4f ed 5a be 29 c7 1a 17 91 54 cd d3 9e 1a 1a 30 81 9c 06 03 55 1d 23 04 81 94 30 81 91 a1 79 a4 77 30 75 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 13 30 11 06 03 55 04 08 0c 0a 43 61 6c 69 66 6f 72 6e 69 61 31 16 30 14 06 03 55 04 07 0c 0d 53 61 6e 20 46 72 61 6e 63 69 73 63 6f 31 15 30 13 06 03 55 04 0a 13 0c 45 78 61 6d 70 6c 65 20 43 6f 72 70 31 22 30 20 06 09 2a 86 48 86 f7 0d 01 09 01 16 13 65 78 61 6d 70 6c 65 40 65 78 61 6d 70 6c 65 2e 63 6f 6d 82 14 04 63 6f 8c 80 f7 fc f6 c2 53 c3 b1 e5 1a 9f 83 90 21 63 b6 30 7c 06 03 55 1d 20 04 75 30 73 30 71 06 04 2a 03 04 05 30 69 30 22 06 08 2b 06 01 05 05 07 02 01 16 16 68 74 74 70 3a 2f 2f 65 78 61 6d 70 6c 65 2e 63 6f 6d 2f 63 70 73 30 43 06 08 2b 06 01 05 05 07 02 02 30 37 30 21 1a 11 4f 72 67 61 6e 69 73 61 74 69 6f 6e 20 4e 61 6d 65 30 0c 02 01 01 02 01 02 02 01 03 02 01 04 1a 12 45 78 70 6c 69 63 69 74 20 54 65 78 74 20 48 65 72 65 30 27 06 03 55 1d 12 04 20 30 1e 82 0b 65 78 61 6d 70 6c 65 2e 63 6f 6d 82 0f 77 77 77 2e 65 78 61 6d 70 6c 65 2e 63 6f 6d 30 0c 06 03 55 1d 24 04 05 30 03 80 01 01 30 0a 06 03 55 1d 36 04 03 02 01 02 30 27 06 08 2b 06 01 05 05 07 01 0b 04 1b 30 19 30 17 06 08 2b 06 01 05 05 07 30 02 86 0b 65 78 61 6d 70 6c 65 2e 63 6f 6d 30 0d 06 09 2a 86 48 86 f7 0d 01 01 0b 05 00 03 82 01 01 00 6a 02 d2 76 67 ba 04 a4 c5 fd ea d5 4f 42 ff 2e 63 b9 89 0a 28 a3 6f 51 3a 2f 48 df a3 30 58 ab 82 6a d3 be 45 2f c9 db 50 d0 f5 b7 d7 e9 77 85 23 e4 44 65 63 1d 1f 31 61 8b 69 85 e2 3c c5 15 a9 23 dd d4 b5 2a bc 7a ea 77 e7 22 eb e0 20 a1 30 0b 11 dc 98 d4 d7 1a 03 98 10 25 66 7d af 2d 9e 89 01 db 35 0e 86 f9 b6 d9 f5 ee 1e 20 b3 8c 4c 05 bf eb 04 2b 2c da a3 b5 58 2d 26 8a 97 43 df 2d 4e 56 e8 c5 d7 86 f3 08 71 e8 ca 17 6f 66 fc 96 8e c6 b8 c8 13 0d 42 a4 18 6e a6 2a 06 73 4a 50 21 fa 7a 3f d3 35 25 bc 45 87 bf e9 27 10 2b 99 55 9f b6 01 c5 e0 8a 4f 8b 49 00 32 ed 4c fa 50 b0 53 8f a3 79 c4 66 d5 5b 54 c3 ee 93 77 24 db 4c 8d e8 58 ec a8 64 f5 91 9c d5 94 29 11 fc 8e 3c 32 fc a5 d2 4d 4d 17 85 e8 3c a4 dd ff 64 94 0d 0d 6f 1f f8 64 87 2a 8b 15 8d 04 e6 62
+
+encode-pair Certificate = { tbsCertificate = { version = { VersionNum = 2 }, serialNumber = 0x0a0141420000015385736a0b85eca708, signature = { iso = { member-body = { us = { rsadsi = { pkcs = { pkcs-1 = { sha256WithRSAEncryption = no } } } } } } }, issuer = { RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { organizationName = "Digital Signature Trust Co." } } } } }, RelativeDistinguishedName = { AttributeTypeAndValue = { joint-iso-itu-t = { ds = { attributeType = { commonName = "DST Root CA X3" } } } } } }, validity = { notBefore = "2016-03-17T16:40:46Z", notAfter = "2021-03-17T16:40:46Z" }, subject = { RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { countryName = "US" } } } } }, RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { organizationName = "Let's Encrypt" } } } } }, RelativeDistinguishedName = { AttributeTypeandValue = { joint-iso-itu-t = { ds = { attributeType = { commonName = "Let's Encrypt Authority X3" } } } } } }, subjectPublicKeyInfo = { algorithm = { iso = { member-body = { us = { rsadsi = { pkcs = { pkcs-1 = { rsaEncryption = no } } } } } } }, subjectPublicKey = 0x003082010a02820101009cd30cf05ae52e47b7725d3783b3686330ead735261925e1bdbe35f170922fb7b84b4105aba99e350858ecb12ac468870ba3e375e4e6f3a76271ba7981601fd7919a9ff3d0786771c8690e9591cffee699e9603c48cc7eca4d7712249d471b5aebb9ec1e37001c9cac7ba705eace4aebbd41e53698b9cbfd6d3c9668df232a42900c867467c87fa59ab8526114133f65e98287cbdbfa0e56f68689f3853f9786afb0dc1aef6b0d95167dc42ba065b299043675806bac4af31b9049782fa2964f2a20252904c674c0d031cd8f31389516baa833b843f1b11fc3307fa27931133d2d36f8e3fcf2336ab93931c5afc48d0d1d641633aafa8429b6d40bc0d87dc3930203010001 }, extensions = { Critical = { joint-iso-itu-t = { ds = { certificateExtension = { basicConstraints = { cA = yes, pathLenConstraint = 0 } } } }, joint-iso-itu-t = { ds = { certificateExtension = { keyUsage = { digitalSignature = yes, nonRepudation = no, keyEncipherment = no, dataEncipherment = no, keyAgreement = no, keyCertSign = yes, cRLSign = yes, encipherOnly = no } } } } }, iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { pe = { authorityInfoAccess = { accessDescription = { accessMethod = "1.3.6.1.5.5.7.48.1", accessLocation = { uniformResourceIdentifier = "http://isrg.trustid.ocsp.identrust.com" } }, accessDescription = { accessMethod = "1.3.6.1.5.5.7.48.2", accessLocation = { uniformResourceIdentifier = "http://apps.identrust.com/roots/dstrootcax3.p7c" } } } } } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { authorityKeyIdentifier = { keyIdentifier = 0xc4a7b1a47b2c71fadbe14b9075ffc41560858910 } } } }, joint-iso-itu-t = { ds = { certificateExtension = { certificatePolicies = { policyInformation = { policyIdentifier = "2.23.140.1.2.1" }, policyInformation = { policyIdentifier = "1.3.6.1.4.1.44947.1.1.1", policyQualifiers = { policyQualifierInfo = { iso = { identified-organization = { dod = { internet = { security = { mechanisms = { pkix = { raw.2 = { raw.1 = 0x1622687474703a2f2f6370732e726f6f742d78312e6c657473656e63727970742e6f7267 } } } } } } } } } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { cRLDIstributionPoints = { distributionPoint = { distributionPointName = { fullName = { uniformResourceIdentifier = "http://crl.identrust.com/DSTROOTCAX3CRL.crl" } } } } } } }, joint-iso-itu-t = { ds = { certificateExtension = { subjectKeyIdentifier = 0xa84a6a63047dddbae6d139b7a64565eff3a8eca1 } } } } }, signatureAlgorithm = { iso = { member-body = { us = { rsadsi = { pkcs = { pkcs-1 = { sha256WithRSAEncryption = no } } } } } } }, signature = 0x00dd33d711f3635838dd1815fb0955be7656b97048a56947277bc2240892f15a1f4a1229372474511c6268b8cd957067e5f7a4bc4e2851cd9be8ae879dead8ba5aa1019adcf0dd6a1d6ad83e57239ea61e04629affd705cab71f3fc00a48bc94b0b66562e0c154e5a32aad20c4e9e6bbdcc8f6b5c332a398cc77a8e67965072bcb28fe3a165281ce520c2e5f83e8d50633fb776cce40ea329e1f925c41c1746c5b5d0a5f33cc4d9fac38f02f7b2c629dd9a3916f251b2f90b119463df67e1ba67a87b9a37a6d18fa25a5918715e0f2162f58b0062f2c6826c64b98cdda9f0cf97f90ed434a12444e6f737a28eaa4aa6e7b4c7d87dde0c90244a787afc3345bb442 }
+match 30 82 04 92 30 82 03 7a a0 03 02 01 02 02 10 0a 01 41 42 00 00 01 53 85 73 6a 0b 85 ec a7 08 30 0d 06 09 2a 86 48 86 f7 0d 01 01 0b 05 00 30 3f 31 24 30 22 06 03 55 04 0a 13 1b 44 69 67 69 74 61 6c 20 53 69 67 6e 61 74 75 72 65 20 54 72 75 73 74 20 43 6f 2e 31 17 30 15 06 03 55 04 03 13 0e 44 53 54 20 52 6f 6f 74 20 43 41 20 58 33 30 1e 17 0d 31 36 30 33 31 37 31 36 34 30 34 36 5a 17 0d 32 31 30 33 31 37 31 36 34 30 34 36 5a 30 4a 31 0b 30 09 06 03 55 04 06 13 02 55 53 31 16 30 14 06 03 55 04 0a 13 0d 4c 65 74 27 73 20 45 6e 63 72 79 70 74 31 23 30 21 06 03 55 04 03 13 1a 4c 65 74 27 73 20 45 6e 63 72 79 70 74 20 41 75 74 68 6f 72 69 74 79 20 58 33 30 82 01 22 30 0d 06 09 2a 86 48 86 f7 0d 01 01 01 05 00 03 82 01 0f 00 30 82 01 0a 02 82 01 01 00 9c d3 0c f0 5a e5 2e 47 b7 72 5d 37 83 b3 68 63 30 ea d7 35 26 19 25 e1 bd be 35 f1 70 92 2f b7 b8 4b 41 05 ab a9 9e 35 08 58 ec b1 2a c4 68 87 0b a3 e3 75 e4 e6 f3 a7 62 71 ba 79 81 60 1f d7 91 9a 9f f3 d0 78 67 71 c8 69 0e 95 91 cf fe e6 99 e9 60 3c 48 cc 7e ca 4d 77 12 24 9d 47 1b 5a eb b9 ec 1e 37 00 1c 9c ac 7b a7 05 ea ce 4a eb bd 41 e5 36 98 b9 cb fd 6d 3c 96 68 df 23 2a 42 90 0c 86 74 67 c8 7f a5 9a b8 52 61 14 13 3f 65 e9 82 87 cb db fa 0e 56 f6 86 89 f3 85 3f 97 86 af b0 dc 1a ef 6b 0d 95 16 7d c4 2b a0 65 b2 99 04 36 75 80 6b ac 4a f3 1b 90 49 78 2f a2 96 4f 2a 20 25 29 04 c6 74 c0 d0 31 cd 8f 31 38 95 16 ba a8 33 b8 43 f1 b1 1f c3 30 7f a2 79 31 13 3d 2d 36 f8 e3 fc f2 33 6a b9 39 31 c5 af c4 8d 0d 1d 64 16 33 aa fa 84 29 b6 d4 0b c0 d8 7d c3 93 02 03 01 00 01 a3 82 01 7d 30 82 01 79 30 12 06 03 55 1d 13 01 01 ff 04 08 30 06 01 01 ff 02 01 00 30 0e 06 03 55 1d 0f 01 01 ff 04 04 03 02 01 86 30 7f 06 08 2b 06 01 05 05 07 01 01 04 73 30 71 30 32 06 08 2b 06 01 05 05 07 30 01 86 26 68 74 74 70 3a 2f 2f 69 73 72 67 2e 74 72 75 73 74 69 64 2e 6f 63 73 70 2e 69 64 65 6e 74 72 75 73 74 2e 63 6f 6d 30 3b 06 08 2b 06 01 05 05 07 30 02 86 2f 68 74 74 70 3a 2f 2f 61 70 70 73 2e 69 64 65 6e 74 72 75 73 74 2e 63 6f 6d 2f 72 6f 6f 74 73 2f 64 73 74 72 6f 6f 74 63 61 78 33 2e 70 37 63 30 1f 06 03 55 1d 23 04 18 30 16 80 14 c4 a7 b1 a4 7b 2c 71 fa db e1 4b 90 75 ff c4 15 60 85 89 10 30 54 06 03 55 1d 20 04 4d 30 4b 30 08 06 06 67 81 0c 01 02 01 30 3f 06 0b 2b 06 01 04 01 82 df 13 01 01 01 30 30 30 2e 06 08 2b 06 01 05 05 07 02 01 16 22 68 74 74 70 3a 2f 2f 63 70 73 2e 72 6f 6f 74 2d 78 31 2e 6c 65 74 73 65 6e 63 72 79 70 74 2e 6f 72 67 30 3c 06 03 55 1d 1f 04 35 30 33 30 31 a0 2f a0 2d 86 2b 68 74 74 70 3a 2f 2f 63 72 6c 2e 69 64 65 6e 74 72 75 73 74 2e 63 6f 6d 2f 44 53 54 52 4f 4f 54 43 41 58 33 43 52 4c 2e 63 72 6c 30 1d 06 03 55 1d 0e 04 16 04 14 a8 4a 6a 63 04 7d dd ba e6 d1 39 b7 a6 45 65 ef f3 a8 ec a1 30 0d 06 09 2a 86 48 86 f7 0d 01 01 0b 05 00 03 82 01 01 00 dd 33 d7 11 f3 63 58 38 dd 18 15 fb 09 55 be 76 56 b9 70 48 a5 69 47 27 7b c2 24 08 92 f1 5a 1f 4a 12 29 37 24 74 51 1c 62 68 b8 cd 95 70 67 e5 f7 a4 bc 4e 28 51 cd 9b e8 ae 87 9d ea d8 ba 5a a1 01 9a dc f0 dd 6a 1d 6a d8 3e 57 23 9e a6 1e 04 62 9a ff d7 05 ca b7 1f 3f c0 0a 48 bc 94 b0 b6 65 62 e0 c1 54 e5 a3 2a ad 20 c4 e9 e6 bb dc c8 f6 b5 c3 32 a3 98 cc 77 a8 e6 79 65 07 2b cb 28 fe 3a 16 52 81 ce 52 0c 2e 5f 83 e8 d5 06 33 fb 77 6c ce 40 ea 32 9e 1f 92 5c 41 c1 74 6c 5b 5d 0a 5f 33 cc 4d 9f ac 38 f0 2f 7b 2c 62 9d d9 a3 91 6f 25 1b 2f 90 b1 19 46 3d f6 7e 1b a6 7a 87 b9 a3 7a 6d 18 fa 25 a5 91 87 15 e0 f2 16 2f 58 b0 06 2f 2c 68 26 c6 4b 98 cd da 9f 0c f9 7f 90 ed 43 4a 12 44 4e 6f 73 7a 28 ea a4 aa 6e 7b 4c 7d 87 dd e0 c9 02 44 a7 87 af c3 34 5b b4 42