Test client certificates for invalid PrintableString testing.

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

#-----BEGIN SERIAL-----
    INTEGER { `00fbb04c2abcdefeab109b0c` }
#-----END SERIAL-----

#-----BEGIN VALIDITY-----
    SEQUENCE {
      UTCTime { "140423205040Z" }
      UTCTime { "370422205040Z" }
    }
#-----END VALIDITY-----

#-----BEGIN SUBJECT-----
    SEQUENCE {
      SET {
        SEQUENCE {
          # countryName
          OBJECT_IDENTIFIER { 2.5.4.6 }
          PrintableString { "AU" }
        }
      }
      SET {
        SEQUENCE {
          # organizationName
          OBJECT_IDENTIFIER { 2.5.4.10 }
	  PrintableString { "Blar" }
        }
      }
      SET {
        SEQUENCE {
          # commonName
	  OBJECT_IDENTIFIER { 2.5.4.3 }
	  # invalid PrintableString. Contains @#_ chars and some UTF-8.
	  PrintableString { "Foo@#_ Clïênt Cërt" }
        }
      }
    }
#-----END SUBJECT-----

#-----BEGIN BASIC_CONSTRAINTS-----
            SEQUENCE {}
#-----END BASIC_CONSTRAINTS-----

#-----BEGIN EXTENSION-----
        SEQUENCE {
          # extKeyUsage
          OBJECT_IDENTIFIER { 2.5.29.37 }
          OCTET_STRING {
            SEQUENCE {
              # clientAuth
              OBJECT_IDENTIFIER { 1.3.6.1.5.5.7.3.2 }
            }
          }
        }
        SEQUENCE {
          # keyUsage
          OBJECT_IDENTIFIER { 2.5.29.15 }
          BOOLEAN { `ff` }
          OCTET_STRING {
            BIT_STRING { `05c0` }
          }
        }
#-----END EXTENSION-----

-----BEGIN CERTIFICATE-----
MIICdDCCAd2gAwIBAgIMAPuwTCq83v6rEJsMMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTQwNDIzMjA1MDQwWhcNMzcwNDIyMjA1MDQwWjA8MQswCQYDVQQGEwJBVTENMAsGA1UEChMEQmxhcjEeMBwGA1UEAxMVRm9vQCNfIENsw6/Dqm50IEPDq3J0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYK8imMuRi/03z0K1Zi0WnvfFHvwlYeyK9Na6XJYaUoIDAtB92kWdGMdAQhLciHnAjkXLI6W15OoV3gA/ElRZ1xUpxTMhjP6PyY5wqT5r6y8FxbiiFKKAnHmUcrgfVW28tQ+0rkLGMryRtrukXOgXBv7gcrmU7G1jC2a7WqmeI8QIDAQABo3IwcDAdBgNVHQ4EFgQUi3XVrMsIvg4fZbf6Vr5sp3Xaha8wHwYDVR0jBBgwFoAUi3XVrMsIvg4fZbf6Vr5sp3Xaha8wCQYDVR0TBAIwADATBgNVHSUEDDAKBggrBgEFBQcDAjAOBgNVHQ8BAf8EBAMCBcAwDQYJKoZIhvcNAQEFBQADgYEAO+h4bZXWPWr3ExksG8KIriKr9I0y9XxxZ88t0RzCw4fi6b6JXOQ0q0iRwj+VritHniV4a0+aEKRy/c/3AgywCgikWuLldH4RHTlgaskfafMuYybcnu9regrhVFeYqnKReAR+H49lTR8LEqycJA+EFBpVLR+78J0JsghcWTJlgCY=
-----END CERTIFICATE-----
