1
0
mirror of https://github.com/mailvelope/keyserver.git synced 2026-10-24 08:19:18 +03:00

Release v4.0.0

This commit is contained in:
Thomas Oberndörfer
2023-10-25 18:39:44 +02:00
parent 433ca6f4a5
commit 7eb0066ebf
12 changed files with 975 additions and 1070 deletions

View File

@@ -1,6 +1,14 @@
Mailvelope Key Server Changelog
===============================
v4.0.0
-------
__Nov 3, 2023__
* Migrate from koa to hapi and major refactoring
* Upgrade OpenPGP.js to v5
* Load configuration from .env file
* Update dependencies
v3.0.0
-------
__Mar 4, 2019__

View File

@@ -1,13 +1,11 @@
Mailvelope Keyserver [![Build Status](https://travis-ci.org/mailvelope/keyserver.svg?branch=master)](https://travis-ci.org/mailvelope/keyserver)
==============
Mailvelope Keyserver
====================
A simple OpenPGP public key server that validates email address ownership of uploaded keys.
## Why not use Web of Trust?
There are already OpenPGP key servers like the [SKS keyserver](https://bitbucket.org/skskeyserver/sks-keyserver/wiki/Home) that employ the [Web of Trust](https://en.wikipedia.org/wiki/Web_of_trust) to provide a way to authenticate a user's PGP keys. The problem with these servers are discussed [here](https://en.wikipedia.org/wiki/Key_server_(cryptographic)#Problems_with_keyservers).
There are already OpenPGP key servers like the [SKS keyserver](https://github.com/SKS-Keyserver/sks-keyserver) that employ the [Web of Trust](https://en.wikipedia.org/wiki/Web_of_trust) to provide a way to authenticate a user's PGP keys. The problem with these servers are discussed [here](https://en.wikipedia.org/wiki/Key_server_(cryptographic)#Problems_with_keyservers).
### Privacy
@@ -23,14 +21,10 @@ This requires more trust to be placed in the service provider that hosts a key s
The idea is that an identity provider such as an email provider can host their own key directory under a common `openpgpkeys` subdomain. An OpenPGP supporting user agent should attempt to lookup keys under the user's domain e.g. `https://openpgpkeys.example.com` for `user@example.com` first. User agents can host their own fallback key server as well, in case a mail provider does not provide its own key directory.
# Demo
Try out the server here: [https://keys.mailvelope.com](https://keys.mailvelope.com)
# API
The key server provides a modern RESTful API, but is also backwards compatible to the OpenPGP HTTP Keyserver Protocol (HKP). The following properties are enforced by the key server to enable reliable automatic key look in user agents:
@@ -98,7 +92,7 @@ GET /api/v1/key?email=user@example.com
}
],
"created": "Sat Oct 17 2015 12:17:03 GMT+0200 (CEST)",
"algorithm": "rsa_encrypt_sign",
"algorithm": "rsaEncryptSign",
"keySize": "4096",
"publicKeyArmored": "-----BEGIN PGP PUBLIC KEY BLOCK----- ... -----END PGP PUBLIC KEY BLOCK-----"
}
@@ -157,15 +151,14 @@ GET /api/v1/key?op=verifyRemove&keyId=b8e4105cc9dedc77&nonce=6a314915c09368224b1
# Language & DB
The server is written is in JavaScript ES7 and runs on [Node.js](https://nodejs.org/) v8+.
It uses [MongoDB](https://www.mongodb.com/) v3.2+ as its database.
The server is written is in JavaScript ES2020 and runs on [Node.js](https://nodejs.org/) v18+.
It uses [MongoDB](https://www.mongodb.com/) v6.0+ as its database.
# Getting started
## Installation
### Node.js (Mac OS)
### Node.js (macOS)
This is how to install node on Mac OS using [homebrew](http://brew.sh/). For other operating systems, please refer to the [Node.js download page](https://nodejs.org/en/download/).
@@ -174,13 +167,13 @@ brew update
brew install node
```
### MongoDB (Mac OS)
### MongoDB (macOS)
This is the installation guide to get a local development installation on Mac OS using [homebrew](http://brew.sh/). For other operating systems, please refer to the [MongoDB Getting Started Guide](https://docs.mongodb.com/getting-started/shell/).
This is the installation guide to get a local development installation on macOS using [homebrew](http://brew.sh/). For other operating systems, please refer to the [MongoDB Installation Tutorials](https://www.mongodb.com/docs/v6.0/installation/#mongodb-installation-tutorials).
```shell
brew update
brew install mongodb
brew install mongodb-community@6.0
mongod --config /usr/local/etc/mongod.conf
```
@@ -195,7 +188,7 @@ Now you can use the `mongo` CLI client to create a new test database. The userna
```shell
mongo
use keyserver-test
db.createUser({ user:"keyserver-user", pwd:"trfepCpjhVrqgpXFWsEF", roles:[{ role:"readWrite", db:"keyserver-test" }] })
db.createUser({ user:"keyserver-user", pwd:"your_mongo_db_pwd", roles:[{ role:"readWrite", db:"keyserver-test" }] })
```
### Dependencies
@@ -206,47 +199,58 @@ npm install
## Configuration
Configuration settings may be provided as environment variables. The files in the config directory read the environment variables and define configuration values for settings with no corresponding environment variable. Warning: Default settings are only provided for a small minority of settings in these files (as most of them are very individual like host/user/password)!
If settings are configured in multiple places, the priority ranking is as follows (individually for each setting):
1. Environment variable
2. config/production.js or config/development.js (depending on NODE_ENV)
3. config/default.js
Configuration settings may be provided as environment variables. The file config/config.js reads the environment variables and defines configuration values for settings with no corresponding environment variable. Warning: Default settings are only provided for a small minority of settings in these files (as most of them are very individual like host/user/password)!
### Development
If you don't use environment variables to configure settings, create `config/development.js` and use `config/default.js` as a template. Creating `development.js` instead of just editing `config/default.js` is recommended to prevent accidental commits of locally used settings.
If you don't use environment variables to configure settings, you can alternatively create a .env file for example with the following content:
```
PORT=3000
CORS_HEADER=true
HTTP_SECURITY_HEADER=true
CSP_HEADER=true
LOG_LEVEL=info
MONGO_URI=127.0.0.1:27017/keyserver-test
MONGO_USER=keyserver-user
MONGO_PASS=your_mongo_db_pwd
SMTP_HOST=sabic.uberspace.de
SMTP_PORT=465
SMTP_TLS=true
SMTP_STARTTLS=false
SMTP_PGP=true
SMTP_USER=info@your-key-server.net
SMTP_PASS=your_smtp_pwd
SENDER_NAME=My Key Server Demo
SENDER_EMAIL=info@your-key-server.net
```
### Production
For production use, settings configuration with environment variables is recommended as `NODE_ENV=production` is REQUIRED to be set as environment variable to instruct node.js to adapt e.g. logging to production use.
*Other settings you may also configure within `config/production.js` and use `config/default.js` as a template; but ensure then the environment variable `NODE_ENV=production` or `production.js` will not be read!*
### Settings
Available settings with its environment-variable-names, possible/example values and meaning (if not self-explainable). Defaults **bold**:
* NODE_ENV=development|production
(no default + needs to be set as environment variable!)
* LOG_LEVEL=**silly**|error|warn|info|debug
(no default, needs to be set as environment variable)
* LOG_LEVEL=debug|**info**|notice|warning|err|crit|alert|emerg
* SERVER_HOST=**localhost**
* PORT=**8888**
(application server port)
* HTTPS_UPGRADE=true
(upgrade HTTP requests to HTTPS and use [HSTS](https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security))
* HTTPS_KEY_PIN=base64_encoded_sha256
(optional, see [HPKP](https://developer.mozilla.org/en-US/docs/Web/Security/Public_Key_Pinning))
* HTTPS_KEY_PIN_BACKUP=base64_encoded_sha256
(optional, see [HPKP](https://developer.mozilla.org/en-US/docs/Web/Security/Public_Key_Pinning))
* MONGO_URI=127.0.0.1:27017/test_db
* MONGO_USER=db_user
* MONGO_PASS=db_password
* SMTP_HOST=127.0.0.1
* CORS_HEADER=true [CORS headers](https://hapi.dev/api#-routeoptionscors)
* HTTP_SECURITY_HEADER=true [security headers](https://hapi.dev/api#-routeoptionssecurity)
* CSP_HEADER=true (add Content-Security-Policy as in src/lib/csp.js)
* MONGO_URI=127.0.0.1:27017/keyserver
* MONGO_USER=keyserver-user
* MONGO_PASS=your_mongo_db_pwd
* SMTP_HOST=smpt.your-email-provider.com
* SMTP_PORT=465
* SMTP_TLS=true
* SMTP_STARTTLS=true
* SMTP_PGP=true
(encrypt verification message with public key (allows to verify presence + usability of private key at owner of the mail-address))
(encrypt verification message with public key (allows to verify presence + usability of private key at owner of the email address))
* SMTP_USER=smtp_user
* SMTP_PASS=smtp_pass
* SENDER_NAME="OpenPGP Key Server"
@@ -256,9 +260,9 @@ Available settings with its environment-variable-names, possible/example values
### Notes on SMTP
The key server uses [nodemailer](https://nodemailer.com) to send out emails upon public key upload to verify email address ownership. To test this feature locally, configure `SMTP_USER` and `SMTP_PASS` settings to your Gmail test account. Make sure that `SMTP_USER` and `SENDER_EMAIL` match. Otherwise the Gmail SMTP server will block any emails you try to send. Also, make sure to enable `Allow less secure apps` in the [Gmail security settings](https://myaccount.google.com/security#connectedapps). You can read more on this in the [Nodemailer documentation](https://nodemailer.com/using-gmail/).
The key server uses [nodemailer](https://nodemailer.com) to send out emails upon public key upload to verify email address ownership. To test this feature locally, configure `SMTP_USER` and `SMTP_PASS` settings to your email test account. Make sure that `SMTP_USER` and `SENDER_EMAIL` match.
For production you should use a service like [Amazon SES](https://aws.amazon.com/ses/), [Mailgun](https://www.mailgun.com/) or [Sendgrid](https://sendgrid.com/solutions/transactional-email/). Nodemailer supports all of these out of the box.
For production you should use a service like [Amazon SES](https://aws.amazon.com/ses/), [Mailgun](https://www.mailgun.com/) or [Sendgrid](https://sendgrid.com/use-cases/transactional-email/). Nodemailer supports all of these out of the box.
## Run tests
@@ -272,9 +276,6 @@ npm test
npm start
```
# License
AGPL v3.0
@@ -287,6 +288,5 @@ Among others, this project relies on the following open source libraries:
* [OpenPGP.js](https://openpgpjs.org/)
* [Nodemailer](https://nodemailer.com/)
* [addressparser](https://github.com/nodemailer/addressparser)
* [koa](http://koajs.com/)
* [hapi](https://hapi.dev/)
* [mongodb](https://mongodb.github.io/node-mongodb-native/)

1385
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,47 +1,47 @@
{
"name": "mailvelope-keyserver",
"version": "3.0.0",
"version": "4.0.0",
"license": "AGPL-3.0",
"repository": {
"type": "git",
"url": "https://github.com/mailvelope/keyserver.git"
},
"engines": {
"node": ">=10",
"npm": ">=6"
"node": ">=18",
"npm": ">=9"
},
"scripts": {
"start": "node index.js",
"start": "node src",
"test": "npm run test:lint && npm run test:unit && npm run test:integration",
"test:lint": "eslint --ignore-pattern \"**/*.min.js\" config src test *.js",
"test:unit": "mocha --config test/.mocharc.js ./test/unit/",
"test:integration": "mocha --config test/.mocharc.js ./test/integration",
"test:lint": "eslint --ignore-pattern \"**/*.min.js\" config src test",
"test:unit": "mocha --require ./test/setup.js --recursive ./test/unit",
"test:integration": "mocha --exit --require ./test/setup.js --recursive ./test/integration",
"release": "npm run release:install && npm run release:archive",
"release:install": "rm -rf node_modules/ && npm ci --production",
"release:archive": "zip -rq release.zip package.json package-lock.json node_modules/ *.js src/ config/ locales/"
},
"dependencies": {
"co-body": "6.1.0",
"config": "3.3.6",
"koa": "2.13.1",
"koa-ejs": "4.3.0",
"koa-locales": "1.12.0",
"koa-router": "10.0.0",
"koa-static": "5.0.0",
"mongodb": "3.6.6",
"nodemailer": "6.6.0",
"openpgp": "4.5.5",
"winston": "3.3.3",
"winston-papertrail": "1.0.5"
"@hapi/boom": "^10.0.1",
"@hapi/hapi": "^21.3.2",
"@hapi/inert": "^7.1.0",
"@hapi/vision": "^7.0.3",
"dotenv": "^16.3.1",
"ejs": "^3.1.9",
"hapi-i18n": "^3.0.1",
"mongodb": "^6.2.0",
"nodemailer": "^6.9.7",
"openpgp": "^5.11.0",
"winston": "^3.3.3",
"winston-syslog": "^2.4.4"
},
"devDependencies": {
"bootstrap": "^3.4.1",
"chai": "^4.3.4",
"chai": "^4.3.10",
"chai-as-promised": "^7.1.1",
"eslint": "^7.26.0",
"jquery": "^3.6.0",
"mocha": "^8.4.0",
"sinon": "^10.0.0",
"supertest": "^6.1.3"
"eslint": "^8.52.0",
"jquery": "^3.7.1",
"mocha": "^10.0.2",
"sinon": "^17.0.1",
"supertest": "^6.3.3"
}
}

View File

@@ -1,33 +1,19 @@
/**
* Mailvelope - secure email with OpenPGP encryption for Webmail
* Copyright (C) 2016 Mailvelope GmbH
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* Copyright (C) 2023 Mailvelope GmbH
* Licensed under the GNU Affero General Public License version 3
*/
'use strict';
const log = require('winston');
const config = require('config');
const init = require('./app');
const init = require('./server');
const log = require('./lib/log');
(async () => {
try {
const app = await init();
app.listen(config.server.port);
log.info('app', `Listening on http://localhost:${config.server.port}`);
} catch (err) {
log.error('app', 'Initialization failed!', err);
throw err;
}
const server = await init();
log.info('Server running on %s', server.info.uri);
})();
process.on('unhandledRejection', err => {
console.log(err);
process.exit(1);
});

View File

@@ -11,7 +11,7 @@ exports.plugin = {
server.ext('onPreResponse', async (request, h) => {
const {response} = request;
if (!response.isBoom) {
response.header('Content-Security-Policy', "default-src 'self'; object-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline'; font-src 'self'");
response.header('Content-Security-Policy', "default-src 'self'; object-src 'none'; style-src 'self' 'unsafe-inline'; frame-ancestors 'none'; form-action 'self'; base-uri 'self';");
}
return h.continue;
});

View File

@@ -49,7 +49,7 @@ class HKP {
if (params.mr) {
return h.response(key.publicKeyArmored)
.header('Content-Type', 'application/pgp-keys; charset=utf-8')
.header('Content-Disposition', 'attachment; filename=openpgpkey.asc');
.header('Content-Disposition', 'attachment; filename=openpgp-key.asc');
} else {
return h.view('key-armored', {query: params, key});
}
@@ -67,14 +67,11 @@ class HKP {
const keySize = key.keySize ? key.keySize : '';
let body = `info:${VERSION}:${COUNT}\npub:${fp}:${algo}:${keySize}:${created}::\n`;
for (const uid of key.userIds) {
body += `uid:${encodeURIComponent(`${uid.name} <${uid.email}>`)}:::\n`;
}
if (params.mr) {
return h.response(body)
.header('Content-Type', 'text/plain; charset=utf-8');
} else {
return h.response(body);
if (uid.verified) {
body += `uid:${encodeURIComponent(`${uid.name} <${uid.email}>`)}:::\n`;
}
}
return h.response(body).type('text/plain');
}
}
@@ -126,15 +123,15 @@ exports.plugin = {
const routeOptions = {
bind: hkp,
cors: Boolean(options.server.cors === 'true'),
security: Boolean(options.server.security === 'true'),
cors: options.server.cors === 'true',
security: options.server.security === 'true',
ext: {
onPreResponse: {
method({response}, h) {
if (!response.isBoom) {
return h.continue;
}
return h.response(response.message).code(response.output.statusCode);
return h.response(response.message).code(response.output.statusCode).type('text/plain');
}
}
}

View File

@@ -110,15 +110,15 @@ exports.plugin = {
const routeOptions = {
bind: rest,
cors: Boolean(options.server.cors === 'true'),
security: Boolean(options.server.security === 'true'),
cors: options.server.cors === 'true',
security: options.server.security === 'true',
ext: {
onPreResponse: {
method({response}, h) {
if (!response.isBoom) {
return h.continue;
}
return h.response(response.message).code(response.output.statusCode);
return h.response(response.message).code(response.output.statusCode).type('text/plain');
}
}
}

View File

@@ -9,7 +9,7 @@ exports.plugin = {
name: 'www',
async register(server, options) {
const routeOptions = {
security: Boolean(options.server.security === 'true')
security: options.server.security === 'true'
};
server.route({

File diff suppressed because one or more lines are too long

View File

@@ -5,5 +5,5 @@
<li><a target="_blank" href="https://www.mailvelope.com/privacy-service">Privacy</a></li>
</ul>
</nav>
<p>&copy; 2021 Mailvelope GmbH</p>
<p>&copy; 2023 Mailvelope GmbH</p>
</footer>

439
test/fixtures/key3.asc vendored
View File

@@ -1,3 +1,106 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
mx98yWe8snW9/F5EEibzFR7kUyPLEk2w7MHY/ck=
=ywUA
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PRIVATE KEY BLOCK-----
lQcYBFdZY4oBEADHN/tWY4tMdT20T6AzC7VyCNFu5UjSNtw74GHPlyoHuDi4wBLK
@@ -38,224 +141,120 @@ SR2kQ9dH4zm10sbufvjI0I8PLOuEcoFSEbjv6YXnaDBfDzehWkVy1otUuTPbEW3n
wsQa7MybamEnIacCqfJ9BQOC0USZFEYlvxjZLDO6XXwiLtuExlawMBOiPmb+00IJ
waGRraUVbQR5v8zlPXn9LzoXhXL/8OCoyap/mF/ERxkFhjyl96jW6T2e9hgF9aK7
6Z17LcahNUwsLl0TGus45s/ljpxNHHED2bAiykrlqVUg1XPOJkO8wNCErrQdVGVz
dCBVc2VyIDx0ZXN0MUBleGFtcGxlLmNvbT6JAlkEEwEKAEMCGwMHCwkIBwMCAQYV
CAIJCgsEFgIDAQIeAQIXgAIZARYhBAQGLHC0RuMwFuIZp0ABoSepDejhBQJglrQm
BQkaM/2RAAoJEEABoSepDejhtaEQAITj6bYyOrIIapAKQYJQS06b/8cHzYNtQnma
tgDIrV2ApKW0EMzqZhp+PWIQZxfN0TNt9yz11M301C7UQOEoZJ6DU9Fjb6/a2GXR
ajw5Q4jJ/n07hADEcrzM889KNJ5d+2GhQuBdeZNKEEOTS0VMwMFrkZ9lBxOKWouY
yETMDHdS5U7f2B0pmM2fJT0Upo7mtua44AWSxYeZau5q52RujHDoFySuMwC306Fi
6gW3aYkRfhbpm3j8SoeeBMr+l4NCNk31mwYIBdj6p8PMzcU/3SLUAIsZGnwrzYuQ
Q3EXl9cEr3hPKAndk6kZEdB+SIYCnInVf3Ehezcm5HPLHSKP9A+ai/S8XMWsBB9q
fBpycCu6kSQ7SumNm5xS/ckJHX5aK8TpBAEgcFIpvaHioeJBpTt9YjloP0U2rekl
oKLk7VnRU6M9NH/lXxgx/Gt6F2Bt96k8i5CfZ5Z0tFbVFtWCDTbHYP5e5tr8GFdi
VmnkYodfURN8bs670DeMqdxUCVdh2unb8JPw6NjCawfPWV6rS3/8K92LT+CmusSJ
G6fVuFLxq3E1yiAMeOuMkL6t2mpcJnW36diQM++PuNXG4HZuYgxnfn5LO8FulX6H
BNYd8/EXk3I5qsD98jr95pY9U/ijV2Kg7P+9ZnwyHN9klutkFd4krDb/2AJG8fkF
skm3XAA4iQI/BBMBCAApBQJXWWOKAhsDBQkHhh+ABwsJCAcDAgEGFQgCCQoLBBYC
AwECHgECF4AACgkQQAGhJ6kN6OGPHg/9ElCnpeTdP0KMJvXlUNw7K3JKqABy+hPo
lS8zPKr1JuIXdR7kk69/OiL1+z67pGfTOYrDL8Q9xig/kfd7+AIOQTQ4jnRj1w6m
bmO26zUrIns9kGFshBC6za5cOAlfpW6DH4tNg0h54S+fHK5FiHdGZ9wwLGdsauM4
D3ZzM9K8hYxgjJkc2zH32GjLk+2N83cH1ytJ5dXVebh+ahMnjQbqG2GrotSmNlge
RTm23x1mPY9lELtRnHtsTNoZk6MB12WXO4AEZROmk9tl9GAM6a44ROF33rU5B1P5
koCXl90WRG0BWuuj0/aQY+m/gXWbrgiuROSAkpytoL+ocD79s8Wc/xf1MAaF6SG9
anrkxMn5NPHHjBiC4VBr59A5nhpA+ocpbagbDkTQWJ3uAlPkrOaQxf67y/hXRYAZ
D7w2NWeibIAhp9X7fB170fAOPKa8PU8v3SbF3gbHjXb0wLgABNgR/aJ4JrKQC0XL
vBvwiDEnVOLKQAGzfbM6t4ElN2FFmr+PH0S2P/fRITyE76hmn2FrAIplsjzBKiPg
jy+AtR1EBDtI6Sc7XzoUuqcR1OgKfTJiAq7lzax/FMiwn5MePiVfHmOJbdyZf++2
9g+CUFEnqBXTXuE5+GhUeFD+5fxTmvA2M2dUqdvj7ptYd6YxRk9nddOq4PKAf5vC
pY4ZpSvEmjO0HVRlc3QgVXNlciA8dGVzdDJAZXhhbXBsZS5jb20+iQJWBBMBCgBA
AhsDBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AWIQQEBixwtEbjMBbiGadAAaEn
qQ3o4QUCYJa0JgUJGjP9kQAKCRBAAaEnqQ3o4XqnD/0erobqA9AToVzYMwkf1C2f
aQQIPYZITbrqleIEx25cC+CxZViWzTRIZ7gX8WZttXmL7YrJ+yO65d+dtipIsFUK
h6EG5TqSjNjbfe7PP94xXfQ7O3TTIGrA+eNx6SQK5oTFZFIAMjLUPN537FgcbBQ9
uMmIbitWnznyyd7BwV/967PcCiUSdoU1PbjLaua1zS3X9fHgWf8/lKpCQ4BahCEF
leI2BLs6Tr3Pt/yzwh12Q19hP0V1Lw+U+l6WPdmPa5DFgEcZ+W8a7G2znGD8mwJ2
OUAb5kVWsF7l+dY/m9Rk2vk041HCp4BVNjpYW+NJg64G/9UR9F3dH55tfeeGupIB
9hrrEEF0zPW6ROytwEOc/HHENUJu++p01k7X/A+3QiGZGvMefxff7PM3AHB2K/M7
2pnpxNXkbZfPmKYaOfyqBNiG1rdA6B64lVnmRdRTRzs5b9iQgRXcxeUmkRgKh46I
OHZNyybS/hEhf07XJb+qzESr3lXz3vB77EDKSufD1FhH3n4atR5nbcapmGtmPyHA
wxV/8bkXs7DlYcE2n5zzHCpVFkbdsWorbKWNJPdYRASGTlXW7vxUlVduyeWzEXay
HDsjkUSnEYMwQsGCbAzd2Lp/lLW9L99cVwjyrG3XTxwFrzdlYL+tMap2oBn4eljo
wrWU2eh/vLSTNnTZlntjArQdVGVzdCBVc2VyIDx0ZXN0M0BleGFtcGxlLmNvbT6J
AlYEEwEKAEACGwMHCwkIBwMCAQYVCAIJCgsEFgIDAQIeAQIXgBYhBAQGLHC0RuMw
FuIZp0ABoSepDejhBQJglrQmBQkaM/2RAAoJEEABoSepDejhW3YP/iEHJGOH3tve
PCDct/YzdKCZ3neWe6TXrtLWdoD5c4NhM9WhFFiJfuJOGBWDWdbM9vsY+xAsFEkR
w7Ywx1L5ufZQJg4GnsbV72Loao8AwrVyLK6UKXKg4TMa2676qGaQOR2fPT7en0dU
KU3arCGWnJ6HTVOq3HMglDTAplVMViq/vTyqeIjXR1Q89ivxWbzEIH0PV3Hr44j5
2fz9AYmJ4DydUOKeNMVTrBQwFlsPkx1/26dlITOm56xc3AB1WEtoR2MhE8+68dgW
EzFHZeDZ0cpIXCE97qnuUqiOrlqu5yPCeGJjaydBPDJ848yTlrlhPjUQeF4l3k3D
IuTieqyUQyT9rFiJcDAPQQIjjAgwEI+hCmVkK92SCCpF9AdVvs12yisxEz6UAA/l
eTcP//OT1MiXu00rm/N2M7PiKyGkktBvx1P6H6eL8oc7PoTg3SyDTfcQEJvK8pcu
qw/BhuGgvX+/qsfEQFJ8YC3WBaah95ik2y5xbYX2gWo49BeNwBbXwTsSU0WDPpoB
FQTiS2fAqkExjZR074PkGEyH2j7KXDO/R833ElkjD6M++BCFmTKXMOiMennN6xta
oinWAUIxx/Jsnp6N2q3aG19w6xb6GyeTBbmyOyzkLHlFELAUzE71Nlde/apZgFp3
UDpDspu/Qdv5pvCf3a94Rmysas8d0fjktDRUZXN0IFVzZXIgKENvbW1lbnQgYWJv
dXQgc3R1ZmYuKSA8dGVzdDRAZXhhbXBsZS5jb20+iQJWBBMBCgBAAhsDBwsJCAcD
AgEGFQgCCQoLBBYCAwECHgECF4AWIQQEBixwtEbjMBbiGadAAaEnqQ3o4QUCYJa0
JgUJGjP9kQAKCRBAAaEnqQ3o4bJVD/9B6aQvSvM35oI+Q6OnkSFzlzlBg7tjfTw/
pV1Q9sw0QgXHbGF+u4LF4bw9XsOo5DvNtE41dC/ASnOpsHpBG0GfEaNuYdEbJkYT
dNTlYIm4bSdX9qXageSB4aK5OXhBJ/VHaWQ24F/y67RYfhm8X6ftrepsRBal8fvF
PrAjSIsMGYujGk0W2vvv44a6jeEq20pR+1stKmLQFD3WaiI7OXjfyT/jmJqxNiqz
JIEVvPCIxFnx/C409j2jYAmvTpfsKNzIAKyv+SnzhJ9tlMurLNzjgqh3s+CTJfrD
VMUgHWbL4iMro23OYSKDAfysixGwN/3dh5b/GyFOMoWkb/jfNO7DHqgFjM3DsFyX
DmsYv1nc0GmeuvDNCSZqlsIE343K4JAxg3+uWckzjv60yY5zr3hxhioR6QQAgBZG
BwIV4XzWH0SCPEclrgqtyaHHmc3voWfuhGpChloWF96IPVqg7XV5Zu9ZP4w6tXHM
recNZB0ygrubyP6T23LfJiW+veeDtdF7N8ezVcz9QftYnoK1hRHcXZIB/z6UqkgX
Qlt5E0sISAVGXYkdYIgpJKD3VFbH06b33Y82TFAyYvjTyZkHjmMTxwWjYEU2RGG/
9Jl/+uu/7Q6xz163NxShYFBvvGYfULZNS6RicPx3lkAGJkyp23cvrQ9ttcqp8ykG
tOsCU4XxpJ0HFwRXWWOKARAAzIH3R8va5Qm4yg6/QnDtXBCoCefpg/o9vsziIzT0
xy+zVT5qqWNp5G7JcKaAkpzBpFRf3CDgjt47LrPQ/pOdCuAh9de/S4fKjVzEp1pG
K5i3JJatrA2v6Fh5f6dMCZ0v0QBD2xRWoPH+1FcsziIfNAFucoCC6T5YL1khwcs7
Jg+1/YyY/opC6ImK4f0LmCjx4iiE+CNHvo24ZigMaNKexEfhkoySeKlWnd74zDhy
DYjCltO5pqMobzmLqie/gGH53YKzSpues4exDkbi5IQAkv3SwVsQixz1jAI4U0mo
brX6PmV1xx08FrbEDkKgSJnijNCcfM23TH1MpoV/s8SC+DavWw5HFdBd4fluid4l
mJfaYsjVXP8QtpD2DZ/1w1C2XAT72v94FZG5s3jjwuHAiU4jPNlSUiAMXNCoZ5qa
3GDtMeD2l5O4JvKT1lR5yjhdeCnw1rdfIYui/ryVEzm3C5iHkLepH5g5yLHNPVEW
I6v09Vcc2L2zFfv98sZP+BgIX7+NezENGe8ZmCYZsplzJFs8JFeeqdis8GZmr5Ji
gJYCO7bninDKeDjkshMpFTWUIpGI89RC25UuLwxmvEF9mjO+Q29ZyVTIS0fF6cUw
w+8OpqO73SlLmmPL0biOCvNZhko1ufrAImq8eRymsY74UQzTmMyY8xA2T0+Mb2Ts
gh0AEQEAAQAP9isbpi0tP9tt+3gm7i6bI2EgeRbwvQ0NYK8fKAlMkLAVnPGJk/Gt
EiHWzqQZKcj0UwhTfOeNlHkMsfER8ryAdCkryhmX9IjACtnVg5+Cbl08D5yKSGyL
wBNDd1HAIqbwfBQlfX+XNRuWi6xYPaKSb2KIRS+WNu6WgoyJ+KTfvZ6EKx64+1Sm
NZjamcQR9GOQ+Q0pEfHdsVzTJ9G2Kro/BuviM9S9fDosEgZVh3xvPliMEDzkdV3s
ZqxSRfca7OW9eVu4PVMYO18VYox4jFaZXL8yWoFJMRPsZqrUX/04vDSR18b0UZUG
i5FAMnzovTRpfXVa8/frwJqHVrIpD6H8d1GKbmmt4IlMZVg6gOY3ZeesIwkJxAG3
HWlL4gdptv7CdlcUaj8OoinTSwCvEnelb302dLM8OdBqZMw44DovIXx5J1iYIN62
7o9SKZg8KQbAD7rCwWbWFBRWbBmsABMYlaS2rHmYfnhS1Y7ek9ySFVFTeCVXYzzV
OdG96uKJ7ohLUyJ9Rmt7/N1Hj8+duZ1VlzfpExw4pKP4RWJX3MFkmMEB6KrUXQ1d
79c5aP2wx5HUEBeKwuD7EyZrBA/UWVfLQant5PUn1aMuzk9eDi1Sftld5WCYHdaw
gzD/9gg+uq0iMrONLxDo3an9Of8EBgRlzOjseINc1Bz2tCE+4OQ9yFkIAN6E+IlF
1eZUF2FrYh0HksRc3GB12HzSP8Spv5NA3Zf/X7Ausy5PDG4QwdPuxqTLKBB8FuJQ
vxvdqgKwGg+MWoM4pQP5Hqh23CbFN4Raz126XTkHhjJ+KZspKEERDXkK7apSIOAi
yZ6T+/32muh1GyCWggjhAUPZB2ZwSJKxRTH78BUl9nGhYn1oGPyg5aFeeqnreOfx
RIL+1xwmDz/66dFik1lERb7lAtl7k9zJtfJm1JtJaXdKQIRE5ASfVP2qbLwUspHa
wchodkewgWR/Tl0dOJ7Op7tSwRKYkF5ZBhd2XVEYldz6G74U2h7adA/gkLY+3h6J
rzLpIuwdxQ8HVpUIAOtHN4N7Xwqq7snoDoxRaqxkW4sjzMwuMWbkbVIRMskC2sfx
WKzP7hhCZ/pdnMFpwazpiOkyXvTtGqROysi/2hMj6j95HpggijK0ww9zeGAktqVR
C5TnygHrbnB70XRdo3LpsOJ1yXQ16PjUqDseGRtnjDbdSX2lGmlcwahIw6F56LvX
VVMzDv4omdMmw0j2+OMmzK3M2XrBl2SapZQ9rC8cU1y0r4wCpH3EL5T+QyEfCnUl
g6be6/7suQYWTzRx3Svy/wWCvFyz+NDL108JiNtCoTdVoPJkKdq9KRBx1diQO3cl
VBDCia3phVm3n0BLh3YcqpcUv4NUZeoYwEb9Q2kIAJkNpTnPsDFeVvxu+tDxiYN+
aqgDSHNne7sdIk/niw7q2ShklnbHIBz2l9wIV8xU1VEZSBrWvWC51q9xhYSBH0Ts
Z7Lz5uuFTqtTYgu/29EYJ32xxr7Ao42qB3DFdJYiQ4ZnneDIpw7GPLwhkZWylujJ
qyrHhbyiTphDhhlF02OwRFJiZCKNAaJZ1qx7+KMcANoaaecyXmYfDOvWcBgETAIc
FMOO0t1jlkY9ZH8Kz9hVpnLt8BSoPs2iK9+tYaxZZoAlz7X7cnouXKKoy3S7wLog
JDyJwaQaudVjCsDfCLsE0Z5l82LiaPl60CRazXmlBiE2yJpJEvvtT+/BPnFgNxx7
T4kCPAQYAQoAJgIbDBYhBAQGLHC0RuMwFuIZp0ABoSepDejhBQJglrRQBQkaM/2/
AAoJEEABoSepDejhgG8QAIRNiB1nEKir5mXOkOWRqWJrJ2vZ/phWFwTJtVhIZWBY
QvPidb2vQAjAar7oifd5karCvzakekg4vYQTcruI7/tNSXIm9GmpSSQfdQuSs5CW
BxPE163I+HARECX/Tc0jQraSoPLay1ghgnIuu7zLsxzyNViuq+zdVVtuS9LHjd3g
gmeuBRGTjIBbIqz+wV/dcOZ2rt796OhYj4PaG1d0E7i5H5ONGfWvNric0crkvuE4
sRpYccfle9xATieQw5HA7kst4NofErF0vjRNd+1jrx1yHDXqT3yAyN4HHq9vnNql
100fgFQj7CN4zH2+8VcUYku8j6TrEHkAel40cYNuiwUakGPsgADXECzz7HVlv3cL
kQwdPjlf4wRsn+iiKXfgjm1ju1748RVD38g5Tyy5UmwhS0p8dF4V8JygjQPj2gkX
ED20fFJ5Eq31RTlL+oMuO0SUZOQVUNsIcJesUj2vS8UUoe2SCYR1bWRAIZ0h9L6W
7Cvjz4kJ45SNREViWMelhHsDiDhJCTUiTOw3SxZZ4Dv+v+L5blle6MQ/1UV3FTzU
EdhexKf8fIL0BtQnGoR83nOFy2W4FSRj/Ay/V1ytFp2DPnEXmuM45Y8K6X+JNTfX
zagYV7aGteJ53CASfkLcBE1CHOvBlIYL8nclgkwWMWpAzvX/QtJZcm/xKB27iM1Y
=0IPf
-----END PGP PRIVATE KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
0llyb/EoHbuIzVg=
=yqus
-----END PGP PUBLIC KEY BLOCK-----
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
RBIm8xUe5FMjyxJNsOzB2P3J
=ePU4
-----END PGP PRIVATE KEY BLOCK-----