summaryrefslogtreecommitdiff
path: root/74/3f661a6b0290d2bc17b1a683498b8ec7de6be3
blob: aa7fcc6c2ccadcb0b4d0adbdad03235aa14e533a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
Return-Path: <max@towardsliberty.com>
Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138])
 by lists.linuxfoundation.org (Postfix) with ESMTP id 11289C002D
 for <bitcoin-dev@lists.linuxfoundation.org>;
 Sat, 20 Aug 2022 10:04:58 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by smtp1.osuosl.org (Postfix) with ESMTP id C2A498339C
 for <bitcoin-dev@lists.linuxfoundation.org>;
 Sat, 20 Aug 2022 10:04:57 +0000 (UTC)
DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org C2A498339C
X-Virus-Scanned: amavisd-new at osuosl.org
X-Spam-Flag: NO
X-Spam-Score: -1.697
X-Spam-Level: 
X-Spam-Status: No, score=-1.697 tagged_above=-999 required=5
 tests=[BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1,
 HTML_MESSAGE=0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001]
 autolearn=no autolearn_force=no
Received: from smtp1.osuosl.org ([127.0.0.1])
 by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id UtkzFCYQwYVk
 for <bitcoin-dev@lists.linuxfoundation.org>;
 Sat, 20 Aug 2022 10:04:56 +0000 (UTC)
X-Greylist: delayed 00:11:54 by SQLgrey-1.8.0
DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 76CE283366
Received: from subsea-epitome.host4coins.net (subsea-epitome.host4coins.net
 [185.150.162.112])
 by smtp1.osuosl.org (Postfix) with ESMTPS id 76CE283366
 for <bitcoin-dev@lists.linuxfoundation.org>;
 Sat, 20 Aug 2022 10:04:56 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by subsea-epitome.host4coins.net (Postfix) with ESMTP id 924138429F;
 Sat, 20 Aug 2022 10:04:53 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=
 towardsliberty.com; h=content-transfer-encoding:content-type
 :content-type:mime-version:references:in-reply-to:message-id
 :subject:subject:from:from:date:date; s=default; t=1660989853;
 x=1662804254; bh=NGj8JsERbZPwKjWoxyo80JgC/w5D39NjTwACyUzq//E=; b=
 u5+CUx19ZYbCL1Y0XO7wgHMbdHJdCA8OLRLPSrwR5tYiYrrHoLmtw7cdS1+Ae3E1
 9ATZVwS7WVHKFHrzr90XKOsDThOcvmkNyp23FFzUQBRLKoHeifM9jD12QWSvBr2Z
 Gcjmpfn/qrlkJLesC6AmrwIdqtF+gYY6AAoO1ogYE8Y=
X-Virus-Scanned: Debian amavisd-new at subsea-epitome.host4coins.net
Received: from subsea-epitome.host4coins.net ([127.0.0.1])
 by localhost (subsea-epitome.host4coins.net [127.0.0.1]) (amavisd-new,
 port 10026)
 with LMTP id pK-pcYCieLsG; Sat, 20 Aug 2022 10:04:13 +0000 (UTC)
Received: from [10.108.129.84] (unknown [169.150.201.36])
 (Authenticated sender: max@towardsliberty.com)
 by subsea-epitome.host4coins.net (Postfix) with ESMTPSA id 3B3D48428F;
 Sat, 20 Aug 2022 10:04:13 +0000 (UTC)
Date: Sat, 20 Aug 2022 12:04:11 +0200
From: Max Hillebrand <max@towardsliberty.com>
To: alicexbt <alicexbt@protonmail.com>,
 Bitcoin Protocol Discussion <bitcoin-dev@lists.linuxfoundation.org>,
 alicexbt via bitcoin-dev <bitcoin-dev@lists.linuxfoundation.org>
Message-ID: <11A4C398-8CEA-4FDF-B450-55649E6CA1FF@pretty.Easy.privacy>
In-Reply-To: <7gXWd6OVJjiW7aCeon8q-xlWfCMJkIEVCaeokjSVI16OvQPkPmEsSeGY0cGu4yVveimNUYsyG18Ro7JgUutfqXv5wKMMgJZD2c8ftAMFcbQ=@protonmail.com>
References: <7gXWd6OVJjiW7aCeon8q-xlWfCMJkIEVCaeokjSVI16OvQPkPmEsSeGY0cGu4yVveimNUYsyG18Ro7JgUutfqXv5wKMMgJZD2c8ftAMFcbQ=@protonmail.com>
X-ENCSTATUS: unencrypted
X-pEp-Version: 2.1
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary=----DJJBL2OJFDADD56QWMK33HK5RZHUTI
Content-Transfer-Encoding: 7bit
X-Mailman-Approved-At: Sat, 20 Aug 2022 14:14:43 +0000
Subject: Re: [bitcoin-dev] joinstr: coinjoin implementation using	nostr
X-BeenThere: bitcoin-dev@lists.linuxfoundation.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Bitcoin Protocol Discussion <bitcoin-dev.lists.linuxfoundation.org>
List-Unsubscribe: <https://lists.linuxfoundation.org/mailman/options/bitcoin-dev>, 
 <mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=unsubscribe>
List-Archive: <http://lists.linuxfoundation.org/pipermail/bitcoin-dev/>
List-Post: <mailto:bitcoin-dev@lists.linuxfoundation.org>
List-Help: <mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=help>
List-Subscribe: <https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev>, 
 <mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=subscribe>
X-List-Received-Date: Sat, 20 Aug 2022 10:04:58 -0000

------DJJBL2OJFDADD56QWMK33HK5RZHUTI
Content-Type: multipart/alternative;
 boundary=----I5M59DQ5AJF229Q08IG2C1TH9EP6IZ
Content-Transfer-Encoding: 7bit

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

Great to see an implementation of the idea=2E

Maybe I misunderstand, but isn't there a vulnerability of denial of servic=
e here?

A user who registers one input will receive the round secret identifier, a=
nd this is all the information required for output registration=2E However,=
 that malicious user can now register multiple outputs, providing the same =
secret, and nobody can link the malicious outputs to any specific input=2E =
Therefor there cannot be a blame round where the malicious input is removed=
, and thus there can be a ongoing free denial of service attack without att=
ribution or defense=2E

Skol
Max

------I5M59DQ5AJF229Q08IG2C1TH9EP6IZ
Content-Type: text/html;
 charset=utf-8
Content-Transfer-Encoding: quoted-printable

<html><head></head><body>Great to see an implementation of the idea=2E<br><=
br>Maybe I misunderstand, but isn't there a vulnerability of denial of serv=
ice here?<br><br>A user who registers one input will receive the round secr=
et identifier, and this is all the information required for output registra=
tion=2E However, that malicious user can now register multiple outputs, pro=
viding the same secret, and nobody can link the malicious outputs to any sp=
ecific input=2E Therefor there cannot be a blame round where the malicious =
input is removed, and thus there can be a ongoing free denial of service at=
tack without attribution or defense=2E<br><br>Skol<br>Max<br><br><br><div c=
lass=3D"gmail_quote">On August 20, 2022 10:20:00 AM GMT+02:00, alicexbt via=
 bitcoin-dev &lt;bitcoin-dev@lists=2Elinuxfoundation=2Eorg&gt; wrote:<block=
quote class=3D"gmail_quote" style=3D"margin: 0pt 0pt 0pt 0=2E8ex; border-le=
ft: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<pre dir=3D"auto" class=3D"k9mail">Hi Bitcoin Developers,<br><br>I have wr=
itten a python script as proof of concept for the [coinjoin implementation]=
[1] using [nostr][2]=2E I used a lot of Python scripts created by others in=
 school, so it feels nice to offer something that could be useful to others=
=2E<br><br>The implementation uses Bitcoin Core wallet and RPCs: `listunspe=
nt`, `getnewaddress`, `scantxoutset`, `createpsbt`, `combinepsbt`, `finaliz=
epsbt` and `sendrawtransaction`=2E It requires python-nostr library because=
 nostr is used for coordination between peers=2E Nostr is a decentralized n=
etwork based on cryptographic keypairs=2E It is not peer-to-peer however si=
mple and scalable=2E<br><br>Every step is published as an event using a nos=
tr relay and 5 peers coordinate to create, sign and broadcast a coinjoin tr=
ansaction=2E  I need to write a NIP that would be an alternative to blind s=
ignatures=2E Relay will share a random secret with clients for one round wh=
ich should be present in output registration request although never gets pu=
blished=2E If someone tries to register an output without registering any i=
nputs, request would not have the number initially shared with inputs so re=
quest would get rejected or published as unverified=2E Relay would not be a=
ble to link inputs and outputs as the number is same for all inputs in a ro=
und and they get registered at different times with new keys and IP address=
=2E Clients can use multiple relays at the same time to avoid trusting one =
relay=2E This would result in different shared secret number but same proce=
ss=2E If a relay tries to cheat, users will not sign the transaction and av=
oid using it in future=2E<br><br>Usage:<br><br> 1)Run `python coinjoin=2Epy=
` and enter descriptor for one of the inputs=2E<br> 2)Script will check inp=
uts for this round in every 30 seconds and register a new adddress for outp=
ut once 5 inputs are registered=2E<br> 3)Similar check happens every 30 sec=
onds for outputs=2E Last peer should create a PSBT=2E<br> 4)Unsigned PSBT w=
ill be printed and signed by wallet with `walletprocesspsbt` RPC=2E<br> 5)S=
cript will check signed PSBTs and last peer to sign should finalize coinjoi=
n transaction once 5 signed PSBTs are received=2E<br> 6)Coinjoin transactio=
n will be broadcasted and txid will printed=2E<br><br>Example:<br><br>```<b=
r>List of utxos in wallet:<br><br>wpkh([53830dca/84'/1'/0'/0/0]02449be5fb74=
725255eeeb50eba930fa87705f21e99d13cd710cf2c1f21153c808)#x2hyyeg5<br><br>Ent=
er descriptor for the input registration: wpkh([53830dca/84'/1'/0'/0/0]0244=
9be5fb74725255eeeb50eba930fa87705f21e99d13cd710cf2c1f21153c808)#x2hyyeg5<br=
><br>event id:  bcbbe62d75d99fed73f1e50ac58a38d1840b658951893e63c0322b378d7=
d56f0<br><br>```<br>```<br>tb1qhxrp4zl54ul0twtyz0gury5399q7z0kvqqrl6m regis=
tered for output<br><br>event id: 9449c9065bef356d21507a98f88b028b17fc1c49e=
b195c8d4420604fcaaef041<br>```<br>```<br>Unsigned PSBT: cHNidP8BAP1yAQIAAAA=
FtMaoJYcXvOG5L3Yaz3YyS7gIt4h5/zzOrRRS3hrVvwoAAAAAAP////+o83geaSm4L76KToIUl5=
MiZqLAUbIDJLq6DWrjP/3b8AEAAAAA/////zEF3CXIvVHpIa7No1s1yg+KtyOfXTRSyWnOdXMfz=
cDwAQAAAAD/////wMa4XAgnU+39Ien+KG9rYtv8bLMNYakmZyY/QFfwLRcAAAAAAP/////5M42I=
D6uLmQTb2tnFHnN7UMpnDD25uN8ZX7A+GNSM3QEAAAAA/////wV4xwEAAAAAABYAFLmGGov0rz7=
1uWQT0cGSkSlB4T7MeMcBAAAAAAAWABSc0/FM6Hdbdxh10IJkYOklVFWqjnjHAQAAAAAAFgAUPS=
ZKe/w6PT6qIF+WhL4wHaFymjd4xwEAAAAAABYAFMx0rxYlpPWB3NFry4Ctk2eVi/UNeMcBAAAAA=
AAWABSzc4xK0VTfvjK0MHXrAUFLYgYnOgAAAAAAAAAAAAAAAAAAAA=3D=3D<br><br>event id=
: 976744b38fa9343fb79e1b5215512ead6ee08e5890d79a201fc5b872f6de4eba<br>```<b=
r>```<br>Signed PSBT: cHNidP8BAP1yAQIAAAAFtMaoJYcXvOG5L3Yaz3YyS7gIt4h5/zzOr=
RRS3hrVvwoAAAAAAP////+o83geaSm4L76KToIUl5MiZqLAUbIDJLq6DWrjP/3b8AEAAAAA////=
/zEF3CXIvVHpIa7No1s1yg+KtyOfXTRSyWnOdXMfzcDwAQAAAAD/////wMa4XAgnU+39Ien+KG9=
rYtv8bLMNYakmZyY/QFfwLRcAAAAAAP/////5M42ID6uLmQTb2tnFHnN7UMpnDD25uN8ZX7A+GN=
SM3QEAAAAA/////wV4xwEAAAAAABYAFLmGGov0rz71uWQT0cGSkSlB4T7MeMcBAAAAAAAWABSc0=
/FM6Hdbdxh10IJkYOklVFWqjnjHAQAAAAAAFgAUPSZKe/w6PT6qIF+WhL4wHaFymjd4xwEAAAAA=
ABYAFMx0rxYlpPWB3NFry4Ctk2eVi/UNeMcBAAAAAAAWABSzc4xK0VTfvjK0MHXrAUFLYgYnOgA=
AAAAAAQBxAgAAAAG+qpMXZCy6tBuUlgo8JD0GVXKp60FkhwDeg2sF1fkFkwMAAAAA/f///wLo9w=
EAAAAAABYAFFfLA5xarC/w/SxeMDQ5tuXrYJLUWwMAAAAAAAAWABRfPf//hwMjHB4OKj87cU19X=
OSh7yOWAQABAR/o9wEAAAAAABYAFFfLA5xarC/w/SxeMDQ5tuXrYJLUAQhrAkcwRAIgOIhLoC53=
48U8YkEr4GU1K4yWskIOEXgW4Wsk/W2cR7ICIEJXqtOuDJ5CkwrSuwJLWtzab4dslbN3KuL/pyo=
oMnOCASECRJvl+3RyUlXu61DrqTD6h3BfIemdE81xDPLB8hFTyAgAAAAAACICA77Cnd6o3kr0yc=
+91eabpOn5igs/MUMbudNYSS6oyMWMGFODDcpUAACAAQAAgAAAAIAAAAAAFAAAAAAAAAAA<br><=
br>event id: 5846b6e6902f3c5a43496d7d9785ed62444aa74963f03c33d637d8b09ee7a1=
39<br>```<br>```<br>Coinjoin tx: 75e490b10b15a6a0422f25ff66ad98ef70390c8fec=
aac02712705dce8cc3564b<br><br>event id: 9b5d4bf279b59e2b6e539e683fba83da72d=
ce2b640360aa95db1b1400be93190<br>```<br><br>There are lot of things that co=
uld be improved and a few suggestions are in the gist that described the [i=
dea][3]=2E I would love read to any opinions about this experiment and will=
 start working on creating an Android app for joinstr next week=2E<br><br>C=
redits:<br><br>- fiatjaf (Nostr)<br>- Andrew Chow (PSBT)<br>- Jeff Thibault=
 (python-nostr)<br>- Existing coinjoin implmentations<br><br>[1]: <a href=
=3D"https://github=2Ecom/1440000bytes/joinstr">https://github=2Ecom/1440000=
bytes/joinstr</a><br>[2]: <a href=3D"https://github=2Ecom/nostr-protocol/no=
str">https://github=2Ecom/nostr-protocol/nostr</a><br>[3]: <a href=3D"https=
://gist=2Egithub=2Ecom/1440000bytes/1c305097b070c8374cc3b91f50314a45">https=
://gist=2Egithub=2Ecom/1440000bytes/1c305097b070c8374cc3b91f50314a45</a><br=
><br>/dev/fd0<br><br>Sent with Proton Mail secure email=2E<hr>bitcoin-dev m=
ailing list<br>bitcoin-dev@lists=2Elinuxfoundation=2Eorg<br><a href=3D"http=
s://lists=2Elinuxfoundation=2Eorg/mailman/listinfo/bitcoin-dev">https://lis=
ts=2Elinuxfoundation=2Eorg/mailman/listinfo/bitcoin-dev</a><br></pre></bloc=
kquote></div></body></html>
------I5M59DQ5AJF229Q08IG2C1TH9EP6IZ--

------DJJBL2OJFDADD56QWMK33HK5RZHUTI
Content-Type: application/pgp-keys;
 name="sender_key.asc"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="sender_key.asc";
 size=3910

LS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCgp4c0JOQkdFaFh1c0JDQURuS2g1
ODgyVFhoWU5xK1F1NnhWWlhlTXpxUVdCc29hV0hOZytIYm1KUmVTOFpEdG9mCkh4Z2Y1ZWlvdWwx
cDRaTnFET2VjRzJ4RURFeTJoZTV5bGhNNTV5UEZ4cHJmcldJK2dsQ2Q1TDZOWGFFemh4VGoKcWhN
dkRTZ3kzUTNyRVR2MGI5WDRHbGdjWXBrODJHZUYrLy9FQnh5Vlczd0tQMWg0bkw1NDRkWlhZc2sr
NTBWMApzcFA4RnI2VkpNckE4ZkQ0Rk5ZeGZTUjcrMExRVTNlQ3RGVXdWcUFaZmNnZXpZbkp6WFVw
bWk5RTNDMmhTTEUxClBiZWx0U3VxVG9mVnJDNlVtZWMyVnVtRSt5ajBuYlgvWWV0VnNCV0EybTlI
Y3BqRGVTdkxRODBvZ3lPU3l0UkkKTGsyMk5nTURPSkN5WEVWZkFtQUlxZjJPZlRKSHVaaTZobjk1
QUJFQkFBSEN3TThFSHdFS0FJTUZnbUVoWHVzRgppUVdmcGdBREN3a0hDUkNNelhXc3gvMC9QRWNV
QUFBQUFBQWVBQ0J6WVd4MFFHNXZkR0YwYVc5dWN5NXpaWEYxCmIybGhMWEJuY0M1dmNtYzJNdjlG
SWtJQzNVWVYvSytLNi94SGk3WFdiaWdrbmljbHJ0SWVkNkUzQXdNVkNnZ0MKbXdFQ0hnRVdJUVJt
MytQRWVINFRKSis2SkFTTXpYV3N4LzAvUEFBQTAxWUgvM3NxUzhIN0Evdk1JMm5JWGl6cApKMUE5
c3piQjgvdEMyajhZWG9WOGVVRUZWVzNkR2Vya3A3NTlFMm5wQkIrOGZmS2JHSmVvaUo3cHlaMG9r
S05ZCmN3ZVN5WjNVcUZvRnc4T3V1VDVEbDRaalZzVGp3aTMwYVR6bnpmK2FIdjNtdnFKV3JtQU8w
MXI5M040YXlnSkkKUm5LVE9jdU1ObHdLdS9tdk1rV1VjN01JRHlFWDIzbExGL1E0RjQ0NU9Tc2pq
VG0wWmZGQ3NoYkFMRWVlR0ViNQpXRjEyandVVHFDVmtIOXFKank5bFFWSWxUZlVXTUhrRWxsSWlm
MzFmZUZWZjMyWE1YQjlkYm1TOXlSZ1RsWFZZCkVOMjhzU2RLMCtDV0dFVFJURVhFbEdnUkdZSGMr
WjR2REw5aTBPd2xvZVdnSGZ1YXpvWHB6L05ZVGJZbkJaUkQKNkdqTkowMWhlQ0JJYVd4c1pXSnlZ
VzVrSUR4dFlYaEFkRzkzWVhKa2MyeHBZbVZ5ZEhrdVkyOXRQc0xBMGdRVApBUW9BaGdXQ1lTRmU2
d1dKQlorbUFBTUxDUWNKRUl6TmRhekgvVDg4UnhRQUFBQUFBQjRBSUhOaGJIUkFibTkwCllYUnBi
MjV6TG5ObGNYVnZhV0V0Y0dkd0xtOXlaNGJTNjdiR05OZHVWMWkzUkNKZ0ZxbUMzYm1ENHF2OU1n
bWQKNzZpVTZjNXNBeFVLQ0FLWkFRS2JBUUllQVJZaEJHYmY0OFI0ZmhNa243b2tCSXpOZGF6SC9U
ODhBQUM2clFmKwpQUWVmTEs5L2V0M2JlL3g3Z0w5QzZWRXgzTGR3UWlDOXZGVFBReXduQ2l3Zmln
VTAvVmVqU3hWTHhpcU9sRGpaCldvTzZMa1I5LzhuNkt6OVVIekMwMkExeGVIK1dXWU9jaUhmNkhm
dVJIZ3pMSkdzcWlOQ3kybklCNWFEckJOdjcKTlZBQVdmcW9acnlBbFFnY28zM0RBYUZJd0xVWjd2
T3lWNGJLTWdPY1ZUT2N0dngxSHlZVGpTL1lnWVFaVDRQeAp2UDJVRWlCYjkvcjlCbFFBckY5SVZB
WXc3V1JqZ1pqY3BuNXBuejY1bm94dWduSEJLeU8xdHl2Y1JGdWdQZXE0CkJLNXNFNFRaRHByMUI0
dnRSY1czeWoxMWhHRXFaN21JWnRmZzNRMittKzVqKzlYVWhQb2doQjI3M3RFMmM0NkYKNDFpZE1s
blB4QnZBU2NFUVc3eHVMYzdBVFFSaElWN3JBUWdBckhSM2d3ZjhCTFBVU3M5cGJHaE45aWxHV3k1
cQphZ0tPZnZOM2I0QTU1UnNOYUhlbCtEeVlFWUhpRVhLTWFBOXRWZ2RTMkwxRHFQRUljMGl4NG5B
QkJHeG82YThYCi9MQVdzQklOZzFLYlNaeXhZd0hFUHY5eHNKVGV0UWhuWjVNMTRZZmRxVlZTODdZ
ZW9JVmFrQWNmejNWRnpGYWwKcUdjeUlLV25hbGJGelJIYkRoNnkyUkpaSnJiOGRJZS9GYmd4NUI3
NlNHNkhhNFdPK2luVlpQM3NIOVRhN0VORQpkeDYvVzNsM01pN2l1dExGeGcwOUpHcFM1NVF5Njha
MTkrUDVCQlFKVzk3VmJsSkFDUm0vRkxTOVQ4NitIWHZmCm1qR20zUEFIUWxkY20xQzZ3b091U3dK
eE50dnF6WDAwUW5oQVkvT3JzYUtGWnZWZDRNMEFUZjNDWndBUkFRQUIKd3NKQ0JCZ0JDZ0gyQllK
aElWN3JCWWtGbjZZQUNSQ016WFdzeC8wL1BFY1VBQUFBQUFBZUFDQnpZV3gwUUc1dgpkR0YwYVc5
dWN5NXpaWEYxYjJsaExYQm5jQzV2Y21jcW1UZ01DanBjZ1IwMlZTR2FDUWZoRnh6RmpiQVRsUUVZ
ClNhNDVYd1oyUWdLYkFzQzhvQVFaQVFvQWJ3V0NZU0ZlNndrUUVsQXRpMWdzeEZOSEZBQUFBQUFB
SGdBZ2MyRnMKZEVCdWIzUmhkR2x2Ym5NdWMyVnhkVzlwWVMxd1ozQXViM0pua1VVWGROSnlMUWRt
cGliR0tPbFZTT1A4Y1BtVgpsdmtHQVQ5NnhyR0RtMjBXSVFTVG5YOStqMnNuYVQxQkFmY1NVQzJM
V0N6RVV3QUFZL2NILzBiYzVXZjEzQkZyClBOeHNuV3EzTUtJenB4VXd6akIzNHh4RTJnakh1Qk9C
TG16ZkhOV2Rwc3FZckY2TzlXNzgxVWhpd1Ayc0VuMEUKZytrcDBuOW9wUUEramtuVWwzaUpTY0Qy
S0I2Unk5dDdlVE1mZUZoY01GemdlbTc2azFSOWRkd3p3QjdoUHQ5cAoyMDNoZDJ5QXpFTzFVZ2s3
OE1LZll4dVJJUWVlVVJTTHB0MGhvZGp2NUhsZ3hQVEZ5blJlaEtTc1Z0eDlOSWUxCm9ydHhTcGZX
YlVtdUthTFlNdG5TTmNQWTMxKzFFbENIYlJWcm0zakxoMFRWeThQZi9yTG9ubUoxZnNYdFJlS2gK
SkpBTFd0ejRuYmt6QkFITDA3djB5TmoyUW5HeEg3ZU1XdHVWOWo1M0NIVnJkS1d0c0pHdGlNMFcx
dUIvYklvTQpUZC9HbnFWNksvMFdJUVJtMytQRWVINFRKSis2SkFTTXpYV3N4LzAvUEFBQWZsY0gv
UmpOU1ZTTm5aKytIeUJaCnJScTh4NVgrbkIwOGJIQ2hIOEExaUFlMlowaTE2S0J1cVVqekIrWHlx
eFdxcCtGdmE2eExEcm4zQWY5Uk5pNE4Kb1R1dys2MjZMbkY2S3VmUmNtRjNhMkxYVHJ5NUtVQTRT
bSsvUmxyQnZWblRldzZremc4NFQyV3IzMm1MbXdtUwp3eVdwY3h6UEZWekpuSlVzVURqY0ZGc2lR
ZFpJUjFQYVNaTENsMGJ0WG9oNDJDbG9ZeXVxaGpVdzZRWEsrNnV0CmdhVUdnUjBKdytBV2l0N3Vj
dVIrZlhORy91WDR4VWtMcHFxWmlKT05rVHhFeVBEd2NzVXFQS3ZJVUpCTGNYSlQKSHlNUEVqUTFp
UDNnelBwenFzMWhhUktTYWhyMmZwU3FLSnZ2RWgwckhQby95UzhFK0pray92QldUSlEzbmlsRQpN
bVR0VE4zT3dFMEVZU0ZlNndFSUFOZzdjL241VEdXOVdka0VuREhEc211UEVwN2MrYlp6TWlxZnhX
V1hocWxrClp0SVJxTXBzWi9oajhlSlBMMjV0QnVaaVR0R2t5L3p2Q1RReFh0SFRuckxLYVhXcDhE
ZHhqc0RHRVJkeFlBRkkKM1haNEQ0QURqYlBReXZKRVorbktZblFKem1oUGE2bHI1ZGxDbTJaZlNy
eTMxUUo4c25JL001UmRvTG56L05ibgp5cEpvOTNBQzB0M2YxNUpOTStwOEdhamFmaG4xUUtPOStT
MzFEQXhWVjd1b1lwVTRKNjI4bDFvbXQ4blpyS1FQCmJTQWVRblZzWkE0c3hnbEZqN2VVQ3ZnRUQv
NFBWVmFZMTVtbGlEcmxhT21HNXpDWHArUzdOZWF4Z2dmRDgrYjUKY01lUEx0dU8yRXFmeFhHZjBp
UWlueTRXNnJaVEVrTitUN0NLZDRFODR4Y0FFUUVBQWNMQXhBUVlBUW9BZUFXQwpZU0ZlNndXSkJa
K21BQWtRak0xMXJNZjlQenhIRkFBQUFBQUFIZ0FnYzJGc2RFQnViM1JoZEdsdmJuTXVjMlZ4CmRX
OXBZUzF3WjNBdWIzSm4zZjI1RUc3UkpwMGpjeVoyeUZLcDRFdWFYSERGK3AwMmxSbzEvRWV2Mks4
Q213d1cKSVFSbTMrUEVlSDRUSkorNkpBU016WFdzeC8wL1BBQUFNMDRIL2pXNFZDQkExUk4yTHEv
YUwxc2VjekdkcElxegpuQWlzTE12NXUzYko2YzlKajMyak5RRG5XbjFqNXNoWk4xWURiKzgwZjhk
RnZkWTgreWUyVnBKTWpacW5ZMThGCmJFaUlEcjl2am5wQ2wvS3ZaWnlia1AzanIrN2tWeEJxZldO
NitpYjN0UFhBWDBld2lWY055Q1NrY3BEcTk5SWwKdHhVZzN2RUc1Z29LcE10Y3J4N09JNkhKenkr
bHlTOUl6U0xFRktGYWVydTF2aDFJRElWSzFaNGxuNndDNE1qVwpwb0lYSTZmcXd4amUxaGE5UDNk
ekJFL3gyUXdueGt3Tjl1NEZld2pPazF2aTJaRTJVOFdybG4ycXcwVW41dlBFCmg2OXVoek9oU1Uy
UnV2V20vR2pEajB2eStCRG1tbjRBUXl0MmdCT3dmMXFRZUREbkthM1h0V3ExWG5vPQo9c2ZGRwot
LS0tLUVORCBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCg==

------DJJBL2OJFDADD56QWMK33HK5RZHUTI--