From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: staging: typec: handle vendor defined part and modify drp toggling flow From: ShuFanLee Message-Id: Date: Sat, 3 Mar 2018 02:43:16 +0800 To: Jun Li Cc: =?UTF-8?B?c2h1ZmFuX2xlZSjmnY7mm7jluIYp?= , "heikki.krogerus@linux.intel.com" , "linux@roeck-us.net" , "greg@kroah.com" , =?UTF-8?B?Y3lfaHVhbmco6buD5ZWf5Y6fKQ==?= , "linux-kernel@vger.kernel.org" , "linux-usb@vger.kernel.org" , dl-linux-imx List-ID: SGksCgogIFNvcnJ5LCBJIG1vZGlmeSBpdCB0byBwbGFpbiB0ZXh0IG1vZGUgYW5kIHNlbmQgYWdh aW4KCjIwMTgtMDMtMDMgMjozOSBHTVQrMDg6MDAg5p2O5pu45biGIDxsZWVjaHU3MjlAZ21haWwu Y29tPjoKPgo+IEhpIEp1biwKPgo+ICAgSSB0aGluayB0aGlzIG9wZXJhdGlvbiBzaG91bGQgYmUg bW92ZWQgdG8gdmVuZG9yJ3Mgb3BlcmF0aW9uIGFmdGVyIHJlY2hlY2tpbmcgdGhlIHNwZWNpZmlj YXRpb24uCj4KPiAyMDE4LTAzLTAyIDIyOjM4IEdNVCswODowMCBKdW4gTGkgPGp1bi5saUBueHAu Y29tPjoKPj4KPj4gSGkKPj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+PiA+IEZyb206 IHNodWZhbl9sZWUo5p2O5pu45biGKSBbbWFpbHRvOnNodWZhbl9sZWVAcmljaHRlay5jb21dCj4+ ID4gU2VudDogMjAxOOW5tDPmnIgx5pelIDE5OjU0Cj4+ID4gVG86IEp1biBMaSA8anVuLmxpQG54 cC5jb20+OyBTaHVGYW5MZWUgPGxlZWNodTcyOUBnbWFpbC5jb20+Owo+PiA+IGhlaWtraS5rcm9n ZXJ1c0BsaW51eC5pbnRlbC5jb207IGxpbnV4QHJvZWNrLXVzLm5ldDsgZ3JlZ0Brcm9haC5jb20K Pj4gPiBDYzogY3lfaHVhbmco6buD5ZWf5Y6fKSA8Y3lfaHVhbmdAcmljaHRlay5jb20+Owo+PiA+ IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmc7 IGRsLWxpbnV4LWlteAo+PiA+IDxsaW51eC1pbXhAbnhwLmNvbT4KPj4gPiBTdWJqZWN0OiBSRTog W1BBVENIXSBzdGFnaW5nOiB0eXBlYzogaGFuZGxlIHZlbmRvciBkZWZpbmVkIHBhcnQgYW5kIG1v ZGlmeQo+PiA+IGRycCB0b2dnbGluZyBmbG93Cj4+ID4KPj4gPiBIaSBKdW4sCj4+ID4KPj4gPiA+ IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4+ID4gPiBGcm9tOiBKdW4gTGkgW21haWx0bzpq dW4ubGlAbnhwLmNvbV0KPj4gPiA+IFNlbnQ6IFRodXJzZGF5LCBNYXJjaCAwMSwgMjAxOCA2OjA2 IFBNCj4+ID4gPiBUbzogc2h1ZmFuX2xlZSjmnY7mm7jluIYpOyBTaHVGYW5MZWU7IGhlaWtraS5r cm9nZXJ1c0BsaW51eC5pbnRlbC5jb207Cj4+ID4gPiBsaW51eEByb2Vjay11cy5uZXQ7IGdyZWdA a3JvYWguY29tCj4+ID4gPiBDYzogY3lfaHVhbmco6buD5ZWf5Y6fKTsgbGludXgta2VybmVsQHZn ZXIua2VybmVsLm9yZzsKPj4gPiA+IGxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmc7IGRsLWxpbnV4 LWlteAo+PiA+ID4gU3ViamVjdDogUkU6IFtQQVRDSF0gc3RhZ2luZzogdHlwZWM6IGhhbmRsZSB2 ZW5kb3IgZGVmaW5lZCBwYXJ0IGFuZAo+PiA+ID4gbW9kaWZ5IGRycCB0b2dnbGluZyBmbG93Cj4+ ID4gPgo+PiA+ID4gSGkgU2h1ZmFuCj4+ID4gPgo+PiA+ID4gUGxlYXNlIGRvbid0IHRvcCBwb3N0 aW5nCj4+ID4gPgo+PiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPj4gPiA+IEZyb206 IHNodWZhbl9sZWUo5p2O5pu45biGKSBbbWFpbHRvOnNodWZhbl9sZWVAcmljaHRlay5jb21dCj4+ ID4gPiBTZW50OiAyMDE45bm0M+aciDHml6UgMTY6NDkKPj4gPiA+IFRvOiBKdW4gTGkgPGp1bi5s aUBueHAuY29tPjsgU2h1RmFuTGVlIDxsZWVjaHU3MjlAZ21haWwuY29tPjsKPj4gPiA+IGhlaWtr aS5rcm9nZXJ1c0BsaW51eC5pbnRlbC5jb207IGxpbnV4QHJvZWNrLXVzLm5ldDsgZ3JlZ0Brcm9h aC5jb20KPj4gPiA+IENjOiBjeV9odWFuZyjpu4PllZ/ljp8pIDxjeV9odWFuZ0ByaWNodGVrLmNv bT47Cj4+ID4gPiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOyBsaW51eC11c2JAdmdlci5r ZXJuZWwub3JnOyBkbC1saW51eC1pbXgKPj4gPiA+IDxsaW51eC1pbXhAbnhwLmNvbT4KPj4gPiA+ IFN1YmplY3Q6IFJFOiBbUEFUQ0hdIHN0YWdpbmc6IHR5cGVjOiBoYW5kbGUgdmVuZG9yIGRlZmlu ZWQgcGFydCBhbmQKPj4gPiA+IG1vZGlmeSBkcnAgdG9nZ2xpbmcgZmxvdwo+PiA+ID4KPj4gPiA+ IEhpIEp1biwKPj4gPiA+Cj4+ID4gPiAgIFRoZSBhdHRhY2htZW50IGlzIHdhdmVmb3JtIG9mIHRo ZSBjb25kaXRpb24gd2UgbWV0IGJ1dCBJJ20gbm90IHN1cmUKPj4gPiA+IHdoZXRoZXIgeW91IGNh biBkb3dubG9hZCB0aGUgYXR0YWNobWVudC4KPj4gPiA+ICAgSSBhZGQgbG9nIGluIFJUMTcxMUgg aXQgc2hvd3MgYXMgZm9sbG93aW5nOgo+PiA+ID4KPj4gPiA+IFlvdSBkb24ndCBuZWVkIGFkZCBs b2cgYnkgeW91ciBvd24uCj4+ID4gPiBUaGVyZSBpcyB0Y3BtKC4vZHJpdmVycy91c2IvdHlwZWMv dGNwbS5jKSBsb2cgZm9yIGRlYnVnIGFscmVhZHksIHdoaWNoIGNhbgo+PiA+IHNob3cgYWxsIHRo ZSBldmVudHMgYW5kIHN0YXRlIHRyYW5zaXRpb25zLCB5b3UgY2FuIGdldCBpdCBieSBiZWxvdyBj b21tYW5kCj4+ID4gYXMgSSBjb21tZW50ZWQ6Cj4+ID4gPgo+PiA+ID4gY2F0IC9zeXMva2VybmVs L2RlYnVnL3RjcG0veHh4eHgoeW91ciB0Y3BjIGkyYyBkZXZpY2UpCj4+ID4gPgo+PiA+IEFmdGVy IGFwcGx5aW5nIHlvdXIgcGF0Y2hbMl0sIFRDUE0gbG9nIGlzIGFzIGZvbGxvd2luZzoKPj4KPj4g SSBhc3N1bWUgeW91IGFsc28gYXBwbGllZCBteSBwYXRjaCBbMV0uCj4+IFsxXSBodHRwczovL3d3 dy5zcGluaWNzLm5ldC9saXN0cy9kZXZpY2V0cmVlL21zZzIxNjg1MS5odG1sCj4+Cj4gWWVzLCB0 aGlzIHBhdGNoIGlzIGFsc28gYXBwbGllZC4KPj4KPj4gPgo+PiA+IFsgICA1My4wNTA2MDJdIEND MTogMCAtPiAyLCBDQzI6IDAgLT4gMCBbc3RhdGUgRFJQX1RPR0dMSU5HLCBwb2xhcml0eSAwLAo+ PiA+IGNvbm5lY3RlZF0KPj4gPiBbICAgNTMuMDUwNjEzXSBzdGF0ZSBjaGFuZ2UgRFJQX1RPR0dM SU5HIC0+IFNSQ19BVFRBQ0hfV0FJVAo+PiA+IFsgICA1My4wNTA2NzhdIHBlbmRpbmcgc3RhdGUg Y2hhbmdlIFNSQ19BVFRBQ0hfV0FJVCAtPiBTTktfVFJZIEAKPj4gPiAyMDAgbXMKPj4gPiA9PiBS ZCBpcyBwbHVnZ2VkIG91dAo+PiA+IFsgICA1My4xNzg4MDRdIENDMTogMiAtPiAwLCBDQzI6IDAg LT4gMCBbc3RhdGUgU1JDX0FUVEFDSF9XQUlULCBwb2xhcml0eSAwLAo+PiA+IGRpc2Nvbm5lY3Rl ZF0KPj4gPiBbICAgNTMuMTc4ODE1XSBzdGF0ZSBjaGFuZ2UgU1JDX0FUVEFDSF9XQUlUIC0+IFNS Q19VTkFUVEFDSEVECj4+ID4gPT4gUmQgaXMgcGx1Z2dlZCBpbgo+PiA+IFsgICA1My4xNzg4NzRd IFN0YXJ0IERSUCB0b2dnbGluZwo+PiA+IFsgICA1My4xODg0NzJdIENDMTogMCAtPiAwLCBDQzI6 IDAgLT4gMCBbc3RhdGUgRFJQX1RPR0dMSU5HLCBwb2xhcml0eSAwLAo+PiA+IGRpc2Nvbm5lY3Rl ZF0KPj4KPj4gMS4gVGhlIHBsdWcgb3V0IGFuZCB0aGVuIHBsdWcgaW4gaGFwcGVucyBpbiAxMG1z PyAoNTMuMTg4NDcyIC0gNTMuMTc4ODA0KQo+PiBXYXMgdGhpcyBkb25lIG1hbnVhbGx5PyBPciBi eSBzb21lIHNwZWNpYWwgdGVzdCBtZXRob2Q/Cj4KPiBJdCdzIGRvbmUgbWFudWFsbHkuIElmIHlv dSBjYW4gZG93bmxvYWQgdGhlIHdhdmVmb3JtIGF0dGFjaGVkIGluIHByZXZpb3VzIGVtYWlsLCB5 b3UgY2FuIHNlZSBSZCBpcyBwbHVnZ2VkIG91dC9pbiB3aXRoaW4gbXMgbGV2ZWwuCj4gV2UgY29u bmVjdCBhIGJyaWRnZSBib2FyZCB3aXRoIHRlc3QgcG9pbnRzIG9mIENDMSwgQ0MyIGFuZCBHTkQg dG8gb3VyIHBsYXRmb3JtJ3MgVHlwZWMgcmVjZXB0YWNsZS4gVGhlbiB3ZSBjYW4gc2ltdWxhdGUg YSBkZXZpY2UgcGx1Z2dpbmcgaW4vb3V0IGJ5IGNvbm5lY3RpbmcvZGlzY29ubmVjdGluZyBhIDUu MWsgcmVzaXN0b3IgYmV0d2VlbiBDQzEgYW5kIEdORC4KPgo+Pgo+PiAyLiBUaGlzIGlzIGFsbCB0 Y3BtIGxvZyBpZiB5b3UgZmluYWxseSBrZWVwIHRoZSBSZC1kZXZpY2UgY29ubmVjdGVkIG9uIHR5 cGVjCj4+IHBvcnQ/IFRoZXJlIGlzIG5vIG1vcmUgdGNwbSBsb2cgYWZ0ZXIgNTMuMTg4NDcyIGlm IHlvdSBwbHVnIGluIFJkLWRldmljZQo+Pgo+PiBhbmQgZG9uJ3QgcmVtb3ZlIGl0Pwo+Cj4gWWVz LCBSVDE3MTFIIHJlcG9ydHMgb3Blbi9vcGVuIHRvIFRDUE0gaW4gZHJwX3RvZ2dsaW5nIHN0YXRl IGFuZCBzdG9wcyB0b2dnbGluZy4gQ3VycmVudGx5LCBUQ1BNIGRvZXMgbm90IHJlc3RhcnQgZHJw X3RvZ2dsaW5nIGlmIGl0IHJlY2VpdmVzIG9wZW4vb3BlbiBpbiBkcnBfdG9nZ2xpbmcgc3RhdGUu Cj4gSSByZW1lbWJlciB0aGUgc3BlY2lmaWNhdGlvbiBvZiBUeXBlQyBkb2VzIG5vdCBkZXBpY3Qg d2hhdCBUQ1BNIHNob3VsZCBkbyBpZiBpdCByZWNlaXZlcyBvcGVuL29wZW4gaW4gZHJwX3RvZ2ds aW5nIHN0YXRlLgo+IE1heWJlIHJlc3RhcnQgdG9nZ2xpbmcgaXMgYW4gb3B0aW9uLgo+Cj4+IDMu IElmIHRoZSBhbnN3ZXIgb2YgUTIgaXMgeWVzLCB0aGVuIEkgbXVzdCBhc2sgd2h5IHlvdSB0Y3Bj IGNoaXAraW50ZXJuYWwgZmlybXdhcmUKPj4gY2FuJ3QgcmVwb3J0IGZ1cnRoZXIgY2MgY2hhbmdl IGV2ZW50IGFmdGVyIHlvdXIgZHJwIHRvZ2dsaW5nIHN0YXJ0cyB0byBwcmVzZW50IFJwKEkga25v dwo+PiBpdCBmaXJzdGx5IHByZXNlbnQgUmQgYWZ0ZXIgeW91IHdyaXRlIHRvIExPT0s0Q09OTkVD VElPTiwgYnV0IHRoZW4gaXQgc2hvdWxkIGNoYW5nZQo+PiB0byBwcmVzZW50IFJwLCBzbyBpdCBz aG91bGQgYmUgYWJsZSB0byBkZXRlY3QgdGhlIFJkLWRldmljZSBmaW5hbGx5KQo+Cj4gQmVjYXVz ZSBSVDE3MTFIJ3MgaW50ZXJuYWwgZmlybXdhcmUgY2hhbmdlcyB0byBhdHRhY2hlZCBzdGF0ZSB3 aGVuIFJkIGlzIHJlLXBsdWdnZWQgaW4oY2MgbGV2ZWwgaXMgZGVmYXVsdCBScCAoYXJvdW5kIDQw MG1WKSBub3cpLgo+IFRoZW4sIExPT0s0Q09OTkVDVElPTiBpcyBzZXQgYW5kIFJUMTcxMUggY2hh bmdlcyBDQ3ggdG8gUmQgdGhhdCBtYWtlcyBpdCByZXBvcnRzIG9wZW4vb3BlbihiZWNhdXNlIGNj IGxldmVsIGNoYW5nZXMgZnJvbSBkZWZhdWx0IFJwKGFyb3VuZCA0MDBtVikgdG8gMG1WKQo+Pgo+ Pgo+PiA+Cj4+ID4gSWYgVENQTSBkb2VzIG5vdCBlbnRlciBTUkNfQVRUQUNIRUQgc3RhdGUsIFJD LkRSUCB3aWxsIG5vdCBiZSBjbGVhcmVkLgo+Pgo+PiBJbiB0aGlzIGNhc2UsIHlvdSBkb27igJl0 IG5lZWQgY2xlYXIgUkMuRFJQLCBzZWUgVENQQ0kgc3BlYzoKPj4gIkZpZ3VyZSA0LTE4LiBTaW5r IERpc2Nvbm5lY3QiCj4+IFRDUE0gc2luayBkb2Vzbid0IGNsZWFyIGl0IGluIHdob2xlIHNlcXVl bmNlLCBqdXN0IGRpcmVjdGx5IHNldCBpdDoKPj4gUmVzdGFydCBEUlAgVG9nZ2xpbmcKPj4gUEMu QXV0b0Rpc2NoYXJnZURpc2Nvbm5lY3Q9MGIKPj4gU2V0IFJDLkRSUD0xYiAoRFJQKQo+PiBTZXQg UkMuQ0MxPTEwYiAoUmQpCj4+IFNldCBSQy5DQzI9MTBiIChSZCkKPj4gQ09NTUFORC5Mb29rNENv bm5lY3Rpb24gKERSUCB0b2dnbGUpCj4+Cj4+Cj4+ID4gV2hlbiBUQ1BNIHdyaXRlcyBSZC9SZCBv ciBScC9ScCBpbiB0aGUgZHJwX3RvZ2dsaW5nIGZ1bmN0aW9uLCBpdCBkb2VzIG5vdAo+PiA+IHRh a2UgZWZmZWN0IHVudGlsIExPT0s0Q09OTkVDVElPTiBjb21tYW5kIGlzIHNldC4KPj4gPiBUaGUg YWJvdmUgY29uZGl0aW9uIGNhdXNlcyBSVDE3MTFIIHJlcG9ydHMgb3Blbi9vcGVuIGF0IFs1My4x ODg0NzJdCj4+ID4KPj4gPiA+IFsgOTE0LjkzNzM0MF0gdHlwZWNfcnQxNzExaCAyLTAwNGU6IF9f cnQxNzExaF9pcnFfaGFuZGxlciBbCj4+ID4gPiA5MTQuOTQzODM4XSB0eXBlY19ydDE3MTFoIDIt MDA0ZTogX190Y3BtX2dldF9jYyBjYzEgPSBPcGVuLCBjYzIgPQo+PiA+IE9wZW4KPj4gPiA+ID0+ IERldmljZShSZCkgaXMgcGx1Z2dlZCBvdXQKPj4gPiA+Cj4+ID4gPiBbIDkxNC45NTgwNDFdIHR5 cGVjX3J0MTcxMWggMi0wMDRlOiB0Y3BtX3NldF9wZF9yeCAwIFsgOTE0Ljk2MzAxMV0KPj4gPiA+ IHR5cGVjX3J0MTcxMWggMi0wMDRlOiB0Y3BtX3NldF92YnVzIHZidXMgPSAwIFsgOTE0Ljk2ODQw N10KPj4gPiA+IHR5cGVjX3J0MTcxMWgKPj4gPiA+IDItMDA0ZTogdGNwbV9zZXRfdmJ1cyBjaGcg aXMgYWxyZWFkeSAwIFsgOTE0Ljk3NDU0MV0gdHlwZWNfcnQxNzExaAo+PiA+IDItMDA0ZToKPj4g PiA+IHRjcG1fc2V0X3Zjb25uIHZjb25uIGlzIGFscmVhZHkgMCBbIDkxNC45ODA5MjFdIHR5cGVj X3J0MTcxMWggMi0wMDRlOgo+PiA+ID4gdGNwbV9zZXRfY3VycmVudF9saW1pdCAwIG1hLCAwIG12 IChub3QgaW1wbGVtZW50ZWQpIFsgOTE0Ljk4ODg5NF0KPj4gPiA+IHR5cGVjX3J0MTcxMWggMi0w MDRlOiB0Y3BtX3NldF9wb2xhcml0eSBQb2xhcml0eV9DQzEgWyA5MTUuMDAzMjAxXQo+PiA+ID4g dHlwZWNfcnQxNzExaCAyLTAwNGU6IHRjcG1fc2V0X3JvbGVzIFNvdXJjZSBIb3N0IFsgOTE1LjAw OTI2NF0KPj4gPiA+IHR5cGVjX3J0MTcxMWggMi0wMDRlOiB0Y3BtX3N0YXJ0X2RycF90b2dnbGlu ZyA9PiBzdGF0ZV9tYWNoaW5lX3dvcmsKPj4gPiBvZgo+PiA+ID4gVENQTSBjYWxscyBzdGFydF9k cnBfdG9nZ2xpbmcgZnVuY3Rpb24gYnV0IGRvZXMgbm90IHNldAo+PiA+ID4gTE9PSzRDT05ORUNU SU9OIGNvbW1hbmQgeWV0ID0+IChOb3RlMSkgRGV2aWNlKFJkKSBpcyBwbHVnZ2VkIGluCj4+ID4g PiAoUlQxNzExSCdzIGludGVybmFsIGZpcm13YXJlIGRldGVjdHMgUmQgcGx1Z2dlZCBpbi4gY2Nf Y2hhbmdlIGlzCj4+ID4gPiB0cmlnZ2VyZWQgYW5kIGl0IHdpbGwgYmUgdlJkLWNvbm5lY3RlZCBh dCB0aGlzIG1vbWVudCkgPT4gVENQTSB3cml0ZXMKPj4gPiA+IExPT0s0Q09OTkVDVElPTiBjb21t YW5kCj4+ID4gPiAtIEJlY2F1c2UgUkMuRFJQIGlzIHN0aWxsIDEsIFJUMTcxMUggd2lsbCBub3Qg cHVsbCBjYzEvY2MyIHRvIFJkIHdoaWxlCj4+ID4gPiB3cml0aW5nIFJkL1JkIHRvIFJDLkNDMS9S Qy5DQzIuCj4+ID4gPiAtIChOb3RlMikgUmlnaHQgYWZ0ZXIgTE9PSzRDT05ORUNUSU9OIGNvbW1h bmQgaXMgd3JpdHRlbiwgUlQxNzExSAo+PiA+ID4gcHVsbHMgQ0MgdG8gUmQncyBsZXZlbCAoYmVj YXVzZSBSQy5Sb2xlIGlzIFJkL1JkKSwgc3RvcCB0b2dnbGluZwo+PiA+ID4gKGJlY2F1c2UKPj4g PiA+IGRldmljZShSZCkgaXMgYWxyZWFkeSBjb25uZWN0ZWQpIGFuZCBDQyBzdGF0dXMgd2lsbCBi ZSBvcGVuL29wZW4gbm93Cj4+ID4gPiAoYmVjYXVzZSBSVDE3MTFIIHByZXNlbnRzIFJkIGFuZCBk ZXZpY2UgaXMgY29ubmVjdGVkKFJkKSkKPj4gPiA+Cj4+ID4gPiBbIDkxNS4wMzcyNjNdIHR5cGVj X3J0MTcxMWggMi0wMDRlOiBfX3RjcG1fZ2V0X2NjIGNjMSA9IE9wZW4sIGNjMiA9Cj4+ID4gPiBP cGVuID0+IEVudGVyIFJUMTcxMUgncyBpcnEgaGFuZGxlciBhbmQgaXQgcmVwb3J0cyBvcGVuL29w ZW4KPj4gPiA+Cj4+ID4gPiBJIHRoaW5rIHRoZSBwb2ludCBpcyB0byB3cml0ZSBSQy5EUlAgPSAw IGF0IHRoZSBiZWdpbm5pbmcgb2YKPj4gPiA+IGRycF90b2dnbGluZyBzbyB0aGF0IFJUMTcxMUgg d2lsbCBwdWxsIGNjMS9jYzIgdG8gUmQgd2hpbGUgd3JpdGluZwo+PiA+ID4gUmQvUmQgdG8gUkMu Q0MxL1JDLkNDMiBUaGlzIG9wZXJhdGlvbiB3aWxsIG1ha2UgUlQxNzExSCdzIGludGVybmFsCj4+ ID4gPiBmaXJtd2FyZSByZXN0YXJ0cyBmcm9tIGRpc2Nvbm5lY3RlZCBzdGF0ZSBhbmQgdG9nZ2xl cyBjb3JyZWN0bHkuCj4+ID4gPgo+PiA+ID4gQWNjb3JkaW5nIHRvIFRDUENJIHNwZWMgKDQuNC41 LjIpOgo+PiA+ID4gSXQgaXMgcmVjb21tZW5kZWQgdGhlIFRDUE0gd3JpdGUgUk9MRV9DT05UUk9M LkRSUD0wIGJlZm9yZSB3cml0aW5nCj4+ID4gdG8KPj4gPiA+IFBPV0VSX0NPTlRST0wuQXV0b0Rp c2NoYXJnZURpc2Nvbm5lY3QgYW5kIHN0YXJ0aW5nIHRoZSBEUlAgdG9nZ2xpbmcKPj4gPiA+IHVz aW5nIENPTU1BTkQuTG9vazRDb25uZWN0aW9uIFJlc3RhcnQgRFJQIFRvZ2dsaW5nID0+IEl0IGlz Cj4+ID4gPiByZWNvbW1lbmRlZCB0aGUgVENQTSB3cml0ZSBST0xFX0NPTlRST0wuRFJQPTAgaGVy ZSBTZXQKPj4gPiA+Cj4+ID4gPiBUaGlzIHN0YXRlbWVudCBpc19ub3RfIHJlY29tbWVuZCB5b3Ug ZG8gdGhpcyhSQy5EUlA9MCkgZm9yIHN0YXJ0IGRycAo+PiA+IHRvZ2dsaW5nLCBQbGVhc2UgY2Fy ZWZ1bGx5IGNoZWNrIHRoZSB3aG9sZSBzZW50ZW5jZToKPj4gPiA+ICIuLi4gYXMgc2hvd24gaW4g RmlndXJlIDQtMTYsICIKPj4gPiA+IElmIHlvdSBsb29rIGF0ICJGaWd1cmUgNC0xNi4gRFJQIElu aXRpYWxpemF0aW9uIGFuZCBDb25uZWN0aW9uIERldGVjdGlvbiIKPj4gPiA+IEl0IGdpdmVzIGNs ZWFyIGRycCB0b2dnbGluZyBzdGFydCBvcGVyYXRpb25zOgo+PiA+ID4KPj4gPiA+IFNldCBUQ1BD IHRvIERSUAo+PiA+ID4gLSBSZWFkIFBTLlRDUENJbml0aWFsaXphdGlvblN0YXR1cwo+PiA+ID4g LSBXcml0ZSBST0xFX0NPTlRST0wKPj4gPiA+IC0gUkMuRFJQID0gMWIKPj4gPiA+IC0gUkMuQ0My PTAxYiBvciAxMGIKPj4gPiA+IC0gUkMuQ0MxPTAxYiBvciAxMGIKPj4gPiA+IC0gUkMuQ0MxPVJD LkNDMgo+PiA+ID4gLSBXcml0ZSBDT01NQU5ELkxvb2s0Q29ubmVjdGlvblBTLgo+PiA+ID4KPj4g PiA+IEFib3ZlIGlzIGFsbCBvcGVyYXRpb25zIHJlcXVpcmVkIHRvIHN0YXJ0IGRycCB0b2dnbGlu Zy4gWW91IGFsc28gY2FuIHNlZQo+PiA+IFJDLkNDeCA9IDAxYiBvciAxMGIsIG5vdCBmaXhlZCB0 byBiZSBSZCwgcmlnaHQ/Cj4+ID4gWWVzLCB0aGlzIG9uZSBzaG91bGQgYmUgbGlrZSB5b3VyIHBh dGNoWzA3LzEyXS4gV3JpdGUgUmQgb3IgUnAgdG8gUkMuQ0N4Cj4+ID4gYWNjb3JkaW5nIHRvIHRo ZSBjYyBwYXJhbWV0ZXIgb2YgZHJwX3RvZ2dsaW5nIGZ1bmN0aW9uLgo+PiA+ID4KPj4gPiA+IEdv IG9uIHRvIGNoZWNrIHRoZSBGaWd1cmUgNC0xNgo+PiA+ID4gQWZ0ZXIgZGVib3VuY2UsIHdlIG5l ZWQgZG8gZm9sbG93aW5nOgo+PiA+ID4KPj4gPiA+IENvbm5lY3Rpb25EZXRlcm1pbmUgQ0MgJiBW Q09OTgo+PiA+ID4gLSBXcml0ZSBSQy5DQzEgJiBSQy5DQzIgcGVyIGRlY2lzaW9uCj4+ID4gPiAt IFdyaXRlIFJDLkRSUD0wCj4+ID4gPiAtIFdyaXRlIFRDUENfQ09OVFJPbC5QbHVnT3JpZW50YXRp b24KPj4gPiA+IC0gV3JpdGUgUEMuQXV0b0Rpc2NoYXJnZURpc2Nvbm5lY3Q9MQo+PiA+ID4gICYg UEMuRW5hYmxlVmNvbm5Db25uZWN0aW9uCj4+ID4gPgo+PiA+ID4gQ3VycmVudCBleGlzdGluZyB0 Y3BtK3RjcGNpIHdpbGwgbm90IGNsZWFyIFJDLkRSUCBhZnRlciBhdHRhY2gsIFRoYXQgbWVhbnMK Pj4gPiBSQy5EUlAgY2xlYXIgbWF5IGJlIGRvbmUgYWZ0ZXIgYXR0YWNoLCBub3QgaW4gc3RhcnRf ZHJwX3RvZ2dsaW5nLgo+PiA+ID4gSSBhbSBub3Qgc3VyZSBpZiB0aGlzIGNhbiByZXNvbHZlIHlv dXIgcHJvYmxlbSwgYnV0IEkgdGhpbmsgaXQgZGVzZXJ2ZSBhIHRyeSwKPj4gPiB5b3UgY2FuIGZv bGxvdyBhYm92ZSBvcGVyYXRpb24gc2VxdWVuY2Ugd2hpbGUgZW50ZXJpbmcgYXR0YWNoIHN0YXRl LCByZWZlcgo+PiA+IHRvIG15IHBhdGNoWzJdOgo+PiA+ID4KPj4gPiA+IFsyXQo+PiA+ID4KPj4g PiBodHRwczovL2VtZWEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0 dHBzJTNBJTJGJTJGdwo+PiA+IHd3Cj4+ID4gPiAuc3Bpbmljcy5uZXQlMkZsaXN0cyUyRmRldmlj ZXRyZWUlMkZtc2cyMTY4NTIuaHRtbCZkYXRhPTAyJTdDMDElNwo+PiA+IENqdW4uCj4+ID4gPgo+ PiA+IGxpJTQwbnhwLmNvbSU3QzkxMTc0MjU1NTBkMjRkZGM4NmQ4MDhkNTdmNmIxYjRlJTdDNjg2 ZWExZDNiYzJiCj4+ID4gNGM2ZmE5MmMKPj4gPiA+Cj4+ID4gZDk5YzVjMzAxNjM1JTdDMCU3QzAl N0M2MzY1NTUwMjAzNjY0ODM0NTYmc2RhdGE9OSUyQnl3WWwlMkJSCj4+ID4gUFl0azYwV2c2cAo+ PiA+ID4gUjYzY0NXMkFuUlhzJTJCcklOdnZxVXBxTDE4JTNEJnJlc2VydmVkPTAKPj4gPiA+Cj4+ ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3R5cGVjL3RjcGNpLmMKPj4gPiA+IGIv ZHJpdmVycy9zdGFnaW5nL3R5cGVjL3RjcGNpLmMgaW5kZXggNTMwYTVkNy4uNzE0NTc3MSAxMDA2 NDQKPj4gPiA+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy90eXBlYy90Y3BjaS5jCj4+ID4gPiArKysg Yi9kcml2ZXJzL3N0YWdpbmcvdHlwZWMvdGNwY2kuYwo+PiA+ID4gQEAgLTE4NCw2ICsxODQsNyBA QCBzdGF0aWMgaW50IHRjcGNpX3NldF9wb2xhcml0eShzdHJ1Y3QgdGNwY19kZXYgKnRjcGMsCj4+ ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHR5cGVjX2NjX3BvbGFyaXR5 IHBvbGFyaXR5KSAgewo+PiA+ID4gICAgICAgICBzdHJ1Y3QgdGNwY2kgKnRjcGNpID0gdGNwY190 b190Y3BjaSh0Y3BjKTsKPj4gPiA+ICsgICAgICAgdW5zaWduZWQgaW50IHJlZzsKPj4gPiA+ICAg ICAgICAgaW50IHJldDsKPj4gPiA+Cj4+ID4gPiAgICAgICAgIHJldCA9IHJlZ21hcF93cml0ZSh0 Y3BjaS0+cmVnbWFwLCBUQ1BDX1RDUENfQ1RSTCwgQEAKPj4gPiAtMTkyLDYgKzE5MywyMCBAQCBz dGF0aWMgaW50IHRjcGNpX3NldF9wb2xhcml0eShzdHJ1Y3QgdGNwY19kZXYgKnRjcGMsCj4+ID4g PiAgICAgICAgIGlmIChyZXQgPCAwKQo+PiA+ID4gICAgICAgICAgICAgICAgIHJldHVybiByZXQ7 Cj4+ID4gPgo+PiA+ID4gKyAgICAgICByZXQgPSByZWdtYXBfcmVhZCh0Y3BjaS0+cmVnbWFwLCBU Q1BDX1JPTEVfQ1RSTCwgJnJlZyk7Cj4+ID4gPiArICAgICAgIGlmIChyZXQgPCAwKQo+PiA+ID4g KyAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4+ID4gPiArCj4+ID4gPiArICAgICAgIGlmIChw b2xhcml0eSA9PSBUWVBFQ19QT0xBUklUWV9DQzIpCj4+ID4gPiArICAgICAgICAgICAgICAgcmV0 ID0gVENQQ19ST0xFX0NUUkxfQ0MxX1NISUZUOwo+PiA+ID4gKyAgICAgICBlbHNlCj4+ID4gPiAr ICAgICAgICAgICAgICAgcmV0ID0gVENQQ19ST0xFX0NUUkxfQ0MyX1NISUZUOwo+PiA+ID4gKyAg ICAgICByZWcgfD0gVENQQ19ST0xFX0NUUkxfQ0NfT1BFTiA8PCByZXQ7Cj4+ID4gPiArICAgICAg IHJlZyAmPSB+VENQQ19ST0xFX0NUUkxfRFJQOwo+PiA+ID4gKyAgICAgICByZXQgPSByZWdtYXBf d3JpdGUodGNwY2ktPnJlZ21hcCwgVENQQ19ST0xFX0NUUkwsIHJlZyk7Cj4+ID4gPiArICAgICAg IGlmIChyZXQgPCAwKQo+PiA+ID4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4+ID4gPiAr Cj4+ID4gPiAgICAgICAgIHJldHVybiAwOwo+PiA+ID4gIH0KPj4gPiA+Cj4+ID4gPiBQQy5BdXRv RGlzY2hhcmdlRGlzY29ubmVjdD0wYiBTZXQgUkMuRFJQPTFiIChEUlApIFNldCBSQy5ScFZhbHVl PTAwYgo+PiA+ID4gKHNtYWxsZXN0IFJwIHRvIHNhdmUgcG93ZXIpIFNldCBSQy5DQzE9MDFiIFNl dAo+PiA+ID4gUkMuQ0MyPTAxYkNPTU1BTkQuTG9vazRDb25uZWN0aW9uTm8KPj4gPiA+Cj4+ID4g PiBJdCBzZWVtcyBsaWtlIGl0IGlzIG5vdCBhIGdlbmVyYWwgY2FzZSBoZXJlIChiZWNhdXNlIGl0 IGlzIG9ubHkKPj4gPiA+IHJlY29tbWVuZGVkIGJ1dCBub3QgbmVjZXNzYXJ5KSwgd2UgY2FuIG1v dmUgaXQgdG8gdmVuZG9yX29wcyBpbiB0aGUKPj4gPiBuZXh0IHBhdGNoLgo+PiA+ID4KPj4gPiA+ IFRoZSBUQ1BNIHNob3VsZCBiZSBhYmxlIHRvIGNvdmVyIGFsbCBjYXNlcywgYW5kIHdlIHNob3Vs ZCBmb2xsb3cgdGhlCj4+ID4gcmVjb21tZW5kZWQgc2VxdWVuY2UoaWYgd2hhdCB5b3UgYXJlIHRy eWluZyB0byBkbyBpcyByZWFsbHkgYXMgc3BlYyBzYXlzKS4KPj4gPiBBZ3JlZSEKPj4gPiBNeSB1 bmRlcnN0YW5kaW5nIGlzIHRoYXQgd2UgbmVlZCB0byBzZXQgUkMuRFJQIHRvIDAgZXZlcnkgdGlt ZSBiZWZvcmUKPj4gPiBUQ1BNIHJlc3RhcnRzIHRvZ2dsaW5nIGJ1dCBub3QganVzdCBmb3IgYXR0 YWNoZWQuCj4+Cj4+IEFjdHVhbGx5IEkgaGF2ZSBubyBvYmplY3Rpb24gb24gYWRkaW5nIGEgUkMu RFJQIGNsZWFyLCB0aGUgcXVlc3Rpb24gaXMKPj4gd2hlcmUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRv IGRvIHRoaXMsIHRpbGwgbm93IEkgZG9u4oCZdCBzZWUgaG93IHRoaXMgRFJQIGJpdCBrZWVwIHNl dAo+PiB3aGlsZSBzdGFydCBkcnAgdG9nZ2xpbmcgaXMgY2F1c2luZyBwcm9ibGVtLCBZb3Ugd2Fu dCB0byBzdGFydCBwcmVzZW50IFJkIGFmdGVyIHdyaXRlCj4+IENDMS9DQzIgdG8gYmUgUmQvUmQg YW5kIGJlZm9yZSB3cml0ZSB0byBMT09LNENPTk5FQ1RJT04sIHRoaXMgaXMgbm90IHJlcXVpcmVk Cj4+IHBlciB0Y3BjaSBzcGVjLgo+Cj4gQWNjb3JkaW5nIHRvIFRDUENJJ3Mgc3BlY2lmaWNhdGlv biwgaXQgaXMgcmVjb21tZW5kZWQgdGhlIFRDUE0gd3JpdGUgUkMuRFJQID0gMCBiZWZvcmUgY2hh bmdpbmcgQXV0b0Rpc2NoYXJnZURpc2Nvbm5lY2QuCj4gTWF5YmUsIGFuIGludGVyZmFjZSBmb3Ig Y29udHJvbGxpbmcgQXV0b0Rpc2NoYXJnZURpc2Nvbm5lY2QgY2FuIGJlIGFkZGVkLiBUaGVuIGNs ZWFyIFJDLkRSUCBpbiB0aGUgYmVnaW5uaW5nIG9mIHRoYXQgaW50ZXJmYWNlLgo+Pgo+Pgo+PiAt QmVoYXZpb3IgYWZ0ZXIgeW91ciBwYXRjaDoKPj4gLy9iZWdpbiB3aXRoIE9wZW4gYXMgUkMuRFJQ ID0gMQo+PiBSQy5DQ3g9UmQgJiBSQy5EUlAgPSAwOyAvL1N0YXJ0IHByZXNlbnQgUmQKPj4gV2Fp dCAxbXM7IC8vIFN0aWxsIFJkCj4+IFJDLkNDeD1SZCAmIFJDLkRSUCA9IDE7IC8vT3Blbj8KPj4g TG9vazRDT05ORUNUSU9OID0gMTsgLy9EUlAgdG9nZ2xpbmcgY29udGludWUgcHJlc2V0IFJkCj4+ Cj4+IElzIG15IGFib3ZlIENDIHN0YXRlIGRlc2NyaXB0aW9uIGNvcnJlY3Q/IElzIHRoaXMgd2hh dCB5b3Ugd2FudD8KPgo+IENvcnJlY3QuIEJ1dCB0aGUgcHVycG9zZSBvZiBzZXR0aW5nIFJDLkND eCA9IFJkICYgUkMuRFJQID0gMCBpcyB0byBtYWtlIFJUMTcxMUgncyBpbnRlcm5hbCBmaXJtd2Fy ZSBsZWF2ZSBhdHRhY2hlZCBzdGF0ZS4KPiBCZWNhdXNlIFJUMTcxMUggaXMgc3RpbGwgcHJlc2Vu dGluZyBScCBhZnRlciB0aGUgZGV2aWNlIGlzIHBsdWdnZWQgb3V0LCBpdCdzIGludGVybmFsIGZp cm13YXJlIGVudGVycyBhdHRhY2hlZCBzdGF0ZSB3aGVuIHRoZSBkZXZpY2UgcmUtcGx1Z2dlZCBp bi4KPiBXaGVuIHdlIHdyaXRlIFJDLkNDeCA9IFJkICYgUkMuRFJQID0gMCwgUlQxNzExSCdzIGlu dGVybmFsIGZpcm13YXJlIGxlYXZlcyBhdHRhY2hlZCBzdGF0ZS4gU28gaXQgd2lsbCBrZWVwIHRv Z2dsaW5nIGZyb20gUmQgdG8gUnAgYnV0IG5vdCByZXBvcnQgb3Blbi9vcGVuIHdoZW4gTE9PSzRD T05ORUNUSU9OIGlzIHNldC4KPiBBZnRlciByZWNoZWNraW5nIHRoZSBzcGVjaWZpY2F0aW9uIG9m IFRDUENJLCBJIHRoaW5rIFRDUEMncyBpbnRlcm5hbCBmaXJtd2FyZSBzaG91bGQgc3RhcnQgdG9n Z2xpbmcgZnJvbSBkZXRhY2hlZCBzdGF0ZSB3aGVuIExPT0s0Q09OTkVDVElPTiBpcyBzZXQgZXZl biBpZiBSQy5EUlAgaXMgbm90IGNsZWFyZWQgYmVmb3JlCj4gSSd2ZSBkaXNjdXNzZWQgd2l0aCBt eSBjb2xsZWFndWVzLCB3ZSB0aGluayB0aGlzIHNob3VsZCBiZSBpbiB2ZW5kb3Igb3BzLiBJJ2xs IHVwZGF0ZSBpdCBpbiB0aGUgcGF0Y2ggdjYuCj4gQ291bGQgSSBhbHNvIGFwcGx5IHlvdXIgcGF0 Y2ggWzFdIGluIHRoZSBwYXRjaCB2Nj8KPiBUaGFuayB5b3UgZm9yIHlvdXIgdGltZSB0byBjbGFy aWZ5IHRoaXMgY29uZGl0aW9uLgo+Pgo+Pgo+PiAtT25seSBhcHBseSBteSBwYXRjaGVzOgo+PiAv L2JlZ2luIHdpdGggT3BlbiBhcyBSQy5EUlAgPSAxCj4+IFJDLkNDeD1SZCAmIFJDLkRSUCA9IDE7 IC8vc3RpbGwgT3Blbgo+PiBMb29rNENvbm5lY3Rpb24gPSAxOyAvL1N0YXJ0IHByZXNldCBSZAo+ Pgo+PiA+IEZvciBSVDE3MTFILCBpdCBmb2xsb3dzIGFib3ZlIGZsb3cuIElmIGl0IGlzIG5vdCBj b3JyZWN0LCB0aGlzIG9wZXJhdGlvbiBzaG91bGQKPj4gPiBiZSBtb3ZlZCB0byB2ZW5kb3Jfb3Bz Lgo+PiA+ID4KPj4gPiA+IEZvciB5b3VyIHF1ZXN0aW9uOgo+PiA+ID4gV2h5IFJUMTcxMUggcmVw b3J0cyBvcGVuL29wZW4gYWZ0ZXIgZHJwX3RvZ2dsaW5nIGlzIGVuYWJsZWQ/Cj4+ID4gPiA9PiBT ZWUgTm90ZTIgYWJvdmUuCj4+ID4gPiBUaGlzIG9wZW4vb3BlbiBpcyBmb3IgeW91IHBsdWcgb3V0 IHRoZSBkZXZpY2UsIHJpZ2h0Pwo+PiA+ID4gPT4gTm8sIHNlZSBOb3RlMiBhYm92ZS4KPj4gPiA+ IFdoeSBSVDE3MTFIIGNhbid0IHJlcG9ydCBuZXcgY2MgY2hhbmdlIGV2ZW50cyBhZnRlciB5b3Ug cGx1ZyBpbiB0aGUKPj4gPiA+IGRldmljZT8KPj4gPiA+ID0+IFJUMTcxMUggY2FuIGdlbmVyYXRl IG5ldyBjYyBjaGFuZ2UgZXZlbnRzIGFmdGVyIHBsdWdnaW5nIGluIHRoZQo+PiA+IGRldmljZS4K Pj4gPiA+IFdoYXQgY2MgY2hhbmdlIGV2ZW50IHRjcGMgd2lsbCByZXBvcnQgb24gc3RlcCA0Pwo+ PiA+ID4gPT4gU2VlIE5vdGUxIGFib3ZlCj4+ID4gPiBEaWQgeW91IHZlcmlmeSB5b3VyIGNoYW5n ZSBjYW4gcGFzcyB0aGUgdHlwZWMgY29tcGxpYW5jZSB0ZXN0Pwo+PiA+ID4gPT4gV2UgZGlkbid0 IHRlc3QgaXQgeWV0IGJ1dCB0cnkgdG8gbWFrZSBhbGwgZnVuY3Rpb25zIHdvcmsgY29ycmVjdGx5 IGZpcnN0Lgo+PiA+ID4KPj4gPiA+IEJlc3QgUmVnYXJkcywKPj4gPiA+ICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqCj4+ID4gPiBTaHUtRmFuIExlZQo+PiA+ID4gUmljaHRlayBUZWNobm9s b2d5IENvcnBvcmF0aW9uCj4+ID4gPiBURUw6ICs4ODYtMy01NTI2Nzg5ICMyMzU5Cj4+ID4gPiBG QVg6ICs4ODYtMy01NTI2NjEyCj4+ID4gPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+ PiA+ID4KPj4gPgo+PiA+ICoqKioqKioqKioqKiogRW1haWwgQ29uZmlkZW50aWFsaXR5IE5vdGlj ZSAqKioqKioqKioqKioqKioqKioqKgo+PiA+Cj4+ID4gVGhlIGluZm9ybWF0aW9uIGNvbnRhaW5l ZCBpbiB0aGlzIGUtbWFpbCBtZXNzYWdlIChpbmNsdWRpbmcgYW55IGF0dGFjaG1lbnRzKQo+PiA+ IG1heSBiZSBjb25maWRlbnRpYWwsIHByb3ByaWV0YXJ5LCBwcml2aWxlZ2VkLCBvciBvdGhlcndp c2UgZXhlbXB0IGZyb20KPj4gPiBkaXNjbG9zdXJlIHVuZGVyIGFwcGxpY2FibGUgbGF3cy4gSXQg aXMgaW50ZW5kZWQgdG8gYmUgY29udmV5ZWQgb25seSB0byB0aGUKPj4gPiBkZXNpZ25hdGVkIHJl Y2lwaWVudChzKS4gQW55IHVzZSwgZGlzc2VtaW5hdGlvbiwgZGlzdHJpYnV0aW9uLCBwcmludGlu ZywKPj4gPiByZXRhaW5pbmcgb3IgY29weWluZyBvZiB0aGlzIGUtbWFpbCAoaW5jbHVkaW5nIGl0 cyBhdHRhY2htZW50cykgYnkgdW5pbnRlbmRlZAo+PiA+IHJlY2lwaWVudChzKSBpcyBzdHJpY3Rs eSBwcm9oaWJpdGVkIGFuZCBtYXkgYmUgdW5sYXdmdWwuIElmIHlvdSBhcmUgbm90IGFuCj4+ID4g aW50ZW5kZWQgcmVjaXBpZW50IG9mIHRoaXMgZS1tYWlsLCBvciBiZWxpZXZlIHRoYXQgeW91IGhh dmUgcmVjZWl2ZWQgdGhpcwo+PiA+IGUtbWFpbCBpbiBlcnJvciwgcGxlYXNlIG5vdGlmeSB0aGUg c2VuZGVyIGltbWVkaWF0ZWx5IChieSByZXBseWluZyB0byB0aGlzCj4+ID4gZS1tYWlsKSwgZGVs ZXRlIGFueSBhbmQgYWxsIGNvcGllcyBvZiB0aGlzIGUtbWFpbCAoaW5jbHVkaW5nIGFueSBhdHRh Y2htZW50cykKPj4gPiBmcm9tIHlvdXIgc3lzdGVtLCBhbmQgZG8gbm90IGRpc2Nsb3NlIHRoZSBj b250ZW50IG9mIHRoaXMgZS1tYWlsIHRvIGFueSBvdGhlcgo+PiA+IHBlcnNvbi4gVGhhbmsgeW91 IQo+Cj4KPgo+Cj4gLS0KPiBCZXN0IFJlZ2FyZHMsCj4g5pu45biGCg==