Test certificate for TeletexString handling.

The certificate data can be updated/regenerated with the
net/data/parse_certificate_unittest/regenerate_pem_from_ascii.py script.

#-----BEGIN SUBJECT-----
    SEQUENCE {
      SET {
        SEQUENCE {
          # countryName
          OBJECT_IDENTIFIER { 2.5.4.6 }
          PrintableString { "AU" }
        }
      }
      SET {
        SEQUENCE {
          # stateOrProvinceName
          OBJECT_IDENTIFIER { 2.5.4.8 }
          UTF8String { "Some-State" }
        }
      }
      SET {
        SEQUENCE {
          # organizationName
          OBJECT_IDENTIFIER { 2.5.4.10 }
          # If anyone actually implemented real TeletexString processing, this
          # would probably be a valid TeletexString representing a Japanese
          # character.
          #
          # switch to JIS X 0208-1978 (2-bytes per char) (See
          # https://en.wikipedia.org/wiki/ISO/IEC_2022):
          # ESC $ @
          #
          # Character 'あ' (See https://www.itscj.ipsj.or.jp/iso-ir/042.pdf):
          # 100100 100010
          T61String { `1B24402422` }
        }
      }
    }
#-----END SUBJECT-----

-----BEGIN CERTIFICATE-----
MIICRTCCAa6gAwIBAgIJAPuwTC6rEJsMMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTQwNDIzMjA1MDQwWhcNMTcwNDIyMjA1MDQwWjAyMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEOMAwGA1UEChQFGyRAJCIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANgryKYy5GL/TfPQrVmLRae98Ue/CVh7Ir01rpclhpSggMC0H3aRZ0Yx0BCEtyIecCORcsjpbXk6hXeAD8SVFnXFSnFMyGM/o/JjnCpPmvrLwXFuKIUooCceZRyuB9Vbby1D7SuQsYyvJG2u6Rc6BcG/uByuZTsbWMLZrtaqZ4jxAgMBAAGjUDBOMB0GA1UdDgQWBBSLddWsywi+Dh9lt/pWvmynddqFrzAfBgNVHSMEGDAWgBSLddWsywi+Dh9lt/pWvmynddqFrzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBADvoeG2V1j1q9xMZLBvCiK4iq/SNMvV8cWfPLdEcwsOH4um+iVzkNKtIkcI/la4rR54leGtPmhCkcv3P9wIMsAoIpFri5XR+ER05YGrJH2nzLmMm3J7va3oK4VRXmKpykXgEfh+PZU0fCxKsnCQPhBQaVS0fu/CdCbIIXFkyZYAm
-----END CERTIFICATE-----:
