//
//  TestPGPKeys.swift
//  passKitTests
//
//  Created by Yishi Lin on 2019/7/17.
//  Copyright © 2019 Bob Sun. All rights reserved.
//

import XCTest

@testable import passKit

struct PGPTestSet {
    fileprivate static var ALL_TEST_SETS: [String: Self] = [:] // swiftlint:disable:this strict_fileprivate

    let publicKey: String
    let privateKey: String
    let fingerprint: String
    let passphrase: String

    fileprivate func collect() -> Self { // swiftlint:disable:this strict_fileprivate
        Self.ALL_TEST_SETS[fingerprint] = self
        return self
    }
}

struct MultiKeyPGPTestSet {
    let publicKeys: String
    let privateKeys: String
    let fingerprints: [String]
    let passphrases: [String]
}

let RSA2048 = PGPTestSet(
    publicKey: PGP_RSA2048_PUBLIC_KEY,
    privateKey: PGP_RSA2048_PRIVATE_KEY,
    fingerprint: "a1024dae",
    passphrase: "passforios"
).collect()

let RSA2048_SUB = PGPTestSet(
    publicKey: PGP_RSA2048_PUBLIC_KEY,
    privateKey: PGP_RSA2048_PRIVATE_SUBKEY,
    fingerprint: "a1024dae",
    passphrase: "passforios"
)

let RSA3072_NO_PASSPHRASE = PGPTestSet(
    publicKey: PGP_RSA3072_PUBLIC_KEY_NO_PASSPHRASE,
    privateKey: PGP_RSA3072_PRIVATE_KEY_NO_PASSPHRASE,
    fingerprint: "be0f9402",
    passphrase: ""
)

let RSA4096 = PGPTestSet(
    publicKey: PGP_RSA4096_PUBLIC_KEY,
    privateKey: PGP_RSA4096_PRIVATE_KEY,
    fingerprint: "d862027e",
    passphrase: "passforios"
).collect()

let RSA4096_SUB = PGPTestSet(
    publicKey: PGP_RSA4096_PUBLIC_KEY,
    privateKey: PGP_RSA4096_PRIVATE_SUBKEY,
    fingerprint: "d862027e",
    passphrase: "passforios"
)

let ED25519 = PGPTestSet(
    publicKey: PGP_ED25519_PUBLIC_KEY,
    privateKey: PGP_ED25519_PRIVATE_KEY,
    fingerprint: "e9444483",
    passphrase: "passforios"
).collect()

let ED25519_SUB = PGPTestSet(
    publicKey: PGP_ED25519_PUBLIC_KEY,
    privateKey: PGP_ED25519_PRIVATE_SUBKEY,
    fingerprint: "e9444483",
    passphrase: "passforios"
)

let NISTP384 = PGPTestSet(
    publicKey: PGP_NISTP384_PUBLIC_KEY,
    privateKey: PGP_NISTP384_PRIVATE_KEY,
    fingerprint: "5af3c085",
    passphrase: "soirofssap"
).collect()

let RSA2048_RSA4096 = MultiKeyPGPTestSet(
    publicKeys: PGP_RSA2048_PUBLIC_KEY | PGP_RSA4096_PUBLIC_KEY,
    privateKeys: PGP_RSA2048_PRIVATE_KEY | PGP_RSA4096_PRIVATE_KEY,
    fingerprints: ["a1024dae", "d862027e"],
    passphrases: ["passforios", "passforios"]
)

let ED25519_NISTP384 = MultiKeyPGPTestSet(
    publicKeys: PGP_ED25519_PUBLIC_KEY | PGP_NISTP384_PUBLIC_KEY,
    privateKeys: PGP_ED25519_PRIVATE_KEY | PGP_NISTP384_PRIVATE_KEY,
    fingerprints: ["e9444483", "5af3c085"],
    passphrases: ["passforios", "soirofssap"]
)

func requestPGPKeyPassphrase(keyID: String) -> String {
    let id = keyID.suffix(8).lowercased()
    return PGPTestSet.ALL_TEST_SETS[id]?.passphrase ?? "passforios"
}

let PGP_RSA2048_PUBLIC_KEY = """
-----BEGIN PGP PUBLIC KEY BLOCK-----

mQENBF0uBLkBCADGYAW5yJQ/lLHmHdb/l0bhYyLnhuyWTaOWIEHGiDnpjO71vBPD
WMPxPulj/GGdqzR4lUUanPG1yJwXTjNutjMBZ/o+ixgdqja391b4L8VyF5Lb7pHX
c6uvbR6p1Tj72PJrVj6Ev71VdnsHNOLUDqWZL4b0dNXPf3sM4ry5yS6Ej6ho9o/l
nuYbe9WfLqUctSM+TsXd84ptc6luIHZN+cojrNGAh3RLYuVFeJjkLkvHdJBWJQS2
zJ0iAA6T0NbfPGrVL6tMaB7NwMDN33Ql3ARfaHf7/d8DXGYyGUYZFqyKagGUaBxN
arXfzv9gIyc109D8pPMN5QUiEo9K4x3xNpLhABEBAAG0KnBhc3Nmb3Jpb3MgPGRl
dmVsb3BlckBwYXNzZm9yaW9zLm1zc3VuLm1lPokBTgQTAQgAOAIbAwULCQgHAgYV
CgkICwIEFgIDAQIeAQIXgBYhBEcSKGJxIg2ymYg+pwYuZ42hAk2uBQJdLgWNAAoJ
EAYuZ42hAk2uYjIH/iPsoJD+KfJ/c7GTSLbeMtQtuIv2sCiSc+BiXp+EFjbNS7oS
cEYiG/FX1zuivr3wvDGbE/oVLvdTK8tDJvCh17SZZUGeTmflgByig+1/kp5JUj2x
FOH3xXCVCnh+FWB24QHLiFpwgzGuZgCKMn45PcZB7Zmo/wJsKYb040zKltQWmzg8
rZ1vOKlMgAGgdNQOu+u+8OE6x/dedYvJZePvwND4Rva+EwS+MaEZZAn76ypEblhF
pRZsTb6+PeTY+IWRnne7xUvYRmZLXhqoHq/c0hXXz2xAGmpigd50HUQRUOYtsuBi
RxXLwFIlfPpziomMTdhnOFVDL6UVLL+jqJDPHWu5AQ0EXS4EuQEIAMwr3I+NUsY+
Iwyyz6C84z90kHPs9zOBvGc73Tgc70lXHUklwQaqLSmLbHQzk6Ykw/o1snQ8Oz2f
AjPlBr9/zWJgOvnFH+FrjpfEpmz4WjmoxBK610JINkKW4Fn4VT/NrBL9LtjaZOLp
0XA6fh8TXTOsz80jDj1VPvNAsu78FC+zXFDvOJpX+bCv3vabO9/ihKL/emvgqzxD
LO9IapPfL1rPvCmfaNZ8hRV8ebHOW0pVLfyOYn4pvwtL/uYIINv1CYAwOGVW1sth
8kS8Acj4VTDkynuobxiLDTpNrRUbt0iPn/2nJ8m1qq9hqWgO2z01UkSKrusDiMNH
TnHFepgG8NMAEQEAAYkBNgQYAQgAIAIbDBYhBEcSKGJxIg2ymYg+pwYuZ42hAk2u
BQJhGMLoAAoJEAYuZ42hAk2u7k4IAJvwGq9HR3+rDme6Vd15z4G5MNmKRSDe778q
JneGB3xYbQi8hRDAgAgmWZx/6yniYLiQSkkLSSphcFTOYIZi4RntieNEXvsQ4h90
IhD0RWaxjitG13tCHPQK8Eg2twQVt49Ogp8X7EiLd0S2yfP9feqIvnSraKo7/4W6
hboHRNvcvPrrX7aLU/dPefPjAjQT/jRlb/0IP97Y4KWcJSGVuOySm/bg9pssiPS9
hbxUO8yfvse3wnMOic390C1KXRArtS1FkDo61a9tlM/2DLmMm21SfSHVSKWxNDrr
a8RjXjHHUovORm1GQ9FFifyWx5/0YvfeT8H1GWI1xkSiJLnW4zc=
=WeRn
-----END PGP PUBLIC KEY BLOCK-----
"""

let PGP_RSA2048_PRIVATE_KEY = """
-----BEGIN PGP PRIVATE KEY BLOCK-----

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
=4jcx
-----END PGP PRIVATE KEY BLOCK-----
"""

let PGP_RSA2048_PRIVATE_SUBKEY = """
-----BEGIN PGP PRIVATE KEY BLOCK-----

lQEVBF0uBLkBCADGYAW5yJQ/lLHmHdb/l0bhYyLnhuyWTaOWIEHGiDnpjO71vBPD
WMPxPulj/GGdqzR4lUUanPG1yJwXTjNutjMBZ/o+ixgdqja391b4L8VyF5Lb7pHX
c6uvbR6p1Tj72PJrVj6Ev71VdnsHNOLUDqWZL4b0dNXPf3sM4ry5yS6Ej6ho9o/l
nuYbe9WfLqUctSM+TsXd84ptc6luIHZN+cojrNGAh3RLYuVFeJjkLkvHdJBWJQS2
zJ0iAA6T0NbfPGrVL6tMaB7NwMDN33Ql3ARfaHf7/d8DXGYyGUYZFqyKagGUaBxN
arXfzv9gIyc109D8pPMN5QUiEo9K4x3xNpLhABEBAAH/AGUAR05VAbQqcGFzc2Zv
cmlvcyA8ZGV2ZWxvcGVyQHBhc3Nmb3Jpb3MubXNzdW4ubWU+iQFOBBMBCAA4AhsD
BQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAFiEERxIoYnEiDbKZiD6nBi5njaECTa4F
Al0uBY0ACgkQBi5njaECTa5iMgf+I+ygkP4p8n9zsZNItt4y1C24i/awKJJz4GJe
n4QWNs1LuhJwRiIb8VfXO6K+vfC8MZsT+hUu91Mry0Mm8KHXtJllQZ5OZ+WAHKKD
7X+SnklSPbEU4ffFcJUKeH4VYHbhAcuIWnCDMa5mAIoyfjk9xkHtmaj/AmwphvTj
TMqW1BabODytnW84qUyAAaB01A67677w4TrH9151i8ll4+/A0PhG9r4TBL4xoRlk
CfvrKkRuWEWlFmxNvr495Nj4hZGed7vFS9hGZkteGqger9zSFdfPbEAaamKB3nQd
RBFQ5i2y4GJHFcvAUiV8+nOKiYxN2Gc4VUMvpRUsv6OokM8da50DxgRdLgS5AQgA
zCvcj41Sxj4jDLLPoLzjP3SQc+z3M4G8ZzvdOBzvSVcdSSXBBqotKYtsdDOTpiTD
+jWydDw7PZ8CM+UGv3/NYmA6+cUf4WuOl8SmbPhaOajEErrXQkg2QpbgWfhVP82s
Ev0u2Npk4unRcDp+HxNdM6zPzSMOPVU+80Cy7vwUL7NcUO84mlf5sK/e9ps73+KE
ov96a+CrPEMs70hqk98vWs+8KZ9o1nyFFXx5sc5bSlUt/I5ifim/C0v+5ggg2/UJ
gDA4ZVbWy2HyRLwByPhVMOTKe6hvGIsNOk2tFRu3SI+f/acnybWqr2GpaA7bPTVS
RIqu6wOIw0dOccV6mAbw0wARAQAB/gcDAmtaUxdn6/1d9C0fqcKXxn6KaYTStFBh
GFAUEFb8dlM79K6s2a1fA9EOProYYlI6Bxr1dNU2VmpThSlA87Zjx+WkvShybuLB
Q+wL2omGNDitWhn/sx26yeXrUrP6VXd8VL3XkxqlOHLefvf6waGDBEI0mW1k4FHC
UffDI2QG5XB08bKHx8u9OGw4EIz/OxFdaC6ibGPvkmkh+5bP6FXkn0NRnfEImKcl
zygHpidPI23RbrFh0cnbIyWGBFG1L87zG/xxaXfnWqCwQVcxZdmEYOOZOH44RUPW
JFhAxBuH+5+/ddQDv0MbRstSG6Ai9OwWwmjYOutZHd5fxl9kZZWxDwoBKqAiUdJu
fF47o96KIjblknI0QfvXMNn731tpUJxzRUvzvzE04RBI4YJn9RHn1Kggj/UaJtVP
YQT9/FkqtcOMy0k6CN8VQXmQ5HaPgs36l8WhCaxT8AR28gMlHB/n2LZN+CMr2OB8
kJM44UgTA3ax6qoPTLPkUqLDYAPF9OTJFnBE8Xmah/wEN3HRCcC3yZTmZhhsmHDs
N7gpv92AggGRtGiiNrYR4w4Q73YVYqTZPX/5seejuZQcUOZTpeQ75eAdN55kdVtm
l55hRgxk7LnuCLj4ys1YbT5ClOzH8WSyEquJM4dhtH/x9DKBPOgiDO4R8NryARdd
e1wm/1f8HdpZ9GxRtyKoDaoEIIilcv0lCUb7OmI3wYgLmTru8nY0mYO7crKc5Tqj
pZWGw9hrnQDa3tO5p9bqj8K3/f0VTilHa+PUjPX34XuciRfheUQBXfuhJWCNqFI7
wUi2DWuBTLmNvTWWKqOwSCijngYTAExoXwVVzKzp0bZIqUoqiyFNAdDvTihOx3ox
07KgoO4eF7OJwmUvc0WXOo1fDPpCn/Obgqim8V4KEGTEKlU+TOQBvCspSBBH0okB
NgQYAQgAIAIbDBYhBEcSKGJxIg2ymYg+pwYuZ42hAk2uBQJhGMLoAAoJEAYuZ42h
Ak2u7k4IAJvwGq9HR3+rDme6Vd15z4G5MNmKRSDe778qJneGB3xYbQi8hRDAgAgm
WZx/6yniYLiQSkkLSSphcFTOYIZi4RntieNEXvsQ4h90IhD0RWaxjitG13tCHPQK
8Eg2twQVt49Ogp8X7EiLd0S2yfP9feqIvnSraKo7/4W6hboHRNvcvPrrX7aLU/dP
efPjAjQT/jRlb/0IP97Y4KWcJSGVuOySm/bg9pssiPS9hbxUO8yfvse3wnMOic39
0C1KXRArtS1FkDo61a9tlM/2DLmMm21SfSHVSKWxNDrra8RjXjHHUovORm1GQ9FF
ifyWx5/0YvfeT8H1GWI1xkSiJLnW4zc=
=Gxx5
-----END PGP PRIVATE KEY BLOCK-----
"""

let PGP_RSA3072_PUBLIC_KEY_NO_PASSPHRASE = """
-----BEGIN PGP PUBLIC KEY BLOCK-----

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
dsDN96T3b3dNsR/uHBUhQKv54B58lQ==
=w+7J
-----END PGP PUBLIC KEY BLOCK-----
"""

let PGP_RSA3072_PRIVATE_KEY_NO_PASSPHRASE = """
-----BEGIN PGP PRIVATE KEY BLOCK-----

[encoded data, 5001 characters]
=/IMN
-----END PGP PRIVATE KEY BLOCK-----
"""

let PGP_RSA4096_PUBLIC_KEY = """
-----BEGIN PGP PUBLIC KEY BLOCK-----

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
ERIDrUdG
=N0dj
-----END PGP PUBLIC KEY BLOCK-----
"""

let PGP_RSA4096_PRIVATE_KEY = """
-----BEGIN PGP PRIVATE KEY BLOCK-----

[encoded data, 6630 characters]
VFOhGxQwNgv9665cH9/3W6STnUiM7V9RkG93OALOLxdTghESA61HRg==
=Ql28
-----END PGP PRIVATE KEY BLOCK-----
"""

let PGP_RSA4096_PRIVATE_SUBKEY = """
-----BEGIN PGP PRIVATE KEY BLOCK-----

[encoded data, 4875 characters]
ghESA61HRg==
=DFUr
-----END PGP PRIVATE KEY BLOCK-----
"""

let PGP_ED25519_PUBLIC_KEY = """
-----BEGIN PGP PUBLIC KEY BLOCK-----

mDMEXS4TMRYJKwYBBAHaRw8BAQdAW/U3l3/bMWFxHaCQ3Kr8Wel5322hgiVGO39K
mk+NLYO0KnBhc3Nmb3Jpb3MgPGRldmVsb3BlckBwYXNzZm9yaW9zLm1zc3VuLm1l
PoiQBBMWCAA4FiEEX8ywgauK9IlymZ4q51Csv+lERIMFAl0uEzECGwMFCwkIBwIG
FQoJCAsCBBYCAwECHgECF4AACgkQ51Csv+lERIM0RgEAtw6VI0hbhIiSCZuHfePn
3XmXQnSkfYw6OrND86vNPEgBAIcymV45aM3IUMi7cczlNemdc4vzvZ2sahN4I9bp
zygDuDgEXS4TMRIKKwYBBAGXVQEFAQEHQDEc6qSqOJHTY/QBMBCuH2NPbc3jfJKe
3zN15IWfji9hAwEIB4h4BBgWCAAgFiEEX8ywgauK9IlymZ4q51Csv+lERIMFAl0u
EzECGwwACgkQ51Csv+lERIMOsAEA43pkVP9br/TmESz/IuTZBfVAexAA3Q9DRL7M
NcZVu2wA/js8TfomM2QBmZYPSZFPzA1nI1FzzgPhFgy6fGLgpZUL
=4EF6
-----END PGP PUBLIC KEY BLOCK-----
"""

let PGP_ED25519_PRIVATE_KEY = """
-----BEGIN PGP PRIVATE KEY BLOCK-----

lIYEXS4TMRYJKwYBBAHaRw8BAQdAW/U3l3/bMWFxHaCQ3Kr8Wel5322hgiVGO39K
mk+NLYP+BwMCw1EywRMGVRHmRf963xPpOVBluE38pFvriDQXbceoPZVdgyr+M2Ef
3HFn8t/ZyTzeZQZIgmlAFNgiDaz3I+CISN89uVFt7yJVGzbuvjgVSrQqcGFzc2Zv
cmlvcyA8ZGV2ZWxvcGVyQHBhc3Nmb3Jpb3MubXNzdW4ubWU+iJAEExYIADgWIQRf
zLCBq4r0iXKZnirnUKy/6UREgwUCXS4TMQIbAwULCQgHAgYVCgkICwIEFgIDAQIe
AQIXgAAKCRDnUKy/6UREgzRGAQC3DpUjSFuEiJIJm4d94+fdeZdCdKR9jDo6s0Pz
q808SAEAhzKZXjlozchQyLtxzOU16Z1zi/O9naxqE3gj1unPKAOciwRdLhMxEgor
BgEEAZdVAQUBAQdAMRzqpKo4kdNj9AEwEK4fY09tzeN8kp7fM3XkhZ+OL2EDAQgH
/gcDAsJwqoLIpKyw5lJwU83TfgSJJLrBR6KGLB1oZigRAasw++69iC19yUS6FY3M
mRiOrYeBatYCoXY8xolbStkhZl2y9KYlPcFNWOQvVKtuUT2IeAQYFggAIBYhBF/M
sIGrivSJcpmeKudQrL/pRESDBQJdLhMxAhsMAAoJEOdQrL/pRESDDrABAON6ZFT/
W6/05hEs/yLk2QX1QHsQAN0PQ0S+zDXGVbtsAP47PE36JjNkAZmWD0mRT8wNZyNR
c84D4RYMunxi4KWVCw==
=nV4i
-----END PGP PRIVATE KEY BLOCK-----
"""

let PGP_ED25519_PRIVATE_SUBKEY = """
-----BEGIN PGP PRIVATE KEY BLOCK-----

lDsEXS4TMRYJKwYBBAHaRw8BAQdAW/U3l3/bMWFxHaCQ3Kr8Wel5322hgiVGO39K
mk+NLYP/AGUAR05VAbQqcGFzc2ZvcmlvcyA8ZGV2ZWxvcGVyQHBhc3Nmb3Jpb3Mu
bXNzdW4ubWU+iJAEExYIADgWIQRfzLCBq4r0iXKZnirnUKy/6UREgwUCXS4TMQIb
AwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRDnUKy/6UREgzRGAQC3DpUjSFuE
iJIJm4d94+fdeZdCdKR9jDo6s0Pzq808SAEAhzKZXjlozchQyLtxzOU16Z1zi/O9
naxqE3gj1unPKAOciwRdLhMxEgorBgEEAZdVAQUBAQdAMRzqpKo4kdNj9AEwEK4f
Y09tzeN8kp7fM3XkhZ+OL2EDAQgH/gcDAk55ulCfKROW5kyrg18FeoHR+DNPhKVV
7R2CyAinW5c4+SiLk+P4Zbgue1JEmCNqhckywVx6LOFoR3OdJRFumfuacB82QUY+
p9VjMutDAO+IeAQYFggAIBYhBF/MsIGrivSJcpmeKudQrL/pRESDBQJdLhMxAhsM
AAoJEOdQrL/pRESDDrABAON6ZFT/W6/05hEs/yLk2QX1QHsQAN0PQ0S+zDXGVbts
AP47PE36JjNkAZmWD0mRT8wNZyNRc84D4RYMunxi4KWVCw==
=4Sfz
-----END PGP PRIVATE KEY BLOCK-----
"""

let PGP_NISTP384_PUBLIC_KEY = """
-----BEGIN PGP PUBLIC KEY BLOCK-----

mG8EXpUo3hMFK4EEACIDAwQXzJVx15CZgw9lpJPlFaAaFIJtxc4RevL8LitUdRZF
nVmPpYpgZwoROtSEb+JPKrYR9xVFTOzf+BYXWTyq4YXFfxQrea2hRx7RZUMj3tex
A+tOTnA0ruqCzMIsLYGglcK0KnBhc3Nmb3Jpb3MgPGRldmVsb3BlckBwYXNzZm9y
aW9zLm1zc3VuLm1lPoiwBBMTCQA4FiEEvNNkwHhYXAYH4ZxnFxwH0lrzwIUFAl6V
KN4CGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQFxwH0lrzwIV2FQF/X3sS
rP8f20TOpqI4Ng/5Du6QKcdje05VWVDpBVnT/f40aT8jQi6ykqrHLsWek2yFAYDn
3UD8FchlUlSbvVofgipPkPp+nSsm92D+e1r4XtHT+u+8eYtMbf8iVB8qX0B3ufC4
cwRelSjeEgUrgQQAIgMDBC8+ymFhSwUs95FmaFe52FruXlFsRgwcOfsu2MI1oMh4
xjX0uh+lwzIndDM7zbrRjkVdUijydV47TebANUwJ9S9uroOj9yxAHpg7CVRI0Kcb
NhoF3eBfNDYe5YydQvJqGgMBCQmImAQYEwkAIBYhBLzTZMB4WFwGB+GcZxccB9Ja
88CFBQJelSjeAhsMAAoJEBccB9Ja88CFqwsBgKrjm2MeRnIYpSdzWEfuW9QCvaD5
bklFOfAbrdBTp39u/3iO+maLmA7/AgFFcO+AAgF/Vb/tUBdvu/pn/viWagGzK/pk
cacCQ5/PGk4Ln2CosOS1atZpkmX5JJLr034tKMr6
=TMCI
-----END PGP PUBLIC KEY BLOCK-----
"""

let PGP_NISTP384_PRIVATE_KEY = """
-----BEGIN PGP PRIVATE KEY BLOCK-----

lNIEXpUo3hMFK4EEACIDAwQXzJVx15CZgw9lpJPlFaAaFIJtxc4RevL8LitUdRZF
nVmPpYpgZwoROtSEb+JPKrYR9xVFTOzf+BYXWTyq4YXFfxQrea2hRx7RZUMj3tex
A+tOTnA0ruqCzMIsLYGglcL+BwMCgmXDbtpRcF//w9wVoIqLBqlBfcfbPN35l+eo
pTLlOEQq8ioYjXotSysjocxyW1urNKq3g5Np0ZEU8iXtD0LGdtOWq7a9UnI+90vc
gq1UVxYhIWdtH5Tssshrfi6E26y0KnBhc3Nmb3Jpb3MgPGRldmVsb3BlckBwYXNz
Zm9yaW9zLm1zc3VuLm1lPoiwBBMTCQA4FiEEvNNkwHhYXAYH4ZxnFxwH0lrzwIUF
Al6VKN4CGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQFxwH0lrzwIV2FQF/
X3sSrP8f20TOpqI4Ng/5Du6QKcdje05VWVDpBVnT/f40aT8jQi6ykqrHLsWek2yF
AYDn3UD8FchlUlSbvVofgipPkPp+nSsm92D+e1r4XtHT+u+8eYtMbf8iVB8qX0B3
ufCc1gRelSjeEgUrgQQAIgMDBC8+ymFhSwUs95FmaFe52FruXlFsRgwcOfsu2MI1
oMh4xjX0uh+lwzIndDM7zbrRjkVdUijydV47TebANUwJ9S9uroOj9yxAHpg7CVRI
0KcbNhoF3eBfNDYe5YydQvJqGgMBCQn+BwMC3cQgKP9rMPr/RlmS+ANayfPVjNUs
bq/6y9YWmUTN7kppKTMU6VYYMxHNSX1GIZ7RWrsWr0h5DQRrWaSef9tsyGMl0cl5
scuDku5Yzmt4meoaqZJaRLaP4EuypaGGpKOImAQYEwkAIBYhBLzTZMB4WFwGB+Gc
ZxccB9Ja88CFBQJelSjeAhsMAAoJEBccB9Ja88CFqwsBgKrjm2MeRnIYpSdzWEfu
W9QCvaD5bklFOfAbrdBTp39u/3iO+maLmA7/AgFFcO+AAgF/Vb/tUBdvu/pn/viW
agGzK/pkcacCQ5/PGk4Ln2CosOS1atZpkmX5JJLr034tKMr6
=vn6S
-----END PGP PRIVATE KEY BLOCK-----
"""
