Re: Partial restructuring of Freenet's code

Steve Dougherty <steve-kVTqj8yhOEv2eFz/[email protected]> Fri, 26 Apr 2019 11:33:32 +0000
Newsgroups gmane.network.freenet.devel
Message-ID <PaUbNRZJB4dEwT_xbRvJvPIe6iI_rIY07IZYJf1o_hVqI_yMHU52_qMEz8N2sZ2IuvSj7efro69l6Aj2mvWJZuOUmr4n3w-eHOpIyKzGFVw=@asksteved.com>
--b1_43b82ff42461de15096c1434c769a311
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64

VGhhbmtzIGZvciB3cml0aW5nIHRoaXMhIFlvdXIgYXBwcm9hY2hlcyBzZWVtIHJlYXNvbmFibGUg
dG8gbWUuCgpZZXMsIG1vY2tpbmcgdGltZSB3aWxsIGJlIGhlbHBmdWwuIEl04oCZcyBub3QgIGNs
ZWFyIHRvIG1lIGhvdyBtYW55IHBsYWNlcyB0aGF0IHdpbGwgYmUgb2YgdXNlLCBvciB3aGV0aGVy
IG1vY2tpbmcgd291bGQgc3RpbGwgYmUgdmlhYmxlIGluIGludGVncmF0aW9uIHRlc3RzIGluc3Rl
YWQgb2YganVzdCB1bml0IHRlc3RzLCBidXQgaXTigJlzIGRlZmluaXRlbHkgYSBnb29kIHRvb2wg
dG8gaGF2ZS4gRG8geW91IGtub3cgaWYgSlVuaXQgaGFzIGFueXRoaW5nIHRoYXQgY2FuIGhlbHAg
d2l0aCB0aGF0PyBJdCBzZWVtcyBsaWtlIGEgY29tbW9uIGVub3VnaCBuZWVkIHRoYXQgaXQgbWln
aHQuCgpUZXN0aW5nIGNvbmN1cnJlbnQgdGhpbmdzIG1heSByZXF1aXJlIG1vcmUgQ29uZGl0aW9u
cyBmb3IgdGhyZWFkcyB0byB3YWl0IG9uLiBJdOKAmXMgbm90IGNsZWFyIHRvIG1lIGhvdyBtdWNo
IGVmZm9ydCB0aGF0IHdpbGwgcmVxdWlyZSB0byBiZSB2aWFibGUsIG9yIGhvdyBiZXN0IHRvIGV4
cG9zZSB0aGVtLgoKLSBTdGV2ZQoKT24gRnJpLCBBcHIgMjYsIDIwMTkgYXQgNjozNCBBTSwgTWFy
dGluIEJ5cmVuaGVpZCA8bWFydGluLmJ5cmVuaGVpZEB0dS1kcmVzZGVuLmRlPiB3cm90ZToKCj4g
SGVsbG8gZXZlcnlvbmUsCj4KPiBJJ3ZlIHNlbnQgdGhpcyBtYWlsIGF0IHRoZSBlbmQgb2YgbGFz
dCB5ZWFyIHRvIHRoaXMgbGlzdCBidXQgaXQgc2VlbXMKPiB0aGF0IGl0IG5ldmVyIG1hZGUgaXQg
dG8gaXRzIHN1YnNjcmliZXJzLiBUaHVzLCBJJ20gdHJ5aW5nIGFnYWluOgo+Cj4gSSBzdGFydGVk
IHRvIHJlZmFjdG9yIHNldmVyYWwgcGFydHMgb2YgdGhlIEZyZWVuZXQgQ29kZSB0byBtYWtlIHRo
ZSBpdAo+IGVhc2llciB0byB0ZXN0IGFuZCB1bmRlcnN0YW5kIHRoZSBkaWZmZXJlbnQgcGFydHMg
b2YgaXQgaW4gaXNvbGF0aW9uLgo+IEJlZm9yZSBJIGNvbnRpbnVlIGRvaW5nIHNvLCBJIHdvdWxk
IGxpa2UgdG8ga25vdyB5b3VyIHRob3VnaHRzIG9uIG15Cj4gYXBwcm9hY2ggYW5kIHdoZXRoZXIg
eW91IHdvdWxkIGFjdHVhbGx5IHdlbGNvbWUgdGhlc2UgY2hhbmdlcy4gWW91IGNhbgo+IGZpbmQg
dGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBwYXJ0aWFsbHkgcmVmYWN0b3JlZCBjb2RlIG9uIEdp
dGh1YiBbMV0uCj4KPiBFc3NlbnRpYWxseSwgSSBkaWQgdGhlIGZvbGxvd2luZyB0aHJlZSBjaGFu
Z2VzIHRvIHRoZSBOb2RlLSwKPiBOb2RlQ3J5cHRvLSxQZWVyTWFuYWdlci0sVWRwU29ja2V0SGFu
ZGxlci0sTm9kZUlQUG9ydERldGVjdG9yLSBhbmQKPiBJUEFkZHJlc3NEZXRlY3Rvci1jbGFzczoK
Pgo+IDEuIENyZWF0ZSBjb3JyZXNwb25kaW5nIEludGVyZmFjZXMgZm9yIGVhY2ggY2xhc3MuIFRo
aXMgYWxsb3dzIHVzIHRvCj4gcmVwbGFjZSBhY3R1YWwgY2xhc3MgaW5zdGFuY2VzIChlLmcuIG9m
IHRoZSBOb2RlIGNsYXNzKSB3aXRoIGEKPiB0ZXN0LXNwZWNpZmljIGR1bW15IGltcGxlbWVudGF0
aW9uLiBUaGlzIGR1bW15IGNhbiB0aGVuIGJlIGdpdmVuIGFzCj4gcGFyYW1ldGVyIHRvIGEgY29u
c3RydWN0b3IuCj4KPiAyLiBFbmNhcHN1bGF0ZSBpbnN0YW50aWF0aW9uIG9mIGNsYXNzIG1lbWJl
cnMgd2l0aGluIHByb3RlY3RlZCBtZXRob2RzLgo+IEJ5IG92ZXJyaWRpbmcgdGhlc2UgcHJvdGVj
dGVkIG1ldGhvZHMsIHdlIGNhbiByZXBsYWNlIGNsYXNzIG1lbWJlcnMgd2l0aAo+IHRlc3Qtc3Bl
Y2lmaWMgZHVtbXkgaW1wbGVtZW50YXRpb25zLgo+Cj4gMy4gQ3JlYXRlIGdldHRlci1NZXRob2Rz
IHRvIGFjY2VzcyBjbGFzcyBtZW1iZXJzLiBNYW55IGNsYXNzZXMgaW4KPiBGcmVlbmV0IGhvbGQg
YSByZWZlcmVuY2UgdG8gYSBOb2RlLWluc3RhbmNlIGFuZCBzb21lIGRpcmVjdGx5IGFjY2VzcyBp
dHMKPiBtZW1iZXJzLiBCZXNpZGVzIHRoZSBmYWN0IHRoYXQgdGhpcyBpcyBub3QgYSBnb29kIHBy
YWN0aWNlLCBpdCBrZXB0IG1lCj4gZnJvbSBjcmVhdGluZyBhbiBpbnRlcmZhY2UgZm9yIHRoZSBu
b2RlIGNsYXNzLgo+Cj4gT25lIG9ic3RhY2xlIHdpdGggcG9pbnQgKDEpIHdhcyB0aGF0IHRoZXJl
IGFyZSBzZXZlcmFsIGNhc2VzIHdoZXJlIGEKPiBjbGFzcyBjYWxscyBhIG5vbi1wdWJsaWMgbWV0
aG9kIGZyb20gYW5vdGhlciBjbGFzcyBpbiB0aGUgc2FtZSBwYWNrYWdlLgo+IFRvIGlsbHVzdHJh
dGUgbXkgY2hhbmdlcywgY29uc2lkZXIgdGhlIGZvbGxvd2luZyB0aHJlZSBleGFtcGxlIGNsYXNz
ZXM6Cj4KPiBwYWNrYWdlIGV4YW1wbGUuQTsKPiBjbGFzcyBNeUNsYXNzIHsKPgo+ICAgICBib29s
ZWFuIGdldEJvb2woKSB7IC4uLiB9Cj4KPiAgICAgcHVibGljIFN0cmluZyBnZXRTdHJpbmcoKSB7
IC4uLiB9Cj4KPiB9Cj4KPiBwYWNrYWdlIGV4YW1wbGUuQTsKPiBjbGFzcyBTYW1lUGFja2FnZUNs
YXNzIHsKPiAgIHB1YmxpYyBTYW1lUGFja2FnZUNsYXNzKE15Q2xhc3MgcmVmKSB7Cj4KPiAgICAg
aWYgKHJlZi5nZXRCb29sKCkpIC4uLgo+Cj4gICB9Cj4KPiB9Cj4KPiBwYWNrYWdlIGV4YW1wbGUu
QjsKPiBjbGFzcyBPdGhlclBhY2thZ2VDbGFzcyB7Cj4KPiAgIHB1YmxpYyBPdGhlclBhY2thZ2VD
bGFzcyhNeUNsYXNzIHJlZikgewo+Cj4gICAgIHByb2Nlc3MocmVmLmdldFN0cmluZygpKTsKPgo+
ICAgfQo+Cj4gfQo+Cj4gQmVjYXVzZSBTYW1lUGFja2FnZUNsYXNzIGlzIHdpdGhpbiB0aGUgc2Ft
ZSBwYWNrYWdlIGFzIE15Q2xhc3MsIHRoZQo+IGdldEJvb2wtbWV0aG9kIGlzIHZpc2libGUgdG8g
dGhlIGZvcm1lciB3aGVyYXMgb25seSBnZXRTdHJpbmcoKSBpcwo+IHZpc2libGUgZm9yIHRoZSBP
dGhlclBhY2thZ2VDbGFzcy4gQWZ0ZXIgbXkgcmVmYWN0b3JpbmcsIHdlIG5vdyBoYXZlIHRoZQo+
IGZvbGxvd2luZyAyIGludGVyZmFjZXM6Cj4KPiBwYWNrYWdlIGV4YW1wbGUuQTsKPiBwdWJsaWMg
aW50ZXJmYWNlIE15Q2xhc3Mgewo+Cj4gICAgIFN0cmluZyBnZXRTdHJpbmcoKTsKPgo+IH0KPgo+
IHBhY2thZ2UgZXhhbXBsZS5BOwo+IGludGVyZmFjZSBQcm90ZWN0ZWRNeUNsYXNzIGV4dGVuZHMg
TXlDbGFzcyB7Cj4KPiAgICAgYm9vbGVhbiBnZXRCb29sKCk7Cj4KPiB9Cj4KPiBQbGVhc2Ugbm90
ZSB0aGF0IHRoZSBmaXJzdCBpbnRlcmZhY2UgaXMgYSBwdWJsaWMgaW50ZXJmYWNlIHdoaWxlIHRo
ZQo+IHNlY29uZCBpbnRlcmZhY2UgaXMgcGFja2FnZS1sb2NhbC4gVGhlIHRocmVlIGV4YW1wbGUg
Y2xhc3NlcyBub3cgbG9vayBhcwo+IGZvbGxvd3M6Cj4KPiBwYWNrYWdlIGV4YW1wbGUuQTsKPiBj
bGFzcyBNeUNsYXNzSW1wbCBpbXBsZW1lbnRzIFByb3RlY3RlZE15Q2xhc3Mgewo+Cj4gICAgIHB1
YmxpYyBib29sZWFuIGdldEJvb2woKSB7IC4uLiB9Cj4KPiAgICAgcHVibGljIFN0cmluZyBnZXRT
dHJpbmcoKSB7IC4uLiB9Cj4KPiB9Cj4KPiBwYWNrYWdlIGV4YW1wbGUuQTsKPiBjbGFzcyBTYW1l
UGFja2FnZUNsYXNzIHsKPiAgIHB1YmxpYyBTYW1lUGFja2FnZUNsYXNzKFByb3RlY3RlZE15Q2xh
c3MgcmVmKSB7Cj4KPiAgICAgaWYgKHJlZi5nZXRCb29sKCkpIC4uLgo+Cj4gICB9Cj4KPiB9Cj4K
PiBwYWNrYWdlIGV4YW1wbGUuQjsKPiBjbGFzcyBPdGhlclBhY2thZ2VDbGFzcyB7Cj4KPiAgIHB1
YmxpYyBPdGhlclBhY2thZ2VDbGFzcyhNeUNsYXNzIHJlZikgewo+Cj4gICAgIHByb2Nlc3MocmVm
LmdldFN0cmluZygpKTsKPgo+ICAgfQo+Cj4gfQo+Cj4gVGhlIGdldEJvb2wtTWV0aG9kIG9mIHRo
ZSBNeUNsYXNzSW1wbC1jbGFzcyBpcyBub3cgcHVibGljLiBIb3dldmVyLCBpZgo+IGluc3RhbmNl
cyBvZiB0aGlzIGNsYXNzIGFyZSBvbmx5IGFjY2Vzc2VkIHZpYSB0aGUgaW50ZXJmYWNlcyBpdCBp
cyBvbmx5Cj4gdmlzaWJsZSB0byBjbGFzc2VzIHRoYXQgdXNlIHRoZSBQcm90ZWN0ZWRNeUNsYXNz
IGludGVyZmFjZS4gVGhpcyB3YXksIHdlCj4gbWFpbnRhaW4gdGhlIHBhY2thZ2UtbG9jYWwgdmll
dyBmb3IgdGhlIGRpZmZlcmVudCBtZXRob2RzLiBXaGF0IGRvIHlvdQo+IHRoaW5rIGFib3V0IHRo
aXMgc29sdXRpb24/Cj4KPiBHaXZlbiB0aGUgYWJvdmUgY2xhc3NlcywgYW4gZXhhbXBsZSBmb3Ig
YSBwb2ludCAoMiktcmVmYWN0b3JpbmcgaXMgYXMKPiBmb2xsb3dzOgo+Cj4gY2xhc3MgQW5vdGhl
ckNsYXNzIHsKPgo+ICAgICBNeUNsYXNzIHJlZjsKPgo+ICAgICBwdWJsaWMgQW5vdGhlckNsYXNz
KGludCBwYXJhbSkgewo+Cj4gICAgICAgcmVmID0gbmV3TXlDbGFzcyhwYXJhbSk7Cj4KPiAgICAg
fQo+Cj4gICAgIHByb3RlY3RlZCBNeUNsYXNzIG5ld015Q2xhc3MoaW50IHBhcmFtKSB7Cj4KPiAg
ICAgICAgIHJldHVybiBuZXcgTXlDbGFzc0ltcGwocGFyYW0pOwo+Cj4gICAgIH0KPgo+IH0KPgo+
IEluc3RlYWQgb2YgY2FsbGluZyAibmV3IE15Q2xhc3NJbXBsKHBhcmFtKSIgZGlyZWN0bHkgaW4g
dGhlIGNvbnN0cnVjdG9yLAo+IEkgdXNlIGEgcHJvdGVjdGVkIG1ldGhvZCBuZXdNeUNsYXNzLiBX
aGVuIHdyaXRpbmcgYSB0ZXN0IGNhc2UsIEkgY2FuIG5vdwo+IGVhc2lseSB0ZXN0IEFub3RoZXJD
bGFzcyB3aXRob3V0IG5lZWRpbmcgYW4gaW5zdGFuY2Ugb2YgTXlDbGFzc0ltcGwuIFRvCj4gZG8g
c28sIEkgY3JlYXRlIGEgbWluaW1hbCBjbGFzcyBNeUNsYXNzU3R1YiB0aGF0IGltcGxlbWVudHMg
dGhlCj4gTXlDbGFzcy1pbnRlcmZhY2UgYW5kIGRlcml2ZSB0aGUgZm9sbG93aW5nIGNsYXNzOgo+
Cj4gY2xhc3MgSW5zdHJ1bWVudGVkQW5vdGhlckNsYXNzIGV4dGVuZHMgQW5vdGhlckNsYXNzIHsK
Pgo+ICAgICBwdWJsaWMgSW5zdHJ1bWVudGVkQW5vdGhlckNsYXNzKGludCBwYXJhbSkgewo+ICAg
ICAgIHN1cGVyKHBhcmFtKTsKPiAgICAgfQo+Cj4gICAgIEBPdmVycmlkZQo+ICAgICBwcm90ZWN0
ZWQgTXlDbGFzcyBuZXdNeUNsYXNzKGludCBwYXJhbSkgewo+Cj4gICAgICAgcmV0dXJuIG5ldyBN
eUNsYXNzU3R1YigpOwo+Cj4gICAgIH0KPgo+IH0KPgo+IEFzIGEgcHJvb2Ygb2YgY29uY2VwdCBm
b3IgdGhpcyBhcHByb2FjaCwgSSBjcmVhdGVkIHNvbWUgaW5pdGlhbCB1bml0Cj4gdGVzdHMgZm9y
IHRoZSBOb2RlQ3J5cHRvWzJdLSBhbmQgTm9kZUlQUG9ydERldGVjdG9yLWNsYXNzWzNdLgo+Cj4g
VG8gbWUsIHR3byBwb2ludHMgdGhhdCBhcmUgc3RpbGwgb3BlbiB3aGVuIGl0IGNvbWVzIHRvIHRl
c3RzIGFyZToKPgo+IC0gVGVzdGluZyBvZiB0aW1lLWJhc2VkIGNvbmRpdGlvbnM6IFRvIHRlc3Qg
ZnVuY3Rpb25hbGl0aWVzIHN1Y2ggYXMKPiByYXRlLWxpbWl0aW5nIG9mIHJlcXVlc3RzLCB0aGUg
Y2FsbHMgdG8gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkKPiBwcm9iYWJseSBuZWVkIHRvIGJl
IHJlcGxhY2VkIGJ5IGEgY2FsbCB0byBhIG5vbi1zeXN0ZW0taW50ZXJmYWNlIHdpdGggYQo+IHNp
bWlsYXIgbWV0aG9kLCB3aG9zZSBpbXBsZW1lbnRhdGlvbiBjYW4gdGhlbiBiZSBhZGFwdGVkIHRv
IHRlc3QgY2FzZXMuCj4KPiAtIENvbmN1cnJlbmN5OiBJIGRpZG4ndCB5ZXQgc3BlbmQgbXVjaCB0
aW1lIHRoaW5raW5nIGFib3V0IGhvdyBjbGFzc2VzCj4gY2FuIGJlIHRlc3RlZCB0aGF0IHdhaXQg
Zm9yIG90aGVyIHRocmVhZHMgdG8gb3BlcmF0ZSAoZS5nLiBsb2NhdGlvbgo+IHN3YXBwaW5nKSBi
dXQgSSBhbSBvcHRpbWlzdGljIHRoYXQgdGhpcyBjYW4gYmUgZG9uZS4KPgo+IEtpbmQgcmVnYXJk
cywKPiBNYXJ0aW4KPgo+IFsxXSBodHRwczovL2dpdGh1Yi5jb20veWFkZXZlbC9mcmVkL2NvbW1p
dHMvdGVzdGluZy1yZWZhY3RvcmluZwo+Cj4gWzJdCj4gaHR0cHM6Ly9naXRodWIuY29tL3lhZGV2
ZWwvZnJlZC9ibG9iL3Rlc3RpbmctcmVmYWN0b3JpbmcvdGVzdC9mcmVlbmV0L25vZGUvTm9kZUNy
eXB0b1Rlc3QuamF2YQo+Cj4gWzNdCj4gaHR0cHM6Ly9naXRodWIuY29tL3lhZGV2ZWwvZnJlZC9i
bG9iL3Rlc3RpbmctcmVmYWN0b3JpbmcvdGVzdC9mcmVlbmV0L25vZGUvTm9kZUlQUG9ydERldGVj
dG9yVGVzdC5qYXZhCj4KPiAtLQo+IE1hcnRpbiBCeXJlbmhlaWQKPiBTY2llbnRpZmljIEFzc2lz
dGFudAo+Cj4gVGVjaG5pc2NoZSBVbml2ZXJzaXTDpHQgRHJlc2Rlbgo+IEZhY3VsdHkgb2YgQ29t
cHV0ZXIgU2NpZW5jZQo+IEluc3RpdHV0ZSBvZiBTeXN0ZW0gQXJjaGl0ZWN0dXJlCj4gQ2hhaXIg
b2YgUHJpdmFjeSBhbmQgRGF0YSBTZWN1cml0eQo+IDAxMDYyIERyZXNkZW4KPgo+IFRlbC46ICs0
OSAzNTEgNDYzIDM4MjM1Cj4gR1BHIDogRjE0NCBGQkNEIEYwQzIgMjU3QSA4N0VEIENGREUgMjRF
QiBFNjg0IEQwQkUgRTc4NQ==


--b1_43b82ff42461de15096c1434c769a311
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: base64

ICAgIDxkaXY+VGhhbmtzIGZvciB3cml0aW5nIHRoaXMhIFlvdXIgYXBwcm9hY2hlcyBzZWVtIHJl
YXNvbmFibGUgdG8gbWUuPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5ZZXMsIG1vY2tpbmcgdGlt
ZSB3aWxsIGJlIGhlbHBmdWwuIEl04oCZcyBub3QgJm5ic3A7Y2xlYXIgdG8gbWUgaG93IG1hbnkg
cGxhY2VzIHRoYXQgd2lsbCBiZSBvZiB1c2UsIG9yIHdoZXRoZXIgbW9ja2luZyB3b3VsZCBzdGls
bCBiZSB2aWFibGUgaW4gaW50ZWdyYXRpb24gdGVzdHMgaW5zdGVhZCBvZiBqdXN0IHVuaXQgdGVz
dHMsIGJ1dCBpdOKAmXMgZGVmaW5pdGVseSBhIGdvb2QgdG9vbCB0byBoYXZlLiBEbyB5b3Uga25v
dyBpZiBKVW5pdCBoYXMgYW55dGhpbmcgdGhhdCBjYW4gaGVscCB3aXRoIHRoYXQ/IEl0IHNlZW1z
IGxpa2UgYSBjb21tb24gZW5vdWdoIG5lZWQgdGhhdCBpdCBtaWdodC48YnI+PC9kaXY+PGRpdj48
YnI+PC9kaXY+PGRpdj5UZXN0aW5nIGNvbmN1cnJlbnQgdGhpbmdzIG1heSByZXF1aXJlIG1vcmUg
Q29uZGl0aW9ucyBmb3IgdGhyZWFkcyB0byB3YWl0IG9uLiBJdOKAmXMgbm90IGNsZWFyIHRvIG1l
IGhvdyBtdWNoIGVmZm9ydCB0aGF0IHdpbGwgcmVxdWlyZSB0byBiZSB2aWFibGUsIG9yIGhvdyBi
ZXN0IHRvIGV4cG9zZSB0aGVtLjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+LSBTdGV2ZTwvZGl2
PjxkaXY+PGJyPjwvZGl2Pk9uIEZyaSwgQXByIDI2LCAyMDE5IGF0IDY6MzQgQU0sIE1hcnRpbiBC
eXJlbmhlaWQgJmx0OzxhIGhyZWY9Im1haWx0bzptYXJ0aW4uYnlyZW5oZWlkQHR1LWRyZXNkZW4u
ZGUiIGNsYXNzPSIiPm1hcnRpbi5ieXJlbmhlaWRAdHUtZHJlc2Rlbi5kZTwvYT4mZ3Q7IHdyb3Rl
OjxibG9ja3F1b3RlIGNsYXNzPSJwcm90b25tYWlsX3F1b3RlIiB0eXBlPSJjaXRlIj4gIEhlbGxv
IGV2ZXJ5b25lLDxicj48YnI+SSd2ZSBzZW50IHRoaXMgbWFpbCBhdCB0aGUgZW5kIG9mIGxhc3Qg
eWVhciB0byB0aGlzIGxpc3QgYnV0IGl0IHNlZW1zPGJyPnRoYXQgaXQgbmV2ZXIgbWFkZSBpdCB0
byBpdHMgc3Vic2NyaWJlcnMuIFRodXMsIEknbSB0cnlpbmcgYWdhaW46PGJyPjxicj48YnI+SSBz
dGFydGVkIHRvIHJlZmFjdG9yIHNldmVyYWwgcGFydHMgb2YgdGhlIEZyZWVuZXQgQ29kZSB0byBt
YWtlIHRoZSBpdDxicj5lYXNpZXIgdG8gdGVzdCBhbmQgdW5kZXJzdGFuZCB0aGUgZGlmZmVyZW50
IHBhcnRzIG9mIGl0IGluIGlzb2xhdGlvbi48YnI+QmVmb3JlIEkgY29udGludWUgZG9pbmcgc28s
IEkgd291bGQgbGlrZSB0byBrbm93IHlvdXIgdGhvdWdodHMgb24gbXk8YnI+YXBwcm9hY2ggYW5k
IHdoZXRoZXIgeW91IHdvdWxkIGFjdHVhbGx5IHdlbGNvbWUgdGhlc2UgY2hhbmdlcy4gWW91IGNh
bjxicj5maW5kIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgcGFydGlhbGx5IHJlZmFjdG9yZWQg
Y29kZSBvbiBHaXRodWIgWzFdLjxicj48YnI+RXNzZW50aWFsbHksIEkgZGlkIHRoZSBmb2xsb3dp
bmcgdGhyZWUgY2hhbmdlcyB0byB0aGUgTm9kZS0sPGJyPk5vZGVDcnlwdG8tLFBlZXJNYW5hZ2Vy
LSxVZHBTb2NrZXRIYW5kbGVyLSxOb2RlSVBQb3J0RGV0ZWN0b3ItIGFuZDxicj5JUEFkZHJlc3NE
ZXRlY3Rvci1jbGFzczo8YnI+PGJyPjEuIENyZWF0ZSBjb3JyZXNwb25kaW5nIEludGVyZmFjZXMg
Zm9yIGVhY2ggY2xhc3MuIFRoaXMgYWxsb3dzIHVzIHRvPGJyPnJlcGxhY2UgYWN0dWFsIGNsYXNz
IGluc3RhbmNlcyAoZS5nLiBvZiB0aGUgTm9kZSBjbGFzcykgd2l0aCBhPGJyPnRlc3Qtc3BlY2lm
aWMgZHVtbXkgaW1wbGVtZW50YXRpb24uIFRoaXMgZHVtbXkgY2FuIHRoZW4gYmUgZ2l2ZW4gYXM8
YnI+cGFyYW1ldGVyIHRvIGEgY29uc3RydWN0b3IuPGJyPjxicj4yLiBFbmNhcHN1bGF0ZSBpbnN0
YW50aWF0aW9uIG9mIGNsYXNzIG1lbWJlcnMgd2l0aGluIHByb3RlY3RlZCBtZXRob2RzLjxicj5C
eSBvdmVycmlkaW5nIHRoZXNlIHByb3RlY3RlZCBtZXRob2RzLCB3ZSBjYW4gcmVwbGFjZSBjbGFz
cyBtZW1iZXJzIHdpdGg8YnI+dGVzdC1zcGVjaWZpYyBkdW1teSBpbXBsZW1lbnRhdGlvbnMuPGJy
Pjxicj4zLiBDcmVhdGUgZ2V0dGVyLU1ldGhvZHMgdG8gYWNjZXNzIGNsYXNzIG1lbWJlcnMuIE1h
bnkgY2xhc3NlcyBpbjxicj5GcmVlbmV0IGhvbGQgYSByZWZlcmVuY2UgdG8gYSBOb2RlLWluc3Rh
bmNlIGFuZCBzb21lIGRpcmVjdGx5IGFjY2VzcyBpdHM8YnI+bWVtYmVycy4gQmVzaWRlcyB0aGUg
ZmFjdCB0aGF0IHRoaXMgaXMgbm90IGEgZ29vZCBwcmFjdGljZSwgaXQga2VwdCBtZTxicj5mcm9t
IGNyZWF0aW5nIGFuIGludGVyZmFjZSBmb3IgdGhlIG5vZGUgY2xhc3MuPGJyPjxicj5PbmUgb2Jz
dGFjbGUgd2l0aCBwb2ludCAoMSkgd2FzIHRoYXQgdGhlcmUgYXJlIHNldmVyYWwgY2FzZXMgd2hl
cmUgYTxicj5jbGFzcyBjYWxscyBhIG5vbi1wdWJsaWMgbWV0aG9kIGZyb20gYW5vdGhlciBjbGFz
cyBpbiB0aGUgc2FtZSBwYWNrYWdlLjxicj5UbyBpbGx1c3RyYXRlIG15IGNoYW5nZXMsIGNvbnNp
ZGVyIHRoZSBmb2xsb3dpbmcgdGhyZWUgZXhhbXBsZSBjbGFzc2VzOjxicj48YnI+cGFja2FnZSBl
eGFtcGxlLkE7PGJyPmNsYXNzIE15Q2xhc3Mgezxicj48YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IGJv
b2xlYW4gZ2V0Qm9vbCgpIHsgLi4uIH08YnI+PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyBwdWJsaWMg
U3RyaW5nIGdldFN0cmluZygpIHsgLi4uIH0mbmJzcDsmbmJzcDsmbmJzcDs8YnI+PGJyPn08YnI+
PGJyPnBhY2thZ2UgZXhhbXBsZS5BOzxicj5jbGFzcyBTYW1lUGFja2FnZUNsYXNzIHs8YnI+Jm5i
c3A7IHB1YmxpYyBTYW1lUGFja2FnZUNsYXNzKE15Q2xhc3MgcmVmKSB7PGJyPjxicj4mbmJzcDsm
bmJzcDsmbmJzcDsgaWYgKHJlZi5nZXRCb29sKCkpIC4uLjxicj48YnI+Jm5ic3A7IH08YnI+PGJy
Pn08YnI+PGJyPnBhY2thZ2UgZXhhbXBsZS5COzxicj5jbGFzcyBPdGhlclBhY2thZ2VDbGFzcyB7
PGJyPjxicj4mbmJzcDsgcHVibGljIE90aGVyUGFja2FnZUNsYXNzKE15Q2xhc3MgcmVmKSB7PGJy
Pjxicj4mbmJzcDsmbmJzcDsmbmJzcDsgcHJvY2VzcyhyZWYuZ2V0U3RyaW5nKCkpOzxicj48YnI+
Jm5ic3A7IH08YnI+PGJyPn08YnI+PGJyPkJlY2F1c2UgU2FtZVBhY2thZ2VDbGFzcyBpcyB3aXRo
aW4gdGhlIHNhbWUgcGFja2FnZSBhcyBNeUNsYXNzLCB0aGU8YnI+Z2V0Qm9vbC1tZXRob2QgaXMg
dmlzaWJsZSB0byB0aGUgZm9ybWVyIHdoZXJhcyBvbmx5IGdldFN0cmluZygpIGlzPGJyPnZpc2li
bGUgZm9yIHRoZSBPdGhlclBhY2thZ2VDbGFzcy4gQWZ0ZXIgbXkgcmVmYWN0b3JpbmcsIHdlIG5v
dyBoYXZlIHRoZTxicj5mb2xsb3dpbmcgMiBpbnRlcmZhY2VzOjxicj48YnI+cGFja2FnZSBleGFt
cGxlLkE7PGJyPnB1YmxpYyBpbnRlcmZhY2UgTXlDbGFzcyB7PGJyPjxicj4mbmJzcDsmbmJzcDsm
bmJzcDsgU3RyaW5nIGdldFN0cmluZygpOzxicj48YnI+fTxicj48YnI+cGFja2FnZSBleGFtcGxl
LkE7PGJyPmludGVyZmFjZSBQcm90ZWN0ZWRNeUNsYXNzIGV4dGVuZHMgTXlDbGFzcyB7PGJyPjxi
cj4mbmJzcDsmbmJzcDsmbmJzcDsgYm9vbGVhbiBnZXRCb29sKCk7PGJyPjxicj59PGJyPjxicj5Q
bGVhc2Ugbm90ZSB0aGF0IHRoZSBmaXJzdCBpbnRlcmZhY2UgaXMgYSBwdWJsaWMgaW50ZXJmYWNl
IHdoaWxlIHRoZTxicj5zZWNvbmQgaW50ZXJmYWNlIGlzIHBhY2thZ2UtbG9jYWwuIFRoZSB0aHJl
ZSBleGFtcGxlIGNsYXNzZXMgbm93IGxvb2sgYXM8YnI+Zm9sbG93czo8YnI+PGJyPnBhY2thZ2Ug
ZXhhbXBsZS5BOzxicj5jbGFzcyBNeUNsYXNzSW1wbCBpbXBsZW1lbnRzIFByb3RlY3RlZE15Q2xh
c3Mgezxicj48YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IHB1YmxpYyBib29sZWFuIGdldEJvb2woKSB7
IC4uLiB9PGJyPjxicj4mbmJzcDsmbmJzcDsmbmJzcDsgcHVibGljIFN0cmluZyBnZXRTdHJpbmco
KSB7IC4uLiB9Jm5ic3A7Jm5ic3A7Jm5ic3A7PGJyPjxicj59PGJyPjxicj5wYWNrYWdlIGV4YW1w
bGUuQTs8YnI+Y2xhc3MgU2FtZVBhY2thZ2VDbGFzcyB7PGJyPiZuYnNwOyBwdWJsaWMgU2FtZVBh
Y2thZ2VDbGFzcyhQcm90ZWN0ZWRNeUNsYXNzIHJlZikgezxicj48YnI+Jm5ic3A7Jm5ic3A7Jm5i
c3A7IGlmIChyZWYuZ2V0Qm9vbCgpKSAuLi48YnI+PGJyPiZuYnNwOyB9PGJyPjxicj59PGJyPjxi
cj5wYWNrYWdlIGV4YW1wbGUuQjs8YnI+Y2xhc3MgT3RoZXJQYWNrYWdlQ2xhc3Mgezxicj48YnI+
Jm5ic3A7IHB1YmxpYyBPdGhlclBhY2thZ2VDbGFzcyhNeUNsYXNzIHJlZikgezxicj48YnI+Jm5i
c3A7Jm5ic3A7Jm5ic3A7IHByb2Nlc3MocmVmLmdldFN0cmluZygpKTs8YnI+PGJyPiZuYnNwOyB9
PGJyPjxicj59PGJyPjxicj5UaGUgZ2V0Qm9vbC1NZXRob2Qgb2YgdGhlIE15Q2xhc3NJbXBsLWNs
YXNzIGlzIG5vdyBwdWJsaWMuIEhvd2V2ZXIsIGlmPGJyPmluc3RhbmNlcyBvZiB0aGlzIGNsYXNz
IGFyZSBvbmx5IGFjY2Vzc2VkIHZpYSB0aGUgaW50ZXJmYWNlcyBpdCBpcyBvbmx5PGJyPnZpc2li
bGUgdG8gY2xhc3NlcyB0aGF0IHVzZSB0aGUgUHJvdGVjdGVkTXlDbGFzcyBpbnRlcmZhY2UuIFRo
aXMgd2F5LCB3ZTxicj5tYWludGFpbiB0aGUgcGFja2FnZS1sb2NhbCB2aWV3IGZvciB0aGUgZGlm
ZmVyZW50IG1ldGhvZHMuIFdoYXQgZG8geW91PGJyPnRoaW5rIGFib3V0IHRoaXMgc29sdXRpb24/
PGJyPjxicj48YnI+R2l2ZW4gdGhlIGFib3ZlIGNsYXNzZXMsIGFuIGV4YW1wbGUgZm9yIGEgcG9p
bnQgKDIpLXJlZmFjdG9yaW5nIGlzIGFzPGJyPmZvbGxvd3M6PGJyPjxicj5jbGFzcyBBbm90aGVy
Q2xhc3Mgezxicj48YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IE15Q2xhc3MgcmVmOzxicj48YnI+Jm5i
c3A7Jm5ic3A7Jm5ic3A7IHB1YmxpYyBBbm90aGVyQ2xhc3MoaW50IHBhcmFtKSB7PGJyPjxicj4m
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcmVmID0gbmV3TXlDbGFzcyhwYXJhbSk7PGJy
Pjxicj4mbmJzcDsmbmJzcDsmbmJzcDsgfTxicj48YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IHByb3Rl
Y3RlZCBNeUNsYXNzIG5ld015Q2xhc3MoaW50IHBhcmFtKSB7PGJyPjxicj4mbmJzcDsmbmJzcDsm
bmJzcDsgJm5ic3A7Jm5ic3A7Jm5ic3A7IHJldHVybiBuZXcgTXlDbGFzc0ltcGwocGFyYW0pOzxi
cj48YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+PGJyPn08YnI+PGJyPkluc3RlYWQgb2YgY2Fs
bGluZyAibmV3IE15Q2xhc3NJbXBsKHBhcmFtKSIgZGlyZWN0bHkgaW4gdGhlIGNvbnN0cnVjdG9y
LDxicj5JIHVzZSBhIHByb3RlY3RlZCBtZXRob2QgbmV3TXlDbGFzcy4gV2hlbiB3cml0aW5nIGEg
dGVzdCBjYXNlLCBJIGNhbiBub3c8YnI+ZWFzaWx5IHRlc3QgQW5vdGhlckNsYXNzIHdpdGhvdXQg
bmVlZGluZyBhbiBpbnN0YW5jZSBvZiBNeUNsYXNzSW1wbC4gVG88YnI+ZG8gc28sIEkgY3JlYXRl
IGEgbWluaW1hbCBjbGFzcyBNeUNsYXNzU3R1YiB0aGF0IGltcGxlbWVudHMgdGhlPGJyPk15Q2xh
c3MtaW50ZXJmYWNlIGFuZCBkZXJpdmUgdGhlIGZvbGxvd2luZyBjbGFzczo8YnI+PGJyPmNsYXNz
IEluc3RydW1lbnRlZEFub3RoZXJDbGFzcyBleHRlbmRzIEFub3RoZXJDbGFzcyB7PGJyPjxicj4m
bmJzcDsmbmJzcDsmbmJzcDsgcHVibGljIEluc3RydW1lbnRlZEFub3RoZXJDbGFzcyhpbnQgcGFy
YW0pIHs8YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHN1cGVyKHBhcmFtKTs8YnI+
Jm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyBAT3ZlcnJpZGU8
YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IHByb3RlY3RlZCBNeUNsYXNzIG5ld015Q2xhc3MoaW50IHBh
cmFtKSB7PGJyPjxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcmV0dXJuIG5ldyBN
eUNsYXNzU3R1YigpOzxicj48YnI+Jm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+PGJyPn08YnI+PGJy
PkFzIGEgcHJvb2Ygb2YgY29uY2VwdCBmb3IgdGhpcyBhcHByb2FjaCwgSSBjcmVhdGVkIHNvbWUg
aW5pdGlhbCB1bml0PGJyPnRlc3RzIGZvciB0aGUgTm9kZUNyeXB0b1syXS0gYW5kIE5vZGVJUFBv
cnREZXRlY3Rvci1jbGFzc1szXS48YnI+PGJyPlRvIG1lLCB0d28gcG9pbnRzIHRoYXQgYXJlIHN0
aWxsIG9wZW4gd2hlbiBpdCBjb21lcyB0byB0ZXN0cyBhcmU6PGJyPjxicj4tIFRlc3Rpbmcgb2Yg
dGltZS1iYXNlZCBjb25kaXRpb25zOiBUbyB0ZXN0IGZ1bmN0aW9uYWxpdGllcyBzdWNoIGFzPGJy
PnJhdGUtbGltaXRpbmcgb2YgcmVxdWVzdHMsIHRoZSBjYWxscyB0byBTeXN0ZW0uY3VycmVudFRp
bWVNaWxsaXMoKTxicj5wcm9iYWJseSBuZWVkIHRvIGJlIHJlcGxhY2VkIGJ5IGEgY2FsbCB0byBh
IG5vbi1zeXN0ZW0taW50ZXJmYWNlIHdpdGggYTxicj5zaW1pbGFyIG1ldGhvZCwgd2hvc2UgaW1w
bGVtZW50YXRpb24gY2FuIHRoZW4gYmUgYWRhcHRlZCB0byB0ZXN0IGNhc2VzLjxicj48YnI+LSBD
b25jdXJyZW5jeTogSSBkaWRuJ3QgeWV0IHNwZW5kIG11Y2ggdGltZSB0aGlua2luZyBhYm91dCBo
b3cgY2xhc3Nlczxicj5jYW4gYmUgdGVzdGVkIHRoYXQgd2FpdCBmb3Igb3RoZXIgdGhyZWFkcyB0
byBvcGVyYXRlIChlLmcuIGxvY2F0aW9uPGJyPnN3YXBwaW5nKSBidXQgSSBhbSBvcHRpbWlzdGlj
IHRoYXQgdGhpcyBjYW4gYmUgZG9uZS48YnI+PGJyPjxicj5LaW5kIHJlZ2FyZHMsPGJyPk1hcnRp
bjxicj48YnI+PGJyPlsxXSBodHRwczovL2dpdGh1Yi5jb20veWFkZXZlbC9mcmVkL2NvbW1pdHMv
dGVzdGluZy1yZWZhY3RvcmluZzxicj48YnI+WzJdPGJyPmh0dHBzOi8vZ2l0aHViLmNvbS95YWRl
dmVsL2ZyZWQvYmxvYi90ZXN0aW5nLXJlZmFjdG9yaW5nL3Rlc3QvZnJlZW5ldC9ub2RlL05vZGVD
cnlwdG9UZXN0LmphdmE8YnI+PGJyPlszXTxicj5odHRwczovL2dpdGh1Yi5jb20veWFkZXZlbC9m
cmVkL2Jsb2IvdGVzdGluZy1yZWZhY3RvcmluZy90ZXN0L2ZyZWVuZXQvbm9kZS9Ob2RlSVBQb3J0
RGV0ZWN0b3JUZXN0LmphdmE8YnI+PGJyPi0tPGJyPk1hcnRpbiBCeXJlbmhlaWQ8YnI+U2NpZW50
aWZpYyBBc3Npc3RhbnQ8YnI+PGJyPlRlY2huaXNjaGUgVW5pdmVyc2l0w6R0IERyZXNkZW48YnI+
RmFjdWx0eSBvZiBDb21wdXRlciBTY2llbmNlPGJyPkluc3RpdHV0ZSBvZiBTeXN0ZW0gQXJjaGl0
ZWN0dXJlPGJyPkNoYWlyIG9mIFByaXZhY3kgYW5kIERhdGEgU2VjdXJpdHk8YnI+MDEwNjIgRHJl
c2Rlbjxicj48YnI+VGVsLjogKzQ5IDM1MSA0NjMgMzgyMzU8YnI+R1BHIDogRjE0NCBGQkNEIEYw
QzIgMjU3QSA4N0VEICAgICAgIENGREUgMjRFQiBFNjg0IEQwQkUgRTc4NTxicj48YnI+PGJyPjwv
YmxvY2txdW90ZT48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj4=



--b1_43b82ff42461de15096c1434c769a311--