Re: Rayforge packaging effort – request for guidance and team maintenance

Michele Cane <[email protected]> Sat, 20 Jun 2026 06:37:13 +0000
Newsgroups gmane.linux.debian.devel.python
Message-ID <yQ3nLfxYyEh2rvNAZCU52VqHeRiVmR7kP85ayCom6g78g5mXIF4CcRvf-Kmg2BkB9_LI60K7K20o8dmgVreMNovbawn6dcRK8L7-0L2dwoo=@proton.me>
This is an OpenPGP/MIME signed message (RFC 4880 and 3156)
--------1dfd05eda15e651d05f6d897e298ab5b6a9257f089aae6dbadfbbb038700d3e0
Content-Type: multipart/mixed;boundary=---------------------145ee35e5ca9338ba7e6e3e35093c913

-----------------------145ee35e5ca9338ba7e6e3e35093c913
Content-Type: multipart/alternative;boundary=---------------------788f04a6a24a1d30474077779264ec6b

-----------------------788f04a6a24a1d30474077779264ec6b
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;charset=utf-8

Hello,

I am following up on my previous message now focusing only on the python p=
ackages.

I have moved the 5 repos under the Python Team namespace.

https://salsa.debian.org/python-team/packages/raygeo
https://salsa.debian.org/python-team/packages/python-vtracer
https://salsa.debian.org/python-team/packages/rayforge
https://salsa.debian.org/python-team/packages/pyvips
https://salsa.debian.org/python-team/packages/python-asyncudp

I believe the last two are ready for review. These are my first two ever p=
ython packages. I tried to follow=C2=A0 the packaging policy. Any feedback=
 would be more than welcome.

A short summary of the status of the two packages:

=C2=A0 python-asyncudp
=C2=A0 - Salsa: https://salsa.debian.org/python-team/packages/python-async=
udp
=C2=A0 - Source package: python-asyncudp
=C2=A0 - Binary package: python3-asyncudp
=C2=A0 - Version: 0.11.0-1
=C2=A0 - Pure Python asyncio UDP helper library.
=C2=A0 - Packaging uses pybuild with dh-python and python3-all.
=C2=A0 - Upstream unittest suite is enabled and passed in sbuild for Pytho=
n 3.13 and 3.14.
=C2=A0 - sbuild -d unstable succeeded.
=C2=A0 - Deep lintian only reported initial-upload-closes-no-bugs and lega=
cy egg-info info tags.

=C2=A0 python-pyvips

=C2=A0 - Salsa: https://salsa.debian.org/python-team/packages/pyvips
=C2=A0 - Source package: python-pyvips
=C2=A0 - Binary package: python3-pyvips
=C2=A0 - Version: 3.1.1-1
=C2=A0 - Python binding for libvips.
=C2=A0 - Packaging uses pybuild, dh-python, python3-all-dev, CFFI, and lib=
vips-dev.
=C2=A0 - Architecture is any because it builds the _libvips CFFI extension=
.
=C2=A0 - Runtime dependency uses current libvips42t64.
=C2=A0 - Upstream pytest suite is enabled and passed in sbuild for Python =
3.13 and 3.14.
=C2=A0 - sbuild -d unstable succeeded.
=C2=A0 - Deep lintian only reported initial-upload-closes-no-bugs.

Thanks in advance

Mike

Michele Cane, PhD


On Friday, 29 May 2026 at 15:03, Michele Cane <[email protected]> wro=
te:

> Hello Rust and Python teams,
> =


> I am reaching out because I have started working on packaging Rayforge f=
or Debian.
> =


> For details about the project, please see the ITP:
> =


> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=3D1137607
> =


> I previously reached out to mentors.debian.net and was advised to upload=
 my repositories to Salsa and contact the relevant teams to seek guidance,=
 review, and potential inclusion under the appropriate team-maintained nam=
espaces.
> =


> The current packaging repositories are available on Salsa:
> =


> -   rayforge: https://salsa.debian.org/heiserhorn/rayforge
>     =


> -   raygeo: https://salsa.debian.org/heiserhorn/raygeo
>     =


> -   pyvips: https://salsa.debian.org/heiserhorn/pyvips
>     =


> -   vtracer: https://salsa.debian.org/heiserhorn/vtracer
>     =


> -   visioncortex: https://salsa.debian.org/heiserhorn/visioncortex
>     =


> -   flo_curves: https://salsa.debian.org/heiserhorn/flo_curves
>     =


> -   clipper2: https://salsa.debian.org/heiserhorn/clipper2
>     =


> -   rstar: https://salsa.debian.org/heiserhorn/rstar
>     =


> -   pyo3-stub-gen: https://salsa.debian.org/heiserhorn/pyo3-stub-gen
>     =


> -   setuptools-git-versioning: https://salsa.debian.org/heiserhorn/setup=
tools-git-versioning
>     =


> -   clipper2c-sys: https://salsa.debian.org/heiserhorn/clipper2c-sys
>     =


> -   Clipper2C: https://salsa.debian.org/heiserhorn/Clipper2C
>     =


> -   arduino-asyncudp: https://salsa.debian.org/heiserhorn/arduino-asyncu=
dp
>     =


> =


> The following packages have been identified as direct or indirect depend=
encies of Rayforge (the list may not yet be exhaustive):
> =


> Rust:
> =


> -   raygeo
>     =


> -   vtracer
>     =


> -   visioncortex
>     =


> -   flo_curves
>     =


> -   clipper2
>     =


> -   rstar
>     =


> -   pyo3-stub-gen
>     =


> -   clipper2c-sys
>     =


> =


> Python:
> =


> -   pyvips
>     =


> -   setuptools-git-versioning
>     =


> =


> C++:
> =


> -   Clipper2C
>     =


> -   arduino-asyncudp
>     =


> =


> Current status:
> =


> The following packages are lintian-clean and build successfully with sbu=
ild using only dependencies already available in Debian:
> =


> -   flo_curves (Rust)
>     =


> -   rstar (Rust)
>     =


> -   setuptools-git-versioning (Python)
>     =


> -   Clipper2C (C++)
>     =


> -   arduino-asyncudp (C++)
>     =


> =


> For the remaining packages, I have already started preparing the packagi=
ng repositories and Debian branches, but some depend on packages that are =
not yet available in Debian or require updates before they can be complete=
d.
> =


> In particular, pyo3-stub-gen currently depends on packages that are alre=
ady present in Debian but require updates:
> =


> -   librust-inventory-dev
>     =


> -   librust-rustpython-parser-dev
>     =


> -   librust-ordered-float-dev
>     =


> =


> For these, I have already opened or updated the relevant bug reports.
> =


> I would appreciate guidance on the following points:
> =


> -   Should the Rust packages be maintained under the Debian Rust Team?
>     =


> -   Should the Python packages be maintained under the Debian Python Tea=
m?
>     =


> -   What would be the preferred maintenance model for the two C++ packag=
es?
>     =


> -   Should the main Rayforge package be maintained under the Python Team=
, the Debian Science Team, or another team?
>     =


> =


> For context, I have some previous Debian packaging experience dating bac=
k 10=E2=80=9315 years, but this is my first packaging effort involving a d=
ependency tree of this size and complexity.
> =


> Any guidance, review, or suggestions would be greatly appreciated.
> =


> Many thanks,
> =


> Mike
> =


> Michele Cane,PhD
> =


> =


-----------------------788f04a6a24a1d30474077779264ec6b
Content-Type: multipart/related;boundary=---------------------05d78131c12c84f08aa5cd1ef8eb3a22

-----------------------05d78131c12c84f08aa5cd1ef8eb3a22
Content-Type: text/html;charset=utf-8
Content-Transfer-Encoding: base64

PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0
cHg7Ij5IZWxsbyw8L2Rpdj48ZGl2IHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2Vy
aWY7IGZvbnQtc2l6ZTogMTRweDsiPjxicj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LWZhbWlseTog
QXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsiPkkgYW0gZm9sbG93aW5nIHVwIG9u
IG15IHByZXZpb3VzIG1lc3NhZ2Ugbm93IGZvY3VzaW5nIG9ubHkgb24gdGhlIHB5dGhvbiBwYWNr
YWdlcy48L2Rpdj48ZGl2IHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7IGZv
bnQtc2l6ZTogMTRweDsiPjxicj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LWZhbWlseTogQXJpYWws
IHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsiPkkgaGF2ZSBtb3ZlZCB0aGUgNSByZXBvcyB1
bmRlciB0aGUgUHl0aG9uIFRlYW0gbmFtZXNwYWNlLjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtZmFt
aWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyI+PGJyPjwvZGl2PjxkaXYg
c3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyI+
PHNwYW4+PGEgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9yZWZlcnJlciBub2ZvbGxvdyBub29wZW5l
ciIgaHJlZj0iaHR0cHM6Ly9zYWxzYS5kZWJpYW4ub3JnL3B5dGhvbi10ZWFtL3BhY2thZ2VzL3Jh
eWdlbyI+aHR0cHM6Ly9zYWxzYS5kZWJpYW4ub3JnL3B5dGhvbi10ZWFtL3BhY2thZ2VzL3JheWdl
bzwvYT48L3NwYW4+PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNl
cmlmOyBmb250LXNpemU6IDE0cHg7Ij48c3Bhbj48YSB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub3Jl
ZmVycmVyIG5vZm9sbG93IG5vb3BlbmVyIiBocmVmPSJodHRwczovL3NhbHNhLmRlYmlhbi5vcmcv
cHl0aG9uLXRlYW0vcGFja2FnZXMvcHl0aG9uLXZ0cmFjZXIiPmh0dHBzOi8vc2Fsc2EuZGViaWFu
Lm9yZy9weXRob24tdGVhbS9wYWNrYWdlcy9weXRob24tdnRyYWNlcjwvYT48L3NwYW4+PC9kaXY+
PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0
cHg7Ij48c3Bhbj48YSB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub3JlZmVycmVyIG5vZm9sbG93IG5v
b3BlbmVyIiBocmVmPSJodHRwczovL3NhbHNhLmRlYmlhbi5vcmcvcHl0aG9uLXRlYW0vcGFja2Fn
ZXMvcmF5Zm9yZ2UiPmh0dHBzOi8vc2Fsc2EuZGViaWFuLm9yZy9weXRob24tdGVhbS9wYWNrYWdl
cy9yYXlmb3JnZTwvYT48L3NwYW4+PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFs
LCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7Ij48c3Bhbj48YSB0YXJnZXQ9Il9ibGFuayIg
cmVsPSJub3JlZmVycmVyIG5vZm9sbG93IG5vb3BlbmVyIiBocmVmPSJodHRwczovL3NhbHNhLmRl
Ymlhbi5vcmcvcHl0aG9uLXRlYW0vcGFja2FnZXMvcHl2aXBzIj5odHRwczovL3NhbHNhLmRlYmlh
bi5vcmcvcHl0aG9uLXRlYW0vcGFja2FnZXMvcHl2aXBzPC9hPjwvc3Bhbj48L2Rpdj48ZGl2IHN0
eWxlPSJmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsiPjxz
cGFuPjxhIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vcmVmZXJyZXIgbm9mb2xsb3cgbm9vcGVuZXIi
IGhyZWY9Imh0dHBzOi8vc2Fsc2EuZGViaWFuLm9yZy9weXRob24tdGVhbS9wYWNrYWdlcy9weXRo
b24tYXN5bmN1ZHAiPmh0dHBzOi8vc2Fsc2EuZGViaWFuLm9yZy9weXRob24tdGVhbS9wYWNrYWdl
cy9weXRob24tYXN5bmN1ZHA8L2E+PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5
OiBBcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyI+PGJyPjwvZGl2PjxkaXYgc3R5
bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyI+SSBi
ZWxpZXZlIHRoZSBsYXN0IHR3byBhcmUgcmVhZHkgZm9yIHJldmlldy4gVGhlc2UgYXJlIG15IGZp
cnN0IHR3byBldmVyIHB5dGhvbiBwYWNrYWdlcy4gSSB0cmllZCB0byBmb2xsb3cmbmJzcDsgdGhl
IHBhY2thZ2luZyBwb2xpY3kuIEFueSBmZWVkYmFjayB3b3VsZCBiZSBtb3JlIHRoYW4gd2VsY29t
ZS48L2Rpdj48ZGl2IHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQt
c2l6ZTogMTRweDsiPjxicj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsIHNh
bnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsiPkEgc2hvcnQgc3VtbWFyeSBvZiB0aGUgc3RhdHVz
IG9mIHRoZSB0d28gcGFja2FnZXM6PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFs
LCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7Ij48YnI+PC9kaXY+PGRpdiBzdHlsZT0iZm9u
dC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7Ij48c3Bhbj4mbmJz
cDsgcHl0aG9uLWFzeW5jdWRwPC9zcGFuPjxkaXY+PGJyPjwvZGl2PjxkaXY+PHNwYW4+Jm5ic3A7
IC0gU2Fsc2E6IDxhIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vcmVmZXJyZXIgbm9mb2xsb3cgbm9v
cGVuZXIiIGhyZWY9Imh0dHBzOi8vc2Fsc2EuZGViaWFuLm9yZy9weXRob24tdGVhbS9wYWNrYWdl
cy9weXRob24tYXN5bmN1ZHAiPmh0dHBzOi8vc2Fsc2EuZGViaWFuLm9yZy9weXRob24tdGVhbS9w
YWNrYWdlcy9weXRob24tYXN5bmN1ZHA8L2E+PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+Jm5ic3A7
IC0gU291cmNlIHBhY2thZ2U6IHB5dGhvbi1hc3luY3VkcDwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFu
PiZuYnNwOyAtIEJpbmFyeSBwYWNrYWdlOiBweXRob24zLWFzeW5jdWRwPC9zcGFuPjwvZGl2Pjxk
aXY+PHNwYW4+Jm5ic3A7IC0gVmVyc2lvbjogMC4xMS4wLTE8L3NwYW4+PC9kaXY+PGRpdj48c3Bh
bj4mbmJzcDsgLSBQdXJlIFB5dGhvbiBhc3luY2lvIFVEUCBoZWxwZXIgbGlicmFyeS48L3NwYW4+
PC9kaXY+PGRpdj48c3Bhbj4mbmJzcDsgLSBQYWNrYWdpbmcgdXNlcyBweWJ1aWxkIHdpdGggZGgt
cHl0aG9uIGFuZCBweXRob24zLWFsbC48L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4mbmJzcDsgLSBV
cHN0cmVhbSB1bml0dGVzdCBzdWl0ZSBpcyBlbmFibGVkIGFuZCBwYXNzZWQgaW4gc2J1aWxkIGZv
ciBQeXRob24gMy4xMyBhbmQgMy4xNC48L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4mbmJzcDsgLSBz
YnVpbGQgLWQgdW5zdGFibGUgc3VjY2VlZGVkLjwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuPiZuYnNw
OyAtIERlZXAgbGludGlhbiBvbmx5IHJlcG9ydGVkIGluaXRpYWwtdXBsb2FkLWNsb3Nlcy1uby1i
dWdzIGFuZCBsZWdhY3kgZWdnLWluZm8gaW5mbyB0YWdzLjwvc3Bhbj48L2Rpdj48ZGl2Pjxicj48
L2Rpdj48ZGl2PjxzcGFuPiZuYnNwOyBweXRob24tcHl2aXBzPC9zcGFuPjwvZGl2PjxkaXY+PGJy
PjwvZGl2PjxkaXY+PHNwYW4+Jm5ic3A7IC0gU2Fsc2E6IDxhIHRhcmdldD0iX2JsYW5rIiByZWw9
Im5vcmVmZXJyZXIgbm9mb2xsb3cgbm9vcGVuZXIiIGhyZWY9Imh0dHBzOi8vc2Fsc2EuZGViaWFu
Lm9yZy9weXRob24tdGVhbS9wYWNrYWdlcy9weXZpcHMiPmh0dHBzOi8vc2Fsc2EuZGViaWFuLm9y
Zy9weXRob24tdGVhbS9wYWNrYWdlcy9weXZpcHM8L2E+PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4+
Jm5ic3A7IC0gU291cmNlIHBhY2thZ2U6IHB5dGhvbi1weXZpcHM8L3NwYW4+PC9kaXY+PGRpdj48
c3Bhbj4mbmJzcDsgLSBCaW5hcnkgcGFja2FnZTogcHl0aG9uMy1weXZpcHM8L3NwYW4+PC9kaXY+
PGRpdj48c3Bhbj4mbmJzcDsgLSBWZXJzaW9uOiAzLjEuMS0xPC9zcGFuPjwvZGl2PjxkaXY+PHNw
YW4+Jm5ic3A7IC0gUHl0aG9uIGJpbmRpbmcgZm9yIGxpYnZpcHMuPC9zcGFuPjwvZGl2PjxkaXY+
PHNwYW4+Jm5ic3A7IC0gUGFja2FnaW5nIHVzZXMgcHlidWlsZCwgZGgtcHl0aG9uLCBweXRob24z
LWFsbC1kZXYsIENGRkksIGFuZCBsaWJ2aXBzLWRldi48L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4m
bmJzcDsgLSBBcmNoaXRlY3R1cmUgaXMgYW55IGJlY2F1c2UgaXQgYnVpbGRzIHRoZSBfbGlidmlw
cyBDRkZJIGV4dGVuc2lvbi48L3NwYW4+PC9kaXY+PGRpdj48c3Bhbj4mbmJzcDsgLSBSdW50aW1l
IGRlcGVuZGVuY3kgdXNlcyBjdXJyZW50IGxpYnZpcHM0MnQ2NC48L3NwYW4+PC9kaXY+PGRpdj48
c3Bhbj4mbmJzcDsgLSBVcHN0cmVhbSBweXRlc3Qgc3VpdGUgaXMgZW5hYmxlZCBhbmQgcGFzc2Vk
IGluIHNidWlsZCBmb3IgUHl0aG9uIDMuMTMgYW5kIDMuMTQuPC9zcGFuPjwvZGl2PjxkaXY+PHNw
YW4+Jm5ic3A7IC0gc2J1aWxkIC1kIHVuc3RhYmxlIHN1Y2NlZWRlZC48L3NwYW4+PC9kaXY+PGRp
dj48c3Bhbj4mbmJzcDsgLSBEZWVwIGxpbnRpYW4gb25seSByZXBvcnRlZCBpbml0aWFsLXVwbG9h
ZC1jbG9zZXMtbm8tYnVncy48L3NwYW4+PC9kaXY+PGRpdj48YnI+PC9kaXY+PHNwYW4+PC9zcGFu
PlRoYW5rcyBpbiBhZHZhbmNlPC9kaXY+PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBz
YW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7Ij48YnI+PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1m
YW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7Ij5NaWtlPC9kaXY+PGRp
diBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7
Ij48YnI+PC9kaXY+CjxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsg
Zm9udC1zaXplOiAxNHB4OyIgY2xhc3M9InByb3Rvbm1haWxfc2lnbmF0dXJlX2Jsb2NrIj4KICAg
IDxkaXYgY2xhc3M9InByb3Rvbm1haWxfc2lnbmF0dXJlX2Jsb2NrLXVzZXIiPgogICAgICAgIE1p
Y2hlbGUgQ2FuZSwgUGhECiAgICA8L2Rpdj4KICAgIAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJw
cm90b25tYWlsX3NpZ25hdHVyZV9ibG9jay1wcm90b24gcHJvdG9ubWFpbF9zaWduYXR1cmVfYmxv
Y2stZW1wdHkiPgogICAgICAgIAogICAgICAgICAgICA8L2Rpdj4KPC9kaXY+CjxkaXYgc3R5bGU9
ImZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyI+PGJyPjwv
ZGl2PjxkaXYgY2xhc3M9InByb3Rvbm1haWxfcXVvdGUiPgogICAgICAgIE9uIEZyaWRheSwgMjkg
TWF5IDIwMjYgYXQgMTU6MDMsIE1pY2hlbGUgQ2FuZSAmbHQ7bWljaGVsZS5jYW5lQHByb3Rvbi5t
ZSZndDsgd3JvdGU6PGJyPgogICAgICAgIDxibG9ja3F1b3RlIGNsYXNzPSJwcm90b25tYWlsX3F1
b3RlIiB0eXBlPSJjaXRlIj4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6IEFy
aWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7Ij48L2Rpdj48cD48L3A+PHA+PC9wPjxw
PjwvcD48cD5IZWxsbyBSdXN0IGFuZCBQeXRob24gdGVhbXMsPC9wPjxwPkkgYW0gcmVhY2hpbmcg
b3V0IGJlY2F1c2UgSSBoYXZlIHN0YXJ0ZWQgd29ya2luZyBvbiBwYWNrYWdpbmcgUmF5Zm9yZ2Ug
Zm9yIERlYmlhbi48L3A+PHA+Rm9yIGRldGFpbHMgYWJvdXQgdGhlIHByb2plY3QsIHBsZWFzZSBz
ZWUgdGhlIElUUDo8L3A+PHA+PGEgaHJlZj0iaHR0cHM6Ly9idWdzLmRlYmlhbi5vcmcvY2dpLWJp
bi9idWdyZXBvcnQuY2dpP2J1Zz0xMTM3NjA3IiBzdHlsZT0id29yZC1icmVhazogYnJlYWstd29y
ZDsiIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vcmVmZXJyZXIgbm9mb2xsb3cgbm9vcGVuZXIiPmh0
dHBzOi8vYnVncy5kZWJpYW4ub3JnL2NnaS1iaW4vYnVncmVwb3J0LmNnaT9idWc9MTEzNzYwNzwv
YT48L3A+PHA+SSBwcmV2aW91c2x5IHJlYWNoZWQgb3V0IHRvIG1lbnRvcnMuZGViaWFuLm5ldCBh
bmQgd2FzIGFkdmlzZWQgdG8gdXBsb2FkIG15IHJlcG9zaXRvcmllcyB0byBTYWxzYSBhbmQgY29u
dGFjdCB0aGUgcmVsZXZhbnQgdGVhbXMgdG8gc2VlayBndWlkYW5jZSwgcmV2aWV3LCBhbmQgcG90
ZW50aWFsIGluY2x1c2lvbiB1bmRlciB0aGUgYXBwcm9wcmlhdGUgdGVhbS1tYWludGFpbmVkIG5h
bWVzcGFjZXMuPC9wPjxwPlRoZSBjdXJyZW50IHBhY2thZ2luZyByZXBvc2l0b3JpZXMgYXJlIGF2
YWlsYWJsZSBvbiBTYWxzYTo8L3A+PHVsPjxsaT48cD5yYXlmb3JnZTogPGEgaHJlZj0iaHR0cHM6
Ly9zYWxzYS5kZWJpYW4ub3JnL2hlaXNlcmhvcm4vcmF5Zm9yZ2UiIHN0eWxlPSJ3b3JkLWJyZWFr
OiBicmVhay13b3JkOyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9yZWZlcnJlciBub2ZvbGxvdyBu
b29wZW5lciI+aHR0cHM6Ly9zYWxzYS5kZWJpYW4ub3JnL2hlaXNlcmhvcm4vcmF5Zm9yZ2U8L2E+
PC9wPjwvbGk+PGxpPjxwPnJheWdlbzogPGEgaHJlZj0iaHR0cHM6Ly9zYWxzYS5kZWJpYW4ub3Jn
L2hlaXNlcmhvcm4vcmF5Z2VvIiBzdHlsZT0id29yZC1icmVhazogYnJlYWstd29yZDsiIHRhcmdl
dD0iX2JsYW5rIiByZWw9Im5vcmVmZXJyZXIgbm9mb2xsb3cgbm9vcGVuZXIiPmh0dHBzOi8vc2Fs
c2EuZGViaWFuLm9yZy9oZWlzZXJob3JuL3JheWdlbzwvYT48L3A+PC9saT48bGk+PHA+cHl2aXBz
OiA8YSBocmVmPSJodHRwczovL3NhbHNhLmRlYmlhbi5vcmcvaGVpc2VyaG9ybi9weXZpcHMiIHN0
eWxlPSJ3b3JkLWJyZWFrOiBicmVhay13b3JkOyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9yZWZl
cnJlciBub2ZvbGxvdyBub29wZW5lciI+aHR0cHM6Ly9zYWxzYS5kZWJpYW4ub3JnL2hlaXNlcmhv
cm4vcHl2aXBzPC9hPjwvcD48L2xpPjxsaT48cD52dHJhY2VyOiA8YSBocmVmPSJodHRwczovL3Nh
bHNhLmRlYmlhbi5vcmcvaGVpc2VyaG9ybi92dHJhY2VyIiBzdHlsZT0id29yZC1icmVhazogYnJl
YWstd29yZDsiIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vcmVmZXJyZXIgbm9mb2xsb3cgbm9vcGVu
ZXIiPmh0dHBzOi8vc2Fsc2EuZGViaWFuLm9yZy9oZWlzZXJob3JuL3Z0cmFjZXI8L2E+PC9wPjwv
bGk+PGxpPjxwPnZpc2lvbmNvcnRleDogPGEgaHJlZj0iaHR0cHM6Ly9zYWxzYS5kZWJpYW4ub3Jn
L2hlaXNlcmhvcm4vdmlzaW9uY29ydGV4IiBzdHlsZT0id29yZC1icmVhazogYnJlYWstd29yZDsi
IHRhcmdldD0iX2JsYW5rIiByZWw9Im5vcmVmZXJyZXIgbm9mb2xsb3cgbm9vcGVuZXIiPmh0dHBz
Oi8vc2Fsc2EuZGViaWFuLm9yZy9oZWlzZXJob3JuL3Zpc2lvbmNvcnRleDwvYT48L3A+PC9saT48
bGk+PHA+ZmxvX2N1cnZlczogPGEgaHJlZj0iaHR0cHM6Ly9zYWxzYS5kZWJpYW4ub3JnL2hlaXNl
cmhvcm4vZmxvX2N1cnZlcyIgc3R5bGU9IndvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7IiB0YXJnZXQ9
Il9ibGFuayIgcmVsPSJub3JlZmVycmVyIG5vZm9sbG93IG5vb3BlbmVyIj5odHRwczovL3NhbHNh
LmRlYmlhbi5vcmcvaGVpc2VyaG9ybi9mbG9fY3VydmVzPC9hPjwvcD48L2xpPjxsaT48cD5jbGlw
cGVyMjogPGEgaHJlZj0iaHR0cHM6Ly9zYWxzYS5kZWJpYW4ub3JnL2hlaXNlcmhvcm4vY2xpcHBl
cjIiIHN0eWxlPSJ3b3JkLWJyZWFrOiBicmVhay13b3JkOyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0i
bm9yZWZlcnJlciBub2ZvbGxvdyBub29wZW5lciI+aHR0cHM6Ly9zYWxzYS5kZWJpYW4ub3JnL2hl
aXNlcmhvcm4vY2xpcHBlcjI8L2E+PC9wPjwvbGk+PGxpPjxwPnJzdGFyOiA8YSBocmVmPSJodHRw
czovL3NhbHNhLmRlYmlhbi5vcmcvaGVpc2VyaG9ybi9yc3RhciIgc3R5bGU9IndvcmQtYnJlYWs6
IGJyZWFrLXdvcmQ7IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub3JlZmVycmVyIG5vZm9sbG93IG5v
b3BlbmVyIj5odHRwczovL3NhbHNhLmRlYmlhbi5vcmcvaGVpc2VyaG9ybi9yc3RhcjwvYT48L3A+
PC9saT48bGk+PHA+cHlvMy1zdHViLWdlbjogPGEgaHJlZj0iaHR0cHM6Ly9zYWxzYS5kZWJpYW4u
b3JnL2hlaXNlcmhvcm4vcHlvMy1zdHViLWdlbiIgc3R5bGU9IndvcmQtYnJlYWs6IGJyZWFrLXdv
cmQ7IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub3JlZmVycmVyIG5vZm9sbG93IG5vb3BlbmVyIj5o
dHRwczovL3NhbHNhLmRlYmlhbi5vcmcvaGVpc2VyaG9ybi9weW8zLXN0dWItZ2VuPC9hPjwvcD48
L2xpPjxsaT48cD5zZXR1cHRvb2xzLWdpdC12ZXJzaW9uaW5nOiA8YSBocmVmPSJodHRwczovL3Nh
bHNhLmRlYmlhbi5vcmcvaGVpc2VyaG9ybi9zZXR1cHRvb2xzLWdpdC12ZXJzaW9uaW5nIiBzdHls
ZT0id29yZC1icmVhazogYnJlYWstd29yZDsiIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vcmVmZXJy
ZXIgbm9mb2xsb3cgbm9vcGVuZXIiPmh0dHBzOi8vc2Fsc2EuZGViaWFuLm9yZy9oZWlzZXJob3Ju
L3NldHVwdG9vbHMtZ2l0LXZlcnNpb25pbmc8L2E+PC9wPjwvbGk+PGxpPjxwPmNsaXBwZXIyYy1z
eXM6IDxhIGhyZWY9Imh0dHBzOi8vc2Fsc2EuZGViaWFuLm9yZy9oZWlzZXJob3JuL2NsaXBwZXIy
Yy1zeXMiIHN0eWxlPSJ3b3JkLWJyZWFrOiBicmVhay13b3JkOyIgdGFyZ2V0PSJfYmxhbmsiIHJl
bD0ibm9yZWZlcnJlciBub2ZvbGxvdyBub29wZW5lciI+aHR0cHM6Ly9zYWxzYS5kZWJpYW4ub3Jn
L2hlaXNlcmhvcm4vY2xpcHBlcjJjLXN5czwvYT48L3A+PC9saT48bGk+PHA+Q2xpcHBlcjJDOiA8
YSBocmVmPSJodHRwczovL3NhbHNhLmRlYmlhbi5vcmcvaGVpc2VyaG9ybi9DbGlwcGVyMkMiIHN0
eWxlPSJ3b3JkLWJyZWFrOiBicmVhay13b3JkOyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9yZWZl
cnJlciBub2ZvbGxvdyBub29wZW5lciI+aHR0cHM6Ly9zYWxzYS5kZWJpYW4ub3JnL2hlaXNlcmhv
cm4vQ2xpcHBlcjJDPC9hPjwvcD48L2xpPjxsaT48cD5hcmR1aW5vLWFzeW5jdWRwOiA8YSBocmVm
PSJodHRwczovL3NhbHNhLmRlYmlhbi5vcmcvaGVpc2VyaG9ybi9hcmR1aW5vLWFzeW5jdWRwIiBz
dHlsZT0id29yZC1icmVhazogYnJlYWstd29yZDsiIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vcmVm
ZXJyZXIgbm9mb2xsb3cgbm9vcGVuZXIiPmh0dHBzOi8vc2Fsc2EuZGViaWFuLm9yZy9oZWlzZXJo
b3JuL2FyZHVpbm8tYXN5bmN1ZHA8L2E+PC9wPjwvbGk+PC91bD48cD5UaGUgZm9sbG93aW5nIHBh
Y2thZ2VzIGhhdmUgYmVlbiBpZGVudGlmaWVkIGFzIGRpcmVjdCBvciBpbmRpcmVjdCBkZXBlbmRl
bmNpZXMgb2YgUmF5Zm9yZ2UgKHRoZSBsaXN0IG1heSBub3QgeWV0IGJlIGV4aGF1c3RpdmUpOjwv
cD48cD5SdXN0OjwvcD48dWw+PGxpPjxwPnJheWdlbzwvcD48L2xpPjxsaT48cD52dHJhY2VyPC9w
PjwvbGk+PGxpPjxwPnZpc2lvbmNvcnRleDwvcD48L2xpPjxsaT48cD5mbG9fY3VydmVzPC9wPjwv
bGk+PGxpPjxwPmNsaXBwZXIyPC9wPjwvbGk+PGxpPjxwPnJzdGFyPC9wPjwvbGk+PGxpPjxwPnB5
bzMtc3R1Yi1nZW48L3A+PC9saT48bGk+PHA+Y2xpcHBlcjJjLXN5czwvcD48L2xpPjwvdWw+PHA+
UHl0aG9uOjwvcD48dWw+PGxpPjxwPnB5dmlwczwvcD48L2xpPjxsaT48cD5zZXR1cHRvb2xzLWdp
dC12ZXJzaW9uaW5nPC9wPjwvbGk+PC91bD48cD5DKys6PC9wPjx1bD48bGk+PHA+Q2xpcHBlcjJD
PC9wPjwvbGk+PGxpPjxwPmFyZHVpbm8tYXN5bmN1ZHA8L3A+PC9saT48L3VsPjxwPkN1cnJlbnQg
c3RhdHVzOjwvcD48cD5UaGUgZm9sbG93aW5nIHBhY2thZ2VzIGFyZSBsaW50aWFuLWNsZWFuIGFu
ZCBidWlsZCBzdWNjZXNzZnVsbHkgd2l0aCBzYnVpbGQgdXNpbmcgb25seSBkZXBlbmRlbmNpZXMg
YWxyZWFkeSBhdmFpbGFibGUgaW4gRGViaWFuOjwvcD48dWw+PGxpPjxwPmZsb19jdXJ2ZXMgKFJ1
c3QpPC9wPjwvbGk+PGxpPjxwPnJzdGFyIChSdXN0KTwvcD48L2xpPjxsaT48cD5zZXR1cHRvb2xz
LWdpdC12ZXJzaW9uaW5nIChQeXRob24pPC9wPjwvbGk+PGxpPjxwPkNsaXBwZXIyQyAoQysrKTwv
cD48L2xpPjxsaT48cD5hcmR1aW5vLWFzeW5jdWRwIChDKyspPC9wPjwvbGk+PC91bD48cD5Gb3Ig
dGhlIHJlbWFpbmluZyBwYWNrYWdlcywgSSBoYXZlIGFscmVhZHkgc3RhcnRlZCBwcmVwYXJpbmcg
dGhlIHBhY2thZ2luZyByZXBvc2l0b3JpZXMgYW5kIERlYmlhbiBicmFuY2hlcywgYnV0IHNvbWUg
ZGVwZW5kIG9uIHBhY2thZ2VzIHRoYXQgYXJlIG5vdCB5ZXQgYXZhaWxhYmxlIGluIERlYmlhbiBv
ciByZXF1aXJlIHVwZGF0ZXMgYmVmb3JlIHRoZXkgY2FuIGJlIGNvbXBsZXRlZC48L3A+PHA+SW4g
cGFydGljdWxhciwgcHlvMy1zdHViLWdlbiBjdXJyZW50bHkgZGVwZW5kcyBvbiBwYWNrYWdlcyB0
aGF0IGFyZSBhbHJlYWR5IHByZXNlbnQgaW4gRGViaWFuIGJ1dCByZXF1aXJlIHVwZGF0ZXM6PC9w
Pjx1bD48bGk+PHA+bGlicnVzdC1pbnZlbnRvcnktZGV2PC9wPjwvbGk+PGxpPjxwPmxpYnJ1c3Qt
cnVzdHB5dGhvbi1wYXJzZXItZGV2PC9wPjwvbGk+PGxpPjxwPmxpYnJ1c3Qtb3JkZXJlZC1mbG9h
dC1kZXY8L3A+PC9saT48L3VsPjxwPkZvciB0aGVzZSwgSSBoYXZlIGFscmVhZHkgb3BlbmVkIG9y
IHVwZGF0ZWQgdGhlIHJlbGV2YW50IGJ1ZyByZXBvcnRzLjwvcD48cD5JIHdvdWxkIGFwcHJlY2lh
dGUgZ3VpZGFuY2Ugb24gdGhlIGZvbGxvd2luZyBwb2ludHM6PC9wPjx1bD48bGk+PHA+U2hvdWxk
IHRoZSBSdXN0IHBhY2thZ2VzIGJlIG1haW50YWluZWQgdW5kZXIgdGhlIERlYmlhbiBSdXN0IFRl
YW0/PC9wPjwvbGk+PGxpPjxwPlNob3VsZCB0aGUgUHl0aG9uIHBhY2thZ2VzIGJlIG1haW50YWlu
ZWQgdW5kZXIgdGhlIERlYmlhbiBQeXRob24gVGVhbT88L3A+PC9saT48bGk+PHA+V2hhdCB3b3Vs
ZCBiZSB0aGUgcHJlZmVycmVkIG1haW50ZW5hbmNlIG1vZGVsIGZvciB0aGUgdHdvIEMrKyBwYWNr
YWdlcz88L3A+PC9saT48bGk+PHA+U2hvdWxkIHRoZSBtYWluIFJheWZvcmdlIHBhY2thZ2UgYmUg
bWFpbnRhaW5lZCB1bmRlciB0aGUgUHl0aG9uIFRlYW0sIHRoZSBEZWJpYW4gU2NpZW5jZSBUZWFt
LCBvciBhbm90aGVyIHRlYW0/PC9wPjwvbGk+PC91bD48cD5Gb3IgY29udGV4dCwgSSBoYXZlIHNv
bWUgcHJldmlvdXMgRGViaWFuIHBhY2thZ2luZyBleHBlcmllbmNlIGRhdGluZyBiYWNrIDEw4oCT
MTUgeWVhcnMsIGJ1dCB0aGlzIGlzIG15IGZpcnN0IHBhY2thZ2luZyBlZmZvcnQgaW52b2x2aW5n
IGEgZGVwZW5kZW5jeSB0cmVlIG9mIHRoaXMgc2l6ZSBhbmQgY29tcGxleGl0eS48L3A+PHA+QW55
IGd1aWRhbmNlLCByZXZpZXcsIG9yIHN1Z2dlc3Rpb25zIHdvdWxkIGJlIGdyZWF0bHkgYXBwcmVj
aWF0ZWQuPC9wPjxwPk1hbnkgdGhhbmtzLDwvcD48cCBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFs
LCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGJhY2tn
cm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTsiPk1pa2U8L3A+PHA+TWljaGVsZSBDYW5l
LFBoRDwvcD48cD48YnI+PC9wPjxwPjwvcD48cD48L3A+PHA+PC9wPjxkaXYgc3R5bGU9ImZvbnQt
ZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNHB4OyIgY2xhc3M9InByb3Rv
bm1haWxfc2lnbmF0dXJlX2Jsb2NrIj48ZGl2IGNsYXNzPSJwcm90b25tYWlsX3NpZ25hdHVyZV9i
bG9jay11c2VyIj48L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb3Rvbm1haWxfc2ln
bmF0dXJlX2Jsb2NrLXByb3RvbiBwcm90b25tYWlsX3NpZ25hdHVyZV9ibG9jay1lbXB0eSI+Cgog
ICAgICAgICAgICA8L2Rpdj4KPC9kaXY+CgogICAgICAgIDwvYmxvY2txdW90ZT48YnI+CiAgICA8
L2Rpdj4=
-----------------------05d78131c12c84f08aa5cd1ef8eb3a22--
-----------------------788f04a6a24a1d30474077779264ec6b--
-----------------------145ee35e5ca9338ba7e6e3e35093c913
Content-Type: application/pgp-keys; filename="publickey - [email protected] - 0xC017295D.asc"; name="publickey - [email protected] - 0xC017295D.asc"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="publickey - [email protected] - 0xC017295D.asc"; name="publickey - [email protected] - 0xC017295D.asc"

LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgp4ak1FWWtyR1N4WUpLd1lCQkFI
YVJ3OEJBUWRBSVRTb0djUkJVZFZZQ2poazdlcE9WWDhtak9PRXFPelgKZjI0bUpWd1pLNDdOTDIx
cFkyaGxiR1V1WTJGdVpVQndjbTkwYjI0dWJXVWdQRzFwWTJobGJHVXVZMkZ1ClpVQndjbTkwYjI0
dWJXVSt3bzhFRUJZS0FDQUZBbUpLeGtzR0N3a0hDQU1DQkJVSUNnSUVGZ0lCQUFJWgpBUUliQXdJ
ZUFRQWhDUkNrUnNyaEZFd3NtaFloQk1BWEtWMW1SeDlFaEFxU1BxUkd5dUVVVEN5YVk3Z0EKL2lX
TEZadzMva1BycjZNTDQyMC9JeWdZNGlBbGZpNlZmVnd0ZkRQZ1FDak1BUURZZUtEeEtJSXpWckpQ
CmF6NVhvbCtpT0hzMFNKV0twb0FsdjIzZWV6Y3dBYzQ0QkdKS3hrc1NDaXNHQVFRQmwxVUJCUUVC
QjBEdQp4NkdOR1NTZXhKSEFUSWlIYU1zSGc0L2ZpeGJGb1NPZm96ZzZsQ1BZZFFNQkNBZkNlQVFZ
RmdnQUNRVUMKWWtyR1N3SWJEQUFoQ1JDa1JzcmhGRXdzbWhZaEJNQVhLVjFtUng5RWhBcVNQcVJH
eXVFVVRDeWFpSWdCCkFNdG4wMmloaGx5VnV1YXNUclZYbDdjdVpJelNLZ1ZyRkowUnpoMTZrOUE3
QVFEMkt0R2lSQ1BlalNOQQorS1lYYmJOcVU1OGlPQm5yWGVoOEE3MExobTZBQmc9PQo9LzF2dwot
LS0tLUVORCBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCg==
-----------------------145ee35e5ca9338ba7e6e3e35093c913--

--------1dfd05eda15e651d05f6d897e298ab5b6a9257f089aae6dbadfbbb038700d3e0
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----
Version: ProtonMail

wrsEARYKAG0Fgmo2NQ8JEKRGyuEUTCyaRRQAAAAAABwAIHNhbHRAbm90YXRp
b25zLm9wZW5wZ3Bqcy5vcmc9gL+QIIcuQC72AoSErqqeeb75/kDAqPxPPlhE
+kLoQRYhBMAXKV1mRx9EhAqSPqRGyuEUTCyaAABz2AD/dbjWYekbX04Fq/Ru
nY1TuRG4gYzi4VBleLKRjB8Lf80A/0jrBx00RfFte8KJHqcnjeUWkGJyQMqy
Iw3MsZz+ZBMJ
=zbZM
-----END PGP SIGNATURE-----


--------1dfd05eda15e651d05f6d897e298ab5b6a9257f089aae6dbadfbbb038700d3e0--