[Python-Dev] fileno function in file objects - Interfaces Scarecrow

Ken Manheimer klm@digicool.com
Tue, 19 Sep 2000 14:25:04 -0400 (EDT)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

---1529346232-299838580-969387904=:24497
Content-Type: TEXT/PLAIN; charset=US-ASCII

Incidentally...

On Tue, 19 Sep 2000, Barry A. Warsaw wrote:

> >>>>> "GvR" == Guido van Rossum <guido@beopen.com> writes:
> 
>     GvR> Note that this (and other, similar issues) is all because
>     GvR> Python doesn't have a standard class hierarchy.
> 
> Or a formal interface mechanism.

Incidentally, jim/Zope is going forward with something like the interfaces
strawman - the "scarecrow" - that jim proposed at IPC?7?.  I don't know if
a PEP would have made any sense for 2.x, so maybe it's just as well we
haven't had time.  In the meanwhile, DC will get a chance to get
experience with and refine it... 

Anyway, for anyone that might be interested, i'm attaching a copy of
python/lib/Interfaces/README.txt from a recent Zope2 checkout.  I was
pretty enthusiastic about it when jim originally presented the scarecrow,
and on skimming it now it looks very cool.  (I'm not getting it all on my
quick peruse, and i suspect there's some contortions that wouldn't be
necessary if it were happening more closely coupled with python
development - but what jim sketches out is surprising sleek,
regardless...)

ken
klm@digicool.com

---1529346232-299838580-969387904=:24497
Content-Type: TEXT/plain; name="README.txt"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.4.21.0009191425040.24497@korak.digicool.com>
Content-Description: Interfaces README.txt - the Scarecrow
Content-Disposition: attachment; filename="README.txt"

UHl0aG9uIEludGVyZmFjZXMgLSBUaGUgU2NhcmVjcm93IEltcGxlbWVudGF0
aW9uDQoNClRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIG15IGltcGxlbWVudGF0
aW9uIG9mIHRoZSBQeXRob24gaW50ZXJmYWNlcw0Kc2NhcmVjcm93IHByb3Bv
c2FsLiAgDQoNClN0YXR1cw0KDQogIFRoaXMgaXMgYSBmaXJzdC1jdXQgaW1w
bGVtZW50YXRpb24gb2YgdGhlIHByb3Bvc2FsLiAgTXkgcHJpbWFyeSBnb2Fs
DQogIGlzIHRvIHNoZWQgbGlnaHQgb24gc29tZSBpZGVhcyBhbmQgdG8gcHJv
dmlkZSBhIGZyYW1ld29yayBmb3INCiAgY29uY3JldGUgZGlzY3Vzc2lvbi4N
Cg0KICBUaGlzIGltcGxlbWVudGF0aW9uIGhhcyBoYWQgbWluaW1hbCB0ZXN0
aW5nLiBJIGV4cGVjdCBtYW55IGFzcGVjdHMNCiAgb2YgdGhlIGltcGxlbWVu
dGF0aW9uIHRvIGV2b2x2ZSBvdmVyIHRpbWUuDQoNCkJhc2ljIGFzc3VtcHRp
b25zOg0KDQogIEludGVyZmFjZXMgYXJlICpub3QqIGNsYXNzZXM6DQogICAg
DQogICAgbyBJbnRlcmZhY2VzIGhhdmUgdGhlaXIgb3duICJoaWVyYXJjaHki
IChEQUcgcmVhbGx5KQ0KICAgIA0KICAgIG8gSW50ZXJmYWNlcyBhcmUgb2Jq
ZWN0cyB0aGF0IHByb3ZpZGUgYSBwcm90b2NvbCBmb3INCiAgICAJcXVlcnlp
bmcgYXR0cmlidXRlcyAoaW5jbHVkaW5nIG1ldGhvZHMpIGRlZmluZWQgYnkg
YW4NCiAgICAJYW4gaW50ZXJmYWNlOg0KICAgIA0KICAgIAkgIG5hbWVzKCkg
LS0gcmV0dXJuIGEgc2VxdWVuY2Ugb2YgZGVmaW5lZCBuYW1lcw0KICAgIA0K
ICAgIAkgIGdldERlc2NyaXB0aW9uRm9yKG5hbWUsIFtkZWZhdWx0XSkgLS0N
CiAgICAJICAgICBHZXQgYSBkZXNjcmlwdGlvbiBvZiBhIG5hbWUuDQogICAg
DQogICAgbyBZb3UgY2Fubm90IG1peCBpbnRlcmZhY2VzIGFuZCBjbGFzc2Vz
IGluIGJhc2UtY2xhc3MgbGlzdHMuDQogICAgDQogIFRoZXJlIGFyZSB1dGls
aXRpZXMgYW5kIG1ldGhvZHMgZm9yIGNvbXB1dGluZyBpbXBsaWVkIGludGVy
ZmFjZXMNCiAgZnJvbSBjbGFzc2VzIGFuZCBmb3IgY29tcHV0aW5nICJkZWZl
cnJlZCIgY2xhc3NlcyBmcm9tIGludGVyZmFjZXMuDQoNCiAgV2h5IGFyZW4n
dCBpbnRlcmZhY2UgY2xhc3Nlcz8gIEludGVyZmFjZXMgcGVyZm9ybSBhIGRp
ZmZlcmVudA0KICBmdW5jdGlvbiB0aGF0IGNsYXNzZXMuICBDbGFzc2VzIGFy
ZSBmb3Igc2hhcmluZyBpbXBsZW1lbnRhdGlvbi4NCiAgSW50ZXJmYWNlcyBh
cmUgZm9yIGRlbm90aW5nLCBkZWZpbmluZywgYW5kIGRvY3VtZW50aW5nIGFi
c3RyYWN0DQogIGJlaGF2aW9yLiAgICAgIA0KDQpEZXRhaWxzDQoNCiAgU29m
dHdhcmUgbGF5b3V0DQoNCiAgICBUaGVyZSBpcyBhbiAnSW50ZXJmYWNlJyBw
YWNrYWdlIHRoYXQgZXhwb3J0cyBhIHZhcmlldHkgb2YgdXNlZnVsDQogICAg
ZmFjaWxpdGllcy4gIFRoZXNlIGFyZSBkZXNjcmliZWQgYmVsb3cuDQoNCiAg
Q3JlYXRpbmcgSW50ZXJmYWNlcw0KDQogICAgSW50ZXJmYWNlcyBjYW4gYmUg
Y3JlYXRlZCBpbiBzZXZlcmFsIHdheXMuICBUaGUgY2xhc3Mgc3RhdGVtZW50
DQogICAgY2FuIGJlIHVzZWQgd2l0aCBvbmUgb3IgbW9yZSBpbnRlcmZhY2Vz
IHByb3ZpZGVkIGFzIGJhc2UgY2xhc3Nlcy4NCiAgICBUaGlzIGFwcHJvYWNo
IGlzIGNvbnZlbmllbnQsIHN5bnRhY3RpY2FsbHksIGFsdGhvdWdoIGl0IGlz
IGENCiAgICBsaXR0bGUgbWlzbGVhZGluZywgc2luY2UgaW50ZXJmYWNlcyBh
cmUgKm5vdCogY2xhc3Nlcy4gIEEgbWluaW1hbA0KICAgIGludGVyZmFjZSB0
aGF0IGNhbiBiZSB1c2VkIGFzIGEgYmFzZSBpcyBJbnRlcmZhY2UuQmFzZS4N
CiAgDQogICAgWW91IGNhbiBhbHNvIGNhbGwgSW50ZXJmYWNlLm5ldzoNCiAg
DQogICAgICBuZXcobmFtZSwgW2Jhc2VzLCBhdHRycywgX19kb2NfX10pIC0t
DQogIA0KCUNyZWF0ZSBhIG5ldyBpbnRlcmZhY2UuICBUaGUgYXJndW1lbnRz
IGFyZToNCiAgDQoJICBuYW1lIC0tIHRoZSBpbnRlcmZhY2UgbmFtZQ0KICAN
CgkgIGJhc2VzIC0tIGEgc2VxdWVuY2Ugb2YgImJhc2UiIGludGVyZmFjZXMu
ICBCYXNlIGludGVyZmFjZXMNCgkgICAgYXJlICJleHRlbmRlZCIgYnkgdGhl
IG5ldyBpbnRlcmZhY2UuDQogIA0KCSAgYXR0cnMgLS0gYW4gb2JqZWN0IHRo
YXQgY29uZm9ybXMgdG8NCgkgICAgJ0ludGVyZmFjZXMuU3RhbmRhcmQuRGlj
dGlvbmFyeScgdGhhdCBwcm92aWRlcyBhdHRyaWJ1dGVzDQoJICAgIGRlZmlu
ZWQgYnkgYW4gaW50ZXJmYWNlLiAgVGhlIGF0dHJpYnV0ZXMgc2hvdWxkIGJl
DQoJICAgICdJbnRlcmZhY2UuQXR0cmlidXRlIG9iamVjdHMnLg0KICANCiAg
ICBGaW5hbGx5IHlvdSBjYW4gY29tcHV0ZSBhbiBpbXBsaWVkIGludGVyZmFj
ZSBmcm9tIGEgY2xhc3MgYnkgY2FsbGluZw0KICAgICdJbnRlcmZhY2UuaW1w
bGllZEludGVyZmFjZSc6IA0KICANCiAgICAgIGltcGxpZWRJbnRlcmZhY2Uo
a2xhc3MsIFtfX25hbWVfXywgX19kb2NfX10pDQogIA0KCSBrbGFzcyAtLSBh
IGNsYXNzIGZyb20gd2hpY2ggdG8gY3JlYXRlIGFuIGludGVyZmFjZS4NCiAg
DQoJIF9fbmFtZV9fIC0tIFRoZSBuYW1lIG9mIHRoZSBpbnRlcmZhY2UuICBU
aGUgZGVmYXVsdCBuYW1lIGlzIHRoZQ0KCSAgICBjbGFzcyBuYW1lIHdpdGgg
dGhlIHN1ZmZpeCAiSW50ZXJmYWNlIi4NCiAgDQoJX19kb2NfXyAtLSBhIGRv
YyBzdHJpbmcgZm9yIHRoZSBpbnRlcmZhY2UuICBUaGUgZGVmYXVsdCBkb2MN
CgkgICAgc3RyaW5nIGlzIHRoZSBjbGFzcyBkb2Mgc3RyaW5nLg0KICANCglU
aGUgZ2VuZXJhdGVkIGludGVyZmFjZSBoYXMgYXR0cmlidXRlcyBmb3IgZWFj
aCBwdWJsaWMgbWV0aG9kDQoJZGVmaW5lZCBpbiBvciBpbmhlcml0ZWQgYnkg
dGhlIGludGVyZmFjZS4gQSBtZXRob2QgaXMgY29uc2lkZXJlZA0KCXB1Ymxp
YyBpZiBpdCBoYXMgYSBub24tZW1wdHkgZG9jIHN0cmluZyBhbmQgaWYgaXQn
cyBuYW1lIGRvZXMNCglub3QgYmVnaW4gd2l0aCAnXycgb3IgZG9lcyBiZWdp
biBhbmQgZW5kIHdpdGggJ19fJyBhbmQgaXMNCglncmVhdGVyIHRoYW4gNCBj
aGFyYWN0ZXJzIGluIGxlbmd0aC4NCiAgDQogICAgTm90ZSB0aGF0IGNvbXB1
dGluZyBhbiBpbnRlcmZhY2UgZnJvbSBhIGNsYXNzIGRvZXMgbm90IGF1dG9t
YXRpY2FsbHkNCiAgICBhc3NlcnQgdGhhdCB0aGUgY2xhc3MgaW1wbGVtZW50
cyBhbiBpbnRlcmZhY2UuDQoNCiAgICBIZXJlJ3MgYW4gZXhhbXBsZToNCg0K
ICAgICAgY2xhc3MgWDoNCg0KICAgICAgICBkZWYgZm9vKHNlbGYsIGEsIGIp
Og0KICAgICAgICAgIC4uLg0KDQogICAgICBYSW50ZXJmYWNlPUludGVyZmFj
ZS5pbXBsaWVkSW50ZXJmYWNlKFgpDQogICAgICBYLl9faW1wbGVtZW50c19f
PVhJbnRlcmZhY2UNCg0KICBJbnRlcmZhY2UgYXNzZXJ0aW9ucw0KDQogICAg
T2JqZWN0cyBjYW4gYXNzZXJ0IHRoYXQgdGhleSBpbXBsZW1lbnQgb25lIG9y
IG1vcmUgaW50ZXJmYWNlcy4NCiAgICBUaGV5IGRvIHRoaXMgYnkgYnkgZGVm
aW5pbmcgYW4gJ19faW50ZXJmYWNlc19fJyBhdHRyaWJ1dGUgdGhhdCBpcw0K
ICAgIGJvdW5kIHRvIGFuIGludGVyZmFjZSBhc3NlcnRpb24uDQoNCiAgICBB
biAqaW50ZXJmYWNlIGFzc2VydGlvbiogaXMgZWl0aGVyOiANCg0KICAgICAg
LSBhbiBJbnRlcmZhY2Ugb3INCg0KICAgICAgLSBhIHNlcXVlbmNlIG9mIGlu
dGVyZmFjZSBhc3NlcnRpb25zLg0KDQogICAgSGVyZSBhcmUgc29tZSBleGFt
cGxlcyBvZiBpbnRlcmZhY2UgYXNzZXJ0aW9uczoNCg0KICAgICAgSTENCg0K
ICAgICAgSTEsIEkyDQoNCiAgICAgIEkxLCAoSTIsIEkzKQ0KDQogICAgd2hl
cmUgSTEsIEkyLCBhbmQgSTMgYXJlIGludGVyZmFjZXMuDQoNCiAgICBDbGFz
c2VzIG1heSBwcm92aWRlIChkZWZhdWx0KSBhc3NlcnRpb25zIGZvciB0aGVp
ciBpbnN0YW5jZXMNCiAgICAoYW5kIHN1YmNsYXNzIGluc3RhbmNlcykuICBU
aGUgdXN1YWwgaW5oZXJpdGFuY2UgcnVsZXMgYXBwbHkuDQogICAgTm90ZSB0
aGF0IHRoZSBkZWZpbml0aW9uIG9mIGludGVyZmFjZSBhc3NlcnRpb25zIG1h
a2VzIGNvbXBvc2l0aW9uDQogICAgb2YgaW50ZXJmYWNlcyBzdHJhaWdodGZv
cndhcmQuICBGb3IgZXhhbXBsZToNCg0KICAgICAgY2xhc3MgQToNCg0KICAg
ICAgICBfX2ltcGxlbWVudHNfXyA9IEkxLCBJMiANCg0KICAgICAgICAuLi4N
Cg0KICAgICAgY2xhc3MgQg0KDQogICAgICAgIF9faW1wbGVtZW50c19fID0g
STMsIEk0DQoNCiAgICAgIGNsYXNzIEMoQS4gQik6DQogICAgICAgIC4uLg0K
DQogICAgICBjbGFzcyBEOg0KICAgICAgICANCiAgICAgICAgX19pbXBsZW1l
bnRzX18gPSBJNQ0KDQogICAgICBjbGFzcyBFOg0KDQogICAgICAgIF9faW1w
bGVtZW50c19fID0gSTUsIEEuX19pbXBsZW1lbnRzX18NCiAgICAgIA0KICBT
cGVjaWFsLWNhc2UgaGFuZGxpbmcgb2YgY2xhc3Nlcw0KDQogICAgU3BlY2lh
bCBoYW5kbGluZyBpcyByZXF1aXJlZCBmb3IgUHl0aG9uIGNsYXNzZXMgdG8g
bWFrZSBhc3NlcnRpb25zDQogICAgYWJvdXQgdGhlIGludGVyZmFjZXMgYSBj
bGFzcyBpbXBsZW1lbnRzLCBhcyBvcHBvc2VkIHRvIHRoZQ0KICAgIGludGVy
ZmFjZXMgdGhhdCB0aGUgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcyBpbXBsZW1l
bnQuICBZb3UgY2Fubm90DQogICAgc2ltcGx5IGRlZmluZSBhbiAnX19pbXBs
ZW1lbnRzX18nIGF0dHJpYnV0ZSBmb3IgdGhlIGNsYXNzIGJlY2F1c2UNCiAg
ICBjbGFzcyAiYXR0cmlidXRlcyIgYXBwbHkgdG8gaW5zdGFuY2VzLg0KDQog
ICAgQnkgZGVmYXVsdCwgY2xhc3NlcyBhcmUgYXNzdW1lZCB0byBpbXBsZW1l
bnQgdGhlIEludGVyZmFjZS5TdGFuZGFyZC5DbGFzcw0KICAgIGludGVyZmFj
ZS4gIEEgY2xhc3MgbWF5IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJ5IHByb3Zp
ZGluZyBhDQogICAgJ19fY2xhc3NfaW1wbGVtZW50c19fJyBhdHRyaWJ1dGUg
d2hpY2ggd2lsbCBiZSB0cmVhdGVkIGFzIGlmIGl0IHdlcmUNCiAgICB0aGUg
J19faW1wbGVtZW50c19fJyBhdHRyaWJ1dGUgb2YgdGhlIGNsYXNzLg0KDQog
IFRlc3RpbmcgYXNzZXJ0aW9ucw0KDQogICAgWW91IGNhbiB0ZXN0IHdoZXRo
ZXIgYW4gb2JqZWN0IGltcGxlbWVudHMgYW4gaW50ZXJmYWNlIGJ5IGNhbGxp
bmcNCiAgICB0aGUgJ2ltcGxlbWVudGVkQnknIG1ldGhvZCBvZiB0aGUgaW50
ZXJmYWNlIGFuZCBwYXNzaW5nIHRoZQ0KICAgIG9iamVjdDo6DQoNCiAgICAg
IEkxLmltcGxlbWVudGVkQnkoeCkNCg0KICAgIFNpbWlsYXJseSwgeW91IGNh
biB0ZXN0IHdoZXRoZXIsIGJ5IGRlZmF1bHQsIGluc3RhbmNlcyBvZiBhIGNs
YXNzDQogICAgaW1wbGVtZW50IGFuIGludGVyZmFjZSBieSBjYWxsaW5nIHRo
ZSAnaW1wbGVtZW50ZWRCeUluc3RhbmNlc09mJw0KICAgIG1ldGhvZCBvbiB0
aGUgaW50ZXJmYWNlIGFuZCBwYXNzaW5nIHRoZSBjbGFzczo6DQogIA0KICAg
ICAgSTEuaW1wbGVtZW50ZWRCeUluc3RhbmNlc09mKEEpDQoNCiAgVGVzdGlu
ZyBpbnRlcmZhY2VzDQoNCiAgICBZb3UgY2FuIHRlc3Qgd2hldGhlciBvbmUg
aW50ZXJmYWNlIGV4dGVuZHMgYW5vdGhlciBieSBjYWxsaW5nIHRoZQ0KICAg
IGV4dGVuZHMgbWV0aG9kIG9uIGFuIGludGVyZmFjZToNCg0KICAgICAgSTEu
ZXh0ZW5kcyhJMikNCg0KICAgIE5vdGUgdGhhdCBhbiBpbnRlcmZhY2UgZG9l
cyBub3QgZXh0ZW5kIGl0c2VsZi4NCg0KICBJbnRlcmZhY2UgYXR0cmlidXRl
cw0KDQogICAgVGhlIHB1cnBvc2Ugb2YgYW4gaW50ZXJmYWNlIGlzIHRvIGRl
c2NyaWJlIGJlaGF2aW9yLCBub3QgdG8NCiAgICBwcm92aWRlIGltcGxlbWVu
dGF0aW9uLiAgSW4gYSBzaW1pbGFyIGZhc2hpb24gdGhlIGF0dHJpYnV0ZXMg
b2YNCiAgICBhbiBpbnRlcmZhY2UgZGVzY3JpYmUgYW5kIGRvY3VtZW50IHRo
ZSBhdHRyaWJ1dGVzIHByb3ZpZGVkIGJ5IGFuDQogICAgb2JqZWN0IHRoYXQg
aW1wbGVtZW50cyB0aGUgaW50ZXJmYWNlLg0KDQogICAgVGhlcmUgYXJlIGN1
cnJlbnRseSB0d28ga2luZHMgb2Ygc3VwcG9ydGVkIGF0dHJpYnV0ZXM6DQoN
CiAgICAgIEludGVyZmFjZS5BdHRyaWJ1dGUgLS0gVGhlIG9iamVjdHMgZGVz
Y3JpYmUgaW50ZXJmYWNlDQogICAgICAgIGF0dHJpYnV0ZXMuICBUaGV5IGRl
ZmluZSBhdCBsZWFzdCBuYW1lcyBhbmQgZG9jIHN0cmluZ3MgYW5kDQogICAg
ICAgIG1heSBkZWZpbmUgb3RoZXIgaW5mb3JtYXRpb24gYXMgd2VsbC4NCg0K
ICAgICAgSW50ZXJmYWNlLk1ldGhvZCAtLSBUaGVzZSBhcmUgaW50ZXJmYWNl
IGF0dHJpYnV0ZXMgdGhhdA0KICAgICAgICBkZXNjcmliZSBtZXRob2RzLiAg
VGhleSAqbWF5KiBkZWZpbmUgaW5mb3JtYXRpb24gYWJvdXQgbWV0aG9kDQog
ICAgICAgIHNpZ25hdHVyZXMuIChOb3RlIE1ldGhvZHMgYXJlIGtpbmRzIG9m
IEF0dHJpYnV0ZXMuKQ0KDQogICAgV2hlbiBhIGNsYXNzIHN0YXRlbWVudCBp
cyB1c2VkIHRvIGRlZmluZSBhbiBpbnRlcmZhY2UsIG1ldGhvZA0KICAgIGRl
ZmluaXRpb25zIG1heSBiZSBwcm92aWRlZC4gIFRoZXNlIGdldCBjb252ZXJ0
ZWQgdG8gTWV0aG9kDQogICAgb2JqZWN0cyBkdXJpbmcgaW50ZXJmYWNlIGNy
ZWF0aW9uLiAgRm9yIGV4YW1wbGU6DQoNCiAgICAgIGNsYXNzIEkxKEludGVy
ZmFjZS5CYXNlKToNCiAgICAgICAgIA0KICAgICAgICBfX25hbWVfXz1BdHRy
aWJ1dGUoIlRoZSBvYmplY3QncyBuYW1lIikNCg0KICAgICAgICBkZWYgZm9v
KHNlbGYsIGEsIGIpOg0KICAgICAgICAgICAiYmxhaCBibGFoIg0KDQogICAg
ZGVmaW5lcyBhbiBpbnRlcmZhY2UsICdJMScgdGhhdCBoYXMgdHdvIGF0dHJp
YnV0ZXMsICdfX25hbWVfXycgYW5kDQogICAgJ2ZvbycuIFRoZSBhdHRyaWJ1
dGUgJ2ZvbycgaXMgYSBNZXRob2QgaW5zdGFuY2UuICBJdCBpcyAqbm90KiBh
DQogICAgUHl0aG9uIG1ldGhvZC4NCg0KICAgIEl0IGlzIG15IGV4cGVjdGF0
aW9uIHRoYXQgQXR0cmlidXRlIG9iamVjdHMgd2lsbCBldmVudHVhbGx5IGJl
DQogICAgYWJsZSB0byBwcm92aWRlIGFsbCBzb3J0cyBvZiBpbnRlcmVzdGlu
ZyBtZXRhLWRhdGEuICANCg0KICBEZWZlcnJlZCBjbGFzc2VzDQoNCiAgICBZ
b3UgY2Fubm90IHVzZSBpbnRlcmZhY2VzIGFzIGJhc2UgY2xhc3Nlcy4gIFlv
dSBjYW4sIGhvd2V2ZXIsIA0KICAgIGNyZWF0ZSAiZGVmZXJyZWQiIGNsYXNz
ZXMgZnJvbSBhbiBpbnRlcmZhY2U6DQoNCiAgICAgIGNsYXNzIFN0YWNrSW50
ZXJmYWNlKEludGVyZmFjZS5CYXNlKToNCg0KICAgICAgICAgZGVmIHB1c2go
c2VsZiwgdik6DQogICAgICAgICAgICAiQWRkIGEgdmFsdWUgdG8gdGhlIHRv
cCBvZiBhIHN0YWNrIg0KDQogICAgICAgICBkZWYgcG9wKHNlbGYpOg0KICAg
ICAgICAgICAgIlJlbW92ZSBhbmQgcmV0dXJuIGFuIG9iamVjdCBmcm9tIHRo
ZSB0b3Agb2YgdGhlIHN0YWNrIg0KDQogICAgICBjbGFzcyBTdGFjayhTdGFj
a0ludGVyZmFjZS5kZWZlcnJlZCgpKToNCiAgICAgICAgICJUaGlzIGlzIHN1
cHBvc2VkIHRvIGltcGxlbWVudCBhIHN0YWNrIg0KDQogICAgICAgICBfX2lt
cGxlbWVudHNfXz1TdGFja0ludGVyZmFjZQ0KDQogICAgQXR0ZW1wdHMgdG8g
Y2FsbCBtZXRob2RzIGluaGVyaXRlZCBmcm9tIGEgZGVmZXJyZWQgY2xhc3Mg
d2lsbA0KICAgIHJhaXNlIEludGVyZmFjZS5Ccm9rZW5JbXBsZW1lbnRhdGlv
biBleGNlcHRpb25zLg0KDQogIFRyaWFsIGJhbGxvb246IGFic3RyYWN0IGlt
cGxlbWVudGF0aW9ucw0KDQogICAgVGltIFBldGVycyBoYXMgZXhwcmVzc2Vk
IHRoZSBkZXNpcmUgdG8gcHJvdmlkZSBhYnN0cmFjdA0KICAgIGltcGxlbWVu
dGF0aW9ucyBpbiBpbnRlcmZhY2UgZGVmaW5pdGlvbnMsIHdoZXJlLCBwcmVz
dW1hYmx5LCBhbg0KICAgIGFic3RyYWN0IGltcGxlbWVudGF0aW9uIHVzZXMg
b25seSBmZWF0dXJlcyBkZWZpbmVkIGJ5IHRoZQ0KICAgIGludGVyZmFjZS4N
Cg0KICAgIFBlcmhhcHMgaWYgYSBtZXRob2QgZGVmaW5pdGlvbiBoYXMgYSBi
b2R5IChvdGhlciB0aGFuIGEgZG9jDQogICAgc3RyaW5nKSwgdGhlbiB0aGUg
Y29ycmVzcG9uZGluZyBtZXRob2QgaW4gdGhlIGRlZmVycmVkIGNsYXNzDQog
ICAgd2lsbCBub3QgYmUgZGVmZXJyZWQuIFRoaXMgd291bGQgbm90IGJlIGhh
cmQgdG8gZG8gaW4gQ1B5dGhvbg0KICAgIGlmIEkgY2hlYXQgYW5kIHNuaWZm
IGF0IG1ldGhvZCBieXRlY29kZXMuDQoNCiAgICBGb3IgZXhhbXBsZToNCg0K
ICAgICAgY2xhc3MgTGlzdEludGVyZmFjZShJbnRlcmZhY2UuU3RhbmRhcmQu
TXV0YWJsZVNlcXVlbmNlKToNCg0KICAgICAgICBkZWYgYXBwZW5kKHNlbGYs
IHYpOg0KICAgICAgICAgICAiYWRkIGEgdmFsdWUgdG8gdGhlIGVuZCBvZiB0
aGUgb2JqZWN0Ig0KDQoJZGVmIHB1c2goc2VsZiwgdik6DQogICAgICAgICAg
ICJhZGQgYSB2YWx1ZSB0byB0aGUgZW5kIG9mIHRoZSBvYmplY3QiDQogICAg
ICAgICAgIHNlbGYuYXBwZW5kKHYpDQoNCiAgICAgIExpc3RCYXNlPUxpc3RJ
bnRlcmZhY2UuZGVmZXJyZWQoKQ0KDQogICAgICBjbGFzcyBMaXN0SW1wbGVt
ZW50ZXIoTGlzdGJhc2UpOg0KICAgICAgICAgZGVmIGFwcGVuZChzZWxmLCB2
KTogLi4uDQoNCiAgICBJbiB0aGlzIGV4YW1wbGUsIHdlIGNhbiBjcmVhdGUg
YSBiYXNlIGNsYXNzLCBMaXN0QmFzZSwgdGhhdCBwcm92aWRlcyBhbg0KICAg
IGFic3RyYWN0IGltcGxlbWVudGF0aW9uIG9mICdwdXNoJyBhbmQgYW4gaW1w
bGVtZW50YXRpb24gb2YgYXBwZW5kDQogICAgdGhhdCByYWlzZXMgYW4gZXJy
b3IgaWYgbm90IG92ZXJyaWRkZW4uDQoNCiAgU3RhbmRhcmQgaW50ZXJmYWNl
cw0KDQogICAgVGhlIG1vZHVsZSBJbnRlcmZhY2UuU3RhbmRhcmQgZGVmaW5l
cyBpbnRlcmZhY2VzIGZvciBzdGFuZGFyZA0KICAgIHB5dGhvbiBvYmplY3Rz
Lg0KDQogICAgVGhpcyBtb2R1bGUgYW5kIHRoZSBtb2R1bGVzIGl0IHVzZXMg
bmVlZCBhIGxvdCBtb3JlIHdvcmshDQoNCiAgSGFuZGxpbmcgZXhpc3Rpbmcg
YnVpbHQtaW4gdHlwZXMNCg0KICAgIEEgaGFjayBpcyBwcm92aWRlZCB0byBh
bGxvdyBpbXBsZW1lbnRhdGlvbiBhc3NlcnRpb25zIHRvIGJlIG1hZGUNCiAg
ICBmb3IgYnVpbHRpbiB0eXBlcy4gIEludGVyZmFjZXMuYXNzZXJ0VHlwZUlt
cGxlbWVudHMgY2FuIGJlIGNhbGxlZA0KICAgIHRvIGFzc2VydCB0aGF0IGlu
c3RhbmNlcyBvZiBhIGJ1aWx0LWluIHR5cGUgaW1wbGVtZW50IG9uZSBvciBt
b3JlDQogICAgaW50ZXJmYWNlczo6DQoNCiAgICAgICBVdGlsLmFzc2VydFR5
cGVJbXBsZW1lbnRzKA0KICAgICAgICAgdHlwZSgxTCksIA0KICAgICAgICAg
KEFicml0cmFyeVByZWNpc2lvbiwgQml0TnVtYmVyLCBTaWduZWQpKQ0KDQpJ
c3N1ZXMNCg0KICBvIFdoYXQgc2hvdWxkIHRoZSBvYmplY3RzIHRoYXQgZGVm
aW5lIGF0dHJpYnV0ZXMgbG9vayBsaWtlPw0KICAgIFRoZXkgc2hvdWxkbid0
ICpiZSogdGhlIGF0dHJpYnV0ZXMsIGJ1dCBzaG91bGQgZGVzY3JpYmUgdGhl
DQogICAgdGhlIGF0dHJpYnV0ZXMuDQoNCiAgICBOb3RlIHRoYXQgd2UndmUg
bWFkZSBhIGZpcnN0IGN1dCB3aXRoICdBdHRyaWJ1dGUnIGFuZA0KICAgICdN
ZXRob2QnIG9iamVjdHMuDQoNCiAgICBOb3RlIHRoYXQgdGhlIGluZm9ybWF0
aW9uIGNvbnRhaW5lZCBpbiBhIG5vbi1tZXRob2QgYXR0cmlidXRlDQogICAg
b2JqZWN0IG1pZ2h0IGNvbnRhaW4gdGhlIGF0dHJpYnV0ZSB2YWx1ZSdzIGlu
dGVyZmFjZSBhcyB3ZWxsIGFzDQogICAgb3RoZXIgaW5mb3JtYXRpb24sIHN1
Y2ggYXMgYW4gYXR0cmlidXRlJ3MgdXNhZ2UuDQoNCiAgbyBUaGVyZSBhcmUg
cGxhY2VzIGluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHRoYXQgdXNl
DQogICAgJ2lzaW5zdGFuY2UnIHRoYXQgc2hvdWxkIGJlIGNoYW5nZWQgdG8g
dXNlIGludGVyZmFjZQ0KICAgIGNoZWNrcy4NCg0KICBvIFdoZW4gdGhlIGlu
dGVyZmFjZSBpbnRlcmZhY2VzIGFyZSBmaW5hbGl6ZWQsIEMgaW1wbGVtZW50
YXRpb25zDQogICAgd2lsbCBiZSBoaWdobHkgZGVzaXJhYmxlIGZvciBwZXJm
b3JtYW5jZSByZWFzb25zLg0KDQogIG8gQSBsb3QgbW9yZSB3b3JrIGlzIG5l
ZWRlZCBvbiB0aGUgc3RhbmRhcmQgaW50ZXJmYWNlIGhpZXJhcmNoeS4gICAg
DQoNCiAgLi4uDQo=
---1529346232-299838580-969387904=:24497--