Re: PEP 489: Multi-phase extension module initialization; version 5
Nick Coghlan <[email protected]> Tue, 19 May 2015 13:51:22 +1000
| Newsgroups | gmane.comp.python.import |
|---|---|
| Message-ID | <CADiSq7cuoimcpRZfyTGaGOmapFDYvGbcB+sVyG1x7rPvFHNTfg@mail.gmail.com> |
T24gMTkgTWF5IDIwMTUgYXQgMTA6MDcsIEVyaWMgU25vdyA8ZXJpY3Nub3djdXJyZW50bHlAZ21h aWwuY29tPiB3cm90ZToKPiBPbiBNb24sIE1heSAxOCwgMjAxNSBhdCA4OjAyIEFNLCBQZXRyIFZp a3RvcmluIDxlbmN1a291QGdtYWlsLmNvbT4gd3JvdGU6Cj4+IFtzbmlwXQo+Pgo+PiBGdXJ0aGVy bW9yZSwgdGhlIG1ham9yaXR5IG9mIGN1cnJlbnRseSBleGlzdGluZyBleHRlbnNpb24gbW9kdWxl cyBoYXMKPj4gcHJvYmxlbXMgd2l0aCBzdWItaW50ZXJwcmV0ZXIgc3VwcG9ydCBhbmQvb3IgaW50 ZXJwcmV0ZXIgcmVsb2FkaW5nLCBhbmQsCj4+IHdoaWxlCj4+IGl0IGlzIHBvc3NpYmxlIHdpdGgg dGhlIGN1cnJlbnQgaW5mcmFzdHJ1Y3R1cmUgdG8gc3VwcG9ydCB0aGVzZQo+PiBmZWF0dXJlcywg aXQgaXMgbmVpdGhlciBlYXN5IG5vciBlZmZpY2llbnQuCj4+IEFkZHJlc3NpbmcgdGhlc2UgaXNz dWVzIHdhcyB0aGUgZ29hbCBvZiBQRVAgMzEyMSwgYnV0IG1hbnkgZXh0ZW5zaW9ucywKPj4gaW5j bHVkaW5nIHNvbWUgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnksIHRvb2sgdGhlIGxlYXN0LWVmZm9y dCBhcHByb2FjaAo+PiB0byBwb3J0aW5nIHRvIFB5dGhvbiAzLCBsZWF2aW5nIHRoZXNlIGlzc3Vl cyB1bnJlc29sdmVkLgo+PiBUaGlzIFBFUCBrZWVwcyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwg d2hpY2ggc2hvdWxkIHJlZHVjZSBwcmVzc3VyZSBhbmQKPj4gZ2l2ZQo+PiBleHRlbnNpb24gYXV0 aG9ycyBhZGVxdWF0ZSB0aW1lIHRvIGNvbnNpZGVyIHRoZXNlIGlzc3VlcyB3aGVuIHBvcnRpbmcu Cj4KPiBTbyBqdXN0IGJlIHRvIHN1cmUgSSB1bmRlcnN0YW5kLCBub3cgUHlNb2R1bGVEZWYubV9z bG90cyB3aWxsCj4gdW5hbWJpZ3VvdXNseSBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCBhbiBleHRl bnNpb24gbW9kdWxlIGlzCj4gY29tcGxpYW50LCByaWdodD8KCkknbSBub3Qgc3VyZSB3aGF0IHlv dSBtZWFuIGJ5ICJjb21wbGlhbnQiLiBBIG5vbi1OVUxMIG1fc2xvdHMgd2lsbAppbmRpY2F0ZSB1 c2FnZSBvZiBtdWx0aS1waGFzZSBpbml0aWFsaXNhdGlvbiwgc28gaXQgYXQgbGVhc3QgaW5kaWNh dGVzCippbnRlbnQqIHRvIGNvcnJlY3RseSBzdXBwb3J0IHN1YmludGVycHJldGVycyBldCBhbC4g QWN0dWFsIGRlbGl2ZXJ5Cm9uIHRoYXQgcHJvbWlzZSBpcyBzdGlsbCBhIGRpZmZlcmVudCBxdWVz dGlvbiA6KQoKPj4gW3NuaXBdCj4+Cj4+IFRoZSBwcm9wb3NhbAo+PiA9PT09PT09PT09PT0KPgo+ IFRoaXMgc2VjdGlvbiBzaG91bGQgaW5jbHVkZSBhbiBpbmRpY2F0aW9uIG9mIGhvdyB0aGUgbG9h ZGVyIChhbmQKPiBwZXJoYXBzIGZpbmRlcikgd2lsbCBjaGFuZ2UgZm9yIGJ1aWx0aW4sIGZyb3pl biwgYW5kIGV4dGVuc2lvbgo+IG1vZHVsZXMuICBJdCBtYXkgaGVscCB0byBkZXNjcmliZSB0aGUg cHJvcG9zYWwgdXAgZnJvbnQgYnkgaG93IHRoZQo+IGxvYWRlciBpbXBsZW1lbnRhdGlvbiB3b3Vs ZCBsb29rIGlmIGl0IHdlcmUgc29tZWhvdyBpbXBsZW1lbnRlZCBpbgo+IFB5dGhvbiBjb2RlLiAg VGhlIHN1YnNlcXVlbnQgc2VjdGlvbnMgc29tZXRpbWVzIGluZGljYXRlIHdoZXJlCj4gZGlmZmVy ZW50IHRoaW5ncyB0YWtlIHBsYWNlLCBidXQgYW4gZXhwbGljaXQgb3V0bGluZSAoYXMgUHl0aG9u IGNvZGUpCj4gd291bGQgbWFrZSB0aGUgZW50aXJlIGZsb3cgcmVhbGx5IG9idmlvdXMuICBQdXR0 aW5nIHRoYXQgdG93YXJkIHRoZQo+IGJlZ2lubmluZyBvZiB0aGlzIHNlY3Rpb24gd291bGQgaGVs cCBjbGVhcmx5IHNldCB0aGUgc3RhZ2UgZm9yIHRoZQo+IHJlc3Qgb2YgdGhlIHByb3Bvc2FsLgoK KzEgZm9yIGEgcHNldWRvLWNvZGUgb3ZlcnZpZXcgb2YgdGhlIGxvYWRlciBpbXBsZW1lbnRhdGlv bi4KCj4KPj4gW3NuaXBdCj4+IFVua25vd24gc2xvdCBJRHMgd2lsbCBjYXVzZSB0aGUgaW1wb3J0 IHRvIGZhaWwgd2l0aCBTeXN0ZW1FcnJvci4KPgo+IFdhcyB0aGVyZSBhbnkgY29uc2lkZXJhdGlv biBtYWRlIGZvciBqdXN0IGlnbm9yaW5nIHVua25vd24gc2xvdCBJRHM/Cj4gTXkgZ3V0IHJlYWN0 aW9uIGlzIHRoYXQgeW91IGhhdmUgaXQgdGhlIHJpZ2h0IHdheSwgYnV0IEkgY2FuIHN0aWxsCj4g aW1hZ2luZSB1c2UgY2FzZXMgZm9yIGN1c3RvbSBzbG90cyB0aGF0IFB5TW9kdWxlRGVmX0luaXQg d291bGRuJ3Qga25vdwo+IGFib3V0LgoKVGhlICJrbm93biBzbG90cyBvbmx5LCBhbGwgb3RoZXIg c2xvdCBJRHMgYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIgpzbG90IHNlbWFudGljcyB3ZXJl IGNvcGllZCBkaXJlY3RseSBmcm9tIFB5VHlwZV9Gcm9tU3BlYyBpbiBQRVAgMzg0LgpTaW5jZSBp dCdzIGp1c3QgYSBudW1lcmljIHNsb3QgSUQsIHlvdSdkIHJ1biBhIGhpZ2ggcmlzayBvZiBjb25m bGljdHMKaWYgeW91IGFsbG93ZWQgZm9yIGN1c3RvbSBleHRlbnNpb25zLgoKSWYgZm9sa3Mgd2Fu dCB0byBkbyBtb3JlIGNsZXZlciB0aGluZ3MsIHRoZXknbGwgbmVlZCB0byB1c2UgdGhlIGNyZWF0 ZQpvciBleGVjIHNsb3QgdG8gc3Rhc2ggdGhlbSBvbiB0aGUgbW9kdWxlIG9iamVjdCwgcmF0aGVy IHRoYW4gc3RvcmluZwp0aGVtIGluIHRoZSBtb2R1bGUgZGVmaW5pdGlvbi4KCj4+IFRoZSBQeU1v ZHVsZURlZiBvYmplY3QgbXVzdCBiZSBhdmFpbGFibGUgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUg bW9kdWxlCj4+IGNyZWF0ZWQKPj4gZnJvbSBpdCDigJMgdXN1YWxseSwgaXQgd2lsbCBiZSBkZWNs YXJlZCBzdGF0aWNhbGx5Lgo+Cj4gSG93IGVhc2lseSB3aWxsIHRoaXMgYmUgYSBzb3VyY2Ugb2Yg bXlzdGVyaW91cyBlcnJvcnMtYXQtYS1kaXN0YW5jZT8KCkl0IHNob3VsZG4ndCBiZSBhbnkgd29y c2UgdGhhbiBzdGF0aWMgdHlwZSBkZWZpbml0aW9ucywgYW5kIG5vcm1hbApyZWZlcmVuY2UgY291 bnRpbmcgc2VtYW50aWNzIHNob3VsZCBrZWVwIGl0IGFsaXZlIHJlZ2FyZGxlc3MuCgo+PiBbc25p cF0KPj4gRXh0ZW5zaW9uIGF1dGhvcnMgYXJlIGFkdmlzZWQgdG8ga2VlcCBQeV9tb2RfY3JlYXRl IG1pbmltYWwsIGFuIGluCj4+IHBhcnRpY3VsYXIKPj4gdG8gbm90IGNhbGwgdXNlciBjb2RlIGZy b20gaXQuCj4KPiBUaGlzIGlzIGEgcHJldHR5IGltcG9ydGFudCBwb2ludCBhcyB3ZWxsLiAgV2Un bGwgbmVlZCB0byBtYWtlIHN1cmUKPiB0aGlzIGlzIHN1ZmZpY2llbnRseSBjbGVhciBpbiB0aGUg ZG9jdW1lbnRhdGlvbi4gIFdvdWxkIGl0IG1ha2Ugc2Vuc2UKPiB0byBwcm92aWRlIGhlbHBlcnMg Zm9yIGNvbW1vbiBjYXNlcywgdG8gZW5jb3VyYWdlIGV4dGVuc2lvbiBhdXRob3JzIHRvCj4ga2Vl cCB0aGUgY3JlYXRlIGZ1bmN0aW9uIG1pbmltYWw/CgpUaGUgbWFpbiBlbmNvdXJhZ2VtZW50IGlz IHRvIG5vdCBoYW5kY29kZSB5b3VyIGV4dGVuc2lvbiBtb2R1bGVzIGF0CmFsbCwgYW5kIGxldCBz b21ldGhpbmcgbGlrZSBDeXRob24gb3IgU1dJRyB0YWtlIGNhcmUgb2YgdGhlCmJvaWxlcnBsYXRl IDopCgo+PiBbc25pcF0KPj4KPj4gSWYgUHlNb2R1bGVFeGVjIHJlcGxhY2VzIHRoZSBtb2R1bGUn cyBlbnRyeSBpbiBzeXMubW9kdWxlcywKPj4gdGhlIG5ldyBvYmplY3Qgd2lsbCBiZSB1c2VkIGFu ZCByZXR1cm5lZCBieSBpbXBvcnRsaWIgbWFjaGluZXJ5Lgo+Cj4gSnVzdCB0byBiZSBzdXJlLCBz b21ldGhpbmcgbGlrZSAibW9kID0gc3lzLm1vZHVsZXNbbW9kbmFtZV0iIGlzIGRvbmUKPiBiZWZv cmUgZWFjaCBleGVjdXRpb24gc2xvdC4gIEluIG90aGVyIHdvcmRzLCB0aGUgcmVzdWx0IG9mIHRo ZQo+IHByZXZpb3VzIGV4ZWN1dGlvbiBzbG90IHNob3VsZCBiZSB1c2VkIGZvciB0aGUgbmV4dCBv bmUuCgpUaGF0J3Mgbm90IHRoZSBvcmlnaW5hbCBpbnRlbnQgb2YgdGhpcyBwYXJhZ3JhcGggLSBy YXRoZXIsIGl0IGlzCnJlZmVycmluZyB0byB0aGUgZXhpc3RpbmcgYmVoYXZpb3VyIG9mIHRoZSBp bXBvcnQgbWFjaGluZXJ5LgoKSG93ZXZlciwgSSBhZ3JlZSB0aGF0IG5vdyB3ZSdyZSBhbGxvd2lu ZyB0aGUgUHlfbW9kX2V4ZWMgc2xvdCB0byBiZQpzdXBwbGllZCBtdWx0aXBsZSB0aW1lcywgd2Ug c2hvdWxkIGFsc28gYmUgdXBkYXRpbmcgdGhlIG1vZHVsZQpyZWZlcmVuY2UgYmV0d2VlbiBzbG90 IGludm9jYXRpb25zLgoKSSBhbHNvIHRoaW5rIHRoZSBQRVAgY291bGQgZG8gd2l0aCBhIGJyaWVm IG1lbnRpb24gb2YgdGhlIGFkZGl0aW9uYWwKbW9kdWxhcml0eSB0aGlzIGFwcHJvYWNoIGJyaW5n cyBhdCB0aGUgQyBsZXZlbCAtIHJhdGhlciB0aGFuIGhhdmluZyB0bwpqYW0gZXZlcnl0aGluZyBp bnRvIG9uZSBmdW5jdGlvbiwgYW4gZXh0ZW5zaW9uIG1vZHVsZSBjYW4gZWFzaWx5IGJyZWFrCnVw IGl0cyBpbml0aWFsaXNhdGlvbiBpbnRvIG11bHRpcGxlIHN0ZXBzLCBhbmQgaXRzIHRlY2huaWNh bGx5IGV2ZW4KcG9zc2libGUgdG8gc2hhcmUgY29tbW9uIHN0ZXBzIGJldHdlZW4gZGlmZmVyZW50 IG1vZHVsZXMuCgo+PiAoVGhpcyBtaXJyb3JzIHRoZSBiZWhhdmlvciBvZiBQeXRob24gbW9kdWxl cy4gTm90ZSB0aGF0IGltcGxlbWVudGluZwo+PiBQeV9tb2RfY3JlYXRlIGlzIHVzdWFsbHkgYSBi ZXR0ZXIgc29sdXRpb24gZm9yIHRoZSB1c2UgY2FzZXMgdGhpcyBzZXJ2ZXMuKQo+Cj4gQ291bGQg eW91IGVsYWJvcmF0ZT8gIFdoYXQgYXJlIHRob3NlIHVzZSBjYXNlcyBhbmQgd2h5IHdvdWxkCj4g UHlfbW9kX2NyZWF0ZSBiZSBiZXR0ZXI/CgpSYXRoZXIgdGhhbiByZXBsYWNpbmcgdGhlIGltcGxp Y2l0bHkgY3JlYXRlZCBub3JtYWwgbW9kdWxlIGR1cmluZwpQeV9tb2RfZXhlYyAod2hpY2ggaXMg dGhlIG9ubHkgb3B0aW9uIGF2YWlsYWJsZSB0byBQeXRob24gbW9kdWxlcyksClBFUCA0ODkgbGV0 cyB5b3UgZGVmaW5lIHRoZSBQeV9tb2RfY3JlYXRlIHNsb3QgdG8gb3ZlcnJpZGUgdGhlIG1vZHVs ZQpvYmplY3QgY3JlYXRpb24gZGlyZWN0bHkuCgpPdXRzaWRlIGNvbnZlcnNpb24gb2YgYSBQeXRo b24gbW9kdWxlIHRoYXQgbWFuaXB1bGF0ZXMgc3lzLm1vZHVsZXMgdG8KYW4gZXh0ZW5zaW9uIG1v ZHVsZSB3aXRoIEN5dGhvbiwgdGhlcmUncyBubyByZWFsIHJlYXNvbiB0byB1c2UgdGhlCiJyZXBs YWNpbmcgeW91cnNlbGYgaW4gc3lzLm1vZHVsZXMiIG9wdGlvbiBvdmVyIHVzaW5nIFB5X21vZF9j cmVhdGUKZGlyZWN0bHkuCgo+PiBbc25pcF0KPj4KPj4gTW9kdWxlcyB0aGF0IG5lZWQgdG8gd29y ayB1bmNoYW5nZWQgb24gb2xkZXIgdmVyc2lvbnMgb2YgUHl0aG9uIHNob3VsZCBub3QKPj4gdXNl IG11bHRpLXBoYXNlIGluaXRpYWxpemF0aW9uLCBiZWNhdXNlIHRoZSBiZW5lZml0cyBpdCBicmlu Z3MgY2FuJ3QgYmUKPj4gYmFjay1wb3J0ZWQuCj4KPiBHaXZlbiB5b3VyIGV4YW1wbGUgYmVsb3cs ICJzaG91bGQgbm90IiBzZWVtcyBhIGJpdCBzdHJvbmcgdG8gbWUuICBJbgo+IGZhY3QsIHdoYXQg YXJlIHRoZSBvYmplY3Rpb25zIHRvIGVuY291cmFnaW5nIHRoZSBhcHByb2FjaCBmcm9tIHRoZQo+ IGV4YW1wbGU/CgpBZ3JlZWQsICJzaG91bGQgbm90IiBpcyBwcm9iYWJseSB0b28gc3Ryb25nIGhl cmUuIE9uIHRoZSBvdGhlciBoYW5kLApwcmVzZXJ2aW5nIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRl ciBQeXRob24gdmVyc2lvbnMgaW4gYSBtb2R1bGUgdGhhdApoYXMgYmVlbiB1cGRhdGVkIHRvIHJl bHkgb24gbXVsdGktcGhhc2UgaW5pdGlhbGl6YXRpb24gaXMgbGlrZWx5IHRvIGJlCmEgbWF0dGVy IG9mICJncmFjZWZ1bCBkZWdyYWRhdGlvbiIsIHJhdGhlciB0aGFuIGJlaW5nIGFibGUgdG8KcmVw cm9kdWNlIGNvbXBhcmFibGUgZnVuY3Rpb25hbGl0eSAod2hpY2ggSSBiZWxpZXZlIG1heSBoYXZl IGJlZW4gdGhlCnBvaW50IFBldHIgd2FzIHRyeWluZyB0byBjb252ZXkpLgoKSSBleHBlY3QgQ3l0 aG9uIGFuZCBTV0lHIG1heSBiZSBhYmxlIHRvIG1hbmFnZSB0aGF0IHRocm91Z2gKYXBwcm9wcmlh dGUgdXNlIG9mICNpZmRlZidzIGluIHRoZSBnZW5lcmF0ZWQgY29kZSwgYnV0IGRvaW5nIGl0IGJ5 CmhhbmQgaXMgbGlrZWx5IHRvIGJlIHBhaW5mdWwsIGhlbmNlIHRoZSBwb3RlbnRpYWwgYmVuZWZp dHMgb2YganVzdApzdGlja2luZyB3aXRoIHNpbmdsZS1waGFzZSBpbml0aWFsaXNhdGlvbiBmb3Ig dGhlIHRpbWUgYmVpbmcuCgo+PiBbc25pcF0KPj4KPj4gU3ViaW50ZXJwcmV0ZXJzIGFuZCBJbnRl cnByZXRlciBSZWxvYWRpbmcKPj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KPj4KPj4gRXh0ZW5zaW9ucyB1c2luZyB0aGUgbmV3IGluaXRpYWxpemF0aW9uIHNjaGVt ZSBhcmUgZXhwZWN0ZWQgdG8gc3VwcG9ydAo+PiBzdWJpbnRlcnByZXRlcnMgYW5kIG11bHRpcGxl IFB5X0luaXRpYWxpemUvUHlfRmluYWxpemUgY3ljbGVzIGNvcnJlY3RseS4KPgo+IFByZXN1bWFi bHkgdGhpcyBzdXBwb3J0IGlzIGV4cGxpY2l0bHkgYW5kIGNvbXBsZXRlbHkgZGVmaW5lZCBpbiB0 aGUKPiBzdWJzZXF1ZW50IHNlbnRlbmNlcy4gIElzIGl0IHJlYWxseSBqdXN0IGtlZXBpbmcgImhp ZGRlbiIgbW9kdWxlIHN0YXRlCj4gZW5jYXBzdWxhdGVkIG9uIHRoZSBtb2R1bGUgb2JqZWN0PyAg SWYgbm90IHRoZW4gaXQgbWF5IG1ha2Ugc2Vuc2UgdG8KPiBlbnVtZXJhdGUgdGhlIHJlcXVpcmVt ZW50cyBiZXR0ZXIgZm9yIHRoZSBzYWtlIG9mIGV4dGVuc2lvbiBtb2R1bGUKPiBhdXRob3JzLgoK SSdkIGFjdHVhbGx5IGxpa2UgdG8gaGF2ZSBhIGJldHRlciB3YXkgb2YgZG9pbmcgc2NlbmFyaW8g dGVzdGluZyBmb3IKZXh0ZW5zaW9uIG1vZHVsZXMgKHN1YmludGVycHJldGVycywgbXVsdGlwbGUg aW5pdGlhbGl6ZS9maW5hbGl6ZQpjeWNsZXMsIGZyZWV6aW5nKSwgYnV0IEknbSBub3Qgc3VyZSB0 aGlzIFBFUCBpcyB0aGUgYmVzdCBwbGFjZSB0bwpkZWZpbmUgdGhhdC4gUGVyaGFwcyB3ZSBjb3Vs ZCBkbyBhIFB5UEkgcHJvamVjdCB0aGF0IHdhcyBhIHRveC1iYXNlZAp0ZXN0IGJhdHRlcnkgZm9y IHRoaXMga2luZCBvZiB0aGluZz8KCj4+IFRoZSBtZWNoYW5pc20gaXMgZGVzaWduZWQgdG8gbWFr ZSB0aGlzIGVhc3ksIGJ1dCBjYXJlIGlzIHN0aWxsIHJlcXVpcmVkCj4+IG9uIHRoZSBwYXJ0IG9m IHRoZSBleHRlbnNpb24gYXV0aG9yLgo+PiBObyB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLCBtZXRo b2RzLCBvciBpbnN0YW5jZXMgbWF5IGxlYWsgdG8gZGlmZmVyZW50Cj4+IGludGVycHJldGVycy4K Pj4gVG8gYWNoaWV2ZSB0aGlzLCBhbGwgbW9kdWxlLWxldmVsIHN0YXRlIHNob3VsZCBiZSBrZXB0 IGluIGVpdGhlciB0aGUgbW9kdWxlCj4+IGRpY3QsIG9yIGluIHRoZSBtb2R1bGUgb2JqZWN0J3Mg c3RvcmFnZSByZWFjaGFibGUgYnkgUHlNb2R1bGVfR2V0U3RhdGUuCj4KPiBJcyB0aGlzIHByb2dy YW1tYXRpY2FsbHkgZW5mb3JjZWFibGU/ICBJcyB0aGVyZSBhbnkgbWVjaGFuaXNtIGZvcgo+IGVh c2lseSBjb3B5aW5nIG1vZHVsZSBzdGF0ZT8gIEhvdyBhYm91dCBzaGFyaW5nIHNvbWUgc3RhdGUg YmV0d2Vlbgo+IHN1YmludGVycHJldGVycz8gIEhvdyBtdWNoIHJvb20gaXMgdGhlcmUgZm9yIGxl dHRpbmcgZXh0ZW5zaW9uIG1vZHVsZQo+IGF1dGhvcnMgZGVmaW5lIGhvdyB0aGVpciBtb2R1bGUg YmVoYXZlcyBhY3Jvc3MgbXVsdGlwbGUgaW50ZXJwcmV0ZXJzCj4gb3IgYWNyb3NzIG11bHRpcGxl IEluaXRpYWxpemUvRmluYWxpemUgY3ljbGVzPwoKSXQncyBub3QgcHJvZ3JhbW1hdGljYWxseSBl bmZvcmNhYmxlLCBoZW5jZSB0aGUgaWRlYSBhYm92ZSBvZiBmaW5kaW5nCmEgd2F5IHRvIG1ha2Ug aXQgZWFzaWVyIGZvciBwZW9wbGUgdG8gdGVzdCB0aGVpciBleHRlbnNpb24gbW9kdWxlcyBhcmUK aW1wb3J0YWJsZSBhY3Jvc3MgbXVsdGlwbGUgUHl0aG9uIHZlcnNpb25zIGFuZCBkZXBsb3ltZW50 IHNjZW5hcmlvcy4KCj4+IEFzIGEgcnVsZSBvZiB0aHVtYiwgbW9kdWxlcyB0aGF0IHJlbHkgb24g UHlTdGF0ZV9GaW5kTW9kdWxlIGFyZSwgYXQgdGhlCj4+IG1vbWVudCwKPj4gbm90IGdvb2QgY2Fu ZGlkYXRlcyBmb3IgcG9ydGluZyB0byB0aGUgbmV3IG1lY2hhbmlzbS4KPgo+IEFyZSB0aGVyZSBh bnkgcGxhbnMgZm9yIGEgZm9sbG93LXVwIGVmZm9ydCB0byBoZWxwIHdpdGggdGhpcyBjYXNlPwoK VGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IHRoZSBQRVAgMzEyMSBtb2R1bGUgc3RhdGUgYXBwcm9h Y2ggcHJvdmlkZXMKc3RvcmFnZSBvbiBhICpwZXItaW50ZXJwcmV0ZXIqIGJhc2lzLCB0aGF0IGlz IHRoZW4gc2hhcmVkIGFtb25nc3QgYWxsCm1vZHVsZSBpbnN0YW5jZXMgY3JlYXRlZCBmcm9tIGEg Z2l2ZW4gbW9kdWxlIGRlZmluaXRpb24uCgpUaGlzIG1lYW5zIHRoYXQgd2hlbiBfUHlJbXBvcnRf RmluZEV4dGVuc2lvbk9iamVjdCAoc2VlCmh0dHBzOi8vaGcucHl0aG9uLm9yZy9jcHl0aG9uL2Zp bGUvZmMyZWVkOWZjMmQwL1B5dGhvbi9pbXBvcnQuYyNsNTE4KQpyZWluaXRpYWxpc2VzIGFuIGV4 dGVuc2lvbiBtb2R1bGUsIHRoZSBzdGF0ZSBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgdHdvCmluc3Rh bmNlcy4gV2hlbiBQRVAgMzEyMSB3YXMgd3JpdHRlbiwgdGhpcyB3YXMgbm90IHNlZW4gYXMgYSBw cm9ibGVtLApzaW5jZSB0aGUgZXhwZWN0YXRpb24gd2FzIHRoYXQgdGhlIGJlaGF2aW91ciB3b3Vs ZCBvbmx5IGJlIHRyaWdnZXJlZApieSBtdWx0aXBsZSBpbnRlcnByZXRlciBsZXZlbCBpbml0aWFs aXplL2ZpbmFsaXplIGN5Y2xlcy4KCk9uZSBrZXkgc2NlbmFyaW8gd2UgbWlzc2VkIGF0IHRoZSB0 aW1lIHdhcyAiZGVsZXRpbmcgYW4gZXh0ZW5zaW9uCm1vZHVsZSBmcm9tIHN5cy5tb2R1bGVzIGFu ZCBpbXBvcnRpbmcgaXQgYSBzZWNvbmQgdGltZSwgd2hpbGUKcmV0YWluaW5nIGEgbG9jYWwgcmVm ZXJlbmNlIGZvciBsYXRlciByZXN0b3JhdGlvbiIuIFVuZGVyIFBFUCAzMTIxLAp0aGUgdHdvIGlu c3RhbmNlcyBjb2xsaWRlIG9uIHRoZWlyIHN0YXRlIHN0b3JhZ2UsIGFzIHdlIGhhdmUgdHdvCnNp bXVsdGFuZW91c2x5IGV4aXN0aW5nIG1vZHVsZSBvYmplY3RzIGNyZWF0ZWQgaW4gdGhlIHNhbWUg aW50ZXJwcmV0ZXIKZnJvbSB0aGUgc2FtZSBtb2R1bGUgZGVmaW5pdGlvbi4gUEVQIDQ4OSB3b3Vs ZCBpbmhlcml0IHRoYXQgc2FtZQpwcm9ibGVtIGlmIHlvdSB0cmllZCB0byB1c2UgaXQgd2l0aCB0 aGUgUHlTdGF0ZV8qIEFQSXMsIHNvIGl0IHNpbXBseQpkb2Vzbid0IGFsbG93IHRoZW0gYXQgYWxs LiAoRWFybGllciB2ZXJzaW9ucyBvZiB0aGUgUEVQIGFsbG93ZWQgaXQKd2l0aCBhbiAiRVhQT1JU X1NJTkdMRVRPTiIgc2xvdCB0aGF0IHdvdWxkIGRpc2FsbG93IHJlaW1wb3J0aW5nCmVudGlyZWx5 LCB3aGljaCB3ZSB0b29rIG91dCBpbiBmYXZvdXIgb2YgImp1c3Qga2VlcCB1c2luZyB0aGUgZXhp c3RpbmcKaW5pdGlhbGlzYXRpb24gbW9kZWwgaW4gdGhvc2UgY2FzZXMgZm9yIHRoZSB0aW1lIGJl aW5nIikKCkZvciBwdXJlIFB5dGhvbiBjb2RlLCB3ZSBkb24ndCBoYXZlIHRoaXMgcHJvYmxlbSwg c2luY2UgdGhlCmludGVycHJldGVyIHRha2VzIGNhcmUgb2YgcHJvdmlkaW5nIGEgcHJvcGVybHkg c2NvcGVkIGdsb2JhbHMoKQpyZWZlcmVuY2UgdG8gKmFsbCogZnVuY3Rpb25zIGRlZmluZWQgaW4g dGhhdCBtb2R1bGUsIHJlZ2FyZGxlc3Mgb2YKd2hldGhlciB0aGV5J3JlIG1vZHVsZSBsZXZlbCBm dW5jdGlvbnMgb3IgbWV0aG9kIGRlZmluaXRpb25zIG9uIGEKY2xhc3MuIEF0IHRoZSBDIGxldmVs LCB3ZSBkb24ndCBoYXZlIHRoYXQsIGFzIG9ubHkgbW9kdWxlIGxldmVsCmZ1bmN0aW9ucyBnZXQg YSBtb2R1bGUgcmVmZXJlbmNlIHBhc3NlZCBpbiAtIG1ldGhvZHMgb25seSBnZXQgYQpyZWZlcmVu Y2UgdG8gdGhlaXIgY2xhc3MgaW5zdGFuY2UsIHdpdGhvdXQgYSByZWZlcmVuY2UgdG8gdGhlIG1v ZHVsZQpnbG9iYWxzLCBhbmQgZGVsYXllZCBjYWxsYmFja3MgY2FuIGJlIGEgcHJvYmxlbSBhcyB3 ZWxsLgoKVGhlIGJlc3QgaW1wcm92ZWQgQVBJIHdlIGNvdWxkIGxpa2VseSBvZmZlciBhdCB0aGlz IHBvaW50IGlzIGEKY29udmVuaWVuY2UgQVBJIGZvciBsb29raW5nIHVwIGEgbW9kdWxlIGluICpz eXMubW9kdWxlcyogYmFzZWQgb24gYQpQeU1vZHVsZURlZiBpbnN0YW5jZSwgYW5kIHVwZGF0aW5n IFBFUCA0ODkgdG8gd3JpdGUgdGhlIGFzLWltcG9ydGVkCm1vZHVsZSBuYW1lIGludG8gdGhlIHJl dHVybmVkIFB5TW9kdWxlRGVmIHN0cnVjdHVyZS4gVGhhdCdzIHByb2JhYmx5Cm5vdCBhIGJhZCB3 YXkgdG8gZ28sIGdpdmVuIHRoYXQgUEVQIDQ4OSBjdXJyZW50bHkgKmlnbm9yZXMqIHRoZSBtX25h bWUKc2xvdCAtIGZsaXBwaW5nIGl0IGFyb3VuZCB0byBiZSBhICp3cml0YWJsZSogc2xvdCB3b3Vs ZCBiZSBhIHdheSB0bwpsZXQgZXh0ZW5zaW9uIG1vZHVsZXMga25vdyBkeW5hbWljYWxseSBob3cg dG8gbG9vayB0aGVtc2VsdmVzIHVwIGluCnN5cy5tb2R1bGVzLgoKVGhlIG5ldyBsb29rdXAgQVBJ IHdvdWxkIHRoZW4gYmUgdGhlIG1vcmFsIGVxdWl2YWxlbnQgb2YgUHl0aG9uIGNvZGUKZG9pbmcg Im1vZCA9IHN5cy5tb2R1bGVzW19fbmFtZV9fXSIuIFdpdGggdGhpcyBhcHByb2FjaCwgYWN0aXZl bHkKKnVzaW5nKiBtdWx0aXBsZSByZWZlcmVuY2VzIHRvIGEgZ2l2ZW4gbW9kdWxlIGF0IHRoZSBz YW1lIHRpbWUgd291bGQKc3RpbGwgYnJlYWsgKHNpbmNlIHlvdSdsbCBhbHdheXMgZ2V0IHRoZSBt b2R1bGUgY3VycmVudGx5IGluCnN5cy5tb2R1bGVzLCBldmVuIGlmIHRoYXQgaXNuJ3QgdGhlIG9u ZSB5b3UgZXhwZWN0ZWQpLCBidXQgdGhlCiJzYXZlLWFuZC1yZXN0b3JlIiBtb2RlbCBuZWVkZWQg Zm9yIGNlcnRhaW4ga2luZHMgb2YgdGVzdGluZyBhbmQKcG90ZW50aWFsbHkgb3RoZXIgc2NlbmFy aW9zIHdvdWxkIHdvcmsgY29ycmVjdGx5LgoKPj4gTW9kdWxlIFJlbG9hZGluZwo+PiAtLS0tLS0t LS0tLS0tLS0tCj4+Cj4+IFJlbG9hZGluZyBhbiBleHRlbnNpb24gbW9kdWxlIHVzaW5nIGltcG9y dGxpYi5yZWxvYWQoKSB3aWxsIGNvbnRpbnVlIHRvCj4+IGhhdmUgbm8gZWZmZWN0LCBleGNlcHQg cmUtc2V0dGluZyBpbXBvcnQtcmVsYXRlZCBhdHRyaWJ1dGVzLgo+Pgo+PiBEdWUgdG8gbGltaXRh dGlvbnMgaW4gc2hhcmVkIGxpYnJhcnkgbG9hZGluZyAoYm90aCBkbG9wZW4gb24gUE9TSVggYW5k Cj4+IExvYWRNb2R1bGVFeCBvbiBXaW5kb3dzKSwgaXQgaXMgbm90IGdlbmVyYWxseSBwb3NzaWJs ZSB0byBsb2FkCj4+IGEgbW9kaWZpZWQgbGlicmFyeSBhZnRlciBpdCBoYXMgY2hhbmdlZCBvbiBk aXNrLgo+Pgo+PiBVc2UgY2FzZXMgZm9yIHJlbG9hZGluZyBvdGhlciB0aGFuIHRyeWluZyBvdXQg YSBuZXcgdmVyc2lvbiBvZiB0aGUgbW9kdWxlCj4+IGFyZSB0b28gcmFyZSB0byByZXF1aXJlIGFs bCBtb2R1bGUgYXV0aG9ycyB0byBrZWVwIHJlbG9hZGluZyBpbiBtaW5kLgo+PiBJZiByZWxvYWQt bGlrZSBmdW5jdGlvbmFsaXR5IGlzIG5lZWRlZCwgYXV0aG9ycyBjYW4gZXhwb3J0IGEgZGVkaWNh dGVkCj4+IGZ1bmN0aW9uIGZvciBpdC4KPgo+IEtlZXAgaW4gbWluZCB0aGUgc2VtYW50aWNzIG9m IHJlbG9hZCBmb3IgcHVyZSBQeXRob24gbW9kdWxlcy4gIFRoZQo+IG1vZHVsZSBpcyBleGVjdXRl ZCBpbnRvIHRoZSBleGlzdGluZyBuYW1lc3BhY2UsIG92ZXJ3cml0aW5nIHRoZSBsb2FkZWQKPiBu YW1lc3BhY2UgYnV0IGxlYXZpbmcgbm9uLWNvbGxpZGluZyBhdHRyaWJ1dGVzIGFsb25lLiAgV2hp bGUgdGhlCj4gc2VtYW50aWNzIGZvciByZWxvYWRpbmcgYW4gZXh0ZW5zaW9uL2J1aWx0aW4vZnJv emVuIG1vZHVsZSBhcmUKPiBjdXJyZW50bHkgYmFzaWMgKGkuZS4gYSBuby1vcCksIHRoZXJlIG1h eSB3ZWxsIGJlIHJvb20gdG8gc3VwcG9ydAo+IHJlbG9hZCBiZWhhdmlvciB0aGF0IG1pcnJvcnMg dGhhdCBvZiBwdXJlIFB5dGhvbiBtb2R1bGVzIHdpdGhvdXQKPiBuZWVkaW5nIHRvIHJlbG9hZCBh biBTTyBmaWxlLiAgSSB3b3VsZCBleHBlY3QgZWl0aGVyIHRoZSBiZWhhdmlvciBvZgo+IGV4ZWMg dG8gZ2V0IHJlcGVhdGVkICh0cmlja3kgZHVlIHRvICJoaWRkZW4iIG1vZHVsZSBzdGF0ZT8pIG9y IGZvcgo+IHRoZXJlIHRvIGJlIGEgInJlbG9hZCIgc2xvdCB0aGF0IHdvdWxkIG1pcnJvciBQeV9t b2RfZXhlYy4KCldlIGNvbnNpZGVyZWQgdGhpcywgYW5kIGRlY2lkZWQgaXQgd2FzIGZhaXJseSBw b2ludGxlc3MsIHNpbmNlIHlvdQpjYW4ndCBtb2RpZnkgdGhlIGV4dGVuc2lvbiBtb2R1bGUgY29k ZS4gVGhlIG9uZSBjYXNlIEkgc2VlIHdoZXJlIGl0CnBvdGVudGlhbGx5IG1ha2VzIHNlbnNlIGlz IGEgInRyYW5zaXRpdmUgcmVsb2FkIiwgd2hlcmUgdGhlIGV4dGVuc2lvbgptb2R1bGUgcmV0cmll dmVzIGFuZCBjYWNoZXMgYXR0cmlidXRlcyBmcm9tIGFub3RoZXIgcHVyZSBQeXRob24gbW9kdWxl CmF0IGltcG9ydCB0aW1lLCBhbmQgdGhhdCBleHRlbnNpb24gbW9kdWxlIGhhcyBiZWVuIHJlbG9h ZGVkLgoKSXQgbWF5IGFsc28gbWFrZSBhIGRpZmZlcmVuY2UgaW4gdGhlIGNvbnRleHQgb2YgdXRp bGl0aWVzIGxpa2UKaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3Rlc3QuaHRtbCN0 ZXN0LnN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSwKd2hlcmUgd2UgbWFuaXB1bGF0ZSB0aGUg aW1wb3J0IHN5c3RlbSBzdGF0ZSB0byBjb250cm9sIGhvdyBjb25kaXRpb25hbAppbXBvcnRzIGFy ZSBoYW5kbGVkLgoKPiBBdCB0aGUgc2FtZSB0aW1lLCBvbmUgbWF5IGFyZ3VlIHRoYXQgcmVsb2Fk aW5nIG1vZHVsZXMgaXMgbm90Cj4gc29tZXRoaW5nIHRvIGVuY291cmFnZS4gOikKClRoZXJlJ3Mg YSByZWFzb24gaW1wb3J0X2ZyZXNoX21vZHVsZSBoYXMgbmV2ZXIgbWFkZSBpdCBvdXQgb2YgdGVz dC5zdXBwb3J0IDopCgo+PiBNdWx0aXBsZSBtb2R1bGVzIGluIG9uZSBsaWJyYXJ5Cj4+IC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPj4KPj4gVG8gc3VwcG9ydCBtdWx0aXBsZSBQeXRo b24gbW9kdWxlcyBpbiBvbmUgc2hhcmVkIGxpYnJhcnksIHRoZSBsaWJyYXJ5IGNhbgo+PiBleHBv cnQgYWRkaXRpb25hbCBQeUluaXQqIHN5bWJvbHMgYmVzaWRlcyB0aGUgb25lIHRoYXQgY29ycmVz cG9uZHMKPj4gdG8gdGhlIGxpYnJhcnkncyBmaWxlbmFtZS4KPj4KPj4gTm90ZSB0aGF0IHRoaXMg bWVjaGFuaXNtIGNhbiBjdXJyZW50bHkgb25seSBiZSB1c2VkIHRvICpsb2FkKiBleHRyYSBtb2R1 bGVzLAo+PiBidXQgbm90IHRvICpmaW5kKiB0aGVtLgo+Cj4gV2hhdCBkbyB5b3UgbWVhbiBieSAi Y3VycmVudGx5Ij8KCkl0J3MgYSBsaW1pdGF0aW9uIG9mIHRoZSB3YXkgdGhlIGV4aXN0aW5nIGZp bmRlcnMgd29yaywgcmF0aGVyIHRoYW4gYW4KaW5oZXJlbnQgbGltaXRhdGlvbiBvZiB0aGUgaW1w b3J0IHN5c3RlbSBhcyBhIHdob2xlLgoKPiBJdCBtYXkgYWxzbyBiZSB3b3J0aCB0eWluZyB0aGUg YWJvdmUgc3RhdGVtZW50IHdpdGggdGhlIGZvbGxvd2luZwo+IHRleHQsIHNpbmNlIHRoZSBmb2xs b3dpbmcgYXBwZWFycyB0byBiZSBhbiBleHBsYW5hdGlvbiBvZiBob3cgdG8KPiBhZGRyZXNzIHRo ZSAiZmluZGVyIiBjYXZlYXQuCgpBZ3JlZWQgdGhhdCB0aGlzIGNvdWxkIGJlIGNsZWFyZXIuCgo+ PiBUZXN0aW5nIGFuZCBpbml0aWFsIGltcGxlbWVudGF0aW9ucwo+PiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQo+Pgo+PiBGb3IgdGVzdGluZywgYSBuZXcgYnVpbHQtaW4gbW9k dWxlIGBgX3Rlc3RtdWx0aXBoYXNlYGAgd2lsbCBiZSBjcmVhdGVkLgo+PiBUaGUgbGlicmFyeSB3 aWxsIGV4cG9ydCBzZXZlcmFsIGFkZGl0aW9uYWwgbW9kdWxlcyB1c2luZyB0aGUgbWVjaGFuaXNt Cj4+IGRlc2NyaWJlZCBpbiAiTXVsdGlwbGUgbW9kdWxlcyBpbiBvbmUgbGlicmFyeSIuCj4+Cj4+ IFRoZSBgYF90ZXN0Y2FwaWBgIG1vZHVsZSB3aWxsIGJlIHVuY2hhbmdlZCwgYW5kIHdpbGwgdXNl IHNpbmdsZS1waGFzZQo+PiBpbml0aWFsaXphdGlvbiBpbmRlZmluaXRlbHkgKG9yIHVudGlsIGl0 IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQpLgo+Pgo+PiBUaGUgYGBhcnJheWBgIGFuZCBgYHh4KmBg IG1vZHVsZXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdXNlIG11bHRpLXBoYXNlCj4+IGluaXRpYWxp emF0aW9uIGFzIHBhcnQgb2YgdGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24uCj4KPiBXaGF0IGRv IHlvdSBtZWFuIGJ5ICJpbml0aWFsIGltcGxlbWVudGF0aW9uIj8gIFdpbGwgaXQgYmUgZG9uZQo+ IGRpZmZlcmVudGx5IGluIGEgbGF0ZXIgaW1wbGVtZW50YXRpb24/CgpUaGVzZSBtb2R1bGVzIHdp bGwgYmUgY29udmVydGVkIGluIHRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24sIG90aGVyCm1v ZHVsZXMgd29uJ3QgYmUuCgo+PiBTdHJpbmcgY29uc3RhbnRzIGFuZCB0eXBlcyBjYW4gYmUgaGFu ZGxlZCBzaW1pbGFybHkuCj4+IChOb3RlIHRoYXQgbm9uLWRlZmF1bHQgYmFzZXMgZm9yIHR5cGVz IGNhbm5vdCBiZSBwb3J0YWJseSBzcGVjaWZpZWQKPj4gc3RhdGljYWxseTsgdGhpcyBjYXNlIHdv dWxkIG5lZWQgYSBQeV9tb2RfZXhlYyBmdW5jdGlvbiB0aGF0IHJ1bnMKPj4gYmVmb3JlIHRoZSBz bG90cyBhcmUgYWRkZWQuIFRoZSBmcmVlIGVycm9yLWNoZWNraW5nIHdvdWxkIHN0aWxsIGJlCj4+ IGJlbmVmaWNpYWwsIHRob3VnaC4pCj4KPiBUaGlzIGltcGxpZXMgdG8gbWUgdGhhdCBub3cgaXMg dGhlIHRpbWUgdG8gZW5zdXJlIHRoYXQgdGhpcyBQRVAKPiBhcHByb3ByaWF0ZWx5IGFjY29tbW9k YXRlcyB0aGF0IG5lZWQuICBJdCB3b3VsZCBiZSB1bmZvcnR1bmF0ZSBpZiB3ZQo+IGhhZCB0byBs YXRlciBoYWNrIGluIHNvbWUgZXh0cmEgQVBJIHRvIGFjY29tbW9kYXRlIGEgdXNlIGNhc2Ugd2UK PiBhbHJlYWR5IGtub3cgYWJvdXQuICBCZXR0ZXIgaWYgd2UgbWFkZSBzdXJlIHRoZSBjdXJyZW50 bHkgcHJvcG9zZWQKPiBjaGFuZ2VzIGNvdWxkIGFjY29tbW9kYXRlIHRoZSBuZWVkLCBldmVuIGlm IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0Cj4gcGFydCB3ZXJlIG5vdCBwYXJ0IG9mIHRoaXMg UEVQLgoKVGhpcyB3b3VsZCBiZSBhIG5ldyBraW5kIG9mIGV4ZWN1dGlvbiBzbG90LCBzbyB0aGUg UEVQIGFscmVhZHkKYWNjb21tb2RhdGVzIHRoZXNlIHBvc3NpYmxlIGZ1dHVyZSBleHRlbnNpb25z LgoKPj4gQW5vdGhlciBwb3NzaWJpbGl0eSBpcyBwcm92aWRpbmcgYSAibWFpbiIgZnVuY3Rpb24g dGhhdCB3b3VsZCBiZSBydW4KPj4gd2hlbiB0aGUgbW9kdWxlIGlzIGdpdmVuIHRvIFB5dGhvbidz IC1tIHN3aXRjaC4KPj4gRm9yIHRoaXMgdG8gd29yaywgdGhlIHJ1bnB5IG1vZHVsZSB3aWxsIG5l ZWQgdG8gYmUgbW9kaWZpZWQgdG8gdGFrZQo+PiBhZHZhbnRhZ2Ugb2YgTW9kdWxlU3BlYy1iYXNl ZCBsb2FkaW5nIGludHJvZHVjZWQgaW4gUEVQIDQ1MS4KPgo+IEknbGwgcG9pbnQgb3V0IHRoYXQg dGhlIHB1cmUtUHl0aG9uIGVxdWl2YWxlbnQgaGFzIGJlZW4gcHJvcG9zZWQgb24gYQo+IG51bWJl ciBvZiBvY2Nhc2lvbnMgYW5kIGJlZW4gcmVqZWN0ZWQgZXZlcnkgdGltZS4gIEhvd2V2ZXIsIGlu IHRoZQo+IGNhc2Ugb2YgZXh0ZW5zaW9uIG1vZHVsZXMgaXQgaXMgbW9yZSBqdXN0aWZpYWJsZS4g IElmIGV4dGVuc2lvbgo+IG1vZHVsZXMgZ2FpbiBzdWNoIGEgbWVjaGFuaXNtIHRoZW4gaXQgbWF5 IGJlIGEganVzdGlmaWNhdGlvbiBmb3IgZG9pbmcKPiBzb21ldGhpbmcgc2ltaWxhciBpbiBQeXRo b24uCj4KPj4gQWxzbywgaXQgd2lsbCBiZSBuZWNlc3NhcnkgdG8gYWRkIGEgbWVjaGFuaXNtIGZv ciBzZXR0aW5nIHVwIGEgbW9kdWxlCj4+IGFjY29yZGluZyB0byBzbG90cyBpdCB3YXNuJ3Qgb3Jp Z2luYWxseSBkZWZpbmVkIHdpdGguCj4KPiBXaGF0IGRvZXMgdGhpcyBtZWFuPwoKV2hlbiB5b3Ug dXNlIHRoZSAtbSBzd2l0Y2gsIHlvdSBhbHdheXMgcnVuIGluIHRoZSBidWlsdGluIF9fbWFpbl9f Cm1vZHVsZSBuYW1lc3BhY2UsIGFuZCBydW5weSBmaWRkbGVzIHdpdGggX19tYWluX18uX19zcGVj X18gdG8gbWF0Y2gKdGhlIGRldGFpbHMgb2YgdGhlIG1vZHVsZSBwYXNzZWQgdG8gdGhlIHN3aXRj aC4gVGhhdCdzIG5vdCBjdXJyZW50bHkgYQp0cmljayB3ZSBjYW4gbWFuYWdlIHdoZW4gdGhlICJ0 aGluZyB0byBydW4iIGlzIGFuIGV4dGVuc2lvbiBtb2R1bGUuCgpDaGVlcnMsCk5pY2suCgotLSAK TmljayBDb2dobGFuICAgfCAgIG5jb2dobGFuQGdtYWlsLmNvbSAgIHwgICBCcmlzYmFuZSwgQXVz dHJhbGlhCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCklt cG9ydC1TSUcgbWFpbGluZyBsaXN0CkltcG9ydC1TSUdAcHl0aG9uLm9yZwpodHRwczovL21haWwu cHl0aG9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ltcG9ydC1zaWcK