Re: exportFn and evalStream questions

Joe Wells <[email protected]> Wed, 07 Oct 2009 21:06:38 +0100
Newsgroups gmane.comp.lang.sml.smlnj
Message-ID <[email protected]>
Sm9obiBSZXBweSA8amhyQGNzLnVjaGljYWdvLmVkdT4gd3JpdGVzOgoKPiBPbiBPY3QgNSwgMjAw
OSwgYXQgNzo0MyBBTSwgSm9lIFdlbGxzIHdyb3RlOgo+Cj4+IERlYXIgU01ML05KIGd1cnVzLAo+
PiAKPj4gV291bGQgaXQgYmUgcG9zc2libGUgZm9yIHNvbWVvbmUgdG8gcGxlYXNlIGFuc3dlciAx
IG9yIG1vcmUgb2YgdGhlCj4+IGZvbGxvd2luZyBxdWVzdGlvbnMgYWJvdXQgZXhwb3J0Rm4gYW5k
IGV2YWxTdHJlYW0/Cj4KPiBJIGNhbiBhbnN3ZXIgdGhlIGZpcnN0IHR3by4KClRoYW5rcyEKCj4g
RGF2ZSBvciBNYXR0aGlhcyBzaG91bGQgYmUgYWJsZSB0byBhZGRyZXNzIHRoZSBvdGhlcnMuCgpU
aGF0IHdvdWxkIGJlIGxvdmVseSwgYnV0IEkgd2FudCB5b3UgdG8ga25vdyB0aGF0IEkgYW0gdmVy
eSBncmF0ZWZ1bApmb3IgZXZlbiB0aGUgYW5zd2VycyB5b3UgaGF2ZSBhbHJlYWR5IGdpdmVuIG1l
LgoKPj4gMS4gV2hlcmUgZG9lcyBleHBvcnRGbiBkaXNjYXJkIHRoZSBjb250ZW50cyBvZiB0aGUg
dG9wLWxldmVsCj4+ICAgZW52aXJvbm1lbnQ/ICBJJ3ZlIGJlZW4gbG9va2luZyB0aHJvdWdoIHRo
ZSBzb3VyY2UgY29kZSBhbmQgaWYgSQo+PiAgIGhhdmUgc2VlbiBpdCBJIGNlcnRhaW5seSBoYXZl
IG5vdCByZWNvZ25pemVkIGl0LiAgSXQgaXMgY2xlYXIgdGhhdAo+PiAgIHRoaXMgaXMgaGFwcGVu
aW5nIGJvdGggZnJvbSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgYWxzbyBmcm9tIHRoZQo+PiAgIGZh
Y3QgdGhhdCBzdWJzZXF1ZW50IHVzZXMgb2YgZXZhbFN0cmVhbSBvciB1c2VTdHJlYW0gc2VlbSB0
bwo+PiAgIGNvbXBsYWluIHRoYXQgYWxsIGlkZW50aWZpZXJzIGFyZSB1bmRlZmluZWQuCj4KPiBU
aGUgZGlzY2FyZGluZyBvZiB0aGUgZW52aXJvbm1lbnQgaXMgZWZmZWN0aXZlbHkgZG9uZSBieSB0
aGUgR0MuICBXZQo+IGlzb2xhdGUgdGhlIHJldHVybiBjb250aW51YXRpb24gb2YgdGhlIGV4cG9y
dGVkIGZ1bmN0aW9uIHNvIHRoYXQgaXQKPiBkb2VzIG5vdCByZWZlciB0byB0aGUgdG9wLWxldmVs
LWxvb3AsIGFuZCwgdGh1cywgdGhlIGVudmlyb25tZW50IGJlY29tZXMKPiBnYXJiYWdlLgoKVGhh
bmtzIHZlcnkgbXVjaCBmb3IgdGhpcyBhbnN3ZXIuCgpJIG5vdyByZWFsaXplIHRoYXQgSSB3YXMg
Y29uZnVzZWQgYWJvdXQgc29tZXRoaW5nLiAgTXkgYmVzdCBndWVzcyBhcwp0byB0aGUgY2F1c2Ug
b2YgbXkgY29uZnVzaW9uIGlzIHRoYXQgSSBtdXN0IGhhdmUgbGVmdCBvdXQgYSB2aXRhbApzZW1p
Y29sb24gYmV0d2VlbiB0d28gdG9wLWxldmVsIGRlY2xhcmF0aW9ucyB3aGVuIEkgd2FzIHRlc3Rp
bmcKdGhpbmdzLCBhbmQgc29tZWhvdyB0aG91Z2h0IHRoZSBtaXNzaW5nIGRlZmluaXRpb25zIGR1
cmluZyBhIGNhbGwgdG8KZXZhbFN0cmVhbSB3ZXJlIGNhdXNlZCBieSBzb21ldGhpbmcgZGVsaWJl
cmF0ZWx5IHJlbW92aW5nIHRoZW0gZnJvbQp0aGUgdG9wLWxldmVsIGVudmlyb25tZW50IGR1cmlu
ZyBleHBvcnRGbiwgYmVjYXVzZSB0aGUgcHJvYmxlbSB3ZW50CmF3YXkgd2hlbiBJIHN3aXRjaGVk
IHRvIGV4cG9ydE1MLgoKVGhlIGFuc3dlciB5b3UgZ2F2ZSBhYm92ZSBtYWRlIG1lIHRoaW5rIHRo
aW5ncyB0aHJvdWdoIGFnYWluIGFuZCByZWRvCm15IHRlc3RzLgoKPj4gMi4gSXMgaXQgcG9zc2li
bGUgdG8gZ2V0IHRoZSBzYW1lIHNwYWNlLXNhdmluZyBlZmZlY3QgYXMgZXhwb3J0Rm4KPj4gICB3
aXRob3V0IGhhdmluZyB0byB3cml0ZSBhIGhlYXAgaW1hZ2UgdG8gZGlzayBhbmQgdGhlbiBleGVj
IGEgZnJlc2gKPj4gICBzbWwgcHJvY2VzcyB0byBsb2FkIHRoZSBoZWFwIGltYWdlPyAgKEFub3Ro
ZXIgcHJvYmxlbSB0aGlzIHdvdWxkCj4+ICAgYXZvaWQgaXMgdGhlIGZhY3QgdGhhdCBleHBvcnRG
biBjbG9zZXMgYWxsIGZpbGVzIGFuZCBjbGVhcnMgdGhlCj4+ICAgc2lnbmFsIGhhbmRsZXIgdGFi
bGUuKSAgSXMgaXQgZW5vdWdoIHRvIGNsZWFyIHRoZSB0b3AtbGV2ZWwKPj4gICBlbnZpcm9ubWVu
dCBieSBoYW5kIGFuZCB0aGVuIGxldCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgZG8gaXRzIHdvcms/
Cj4+ICAgQW5kIGRvZXMgYW55b25lIGhhdmUgYW55IGV4YW1wbGUgU01MIGNvZGUgdGhhdCBjbGVh
cnMgdGhlIHRvcC1sZXZlbAo+PiAgIGVudmlyb25tZW50IGNvcnJlY3RseT8gIENhbiBkb2luZyB0
aGlzIHJlbGVhc2UgbWVtb3J5IGJhY2sgdG8gdGhlCj4+ICAgc3lzdGVtPyAgSWYgbm90LCBjYW4g
ZG9pbmcgdGhpcyBhdCBsZWFzdCByZWR1Y2UgdGhlIGFtb3VudCBvZiB3b3JrCj4+ICAgdGhlIGdh
cmJhZ2UgY29sbGVjdG9yIG5lZWRzIHRvIGRvIHJlZ3VsYXJseT8KPgo+IFllcywgYXMgbG9uZyBh
cyB5b3UgZG9uJ3Qgd2FudCB0byByZXR1cm4gdG8gdGhlIHRvcC1sZXZlbCBsb29wLgoKT2theSwg
c28gdGhpcyBpcyB0aGUga2V5LiAgU28gSSd2ZSBub3cgdHJpZWQgdGhpcy4KCkxldCBtZSBnaXZl
IGEgYml0IG9mIHRoZSBiYWNrZ3JvdW5kLiAgSSd2ZSBiZWVuIHdvcmtpbmcgb24gYSBzeXN0ZW0K
Zm9yIGxldHRpbmcgcGVvcGxlIHdyaXRlIFNNTC9OSiBzY3JpcHRzLiAgQmVpbmcgYWJsZSB0byB3
cml0ZSBTTUwKc2NyaXB0cyBtYWtlcyBpdCByZWFzb25hYmxlIHRvIHVzZSBTTUwgaW4gYSBsb3Qg
bW9yZSBzaXR1YXRpb25zLApiZWNhdXNlIHRoZSB0aW1lIG92ZXJoZWFkIG9mIHNldHRpbmcgdXAg
YW5kIGRlYnVnZ2luZyB0aGUgc2NoZW1lIGZvcgpidWlsZGluZyB5b3VyIHByb2dyYW0gaXMgYSBs
b3Qgc21hbGxlciAoYmFzaWNhbGx5IHRoaXMgb3ZlcmhlYWQgY29zdApnb2VzIHRvIHplcm8pLiAg
VGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHdoZW4gZ2l2aW5nIHByb2JsZW1zIHRvCnN0
dWRlbnRzLCBiZWNhdXNlIHRoZXkgY2FuIGZvY3VzIG9uIHRoZSBwcm9ncmFtbWluZyBhbmQgbm90
IGFib3V0IGhvdwp0byBjb21waWxlIGFuZCBsaW5rIHRoZWlyIGZpbGVzIGFuZCBkdW1wIHRoZSBo
ZWFwIGFuZCBzbyBvbi4KCldpdGggbXkgc3lzdGVtLCB0aGUg4oCcaGVsbG8gd29ybGTigJ0gcHJv
Z3JhbSBjYW4gbG9vayBsaWtlIHRoaXM6CgogICMhL2RpcmVjdG9yeS9wYXRoL2dvZXMvaGVyZS9z
bWxuai1zY3JpcHQKICBwcmludCAiSGVsbG8sIHdvcmxkIVxuIgoKQWN0dWFsbHksIG15IOKAnGhl
bGxvIHdvcmxk4oCdIHByb2dyYW0gbG9va3MgbGlrZSB0aGlzOgoKICAjIS91c3IvYmluL2VudiBz
bWxuai1zY3JpcHQKICA7KCotKi1TTUwtKi0qKQogIHNpbGVuY2VDb21waWxlciAoKTsKICBwcmlu
dCAiSGVsbG8sIHdvcmxkIVxuIjsKClRoZSBleHRyYSB0aGluZ3MgYXJlIGFzIGZvbGxvd3MuICAo
MSkgRm9yIG5vdywgSSB1c2Ug4oCcZW524oCdIHRvIHNlYXJjaApmb3Ig4oCcc21sbmotc2NyaXB0
4oCdIGluIHRoZSBkaXJlY3RvcmllcyBsaXN0ZWQgaW4gdGhlIHVzZXIncyBQQVRICmVudmlyb25t
ZW50IHZhcmlhYmxlLCBzbyBpdCBjYW4gYmUgaW5zdGFsbGVkIGluIHZhcmlvdXMgcGxhY2VzLiAg
KDIpClRoZSBzZWNvbmQgbGluZSBiZWdpbnMgd2l0aCBhIHNlbWktY29sb24gc28gdGhhdCB0aGUg
Zmlyc3QgbGluZSBpcyBhdApsZWFzdCBzeW50YWN0aWNhbGx5IHZhbGlkIFNNTCBhbmQgdmFyaW91
cyBwcm9ncmFtIHRvb2xzIChsaWtlIHRoZQpFbWFjcyBTTUwgbW9kZSkgd2lsbCBiZSBsZXNzIGNv
bmZ1c2VkLiAgKDMpIFRoZSBjb21tZW50IG9uIHRoZSBzZWNvbmQKbGluZSB0ZWxscyBFbWFjcyB0
byB1c2UgU01MIG1vZGUsIGJlY2F1c2UgRW1hY3MgaGFzbid0IHlldCBiZWVuIHRvbGQKYWJvdXQg
d2hpY2ggbW9kZSB0byB1c2Ugd2l0aCB0aGUgaW50ZXJwcmV0ZXIgc3BlY2lmaWVkIG9uIHRoZSBm
aXJzdApsaW5lLiAgKDQpIFRoZSBpbnZvY2F0aW9uIG9mIHNpbGVuY2VDb21waWxlciBzaHV0cyB1
cCBhbGwgdXNlcyBvZgpDb250cm9sLlByaW50LnNheSB0byBzdXBwcmVzcyBtZXNzYWdlcyBmb3Ig
c3VjY2Vzc2Z1bCBkZWNsYXJhdGlvbnMgYW5kCmF1dG9sb2FkaW5nLiAgSSBkb24ndCBkbyB0aGlz
IGJ5IGRlZmF1bHQgYmVjYXVzZSB0aGF0IGFsc28gc3RvcHMgdHlwZQplcnJvciBtZXNzYWdlcy4g
IFNvIHRoZSBpZGVhIGlzIG9uY2UgdGhlIHByb2dyYW1tZXIgaXMgbW9zdGx5IGhhcHB5CnRoZXkg
d2lsbCBpbnNlcnQgYSBjYWxsIHRvIHNpbGVuY2VDb21waWxlci4KCk9rYXksIHNvIG5vdyB5b3Ug
a25vdyB0aGUgYmFja2dyb3VuZC4KClRoZSBwcm9ibGVtIGlzIHRoYXQgZXZlbiB0aGUgc2ltcGxl
c3QgcHJvZ3JhbXMgdXNlIHJvdWdobHkgMzAgTSBieXRlcwpvZiB2aXJ0dWFsIG1lbW9yeSwgYW5k
IGhhdmUgYSByZXNpZGVudCBzZXQgc2l6ZSAoUlNTKSBvZiBzb21ld2hlcmUKYmV0d2VlbiAxMCBh
bmQgMzAgTSBieXRlcy4KCkJlZm9yZSBJIGZvbGxvd2VkIHlvdXIgYWR2aWNlLCB0aGUgcHJvZ3Jh
bXMgd2VyZSB1c2luZyByb3VnaGx5IDQwIE0KYnl0ZXMgb2YgdmlydHVhbCBtZW1vcnkuICBTbyBJ
IGhhdmUgbm93IHNhdmVkIGFib3V0IDEwIE0gb2YgdmlydHVhbAptZW1vcnkuICBJbiBzb21lIGNh
c2UsIHRoZSBSU1Mgd2VudCBkb3duIGJ5IGhhbGYsIHdoaWxlIGluIG90aGVyIGNhc2VzCml0IHN0
YXllZCB0aGUgc2FtZS4KCkFzIHlvdSBjYW4gc2VlIHRob3VnaCwgSSBzdGlsbCBoYXZlIGEgcHJv
YmxlbSwgYmVjYXVzZSAzMCBNIGJ5dGVzIG9mCm1lbW9yeSBmb3Ig4oCcaGVsbG8gd29ybGTigJ0g
aXMgd2F5IHRvbyBtdWNoLgoKSGVyZSBpcyBhIHNpbXBsZSBzY3JpcHQgdGhhdCBuZWVkcyAzMyBN
IGJ5dGVzIG9mIHZpcnR1YWwgbWVtb3J5IGFuZAoyOCBNIGJ5dGVzIG9mIHJlYWwgbWVtb3J5OgoK
ICAjIS91c3IvYmluL2VudiBzbWxuai1zY3JpcHQKICA7KCotKi1TTUwtKi0qKQogIHNpbGVuY2VD
b21waWxlciAoKTsKICBwcmludCAic2VlIGhvdyBtdWNoIG1lbW9yeSB0aGlzIGlzIHVzaW5nIC4u
LlxuIjsKICB2YWwgcGlkID0gV29yZDMyLnRvSW50IChQb3NpeC5Qcm9jZXNzLnBpZFRvV29yZCAo
UG9zaXguUHJvY0Vudi5nZXRwaWQgKCkpKTsKICB2YWwgcHNDbWQgPSAicHMgbCAiIF4gSW50LnRv
U3RyaW5nIHBpZDsKICBmdW4gZG9QcyAoKSA9IE9TLlByb2Nlc3Muc3lzdGVtIHBzQ21kOwogIGRv
UHMoKTsKICBwcmludCAibm93IGV4aXRpbmcgZXZhbExvb3AsIHNlZSBpZiBtZW1vcnkgaGFzIGJl
ZW4gZnJlZWQgLi4uXG4iOwogIGZ1biBmaW5pc2ggKCkgPSAod2hpbGUgdHJ1ZSBkbyAoZG9Qcygp
OyBPUy5Qcm9jZXNzLnNsZWVwIChUaW1lLmZyb21TZWNvbmRzIDIpKSk7CiAgZmluaXNoRnVuY3Rp
b24gOj0gZmluaXNoOwoKVGhlIG9ubHkgdGhpbmcgbm9uLW9idmlvdXMgdG8gZXhwbGFpbiBhYm91
dCB3aGF0IHRoaXMgc2NyaXB0IGRvZXMgaXMKdGhhdCB3aGF0ZXZlciBmdW5jdGlvbiBpcyBzdG9y
ZWQgYnkgdGhlIHVzZXIgaW4gdGhlIHJlZiBjZWxsCmZpbmlzaEZ1bmN0aW9uIHdpbGwgYmUgaW52
b2tlZCBieSBzbWxuai1zY3JpcHQgKmFmdGVyKiB0aGUgZXZhbExvb3AKdGhhdCBwcm9jZXNzZWQg
dGhlIHNjcmlwdCBmaWxlIHJldHVybnMuICBTbyB0aGUgdXNlciBjYW4gcHV0IHRoZSBtYWluCmxv
bmctcnVubmluZyBsb29wIG9mIHRoZWlyIHByb2dyYW0gaW4gZmluaXNoRnVuY3Rpb24gYW5kIHRo
aXMgd2lsbAphbGxvdyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgdG8gcmVjbGFpbSBzcGFjZSB1c2Vk
IGJ5IHRoZSBjb21waWxlci4KSGVyZSBpcyB0aGUgb3V0cHV0IEkgZ2V0IGZyb20gdGhpczoKCiAg
c2VlIGhvdyBtdWNoIG1lbW9yeSB0aGlzIGlzIHVzaW5nIC4uLgogIEYgICBVSUQgICBQSUQgIFBQ
SUQgUFJJICBOSSAgICBWU1ogICBSU1MgV0NIQU4gIFNUQVQgVFRZICAgICAgICBUSU1FIENPTU1B
TkQKICAwICAxMDAwICA1OTI2ICA4NTM1ICAyMCAgIDAgIDQwODA0IDM2NTY0IC0gICAgICBTKyAg
IHB0cy83ICAgICAgMDowMCBzbWxuai1zY3JpcAogIG5vdyBleGl0aW5nIGV2YWxMb29wLCBzZWUg
aWYgbWVtb3J5IGhhcyBiZWVuIGZyZWVkIC4uLgogIEYgICBVSUQgICBQSUQgIFBQSUQgUFJJICBO
SSAgICBWU1ogICBSU1MgV0NIQU4gIFNUQVQgVFRZICAgICAgICBUSU1FIENPTU1BTkQKICAwICAx
MDAwICA1OTI2ICA4NTM1ICAyMCAgIDAgIDMyODY4IDI4Mjg0IC0gICAgICBTKyAgIHB0cy83ICAg
ICAgMDowMCBzbWxuai1zY3JpcAogIEYgICBVSUQgICBQSUQgIFBQSUQgUFJJICBOSSAgICBWU1og
ICBSU1MgV0NIQU4gIFNUQVQgVFRZICAgICAgICBUSU1FIENPTU1BTkQKICAwICAxMDAwICA1OTI2
ICA4NTM1ICAyMCAgIDAgIDMyODY4IDI4Mjg0IC0gICAgICBTKyAgIHB0cy83ICAgICAgMDowMCBz
bWxuai1zY3JpcAogIEYgICBVSUQgICBQSUQgIFBQSUQgUFJJICBOSSAgICBWU1ogICBSU1MgV0NI
QU4gIFNUQVQgVFRZICAgICAgICBUSU1FIENPTU1BTkQKICAwICAxMDAwICA1OTI2ICA4NTM1ICAy
MCAgIDAgIDMyODY4IDI4Mjg0IC0gICAgICBSKyAgIHB0cy83ICAgICAgMDowMCBzbWxuai1zY3Jp
cAogIC4uLgoKQXMgeW91IGNhbiBzZWUsIHRoZSBHQyB3YXMgYWJsZSB0byByZWNsYWltIGFib3V0
IDggTSBieXRlcyBvZiBtZW1vcnkKd2hlbiB0aGUgZXZhbExvb3Agd2FzIGV4aXRlZC4gIEJ1dCB0
aGUgcHJvZ3JhbSBzdGlsbCB1c2VzIGFyb3VuZCAzMCBNCmJ5dGVzIG9mIG1lbW9yeSBqdXN0IHRv
IGRvIHRoaXM6CgogIHdoaWxlIHRydWUgZG8gKGRvUHMoKTsgT1MuUHJvY2Vzcy5zbGVlcCAoVGlt
ZS5mcm9tU2Vjb25kcyAyKSkKCk5lZWRpbmcgMzAgTSBieXRlcyBvZiBtZW1vcnkgdG8ga2VlcCBh
cm91bmQgdGhlIGltcGxlbWVudGF0aW9uIG9mCk9TLlByb2Nlc3Muc2xlZXAsIFRpbWUuZnJvbVNl
Y29uZHMsIGFuZCBPUy5Qcm9jZXNzLnN5c3RlbSBzZWVtcyBhIGJpdAptdWNoIHRvIG1lLgoKSXMg
dGhlcmUgYW55dGhpbmcgSSBjYW4gZG8gdG8gaW1wcm92ZSBvbiB0aGlzPyAgSWRlYWxseSB3aXRo
b3V0CndyaXRpbmcgYSBoZWFwIGZpbGUgdG8gZGlzaywgd2hpY2ggaXMgYSBiaXQgZXhjZXNzaXZl
IGZvciBqdXN0CmltcGxlbWVudGluZyBzY3JpcHRpbmcuCgpGb3IgcmVmZXJlbmNlLCBJJ3ZlIGlu
Y2x1ZGVkIHRoZSByZWxldmFudCBiaXRzIG9mIHNtbG5qLXNjcmlwdCBiZWxvdy4KCj4gU2VlIHRo
ZSBjb2RlIGluCj4KPiAJYmFzZS9zeXN0ZW0vQmFzaXMvSW1wbGVtZW50YXRpb24vTkovZXhwb3J0
LnNtbAoKSnVzdCBjdXJpb3VzLCBidXQgd2hhdCBzaG91bGQgSSBiZSBzZWVpbmcgaW4gdGhpcyBm
aWxlPyAgSSBjYW4ndCBzZWUKd2hhdCBJIHNob3VsZCBiZSBsZWFybmluZyBmcm9tIGl0LgoKQnkg
dGhlIHdheSwgSSBhbSBzdGlsbCBpbnRlcmVzdGVkIGluIGFuc3dlcnMgdG8gbXkgb3RoZXIgcXVl
c3Rpb25zCihxdW90ZWQganVzdCBiZWxvdykgYmVjYXVzZSB0aGV5IGFyZSBhZGRyZXNzaW5nIG90
aGVyIHF1aXRlIGRpc3RpbmN0CnByb2JsZW1zLgoKPj4gMy4gSXMgaXMgcG9zc2libGUgdG8gcHJl
c2VydmUgc29tZSBwb3J0aW9uIG9mIHRoZSB0b3AtbGV2ZWwKPj4gICBlbnZpcm9ubWVudCBhY3Jv
c3MgYW4gZXhwb3J0Rm4/ICBJdCB3b3VsZCBiZSBlbm91Z2ggdG8gcHJlc2VydmUgdGhlCj4+ICAg
Y29uc3RydWN0b3JzIGFuZCB0eXBlIG5hbWVzIG9mIHNvbWUgZGF0YXR5cGVzIGFuZCBidWlsdC1p
biB0eXBlcywKPj4gICBzbyB0aGF0IGV2YWxTdHJlYW0gYW5kIHVzZVN0cmVhbSBjb3VsZCBzdGls
bCB3b3JrIGZvciBwYXJzaW5nLCB0eXBlCj4+ICAgY2hlY2tpbmcsIGFuZCBwcmV0dHkgcHJpbnRp
bmcgZGF0YXR5cGUgdmFsdWVzLgo+Cj4+IDQuIENhbiBzb21lb25lIHByb3ZpZGUgYW4gZXhhbXBs
ZSBvZiBjb25zdHJ1Y3RpbmcgYSBjdXN0b20gZW52aXJvbm1lbnQKPj4gICBmb3IgdXNlIHdpdGgg
ZXZhbFN0cmVhbT8gIEFueSBleGFtcGxlIHdvdWxkIGRvLiAgSSBhbHJlYWR5IGtub3cgaG93Cj4+
ICAgdG8gZG8gc29tZXRoaW5nIHRoYXQgc2VlbXMgZXF1aXZhbGVudCB0byB0aGUgdG9wLWxldmVs
IGVudmlyb25tZW50Lgo+PiAgIEl0IHdvdWxkIGJlIHBhcnRpY3VsYXJseSBuaWNlIGlmIHRoZSBl
eGFtcGxlIHNob3dlZCBob3cgdG8gaW5jbHVkZQo+PiAgIGp1c3QgZGF0YXR5cGUgY29uc3RydWN0
b3JzIGFuZCB0eXBlIG5hbWVzLgo+PiAKPj4gVGhhbmtzIGZvciB5b3VyIHRpbWUgaW4gY29uc2lk
ZXJpbmcgbXkgcXVlc3Rpb25zLiAgQW5kIGV4dHJhIHRoYW5rcwo+PiBpZiBhbnlvbmUgYW5zd2Vy
cyBldmVuIGp1c3Qgb25lIG9mIG15IHF1ZXN0aW9ucyEKPj4gCj4+IC0tIEpvZQoKVG8gYW55b25l
IHdobyB0YWtlcyB0aGUgdGltZSB0byBldmVuIGFkZCBhIHNob3J0IGFuc3dlciwgdGhhbmtzIHZl
cnkKbXVjaCEKCi0tIApKb2UKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KdGhlIHJlbGV2YW50IGJpdHMgb2YgdGhl
IE1ha2VmaWxlIHRoYXQgYnVpbGRzIHNtbG5qLXNjcmlwdDoKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQouLi4KCnNt
bG5qLXNjcmlwdDogc21sbmotc2NyaXB0LnNtbAoJVVNFX0VYUE9SVF9GTj15ZXMgc21sIHNtbG5q
LXNjcmlwdC5zbWwKCSNzbWwgc21sbmotc2NyaXB0LnNtbAoJaGVhcDJleGVjIHNtbG5qLXNjcmlw
dC54ODYtbGludXggc21sbmotc2NyaXB0CgkjICoqKiBGSVg6IG1ha2UgdGhpcyBNYWtlZmlsZSB1
c2FibGUgYnkgb3RoZXJzISAgZG9uJ3QgaGFyZC13aXJlIG9zL2FyY2ghCgouLi4KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQp0aGUgcmVsZXZhbnQgYml0cyBvZiBzbWxuai1zY3JpcHQuc21sOgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci4uLgoKKCogVGhlIHVzZXIgY2FuIHJlZGVmaW5lIGZpbmlzaEZ1bmN0aW9uIHRvIGdldCBzb21l
dGhpbmcgdG8gYmUKICAgZXZhbHVhdGVkIGFmdGVyIHVzZVN0cmVhbSBpcyBkb25lLiAgVGhlIHBv
aW50IGlzIHRoYXQgdGhpcyBhbGxvd3MKICAgdGhlIGNvbXBpbGVyIHRvIGJlIGdhcmJhZ2UgY29s
bGVjdGVkIHNvIGxvbmctcnVubmluZyBzY3JpcHRzIGRvIG5vdAogICBoYXZlIHRvIHRpZSBkb3du
IGh1Z2UgY2h1bmtzIG9mIG1lbW9yeS4gKikKdmFsIGZpbmlzaEZ1bmN0aW9uID0gcmVmIChmbiAo
KSA9PiAoKSk7CgpmdW4gZmluaXNoICgpID0KICAgICgoKiBpbnZva2luZyB0aGUgR0Mgd2l0aCBs
ZXNzIHRoYW4gdGhlIG1heGltdW0gZ2VuZXJhdGlvbiBzZWVtcyB0bwogICAgICAgIGhhdmUgbm8g
ZWZmZWN0ICopCiAgICAgU01Mb2ZOSi5JbnRlcm5hbHMuR0MuZG9HQyAodmFsT2YgSW50Lm1heElu
dCk7CiAgICAgKCogaW52b2tpbmcgdGhlIEdDIHdpdGggbWF4aW11bSBnZW5lcmF0aW9uIGp1c3Qg
b25jZSBibG93cyB1cAogICAgICAgIG1lbW9yeSB1c2FnZSBlbm9ybW91c2x5IHVudGlsIHRoZSBt
YXhpbXVtIGdlbmVyYXRpb24gaXMKICAgICAgICBjb2xsZWN0ZWQgYWdhaW4sIHNvIHdlIGRvIGl0
IHR3aWNlLiAgYXJyZ2ghICopCiAgICAgU01Mb2ZOSi5JbnRlcm5hbHMuR0MuZG9HQyAodmFsT2Yg
SW50Lm1heEludCk7CiAgICAgKCogUHJvdmlkZWQgd2UgZHVtcGVkIHdpdGggZXhwb3J0Rm4sIGF0
IHRoaXMgcG9pbnQgb24gbXkgbWFjaGluZQogICAgICAgIHRoZSBzY3JpcHQgd2lsbCBiZSB1c2lu
ZyBhYm91dCAxMCBNIGJ5dGVzIGxlc3MgdmlydHVhbCBtZW1vcnkuCiAgICAgICAgVGhlIHJlc2lk
ZW50IHNldCBzaXplIHdpbGwgc29tZXRpbWVzIGhhdmUgZGVjcmVhc2VkLiAqKQogICAgICEgZmlu
aXNoRnVuY3Rpb24gKCk7CiAgICAgT1MuUHJvY2Vzcy5leGl0IE9TLlByb2Nlc3Muc3VjY2VzcykK
CigqIG5vIHNlbWljb2xvbiBoZXJlIGRlbGliZXJhdGVseSB0byBhdm9pZCBhZGRpbmcgdG8gdG9w
LWxldmVsIGVudmlyb25tZW50ICopCgooKiBXZSBkZWZpbmUgaGVyZSBhIHNlcGFyYXRlIGZ1bmN0
aW9uIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCBleHBvcnRGbgogICBzbyB0aGF0IHdlIGNhbiBlYXNp
bHkgc3dpdGNoIHRoZSBpbXBsZW1lbnRhdGlvbiBiZXR3ZWVuIGV4cG9ydE1MIGFuZAogICBleHBv
cnRGbi4gKikKZnVuIG1haW4gKF8sIF8gKCogaWdub3JlIHRoaXMgd2hpY2ggc2hvdWxkIGJlIGEg
Y29weSBvZiBTTUxvZk5KLmdldEFyZ3MgKCkgKikpID0KICAgIGxldCAoKiAqKiogZ2l2ZSBuaWNl
IGVycm9yIG1lc3NhZ2UgaWYgdGhlcmUgaXMgbm90IGF0IGxlYXN0IDEgYXJndW1lbnQuICopCiAg
ICAgICAgKCogQ29tbWFuZExpbmUuYXJndW1lbnRzIGRvZXMgdGhlIHNhbWUgYXMgU01Mb2ZOSi5n
ZXRBcmdzLiAqKQogICAgICAgIHZhbCBmID0gVGV4dElPLm9wZW5JbiAoaGQgKFNNTG9mTkouZ2V0
QXJncyAoKSkpCiAgICBpbiBTTUxvZk5KLnNoaWZ0QXJncyAoKTsKICAgICAgICgqIHNraXAgb3Zl
ciAjISBsaW5lICopCiAgICAgICAoKiAqKiogY2hlY2sgdGhhdCAjISBsaW5lIGlzIG9mIGNvcnJl
Y3QgZm9ybSAqKQogICAgICAgVGV4dElPLmlucHV0TGluZSBmOwogICAgICAgKCogKioqIGZpbmQg
d2F5IHRvIGZpeCBlcnJvciBtZXNzYWdlcyB0byBtZW50aW9uIGNvcnJlY3QgZmlsZSBuYW1lIGFu
ZCBsaW5lIG51bWJlciEgKikKICAgICAgIEJhY2tlbmQuSW50ZXJhY3QudXNlU3RyZWFtIGY7CiAg
ICAgICBUZXh0SU8uY2xvc2VJbiBmOwogICAgICAgKCogdGFpbCBjYWxsLCBob3BlZnVsbHkgZnJl
ZWluZyB0aGUgY2xvc3VyZSBmb3IgdGhpcyBmdW5jdGlvbiAobWFpbikhICopCiAgICAgICBmaW5p
c2ggKCkKICAgIGVuZAoKKCogbm8gc2VtaWNvbG9uIGhlcmUgZGVsaWJlcmF0ZWx5IHRvIGF2b2lk
IGFkZGluZyB0byB0b3AtbGV2ZWwgZW52aXJvbm1lbnQgKikKCnZhbCBzY3JpcHRJbnRlcnByZXRl
ckZpbGUgPSAic21sbmotc2NyaXB0IgoKKCogbm8gc2VtaWNvbG9uIGhlcmUgZGVsaWJlcmF0ZWx5
IHRvIGF2b2lkIGFkZGluZyB0byB0b3AtbGV2ZWwgZW52aXJvbm1lbnQgKikKCigqIFRoaXMgYWxs
b3dzIHRoZSBNYWtlZmlsZSB0byBkZWNpZGUgaG93IHRvIGR1bXAgdGhlIGhlYXAuICopCnZhbCB1
c2VFeHBvcnRNTCA9IG5vdCAoaXNTb21lIChPUy5Qcm9jZXNzLmdldEVudiAiVVNFX0VYUE9SVF9G
TiIpKQoKKCogbm8gc2VtaWNvbG9uIGhlcmUgZGVsaWJlcmF0ZWx5IHRvIGF2b2lkIGFkZGluZyB0
byB0b3AtbGV2ZWwgZW52aXJvbm1lbnQgKikKCnZhbCAoKSA9IGlmIHVzZUV4cG9ydE1MCiAgICAg
ICAgIHRoZW4gaWYgKHByaW50ICJkdW1waW5nIHdpdGggZXhwb3J0TUxcbiI7CiAgICAgICAgICAg
ICAgICAgIFNNTG9mTkouZXhwb3J0TUwgc2NyaXB0SW50ZXJwcmV0ZXJGaWxlKQogICAgICAgICAg
ICAgIHRoZW4gaWdub3JlIChtYWluIChTTUxvZk5KLmdldENtZE5hbWUgKCksIFNNTG9mTkouZ2V0
QXJncyAoKSkpCiAgICAgICAgICAgICAgZWxzZSBPUy5Qcm9jZXNzLmV4aXQgT1MuUHJvY2Vzcy5z
dWNjZXNzCiAgICAgICAgIGVsc2UgKHByaW50ICJkdW1waW5nIHdpdGggZXhwb3J0Rm5cbiI7CiAg
ICAgICAgICAgICAgIFNNTG9mTkouZXhwb3J0Rm4gKHNjcmlwdEludGVycHJldGVyRmlsZSwgbWFp
bikpCgoKLS0gCkhlcmlvdC1XYXR0IFVuaXZlcnNpdHkgaXMgYSBTY290dGlzaCBjaGFyaXR5CnJl
Z2lzdGVyZWQgdW5kZXIgY2hhcml0eSBudW1iZXIgU0MwMDAyNzguCgoKLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCkNvbWUgYnVpbGQgd2l0aCB1cyEgVGhlIEJsYWNrQmVycnkoUikgRGV2ZWxvcGVyIENv
bmZlcmVuY2UgaW4gU0YsIENBCmlzIHRoZSBvbmx5IGRldmVsb3BlciBldmVudCB5b3UgbmVlZCB0
byBhdHRlbmQgdGhpcyB5ZWFyLiBKdW1wc3RhcnQgeW91cgpkZXZlbG9waW5nIHNraWxscywgdGFr
ZSBCbGFja0JlcnJ5IG1vYmlsZSBhcHBsaWNhdGlvbnMgdG8gbWFya2V0IGFuZCBzdGF5IAphaGVh
ZCBvZiB0aGUgY3VydmUuIEpvaW4gdXMgZnJvbSBOb3ZlbWJlciA5IC0gMTIsIDIwMDkuIFJlZ2lz
dGVyIG5vdyEKaHR0cDovL3Auc2YubmV0L3NmdS9kZXZjb25mZXJlbmNlCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClNtbG5qLWxpc3QgbWFpbGluZyBsaXN0
ClNtbG5qLWxpc3RAbGlzdHMuc291cmNlZm9yZ2UubmV0Cmh0dHBzOi8vbGlzdHMuc291cmNlZm9y
Z2UubmV0L2xpc3RzL2xpc3RpbmZvL3NtbG5qLWxpc3QK