[#111712] [Ruby master Feature#19322] Support spawning "private" child processes — "kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core" <ruby-core@...>
SXNzdWUgIzE5MzIyIGhhcyBiZWVuIHJlcG9ydGVkIGJ5IGtqdHNhbmFrdHNpZGlzIChLSiBUc2Fu
14 messages
2023/01/07
[ruby-core:111793] [Ruby master Feature#19322] Support spawning "private" child processes
From:
"kjtsanaktsidis (KJ Tsanaktsidis) via ruby-core" <ruby-core@...>
Date:
2023-01-12 02:20:59 UTC
List:
ruby-core #111793
SXNzdWUgIzE5MzIyIGhhcyBiZWVuIHVwZGF0ZWQgYnkga2p0c2FuYWt0c2lkaXMgKEtKIFRzYW5h a3RzaWRpcykuDQ0KDQ0KDQ0KPiBJbiB0aGUgZXhhbXBsZSB5b3Ugc2hvd24sIEkgYmVsaWV2ZSBp dCdzIG5vbmUgb2YgVW5pY29ybidzIGJ1c2luZXNzIHRvIHJlYXAgYXJiaXRyYXJ5IHByb2Nlc3Nl cw0NCg0NCkZpcnN0bHksIEkgZG8gd2FudCB0byBub3RlIHRoYXQgSSBkb24ndCB0aGluayB0aGlz IGlzIGp1c3QgYSBVbmljb3JuIHByb2JsZW0uIFRoaXMgaXMgdGhlICJjbGFzc2ljIHVuaXgiIHdh eSBvZiB3cml0aW5nIGEgcHJlZm9ya2luZyBwb29sIG9mIHdvcmtlcnMgb2YgYW55IGtpbmQsIGFu ZCBJJ20gc3VyZSBzaW1pbGFyIGNvZGUgZXhpc3RzIGluIG1hbnkgZGVwbG95ZWQgUnVieSBhcHBs aWNhdGlvbnMuDQ0KDQ0KVGhlcmUncyBubyB3YXksIHdoZW4gcmVzcG9uZGluZyB0byBhIFNJR0NI TEQsIHRvIGtub3cgd2hhdCBjaGlsZCBkaWVkIHVudGlsIF9hZnRlcl8geW91IGFjdHVhbGx5IHJl YXAgaXQgYW5kIHN0ZWFsIGl0cyBzdGF0dXMgY29kZS4gSWYgVW5pY29ybiAoYXMgYW4gZXhhbXBs ZSkgd2FudGVkIHRvIGF2b2lkIHJlYXBpbmcgY2hpbGRyZW4gaXQgZG9lcyBub3Qgb3duLCBpdCB3 b3VsZCBuZWVkIHRvIHBlcmZvcm0gTyhOKSB3YWl0cGlkIHN5c3RlbSBjYWxscyB0byB3YWl0IG9u IGVhY2ggb2YgaXRzIGtub3duIGNoaWxkcmVuIGFuZCBzZWUgaWYgdGhleSd2ZSBleGl0ZWQuIEFs dGVybmF0aXZlbHksIGl0IGNvdWxkIGRvIHRoZSBwYXNzLWRvd24tYS1waXBlIHRyaWNrIHRoYXQg QG5vcm1hbHBlcnNvbiBwb2ludGVkIG91dCBhYm92ZSwgYnV0IHRoZW4geW91IGNhbid0IGdldCB0 aGUgZXhpdCBzdGF0dXMuDQ0KDQ0KPiBpdCBkb2Vzbid0IGNvbXBvc2UNDQoNDQpUaGF0J3MgdGhl IHByb2JsZW0gd2l0aCB0aGUgZW50aXJlIFVOSVggcHJvY2VzcyBBUEkgLSBpdCBkb2Vzbid0IGNv bXBvc2UhIFN1YnByb2Nlc3NlcyBleGl0aW5nIHJhaXNlIHNpZ25hbHMgdGhhdCBydW4gaW4gb3Ro ZXIgcGFydHMgb2YgdGhlIHByb2dyYW0sIG90aGVyIHBhcnRzIG9mIHRoZSBwcm9ncmFtIGNhbiBh Y2NpZGVudGFsbHkgd2FpdCBmb3IgeW91ciBzdWJwcm9jZXNzZXMgYW5kIHN0ZWFsIHRoZSBleGl0 IHN0YXR1cyBmcm9tIHlvdSwgcGlkIHJlLXVzZSBtZWFucyB0aGF0IGEgZ2VtIGNhbid0IG5lY2Vz c2FyaWx5IGV2ZW4gX3RlbGxfIHRoYXQgaXRzIHN1YnByb2Nlc3MgZXhpdGVkIChpcyB0aGVyZSBu b3cgc29tZSBuZXcgcHJvY2VzcyB3aXRoIHRoZSBzYW1lIHBpZD8geW91IGNhbid0IGtub3cgdW5s ZXNzIHlvdSBrbm93IGZvciBzdXJlIHlvdSBkaWRuJ3QgcmVhcCB0aGUgcHJldmlvdXMgb25lKS4N DQoNDQpUaGUgbmV3IEFQSXMgSSd2ZSBwcm9wb3NlZCBoZXJlIChgc3Bhd25fcHJpdmF0ZWAgYW5k IGBmb3JrX3ByaXZhdGVgKSBfZG9fIGNvbXBvc2UgLSB3aGVuIGEgc3VicHJvY2VzcyBpcyBjcmVh dGVkLCBpdCBjYW4gb25seSBiZSByZWFwZWQgYnkgdXNpbmcgdGhlIHVuaXF1ZSBoYW5kbGUgd2hp Y2ggY2FtZSBmcm9tIGl0cyBjcmVhdGlvbiwgYW5kIG5vdCBmcm9tIG90aGVyIHJhbmRvbSBwYXJ0 cyBvZiBhIHBvdGVudGlhbGx5IHZlcnkgbGFyZ2UgYXBwbGljYXRpb24uIE15IGhvcGUgaXMgdGhh dCB0aGVzZSBBUElzIGxldCBnZW1zIChhbmQgUnVieSBpdHNlbGYsIGUuZy4gbWppdCkgdHJlYXQg dGhlIHNwYXduaW5nIG9mIHN1YnByb2Nlc3NlcyBhcyBhbiBvcGFxdWUgaW1wbGVtZW50YXRpb24g ZGV0YWlsLg0NCg0NCj4gbGV0J3Mgbm90IGFkZCBvbiB0b3Agb2YgaXQgYW5kIGZvcmNlIGV2ZXJ5 IFJ1YnkgaW1wbGVtZW50YXRpb24gdG8gaGF2ZSBzdWNoIGNvbXBsZXhpdHkgcGxlYXNlLg0NCg0N CkkgdGhpbmsgb3RoZXIgcnVieSBpbXBsZW1lbnRhdGlvbnMgYWxyZWFkeSBuZWVkIHRoaXMgY29t cGxleGl0eSBpZiB0aGV5IHdhbnQgdGhyZWFkc2FmZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpbmdz IGxpa2UgYFByb2Nlc3Muc3lzdGVtYC4gRm9yIGV4YW1wbGUsIHRoaXMgcHJvZ3JhbSB3aWxsIHF1 aWNrbHkgdGhyb3cgYW4gZXhjZXB0aW9uIHVuZGVyIFRydWZmbGVydWJ5Og0NCg0NCmBgYHJ1YnkN DQp0MSA9IFRocmVhZC5uZXcgZG8NDQogICAgbG9vcCBkbw0NCiAgICAgICAgcGlkLCBzdGF0dXMg PSBQcm9jZXNzLndhaXRwaWQyIC0xDQ0KICAgICAgICBwdXRzICJSZWFwZWQgcGlkICN7cGlkfSBz dGF0dXMgI3tzdGF0dXMuaW5zcGVjdH0iDQ0KICAgIHJlc2N1ZSBFcnJubzo6RUNISUxEDQ0KICAg IGVuZA0NCmVuZA0NCg0NCnQyID0gVGhyZWFkLm5ldyBkbw0NCiAgICBsb29wIGRvDQ0KICAgICAg ICBjaGlsZF9zdWNjZXNzID0gc3lzdGVtICIvYmluL3NoIC1jICdleGl0IDEnIg0NCiAgICAgICAg cHV0cyAiQ2hpbGQgc3VjY2Vzcz8gI3tjaGlsZF9zdWNjZXNzfSINDQogICAgZW5kDQ0KZW5kDQ0K DQ0KdDIuam9pbg0NCnQxLmpvaW4NDQpgYGANDQoNDQpgYGANDQolIHJ1YnkgYmFkLnJiDQ0KUmVh cGVkIHBpZCA4NzgxIHN0YXR1cyAjPFByb2Nlc3M6OlN0YXR1czogcGlkIDg3ODEgZXhpdCAxPg0N CiM8VGhyZWFkOjB4MTU4IGJhZC5yYjo5IHJ1bj4gdGVybWluYXRlZCB3aXRoIGV4Y2VwdGlvbiAo cmVwb3J0X29uX2V4Y2VwdGlvbiBpcyB0cnVlKToNDQo8aW50ZXJuYWw6Y29yZT4gY29yZS9lcnJu by5yYjo0ODppbiBgaGFuZGxlJzogTm8gY2hpbGQgcHJvY2Vzc2VzIC0gTm8gY2hpbGQgcHJvY2Vz czogODc4MSAoRXJybm86OkVDSElMRCkNDQoJZnJvbSA8aW50ZXJuYWw6Y29yZT4gY29yZS90cnVm ZmxlL3Byb2Nlc3Nfb3BlcmF0aW9ucy5yYjoxNTA6aW4gYGJsb2NrIGluIHdhaXQnDQ0KCWZyb20g PGludGVybmFsOmNvcmU+IGNvcmUvdHJ1ZmZsZS9mZmkvcG9pbnRlci5yYjoyNTU6aW4gYG5ldycN DQoJZnJvbSA8aW50ZXJuYWw6Y29yZT4gY29yZS90cnVmZmxlL3Byb2Nlc3Nfb3BlcmF0aW9ucy5y YjoxNDU6aW4gYHdhaXQnDQ0KCWZyb20gPGludGVybmFsOmNvcmU+IGNvcmUvcHJvY2Vzcy5yYjo1 OTE6aW4gYHdhaXQnDQ0KCWZyb20gPGludGVybmFsOmNvcmU+IGNvcmUva2VybmVsLnJiOjU5Mzpp biBgc3lzdGVtJw0NCglmcm9tIGJhZC5yYjoxMTppbiBgYmxvY2sgKDIgbGV2ZWxzKSBpbiA8bWFp bj4nDQ0KCWZyb20gPGludGVybmFsOmNvcmU+IGNvcmUva2VybmVsLnJiOjQwNzppbiBgbG9vcCcN DQoJZnJvbSBiYWQucmI6MTA6aW4gYGJsb2NrIGluIDxtYWluPicNDQo8aW50ZXJuYWw6Y29yZT4g Y29yZS9lcnJuby5yYjo0ODppbiBgaGFuZGxlJzogTm8gY2hpbGQgcHJvY2Vzc2VzIC0gTm8gY2hp bGQgcHJvY2VzczogODc4MSAoRXJybm86OkVDSElMRCkNDQoJZnJvbSA8aW50ZXJuYWw6Y29yZT4g Y29yZS90cnVmZmxlL3Byb2Nlc3Nfb3BlcmF0aW9ucy5yYjoxNTA6aW4gYGJsb2NrIGluIHdhaXQn DQ0KCWZyb20gPGludGVybmFsOmNvcmU+IGNvcmUvdHJ1ZmZsZS9mZmkvcG9pbnRlci5yYjoyNTU6 aW4gYG5ldycNDQoJZnJvbSA8aW50ZXJuYWw6Y29yZT4gY29yZS90cnVmZmxlL3Byb2Nlc3Nfb3Bl cmF0aW9ucy5yYjoxNDU6aW4gYHdhaXQnDQ0KCWZyb20gPGludGVybmFsOmNvcmU+IGNvcmUvcHJv Y2Vzcy5yYjo1OTE6aW4gYHdhaXQnDQ0KCWZyb20gPGludGVybmFsOmNvcmU+IGNvcmUva2VybmVs LnJiOjU5MzppbiBgc3lzdGVtJw0NCglmcm9tIGJhZC5yYjoxMTppbiBgYmxvY2sgKDIgbGV2ZWxz KSBpbiA8bWFpbj4nDQ0KCWZyb20gPGludGVybmFsOmNvcmU+IGNvcmUva2VybmVsLnJiOjQwNzpp biBgbG9vcCcNDQoJZnJvbSBiYWQucmI6MTA6aW4gYGJsb2NrIGluIDxtYWluPicNDQpgYGANDQoN DQpJdCBhY3R1YWxseSB3b3JrcyB1bmRlciBDUnVieSwgYmVjYXVzZSB0aGUgZGlyZWN0IHdhaXQg Zm9yIGEgc3BlY2lmaWMgcGlkIGFsd2F5cyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIHdhaXQg b24gLTEsIGFuZCB0aGVyZSBpcyBubyBpbnRlcnJ1cHQgY2hlY2sgYmV0d2VlbiB3aGVuIHRoZSBj aGlsZCBwcm9jZXNzIGlzIHNwYXduZWQgYW5kIHdoZW4gd2FpdHBpZCBpcyBjYWxsZWQgaW4gdGhl IGBzeXN0ZW1gIGltcGxlbWVudGF0aW9uLg0NCg0NCj4gS0o6IGRvIHlvdSBuZWVkIHRvIGNhcmUg YWJvdXQgdGhlIGV4aXQgc3RhdHVzPw0NCg0NCkkgZG91YnQgSSBzcGVjaWZpY2FsbHkgbmVlZCBp dCBmb3IgbXkgdXNlLWNhc2UgKHRoZSBwYXJlbnQvY2hpbGQgcHJvY2VzcyBhbHJlYWR5IHNoYXJl IGEgc29ja2V0cGFpciwgYW5kIHRoZSBwYXJlbnQgd291bGQgbm90aWNlIGlmIGl0IGNsb3NlZCks IGJ1dCBJIGtpbmQgb2YgdGhvdWdodCBSdWJ5IHNob3VsZCBvZmZlciBub24taGFja3kgQVBJcyBm b3IgdGhlIHVzZS1jYXNlIG9mICJjaGlsZCBwcm9jZXNzZXMgaW4gZ2VtcyIgaW4gZ2VuZXJhbCwg c28gSSBzdGlsbCB3cm90ZSB1cCBteSBwcm9wb3NhbGouDQ0KDQ0KIyMgU3VtbWFyeToNDQoNDQpS ZWFsbHksIEkgdGhpbmsgdGhlcmUgYXJlIHRocmVlIHdheXMgb2YgbG9va2luZyBhdCB0aGlzIGlz c3VlOg0NCg0NCjEuIFByb2dyYW1zIGRvaW5nIGB3YWl0cGlkIC0xYCBhcmUgYmFkIGFuZCB3cm9u Zywgbm9ib2R5IHNob3VsZCBldmVyIGRvIHRoYXQsIGlmIGFueSBjb2RlIGluIHlvdXIgcHJvZ3Jh bSBkb2VzIHRoaXMgYW55d2hlcmUsIHRoZW4gUnVieSBzaG91bGQgbm8gbG9uZ2VyIG1ha2UgYW55 IGd1YXJhbnRlZXMgYWJvdXQgc3VicHJvY2VzcyBtYW5hZ2VtZW50IHdvcmtpbmcgY29ycmVjdGx5 IGluIHRoZSBlbnRpcmUgcHJvY2Vzcy4NDQoyLiBQcm9ncmFtcyBkb2luZyBgd2FpdHBpZCAtMWAg YXJlIHdpZGVseSBkZXBsb3llZCwgaXQgd291bGQgYmUgZ29vZCBpZiwgd2hlbiB3cml0aW5nIGdl bXMsIHRoZXJlIHdlcmUgQVBJcyB3ZSBjb3VsZCB1c2Ugd2hpY2ggb2ZmZXIgYmV0dGVyIGlzb2xh dGlvbiBhbmQgY29tcG9zaWJpbGl0eSB0aGFuIHRoZSBjbGFzc2ljIHVuaXggQVBJcywgc28gdGhh dCBvdXIgZ2VtcyB3b3JrIG5vIG1hdHRlciB3aGF0IHRoZWlyIGNvbnRhaW5pbmcgcHJvY2Vzc2Vz IGFyZSBkb2luZy4NDQozLiBHZW1zIHNob3VsZCBuZXZlciBiZSBzcGF3bmluZyBjaGlsZCBwcm9j ZXNzZXMgYW55d2F5Lg0NCg0NCk15IHRoaW5raW5nIG9uIHRoaXMgaXNzdWUgaXMgY2FtcCAyLiBM aWtlIGl0IG9yIG5vdCAoYW5kIHJlYWxseSwgSSBkb24ndCBsaWtlIGl0KSwgYHdhaXRwaWQgLTFg IGhhcyBiZWVuIHBhcnQgb2YgdGhlIHVuaXggd2F5IG9mIGRvaW5nIHByZWZvcmtpbmcgd29ya2Vy IHBvb2xzIHNpbmNlIGFwcHJveGltYXRlbHkgZm9yZXZlciwgYW5kIGl0IHdvdWxkIGJlIGdvb2Qg aWYgcHJvZ3JhbXMgc3VjaCBwcm9ncmFtcyBjb3VsZCB1c2UgZ2VtcyB3aXRob3V0IGNhcmVmdWxs eSBjaGVja2luZyB3aGV0aGVyIHRoZXkgc3Bhd24gYW55IHN1YnByb2Nlc3NlcyBpbiB0aGVpciBp bXBsZW1lbnRhdGlvbi4NDQoNDQpQZXJoYXBzIHNvbWUgbW9yZSBkYXRhIG5lZWRzIHRvIGJlIGdh dGhlcmVkIG9uIGp1c3QgaG93IGNvbW1vbiBgd2FpdHBpZCAtMWAgYWN0dWFsbHkgaXM/IElmIHBl b3BsZSB0aGluayB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IG1vdmVzIHRoZSBuZWVkbGUgb24gdGhp cyBkaXNjdXNzaW9uLCBJJ20gaGFwcHkgdG8gZG8gc29tZSByZXNlYXJjaCBvbiB0aGUgdG9waWMu DQ0KDQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0NCkZlYXR1cmUg IzE5MzIyOiBTdXBwb3J0IHNwYXduaW5nICJwcml2YXRlIiBjaGlsZCBwcm9jZXNzZXMNDQpodHRw czovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTkzMjIjY2hhbmdlLTEwMTIwNA0NCg0NCiog QXV0aG9yOiBranRzYW5ha3RzaWRpcyAoS0ogVHNhbmFrdHNpZGlzKQ0NCiogU3RhdHVzOiBPcGVu DQ0KKiBQcmlvcml0eTogTm9ybWFsDQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQ0NCiMjIEJhY2tncm91bmQNDQoNDQpUaGUgdHJhZGl0aW9uYWwgVW5peCBwcm9jZXNz IEFQSXMgKGBmb3JrYCBldGMpIGFyZSBwb29ybHkgaXNvbGF0ZWQuIElmIGEgbGlicmFyeSBzcGF3 bnMgYSBjaGlsZCBwcm9jZXNzLCB0aGlzIGlzIG5vdCB0cmFuc3BhcmVudCB0byB0aGUgcHJvZ3Jh bSB1c2luZyB0aGUgbGlicmFyeS4gQW55IHNpZ25hbCBoYW5kbGVyIGZvciBgU0lHQ0hMRGAgaW4g dGhlIHByb2dyYW0gd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgc3Bhd25lZCBwcm9jZXNzIGV4aXRz LCBhbmQgZXZlbiB3b3JzZSwgaWYgdGhlIHBhcmVudCBjYWxscyBgUHJvY2Vzcy53YWl0cGlkMigt MSlgLCBpdCB3aWxsIGNvbnN1bWUgdGhlIHJldHVybmVkIHN0YXR1cyBjb2RlLCBzdGVhbGluZyBp dCBmcm9tIHRoZSBsaWJyYXJ5IQ0NCg0NClVuZm9ydHVuYXRlbHksIHRoZSBwcmFjdGljZSBvZiBy ZXNwb25kaW5nIHRvIGBTSUdDSExEYCBieSBjYWxsaW5nIGB3YWl0cGlkMigtMSlgIGluIGEgbG9v cCBpcyBhIHByZXR0eSBjb21tb24gdW5peGlzbS4gRm9yIGV4YW1wbGUsIFVuaWNvcm4gZG9lcyBp dCBbaGVyZV0oaHR0cHM6Ly95aGJ0Lm5ldC91bmljb3JuLmdpdC90cmVlL2xpYi91bmljb3JuL2h0 dHBfc2VydmVyLnJiI240MDEpLiBJbiBzaG9ydCwgdGhlcmUgaXMgbm8gcmVsaWFibGUgd2F5IGZv ciBhIGdlbSB0byBzcGF3biBhIGNoaWxkIHByb2Nlc3MgaW4gYSB3YXkgdGhhdCBjYW7igJl0ICh1 bmludGVudGlvbmFsbHkpIGJlIGludGVyZmVyZWQgd2l0aCBieSBvdGhlciBwYXJ0cyBvZiB0aGUg cHJvZ3JhbS4NDQoNDQojIyBQcm9ibGVtIHN0YXRlbWVudA0NCg0NCkNvbnNpZGVyIHRoZSBmb2xs b3dpbmcgcHJvZ3JhbS4NDQoNDQpgYGBydWJ5DQ0KIyBJbWFnaW5lIHRoaXMgcGFydCBvZiB0aGUg cHJvZ3JhbSBpcyBpbiBzb21lIHRvcC1sZXZlbCBhcHBsaWNhdGlvbiBldmVudCBsb29wDQ0KIyBv ciBzb21ldGhpbmcgLSBzaW1pbGFyIHRvIGhvdyBVbmljb3JuIHdvcmtzLiBJdCBkZXRlY3RzIGNo aWxkIHByb2Nlc3NlcyBleGl0aW5nDQ0KIyBhbmQgdGFrZXMgc29tZSBhY3Rpb24gKHBvc3NpYmx5 IHJlc3RhcnRpbmcgYSBjcmFzaGVkIHdvcmtlciwgZm9yIGV4YW1wbGUpLg0NClNpZ25hbC50cmFw KDpDSExEKSBkbw0NCiAgbG9vcCBkbw0NCiAgICBiZWdpbg0NCiAgICAgIHBpZCwgc3RhdHVzID0g UHJvY2Vzcy53YWl0cGlkMiAtMQ0NCiAgICAgIHB1dHMgIlNpZ25hbCBoYW5kbGVyIHJlYXBlZCAj e3BpZH0gI3tzdGF0dXMuaW5zcGVjdH0iDQ0KICAgIHJlc2N1ZSBFcnJubzo6RUNISUxEDQ0KICAg ICAgcHV0cyAiU2lnbmFsIGhhbmRsZXIgcmVhcGVkIG5vdGhpbmciDQ0KICAgICAgYnJlYWsNDQog ICAgZW5kDQ0KICBlbmQNDQplbmQNDQoNDQojIEltYWdpbmUgdGhhdCBfdGhpc18gcGFydCBvZiB0 aGUgcHJvZ3JhbSBpcyBidXJpZWQgZGVlcCBpbiBzb21lIGdlbS4gSXQga25vd3MNDQojIG5vdGhp bmcgYWJvdXQgdGhlIGFwcGxpY2F0aW9uIFNJR0NITEQgaGFuZGxpbmcsIGFuZCBxdWl0ZSBwb3Nz aWJseSB0aGUgYXBwbGljYXRpb24NDQojIGF1dGhvciBtaWdodCBub3QgZXZlbiBrbm93IHRoaXMg Z2VtIHNwYXducyBhIGNoaWxkIHByb2Nlc3MgdG8gZG8gaXRzIHdvcmshDQ0KcmVxdWlyZSAnb3Bl bjMnDQ0KbG9vcCBkbw0NCiAgbywgc3RhdHVzID0gT3BlbjMuY2FwdHVyZTIoIi9iaW4vc2giLCAi LWMiLCAiZWNobyAnaGVsbG8nIikNDQogIHB1dHMgInJhbiBjb21tYW5kLCBnb3QgI3tvLmNob21w fSAje3N0YXR1cy5pbnNwZWN0fSINDQplbmQNDQpgYGANDQoNDQpJbiBjdXJyZW50IHZlcnNpb25z IG9mIFJ1YnksIF9zb21lXyBsb29wIGl0ZXJhdGlvbnMgd2lsbCBmdW5jdGlvbiBjb3JyZWN0bHks IGFuZCBwcmludCBzb21ldGhpbmcgbGlrZSB0aGlzLiBUaGUgZ2VtIGdldHMgdGhlIGBQcm9jZXNz OjpTdGF0dXNgIG9iamVjdCBmcm9tIGl0cyBjb21tYW5kIGFuZCBjYW4ga25vdyBpZiBlLmcuIGl0 IGV4aXRlZCBhYm5vcm1hbGx5Lg0NCg0NCmBgYA0NCnJhbiBjb21tYW5kLCBnb3Qgb2hhaXRoYXIg IzxQcm9jZXNzOjpTdGF0dXM6IHBpZCAxMTUzNjg3IGV4aXQgMD4NDQpTaWduYWwgaGFuZGxlciBy ZWFwZWQgbm90aGluZw0NCmBgYA0NCg0NCkhvd2V2ZXIsIG90aGVyIGl0ZXJhdGlvbnMgb2YgdGhl IGxvb3AgcHJpbnQgdGhpcy4gVGhlIHNpZ25hbCBoYW5kbGVyIHJ1bnMgYW5kIGNhbGxzIGBQcm9j ZXNzLndhaXRwaWQyKC0xKWAgYmVmb3JlIHRoZSBjb2RlIGluIG9wZW4zIGNhbiBkbyBzby4gVGhl biwgdGhlIGdlbSBjb2RlIGRvZXMgbm90IGdldCBhIGBQcm9jZXNzOjpTdGF0dXNgIG9iamVjdCEg VGhpcyBpcyBhbHNvIHBvdGVudGlhbGx5IGJhZCBmb3IgdGhlIGFwcGxpY2F0aW9uOyBpdCByZWFw ZWQgYSBjaGlsZCBwcm9jZXNzIGl0IGRpZG4ndCBldmVuIGtub3cgZXhpc3RlZCwgYW5kIGl0IG1p Z2h0IGNhdXNlIHNvbWUgc3VycHJpc2luZyBidWdzIGlmIHRoZSBhcHBsaWNhdGlvbiBhdXRob3Ig ZGlkbid0IGtub3cgdGhpcyB3YXMgYSBwb3NzaWJpbGl0eS4NDQoNDQpgYGANDQpTaWduYWwgaGFu ZGxlciByZWFwZWQgMTE1MzU5NiAjPFByb2Nlc3M6OlN0YXR1czogcGlkIDExNTM1OTYgZXhpdCAw Pg0NClNpZ25hbCBoYW5kbGVyIHJlYXBlZCBub3RoaW5nDQ0KcmFuIGNvbW1hbmQsIGdvdCBvaGFp dGhhciBuaWwNDQpgYGANDQoNDQpXZSB3b3VsZCBsaWtlIGEgZmFtaWx5IG9mIEFQSXMgd2hpY2gg YWxsb3cgYSBnZW0gdG8gc3Bhd24gYSBjaGlsZCBwcm9jZXNzIGFuZCBndWFyYW50ZWVzIHRoYXQg dGhlIGdlbSBjYW4gd2FpdCBvbiBpdC4gU29tZSBjb25jdXJyZW50IGNhbGwgdG8gYFByb2Nlc3Mu d2FpdHBpZDIoLTEpYCAob3IgZXZlbiBgUHJvY2Vzcy53YWl0cGlkMigkc29tZV9sdWNreV9ndWVz c19mb3JfdGhlX3BpZClgKSBzaG91bGQgbm90IHN0ZWFsIHRoZSBzdGF0dXMgb3V0IGZyb20gdW5k ZXJuZWF0aCB0aGUgY29kZSB3aGljaCBjcmVhdGVkIHRoZSBwcm9jZXNzLiBJZGVhbGx5LCB3ZSBz aG91bGQgZXZlbiBzdXBwcmVzcyB0aGUgYFNJR0NITERgIHNpZ25hbCB0byBhdm9pZCB0aGUgYXBw bGljYXRpb24gc2lnbmFsIGhhbmRsZXIgbmVlZGxlc3NseSB3YWtpbmcgdXAuDQ0KDQ0KDQ0KIyMg UHJvcG9zZWQgUnVieS1sZXZlbCBBUElzLg0NCg0NCkkgcHJvcG9zZSB3ZSBjcmVhdGUgdGhlIGZv bGxvd2luZyBuZXcgbWV0aG9kcyBpbiBSdWJ5Lg0NCg0NCiogYFByb2Nlc3Muc3Bhd25fcHJpdmF0 ZWANDQoqIGBQcm9jZXNzLmZvcmtfcHJpdmF0ZWANDQoNDQpUaGVzZSBtZXRob2RzIGJlaGF2ZSBp ZGVudGljYWxseSB0byB0aGVpciBub24tX3ByaXZhdGUgdmVyc2lvbnMgaW4gYWxsIHJlc3BlY3Qs IGV4Y2VwdCBpbnN0ZWFkIG9mIHJldHVybmluZyBhIHBpZCwgdGhleSByZXR1cm4gYW4gb2JqZWN0 IG9mIHR5cGUgYFByb2Nlc3M6OlByaXZhdGVIYW5kbGVgLg0NCg0NCmBQcm9jZXNzOjpQcml2YXRl SGFuZGxlYCB3b3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoNDQoNDQoqIGBwaWQoKWAg LSByZXR1cm5zIHRoZSBwaWQgZm9yIHRoZSBjcmVhdGVkIHByb2Nlc3MNDQoqIGB3YWl0KClgIC0g YmxvY2tzIHRoZSBjYWxsZXIgdW50aWwgdGhlIGNyZWF0ZWQgcHJvY2VzcyBoYXMgZXhpdGVkLCBh bmQgcmV0dXJucyBhIGBQcm9jZXNzOjpTdGF0dXNgIG9iamVjdC4gSWYgdGhlIGhhbmRsZSBoYXMg X2FscmVhZHlfIGhhZCBgI3dhaXRgIGNhbGxlZCBvbiBpdCwgaXQgcmV0dXJucyB0aGUgc2FtZSBg UHJvY2Vzczo6U3RhdHVzYCBvYmplY3QgYXMgd2FzIHJldHVybmVkIHRoZW4gaW1tZWRpYXRlbHku IFRoaXMgaXMgdW5saWtlIGBQcm9jZXNzLndhaXRwaWRgIGFuZCBmcmllbmRzLCB3aGljaCB3b3Vs ZCByYWlzZSBhbiBFQ0hJTEQgaW4gdGhpcyBjYXNlIChvciwgaW4gdGhlIGZhY2Ugb2YgcGlkIHdy YXBhcm91bmQsIHBvdGVudGlhbGx5IHdhaXQgb24gc29tZSBvdGhlciB0b3RhbGx5IHVucmVsYXRl ZCBjaGlsZCBwcm9jZXNzIHdpdGggdGhlIHNhbWUgcGlkKS4NDQoqIGB3YWl0X25vbmJsb2NrKClg IC0gaWYgdGhlIGNyZWF0ZWQgcHJvY2VzcyBoYXMgZXhpdGVkLCBiZWhhdmVzIGxpa2UgYCN3YWl0 YDsgb3RoZXJ3aXNlLCBpdCByZXR1cm5zIGEgYFByb2Nlc3M6OlN0YXR1c2Agb2JqZWN0IGZvciB3 aGljaCBgI2V4aXRlZD9gIHJldHVybnMgZmFsc2UuDQ0KKiBga2lsbCguLi4pYCAtIGlmIHRoZSBj cmVhdGVkIHByb2Nlc3MgaGFzIG5vdCBiZWVuIHJlYXBlZCB2aWEgYSBjYWxsIHRvIGAjd2FpdGAs IHBlcmZvcm1zIGlkZW50aWNhbGx5IHRvIGBQcm9jZXNzLmtpbGwgLi4uLCBwaWRgLiBPdGhlcndp c2UsIGlmIHRoZSBwcm9jZXNzIF9oYXNfIGJlZW4gcmVhcGVkLCByYWlzZXMgYEVycm5vOjpFU1JD SGAgaW1tZWRpYXRlbHkgd2l0aG91dCBpc3N1aW5nIGEgc3lzdGVtIGNhbGwuIFRoaXMgZW5zdXJl cyB0aGF0LCBpZiBwaWRzIHdyYXAgYXJvdW5kLCB0aGF0IHRoZSB3cm9uZyBwcm9jZXNzIGlzIG5v dCBzaWduYWxlZCBieSBtaXN0YWtlLg0NCg0NCkEgY2FsbCB0byBgUHJvY2Vzcy53YWl0YCwgYFBy b2Nlc3Mud2FpdHBpZGAsIG9yIGBQcm9jZXNzLndhaXRwaWQyYCB3aWxsIF9uZXZlcl8gcmV0dXJu IGEgYFByb2Nlc3M6OlN0YXR1c2AgZm9yIGEgcHJvY2VzcyBzdGFydGVkIHdpdGggYSBgX3ByaXZh dGVgIG1ldGhvZCwgZXZlbiBpZiB0aGF0IGNhbGwgaXMgbWFkZSB3aXRoIHRoZSBwaWQgb2YgdGhl IGNoaWxkIHByb2Nlc3MuIFRoZSBfb25seV8gd2F5IHRvIHJlYXAgYSBwcml2YXRlIGNoaWxkIHBy b2Nlc3MgaXMgdGhyb3VnaCBgUHJvY2Vzczo6UHJpdmF0ZUhhbmRsZWAuDQ0KDQ0KVGhlIGltcGxl bWVudGF0aW9uIG9mIGBJTy5wb3BlbmAsIGBLZXJuZWwjc3lzdGVtYCwgYEtlcm5lbCNwb3BlbmAs IGJhY2t0aWNrcywgYW5kIHRoZSBgT3BlbjNgIG1vZHVsZSB3b3VsZCBiZSBjaGFuZ2VkIHRvIHVz ZSB0aGlzIHByaXZhdGUgcHJvY2VzcyBtZWNoYW5pc20gaW50ZXJuYWxseSwgYWx0aG91Z2ggdGhl eSBkbyBub3QgcmV0dXJuIHBpZHMgc28gdGhleSBkbyBub3QgbmVlZCB0byBoYXZlIHRoZWlyIGlu dGVyZmFjZXMgY2hhbmdlZC4gKG5vdGUgdGhvdWdoIC0gSSBkb24ndCBiZWxpZXZlIGBLZXJuZWwj c3lzdGVtYCBzdWZmZXJzIGZyb20gdGhlIHNhbWUgcHJvYmxlbSBhcyB0aGUgYG9wZW4zYCBleGFt cGxlIGFib3ZlLCBiZWNhdXNlIGl0IGRvZXMgbm90IHlpZWxkIHRoZSBHVkwgbm9yIGNoZWNrIGlu dGVycnVwdHMgaW4gYmV0d2VlbiBzcGF3bmluZyB0aGUgY2hpbGQgYW5kIHdhaXRpbmcgb24gaXQp DQ0KDQ0KIyMgSW1wbGVtZW50YXRpb24gc3RyYXRlZ3kNDQoNDQpJIGJlbGlldmUgdGhpcyBjYW4g YmUgaW1wbGVtZW50ZWQsIGluIGJyb2FkIHN0cm9rZXMsIHdpdGggYW4gYXBwcm9hY2ggbGlrZSB0 aGlzOg0NCg0NCiogS2VlcCBhIGdsb2JhbCB0YWJsZSBtYXBwaW5nIHBpZHMgLT4gaGFuZGxlcyBm b3IgcHJvY2Vzc2VzIGNyZWF0ZWQgd2l0aCBgZm9ya19wcml2YXRlYCBvciBgc3Bhd25fcHJpdmF0 ZWAuDQ0KKiBXaGVuIGEgY2hpbGQgcHJvY2VzcyBpcyB3YWl0ZWQgb24sIGNvbnN1bHQgdGhlIGhh bmRsZSB0YWJsZS4gSWYgdGhlcmUgaXMgYSBoYW5kbGUgcmVnaXN0ZXJlZCwgYW5kIHRoZSB3YWl0 IGNhbGwgd2FzIG1hZGUgd2l0aG91dCB0aGUgaGFuZGxlLCBkbyBOT1QgcmV0dXJuIHRoZSByZWFw ZWQgc3RhdHVzLiBJbnN0ZWFkLCBzYXZlIHRoZSBzdGF0dXMgYWdhaW5zdCB0aGUgaGFuZGxlLCBh bmQgcmVwZWF0IHRoZSBjYWxsIHRvIGB3YWl0cGlkYC4NDQoqIElmIHRoZSB3YWl0IGNhbGwgX3dh c18gbWFkZSB3aXRoIHRoZSBoYW5kbGUsIHdlIGNhbiByZXR1cm4gdGhlIA0NCiogT25jZSBhIGhh bmRsZSBoYXMgaGFkIHRoZSBjaGlsZCBzdGF0dXMgc2F2ZWQgYWdhaW5zdCBpdCwgaXQgaXMgcmVt b3ZlZCBmcm9tIHRoZSB0YWJsZS4NDQoqIEEgc3Vic2VxdWVudCBjYWxsIHRvIHdhaXQgb24gdGhh dCBwaSB0aGUgaGFuZGxlIHdpbGwgbG9vayB1cCB0aGUgc2F2ZWQgaW5mb3JtYXRpb24gYW5kIHJl dHVybiBpdCB3aXRob3V0IG1ha2luZyBhIHN5c3RlbSBjYWxsLg0NCg0NCkluIGZhY3QsIG1vc3Qg b2YgdGhlIGluZnJhc3RydWN0dXJlIHRvIGRvIHRoaXMgY29ycmVjdGx5IGlzIGFscmVhZHkgaW4g cGxhY2UgLSBpdCB3YXMgYWRkZWQgYnkgQGswa3VidW4gYW5kIEBub3JtYWxwZXJzb24gZm91ciB5 ZWFycyBhZ28gLSBodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy9pc3N1ZXMvMTQ4NjcuIE1KSVQg aGFkIGEgc2ltaWxhciBwcm9ibGVtIHRvIHRoZSBvbmUgZGVzY3JpYmVkIGluIHRoaXMgaXNzdWU7 IGl0IG5lZWRzIHRvIGZvcmsgYSBDIGNvbXBpbGVyLCBidXQgaWYgdGhlIGFwcGxpY2F0aW9uIHBl cmZvcm1zIGEgYFByb2Nlc3Mud2FpdHBpZDIoLTEpYCwgaXQgY291bGQgd2luZCB1cCByZWFwaW5n IHRoZSBnY2MgcHJvY2VzcyBvdXQgZnJvbSB1bmRlcm5lYXRoIG1qaXQuIFRoaXMgY29kZSBoYXMg Y2hhbmdlZCBjb25zaWRlcmFibHkgb3ZlciB0aGUgY291cnNlIG9mIGxhc3QgeWVhciwgYnV0IG15 IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBtaml0IHN0aWxsIHVzZXMgdGhpcyBpbmZyYXN0cnVjdHVy ZSB0byBwcm90ZWN0IGl0cyBSdWJ5IGNoaWxkLXByb2Nlc3MgZnJvbSBiZWNvbWluZyB2aXNpYmxl IHRvIFJ1YnkgY29kZS4NDQoNDQpJbiBhbnkgY2FzZSwgdGhlIHdheSB3YWl0cGlkIHdvcmtzIF9j dXJyZW50bHlfLCBpcyB0aGF0Li4uDQ0KDQ0KKiBSdWJ5IGFjdHVhbGx5IGRvZXMgYWxsIGNhbGxz IHRvIGB3YWl0cGlkYCBhcyBgV05PSEFOR2AgKGkuZS4gbm9uYmxvY2tpbmcpIGludGVybmFsbHku DQ0KKiBJZiBhIGNhbGwgdG8gYHdhaXRwaWRgIGZpbmRzIG5vIGNoaWxkcmVuLCBpdCBibG9ja3Mg dGhlIHRocmVhZCwgcmVwcmVzZW50aW5nIHRoZSBzdGF0ZSBpbiBhIHN0cnVjdHVyZSBvZiB0eXBl IGBzdHJ1Y3Qgd2FpdHBpZF9zdGF0ZWAuDQ0KKiBSdWJ5IGFsc28ga2VlcHMgYSBsaXN0IG9mIGFs bCBgd2FpdHBpZF9zdGF0ZWAncyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgd2FpdGVkIGZvciwg YHZtLT53YWl0aW5nX3BpZHNgIGFuZCBgdm0tPndhaXRpbmdfZ3Jwc2AuDQ0KKiBUaGVzZSBzdHJ1 Y3R1cmVzIGFyZSBwcm90ZWN0ZWQgd2l0aCBhIHNwZWNpZmljIG11dGV4LCBgdm0tPndhaXRwaWRf bG9ja2AuDQ0KKiBSdWJ5IGludGVybmFsbHkgdXNlcyB0aGUgU0lHQ0hMRCBzaWduYWwgdG8gcmVh cCB0aGUgZGVhZCBjaGlsZHJlbiwgYW5kIHRoZW4gZmluZCBhIHdhaXRpbmcgY2FsbCB0byBgd2Fp dHBpZGAgKHZpYSB0aGUgdHdvIGxpc3RzKSB0byBhY3R1YWxseSBkaXNwYXRjaCB0aGUgcmVhcGVk IHN0YXR1cyB0by4gDQ0KKiBJZiBzb21lIGNhbGxlciBpcyB3YWl0aW5nIGZvciBhIHNwZWNpZmlj IHBpZCwgdGhhdCBfYWx3YXlzXyB0YWtlcyBwcmlvcml0eSBvdmVyIHNvbWUgb3RoZXIgY2FsbGVy IHRoYXQncyB3YWl0aW5nIGZvciBhIHBpZC1ncm91cCAoZS5nLiBgLTFgKS4NDQoNDQptaml0J3Mg Y2hpbGQgcHJvY2VzcyBpcyBwcm90ZWN0ZWQsIGJlY2F1c2U6DQ0KDQ0KKiBXaGVuIG1qaXQgZm9y a3MsIGl0IHVzZXMgYSBtZXRob2QgYHJiX21qaXRfZm9ya2AgdG8gZG8gc28uDQ0KKiBUaGF0IGNh bGxzIHRoZSBhY3R1YWwgYGZvcmtgIGltcGxlbWVudGF0aW9uIF93aGlsc3Qgc3RpbGwgaG9sZGlu Z18gYHZtLT53YWl0cGlkX2xvY2tgDQ0KKiBCZWZvcmUgeWllbGRpbmcgdGhlIGxvY2ssIGl0IGlu c2VydHMgYW4gZW50cnkgaW4gYHZtLT53YWl0aW5nX3BpZHNgIHNheWluZyB0aGF0IG1qaXQgaXMg d2FpdGluZyBmb3IgdGhlIGp1c3QtY3JlYXRlZCBjaGlsZC4NDQoqIFNpbmNlIGRpcmVjdCB3YWl0 cyBmb3IgcGlkcyBhbHdheXMgdGFrZSBwcmVjZWRlbmNlIG92ZXIgcGlkLWdyb3VwcywgdGhpcyBl bnN1cmVzIHRoYXQgbWppdCB3aWxsIGFsd2F5cyByZWFwIGl0cyBvd24gY2hpbGRyZW4uDQ0KDQ0K SSBiZWxpZXZlIHRoaXMgbWVjaGFuaXNtIGNhbiBiZSBleHRlbmRlZCBhbmQgZ2VuZXJhbGlzZWQg dG8gcG93ZXIgdGhlIHByb3Bvc2VkIEFQSSwgYW5kIG1qaXQgY291bGQgaXRzZWxmIHVzZSB0aGF0 IHJhdGhlciB0aGFuIGhhdmluZyBtaml0LXNwZWNpZmljIGhhbmRsaW5nIGluIGBwcm9jZXNzLmNg Lg0NCg0NCiMjIFBPQyBpbXBsZW1lbnRhdGlvbg0NCg0NCkkgc2tldGNoZWQgb3V0IGEgX3Zlcnlf IHJvdWdoIFBPQyB0byBzZWUgaWYgd2hhdCBJIHNhaWQgYWJvdmUgd291bGQgYmUgcG9zc2libGUs IGFuZCBJIHRoaW5rIGl0IGlzOg0NCg0NCmh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvY29t bWl0LzYwMDljNTY0YjE2ODYyMDAxNTM1ZjJiNTYxZjFhMTJmNmU3ZTBjNTcNDQoNDQpUaGUgZm9s bG93aW5nIHNjcmlwdCBiZWhhdmVzIGhvdyBJIGV4cGVjdCB3aXRoIHRoaXMgcGF0Y2g6DQ0KDQ0K YGBgcnVieQ0NCnBpZCwgaCA9IFByb2Nlc3Muc3Bhd25fcHJpdmF0ZSAiL2Jpbi9zaCIsICItYyIs ICJzbGVlcCAxOyBleGl0IDY5Ig0NCnB1dHMgInBpZCAtPiAje3BpZH0iDQ0KcHV0cyAiaCAtPiAj e2h9Ig0NCg0NCiMgc2hvdWxkIEVTUkNILg0NCnNsZWVwIDINDQpiZWdpbg0NCiAgICBQcm9jZXNz LndhaXRwaWQyIC0xDQ0KcmVzY3VlID0+IGUNDQogICAgcHV0cyAid2FpdHBpZCBlcnIgLT4gI3tl fSINDQplbmQNDQp3cGlkLCBzdGF0dXMgPSBoLndhaXQNDQpwdXRzICJ3cGlkIC0+ICN7d3BpZH0i DQ0KcHV0cyAic3RhdHVzIC0+ICN7c3RhdHVzLmluc3BlY3R9Ig0NCmBgYA0NCg0NCmBgYA0NCmt0 c2FuYWt0c2lkaXNAbGltYS1saW51eDEgcnVieSAlIC4vdG9vbC9ydW5ydWJ5LnJiIC0tIC4vdHN0 MS5yYg0NCnBpZCAtPiAxMTU0MTA1DQ0KaCAtPiAjPFByb2Nlc3M6OlByaXZhdGVIYW5kbGU6MHgw MDAwZmZmZjk0MDE0MDk4Pg0NCndhaXRwaWQgZXJyIC0+IE5vIGNoaWxkIHByb2Nlc3Nlcw0NCndw aWQgLT4gMTE1NDEwNQ0NCnN0YXR1cyAtPiAjPFByb2Nlc3M6OlN0YXR1czogcGlkIDExNTQxMDUg ZXhpdCA0Pg0NCmBgYA0NCg0NClRoZSBjaGlsZCBwcm9jZXNzIGNhbiBiZSB3YWl0ZWQgb24gd2l0 aCB0aGUgaGFuZGxlLCBhbmQgdGhlIGNhbGwgdG8gYHdhaXRwaWQyKC0xKWAgZmluZHMgbm90aGlu Zy4NDQoNDQojIyBQcmV2aW91cyBpZGVhOiBPUy1zcGVjaWZpYyBoYW5kbGVzDQ0KDQ0KTXkgZmly c3QgdmVyc2lvbiBvZiB0aGlzIHByb3Bvc2FsIGludm9sdmVkIGEgc2ltaWxhciBBUEksIGJ1dCBw b3dlcmluZyBpdCB3aXRoIHBsYXRmb3JtLXNwZWNpZmljIGNvbmNlcHRzIGF2YWlsYWJsZSBvbiBM aW51eCwgV2luZG93cywgYW5kIEZyZWVCU0Qgd2hpY2ggb2ZmZXIgcmljaGVyIGNvbnRyb2wgdGhh biBqdXN0IHBpZHMgJiB0aGUgYHdhaXRgIHN5c2NhbGwuIEluIHBhcnRpY3VsYXIsIEkgaGFkIGJl bGlldmVkIHRoYXQgd2UgY291bGQgdXNlIHRoZSBgY2xvbmVgIHN5c2NhbGwgaW4gTGludXggdG8g Y3JlYXRlIGEgY2hpbGQgcHJvY2VzcyB3aGljaDoNDQoNDQoqIENvdWxkIGJlIHJlZmVycmVkIHRv IGJ5IGEgdW5pcXVlIGZpbGUgZGVzY3JpcHRvciAoYSBwaWRmZCkgd2hpY2ggd291bGQgYmUgZ3Vh cmFudGVlZCBuZXZlciB0byBiZSByZS11c2VkICh1bmxpa2UgYSBwaWQpLA0NCiogV291bGQgbm90 IGdlbmVyYXRlIGEgc2lnbmFsIHdoZW4gaXQgZXhpdGVkIChpLmUuIG5vIFNJR0NITEQpLg0NCiog Q291bGQgbm90IGJlIHdhaXRlZCBvbiBieSBhbiB1bnNwZWN0aW5nIHRvIGB3YWl0cGlkYCAoZXhj ZXB0IGlmIGEgc3BlY2lhbCBmbGFnIGBfX1dDTE9ORWAgYXMgcGFzc2VkKS4NDQoNDQpVbmZvcnR1 bmF0ZWx5LCB3aGVuIEkgdHJpZWQgdG8gaW1wbGVtZW50IHRoaXMsIEkgcmFuIGludG8gYSBwcmV0 dHkgc2VyaW91cyBzbmFnLiBJdCBpcyBwb3NzaWJsZSB0byBjcmVhdGUgc3VjaCBhIHByb2Nlc3Mg LSBCVVQsIHdoZW4gdGhlIHByb2Nlc3MgZXhlYydzLCBpdCBnb2VzIF9iYWNrXyB0byAicmFpc2Ut U0lHQ0hMRC1vbi1leGl0IiBhbmQgImFsbG93LXdhaXRpbmctd2l0aG91dC1fX1dDTE9ORSIgbW9k ZXMuIEkgZ3Vlc3MgdGhpcyBmdW5jdGlvbmFsaXR5IGluIHRoZSBjbG9uZSBzeXNjYWxsIGlzIHJl YWxseSBkZXNpZ25lZCB0byBwb3dlciB0aHJlYWRzIGluIExpbnV4LCByYXRoZXIgdGhhbiBiZWlu ZyBhIGdlbmVyYWwtcHVycG9zZSAiaGlkZGVuIHByb2Nlc3MiIEFQSS4NDQoNDQpTbywgSSBkb24n dCB0aGluayB3ZSBzaG91bGQgdXNlIHBpZGZkcyBpbiB0aGlzIHByb3Bvc2FsLg0NCg0NCiMjIE1v dGl2YXRpb24NDQoNDQpNeSB1c2UtY2FzZSBmb3IgdGhpcyBpcyB0aGF0IEnigJltIHdvcmtpbmcg b24gYSBwZXJmLWJhc2VkIHByb2ZpbGluZyB0b29sIGZvciBSdWJ5LiBUbyBnZXQgYXJvdW5kIHNv bWUgTGludXggY2FwYWJpbGl0eSBpc3N1ZXMsIEkgd2FudCBteSBwcm9maWxlciBnZW0gKG9yIENS dWJ5IHBhdGNoLCB3aGF0ZXZlciBpdCB3aW5kcyB1cCBiZWluZyEpIHRvIGZvcmsgYSBwcml2aWxl Z2VkIGhlbHBlciBiaW5hcnkgdG8gZG8gc29tZSBlQlBGIHR3aWRkbGluZy4gQnV0LCBpZiB5b3Xi gJlyZSBwcm9maWxpbmcgZS5nLiBhIFVuaWNvcm4gbWFzdGVyIHByb2Nlc3MsIHRoZSByZXN1bHQg b2YgdGhhdCBiaW5hcnkgZXhpdGluZyBtaWdodCBiZSBjYXVnaHQgYnkgVW5pY29ybiBpdHNlbGYs IHJhdGhlciB0aGFuIG15IChnZW0gfCBpbnRlcnByZXRlciBmZWF0dXJlKS4NDQoNDQpJbiBteSBj YXNlLCBJJ20gc28gZGVlcCBpbiBsaW51eCBzcGVjaWZpYyBzdHVmZiB0aGF0IGp1c3QgY2FsbGlu ZyBgY2xvbmUoMilgIGZyb20gbXkgZXh0ZW5zaW9uIGlzIHByb2JhYmx5IGZpbmUsIGJ1dCBJIGhh ZCBlbm91Z2ggb2YgYSBsb29rIGF0IHRoaXMgcHJvY2VzcyBtYW5hZ2VtZW50IHN0dWZmIEkgdGhv dWdodCBpdCB3b3VsZCBiZSB3b3J0aCBhc2tpbmcgdGhlIHF1ZXN0aW9uIGlmIHRoaXMgbWlnaHQg YmUgdXNlZnVsIHRvIG90aGVyLCBtb3JlIG5vcm1hbCwgZ2Vtcy4NDQoNDQoNDQoNDQoNDQotLSAN DQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8NDQogX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwogcnVieS1jb3JlIG1haWxpbmcgbGlzdCAtLSBydWJ5LWNv cmVAbWwucnVieS1sYW5nLm9yZwogVG8gdW5zdWJzY3JpYmUgc2VuZCBhbiBlbWFpbCB0byBydWJ5 LWNvcmUtbGVhdmVAbWwucnVieS1sYW5nLm9yZwogcnVieS1jb3JlIGluZm8gLS0gaHR0cHM6Ly9t bC5ydWJ5LWxhbmcub3JnL21haWxtYW4zL3Bvc3Rvcml1cy9saXN0cy9ydWJ5LWNvcmUubWwucnVi eS1sYW5nLm9yZy8=