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: usb: musb: Support gadget mode when the port is set to dual role From: Paul Kocialkowski Message-Id: <8bc814b508ef86214a9913b4fdb9c13681934a7b.camel@bootlin.com> Date: Fri, 22 Mar 2019 14:37:24 +0100 To: Bin Liu Cc: Greg Kroah-Hartman , Maxime Ripard , linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Chen-Yu Tsai List-ID: TGUgdmVuZHJlZGkgMjIgbWFycyAyMDE5IMOgIDA4OjM2IC0wNTAwLCBCaW4gTGl1IGEgw6ljcml0 IDoKPiBPbiBGcmksIE1hciAyMiwgMjAxOSBhdCAwMjoxMDowMVBNICswMTAwLCBQYXVsIEtvY2lh bGtvd3NraSB3cm90ZToKPiA+IEhpLAo+ID4gCj4gPiBMZSB2ZW5kcmVkaSAyMiBtYXJzIDIwMTkg w6AgMDc6NDYgLTA1MDAsIEJpbiBMaXUgYSDDqWNyaXQgOgo+ID4gPiBPbiBUaHUsIE1hciAyMSwg MjAxOSBhdCAwNTo0MTozOFBNICswMTAwLCBHcmVnIEtyb2FoLUhhcnRtYW4gd3JvdGU6Cj4gPiA+ ID4gT24gVGh1LCBNYXIgMjEsIDIwMTkgYXQgMDI6MDE6MzNQTSArMDEwMCwgTWF4aW1lIFJpcGFy ZCB3cm90ZToKPiA+ID4gPiA+IEhpLAo+ID4gPiA+ID4gCj4gPiA+ID4gPiBJJ20gcmV2aXZpbmcg dGhpcyB0aHJlYWQgYSBiaXQsIGJlY2F1c2UgSSBlbmNvdW50ZXJlZCB0aGlzIGJ1ZyB0b2RheS4K PiA+ID4gPiA+IAo+ID4gPiA+ID4gT24gVGh1LCBNYXIgMjEsIDIwMTkgYXQgMTE6MDI6MTBBTSAr MDEwMCwgQmluIExpdSB3cm90ZToKPiA+ID4gPiA+ID4gT24gU2F0LCBBcHIgMjEsIDIwMTggYXQg MTI6NTk6MjNQTSArMDIwMCwgUGF1bCBLb2NpYWxrb3dza2kgd3JvdGU6Cj4gPiA+ID4gPiA+ID4g SGksCj4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gTGUgdmVuZHJlZGkgMjAgYXZyaWwgMjAx OCDDoCAwOToyNSAtMDUwMCwgQmluIExpdSBhIMOpY3JpdCA6Cj4gPiA+ID4gPiA+ID4gPiBPbiBU aHUsIE1hciAyOSwgMjAxOCBhdCAwMTo1NzoyNFBNICswMjAwLCBQYXVsIEtvY2lhbGtvd3NraSB3 cm90ZToKPiA+ID4gPiA+ID4gPiA+ID4gSGksCj4gPiA+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4g PiA+ID4gPiBPbiBUaHUsIDIwMTgtMDMtMjkgYXQgMTE6MjMgKzAyMDAsIE1heGltZSBSaXBhcmQg d3JvdGU6Cj4gPiA+ID4gPiA+ID4gPiA+ID4gT24gV2VkLCBNYXIgMjgsIDIwMTggYXQgMTE6NTI6 MTNQTSArMDIwMCwgUGF1bCBLb2NpYWxrb3dza2kgd3JvdGU6Cj4gPiA+ID4gPiA+ID4gPiA+ID4g PiBUaGlzIGFsbG93cyBkdWFsLXJvbGUgcG9ydHMgdG8gYmUgcmVwb3J0ZWQgYXMgaGF2aW5nIGdh ZGdldCBtb2RlCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBieQo+ID4gPiA+ID4gPiA+ID4gPiA+ID4g dGhlCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBtdXNiX2hhc19nYWRnZXQgaGVscGVyLiBUaGlzIGlz IHJlcXVpcmVkIHRvIGVuYWJsZSBNVVNCIGF0IGFsbAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gd2l0 aAo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gTVVTQgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gZ2x1ZSBs YXllcnMgdGhhdCBzZXQgdGhlIHBvcnQgbW9kZSB0byBNVVNCX1BPUlRfTU9ERV9EVUFMX1JPTEUK PiA+ID4gPiA+ID4gPiA+ID4gPiA+IGF0Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBpbml0Lgo+ID4g PiA+ID4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBNb3N0IG5vdGFibHksIHRo aXMgYWxsb3dzIGNhbGxpbmcgbXVzYl9zdGFydCB3aGVuIG5lZWRlZCBpbiB0aGUKPiA+ID4gPiA+ ID4gPiA+ID4gPiA+IHZpcnR1YWwKPiA+ID4gPiA+ID4gPiA+ID4gPiA+IE1VU0Igcm9vdCBIVUIs IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgY3VycmVudCBtb2RlIHNob3VsZCBiZQo+ID4gPiA+ ID4gPiA+ID4gPiA+ID4gZ2FkZ2V0Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBvciBob3N0Lgo+ID4g PiA+ID4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBUaGlzIGZpeGVzIFVTQiBP VEcgb24gQWxsd2lubmVyIGRldmljZXMgdGhhdCBJIGNvdWxkIHRlc3QgaXQKPiA+ID4gPiA+ID4g PiA+ID4gPiA+IHdpdGgsCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiBtYWlubHkgQTIwIGRldmljZXMu Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gPiA+ID4gPiA+IFNpZ25lZC1vZmYt Ynk6IFBhdWwgS29jaWFsa293c2tpIDxjb250YWN0QHBhdWxrLmZyPgo+ID4gPiA+ID4gPiA+ID4g PiA+IAo+ID4gPiA+ID4gPiA+ID4gPiA+IFN1cmVseSB0aGVyZSdzIG1vcmUgdG8gaXQgdGhhbiB0 aGF0LiBUaGUgZ2FkZ2V0IG1vZGUgb2YgQTIwIGJvYXJkcwo+ID4gPiA+ID4gPiA+ID4gPiA+IGhh dmUgYmVlbiB3b3JraW5nIGluIHRoZSBwYXN0LCBpbmNsdWRpbmcgd2hlbiBjb21waWxpbmcgd2l0 aCBtVVNCCj4gPiA+ID4gPiA+ID4gPiA+ID4gc2V0dXAgYXMgZHVhbCByb2xlLgo+ID4gPiA+ID4g PiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gPiA+IElzIHRoaXMgYSByZWdyZXNzaW9uIHNpbmNl IGEgcGFydGljdWxhciBjb21taXQ/IE9yIGlzIHRoZXJlCj4gPiA+ID4gPiA+ID4gPiA+ID4gYW5v dGhlciwKPiA+ID4gPiA+ID4gPiA+ID4gPiBkZWVwZXIgaXNzdWUgb3Zlcmxvb2tlZCBpbiB0aGUg Y29tbWl0IGxvZz8KPiA+ID4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiA+IFRoZSByb290 IG9mIHRoZSBpc3N1ZSBoZXJlIGlzIHRoYXQgbXVzYl9zdGFydCBpcyBub3QgY2FsbGVkIGF0IGFu eQo+ID4gPiA+ID4gPiA+ID4gPiBwb2ludAo+ID4gPiA+ID4gPiA+ID4gPiB3aXRob3V0IHRoaXMg cGF0Y2guIE15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZsb3cgaXMgdGhlIGZvbGxvd2luZzoKPiA+ ID4gPiA+ID4gPiA+ID4gd2hlbgo+ID4gPiA+ID4gPiA+ID4gPiB0aGUgUEhZIGRldGVjdHMgdGhh dCB0aGVyZSB3YXMgYSBWQlVTL0lEIGNoYW5nZSwgaXQgd2lsbCBub3RpZnkgaXRzCj4gPiA+ID4g PiA+ID4gPiA+IGxpc3RlbmVycyAobWFpbmx5IHRoZSBtdXNiIHN1bnhpIGdsdWUgbGF5ZXIpLiBU aGlzIHdpbGwgdGhlbgo+ID4gPiA+ID4gPiA+ID4gPiBzY2hlZHVsZQo+ID4gPiA+ID4gPiA+ID4g PiB0aGUgZHJpdmVyJ3Mgd29yayAoc3VueGlfbXVzYl93b3JrKSwgd2hpY2ggZG9lcyBub3RoaW5n IHNpbmNlIHRoZQo+ID4gPiA+ID4gPiA+ID4gPiBTVU5YSV9NVVNCX0ZMX0VOQUJMRUQgYml0IHdh cyBuZXZlciBzZXQuIFRoaXMgYml0IGlzIG9ubHkgc2V0IGFmdGVyCj4gPiA+ID4gPiA+ID4gPiA+ IGNhbGxpbmcgc3VueGlfbXVzYl9lbmFibGUsIHdoaWNoIGlzIGNhbGxlZCBmcm9tCj4gPiA+ID4g PiA+ID4gPiA+IG11c2JfcGxhdGZvcm1fZW5hYmxlLAo+ID4gPiA+ID4gPiA+ID4gPiB0aGF0IG9y aWdpbmF0ZXMgZnJvbSBtdXNiX3N0YXJ0Lgo+ID4gPiA+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4g PiA+ID4gQ3VycmVudGx5IEkgc2VlIHR3byBwbGFjZXMgd2hlcmUgbXVzYl9zdGFydCBpcyBjYWxs ZWQ6Cj4gPiA+ID4gPiA+ID4gPiA+ICogbXVzYl92aXJ0aHViCj4gPiA+ID4gPiA+ID4gPiA+ICog bXVzYl9nYWRnZXQKPiA+ID4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiA+IEluIHRoZSBs YXR0ZXIgY2FzZSwgaXQgaXMgaW4gdHVybiBjYWxsZWQgZnJvbSB1ZGNfc3RhcnQsIHdoaWNoCj4g PiA+ID4gPiA+ID4gPiA+IHNob3VsZAo+ID4gPiA+ID4gPiA+ID4gPiBwcm9iYWJseSAoY29ycmVj dCBtZSBpZiBJJ20gd3JvbmcpIGhhcHBlbiBsYXRlciBpbiB0aGUgY2FsbCBjaGFpbgo+ID4gPiA+ ID4gPiA+ID4gPiB0aGFuCj4gPiA+ID4gPiA+ID4gPiA+IElEL1ZCVVMgY2hhbmdlIG5vdGlmaWNh dGlvbiB0aW1lLgo+ID4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiBJIGRvbid0IHRoaW5r IGl0IGlzIGNvcnJlY3QgdGhhdCB1ZGNfc3RhcnQoKSBpcyB0cmlnZ2VyZWQgYnkgSUQvVkJVUwo+ ID4gPiA+ID4gPiA+ID4gZXZlbnRzLCBidXQgSSBkb24ndCBoYXZlIGFuIEFsbHdpbm5lciBwbGF0 Zm9ybSB0byB2ZXJpZnkgdGhlIGNhbGxmbG93Lgo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ IFllcyB5b3UncmUgcmlnaHQsIEkgZGlkbid0IG1ha2UgbXlzZWxmIHZlcnkgY2xlYXIgaGVyZS4g SSBkaWRuJ3QKPiA+ID4gPiA+ID4gPiBpbnZlc3RpZ2F0ZSB0aGUgdWRjX3N0YXJ0IGNhbGwgcGF0 aCBtdWNoIHNpbmNlIGl0IHdhcyBhcHBhcmVudGx5IG5vdCB0aGUKPiA+ID4gPiA+ID4gPiBjdWxw cml0Lgo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+ID4gSGF2ZSB5b3UgdHJpZWQgdG8gbG9h ZCB3aXRoIGEgZ2FkZ2V0IGRyaXZlcj8gV2hlbiBhIGdhZGdldCBmdW5jdGlvbiBpcwo+ID4gPiA+ ID4gPiA+ID4gYm91bmQgdG8gVURDLCB1ZGNfc3RhcnQoKSBpcyB0cmlnZ2VyZWQsIHdoaWNoIGlu IHR1cm4gY2FsbHMKPiA+ID4gPiA+ID4gPiA+IG11c2Jfc3RhcnQoKS4KPiA+ID4gPiA+ID4gPiAK PiA+ID4gPiA+ID4gPiBJdCBkb2VzIHdvcmsgdW5kZXIgdGhhdCBzY2VuYXJpbywgYWx0aG91Z2gg bXkgdXNlZCBjYXNlIGhlcmUgaXMgdXNpbmcKPiA+ID4gPiA+ID4gPiBtdXNiIHdpdGggRFVBTF9S T0xFIGJ1dCBubyBnYWRnZXQgZHJpdmVyIGxvYWRlZC4gVGhhdCBpdCwgSSB3YW50IHRoZQo+ID4g PiA+ID4gPiA+IG11c2Jfc3RhcnQgY2FsbCB0byBvcmlnaW5hdGUgZnJvbSB0aGUgdmlydHVhbCBo dWIsIG5vdCBmcm9tIHRoZSBnYWRnZXQKPiA+ID4gPiA+ID4gPiBzaWRlLgo+ID4gPiA+ID4gPiA+ IAo+ID4gPiA+ID4gPiA+ID4gPiBJbiB0aGUgZm9ybWVyIGNhc2UsIG11c2Jfc3RhcnQgaXMgY2Fs bGVkIGluIHRoZSByb290IGNvbnRyb2xsZXIgaHViCj4gPiA+ID4gPiA+ID4gPiA+IGNvbnRyb2ws IHdoZW4gc2V0dGluZyB0aGUgVVNCX1BPUlRfRkVBVF9QT1dFUiBmZWF0dXJlLiBUaGlzIGxvb2tz Cj4gPiA+ID4gPiA+ID4gPiA+IHBlcmZlY3RseSBsZWdpdCBhbmQgSU1PIHRoaXMgaXMgd2hlcmUg aXQgc2hvdWxkIGJlIGluaXRpYWxseSBjYWxsaW5nCj4gPiA+ID4gPiA+ID4gPiA+IG11c2Jfc3Rh cnQgaW4gdGhlIGR1YWwgcm9sZSBjYXNlLiBUaGUga2VybmVsIGlzIGluZGVlZCBzZXR0aW5nIHRo ZQo+ID4gPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gPiBObyBhY3R1YWxseS4gQSBkdWFsLXJv bGUgcG9ydCBzaG91bGQgYmUgaW4gYl9pZGxlIHN0YXRlIGJ5IGRlZmF1bHQsIHNvCj4gPiA+ID4g PiA+ID4gPiBsb2dpY2FsbHkgYWxsIGFjdGlvbnMgc2hvdWxkIGdvIHRvIHRoZSBnYWRnZXQgcGF0 aCB1bnRpbCB0aGUgcG9ydAo+ID4gPiA+ID4gPiA+ID4gc3dpdGNoZXMgdG8gaG9zdCBtb2RlLgo+ ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IEl0IG1ha2VzIHNlbnNlIHRoYXQgdGhlIHBvcnQg c2hvdWxkIGJlIGluIGJfaWRsZSBzdGF0ZSBieSBkZWZhdWx0LCBidXQKPiA+ID4gPiA+ID4gPiBo ZXJlIGl0IGZhaWxzIHRvIHN3aXRjaCB0byBob3N0IG1vZGUgd2hlbiB0aGUgSUQgcGluIGRldGVj dHMgdGhhdCBpdAo+ID4gPiA+ID4gPiA+IHNob3VsZC4gT3IgZG9lcyBiX2lkbGUgc3RhdGUgZW50 YWlsIHRoYXQgYSBnYWRnZXQgbXVzdCBiZSBsb2FkZWQgKHBlcgo+ID4gPiA+ID4gPiA+IHRoZSBV U0Igc3BlYyksIGFuZCB0aHVzIG5vdGhpbmcgc2hvdWxkIChldmVyKSBoYXBwZW4gdW50aWwgdGhh dCBoYXBwZW5zPwo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiA+IEkgZmluZCBpdCByZWFsbHkg b2RkIHRvIG5lZWQgYSBnYWRnZXQgZGV2aWNlIHRvIHRyaWdnZXIgaG9zdCBtb2RlLgo+ID4gPiA+ ID4gPiA+IFRoaXMgcGF0Y2ggZG9lcyBmaXggdGhlIGlzc3VlLCBidXQgSSBhbSBwdXp6bGVkIGFz IHRvIHdoeSBpdCBpcyBuZWVkZWQKPiA+ID4gPiA+ID4gPiBpbiB0aGUgZmlyc3QgcGxhY2UuIFRo ZSBjb21tZW50IGFib3ZlIGl0IG1lbnRpb25zIHRoYXQgIkluIE9URyBtb2RlIHdlCj4gPiA+ID4g PiA+ID4gaGF2ZSB0byB3YWl0IHVudGlsIHdlIGxvYWRlZCBhIGdhZGdldC4gV2UgZG9uJ3QgcmVh bGx5IG5lZWQgYSBnYWRnZXQgaWYKPiA+ID4gPiA+ID4gPiB3ZSBvcGVyYXRlIGFzIGEgaG9zdCBi dXQgd2Ugc2hvdWxkIG5vdCBzdGFydCBhIHNlc3Npb24gYXMgYSBkZXZpY2UKPiA+ID4gPiA+ID4g PiB3aXRob3V0IGEgZ2FkZ2V0IG9yIGVsc2Ugd2UgZXhwbG9kZS4iLCB3aGljaCBpcyBhcHBhcmVu dGx5IGNvbXBhdGlibGUKPiA+ID4gPiA+ID4gPiB3aXRoIG15IHVzZSBjYXNlOiBhIGdhZGdldCBp cyBub3QgcmVhbGx5IG5lZWRlZCBhbmQgSSdtIG5vdCB0cnlpbmcgdG8KPiA+ID4gPiA+ID4gPiBz dGFydCBhIHNlc3Npb24gYXMgYSBkZXZpY2Ugd2l0aG91dCBhIGdhZGdldCBsb2FkZWQuCj4gPiA+ ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gV2hhdCBkbyB5b3UgdGhpbms/Cj4gPiA+ID4gPiA+IAo+ ID4gPiA+ID4gPiBPa2F5LCB0aGlzIGNhbWUgZG93biB0byBhbiBhcmd1bWVudCB0aGF0IHdoZXRo ZXIgd2Ugc2hvdWxkIHJlcXVpcmUKPiA+ID4gPiA+ID4gbG9hZGluZyBhIGdhZGdldCBkcml2ZXIg b24gYSBkdWFsLXJvbGUgcG9ydCB0byB3b3JrIGluIGhvc3QgbW9kZSwKPiA+ID4gPiA+ID4gd2hp Y2ggaXMgY3VycmVudGx5IHJlcXVpcmVkIG9uIG11c2Igc2luY2UgYSBsb25nIGxvbmcgdGltZSBh Z28uCj4gPiA+ID4gPiA+IAo+ID4gPiA+ID4gPiBJIHVuZGVyc3RhbmQgdGhlIHJlcXVpcmVtZW50 IGlzIGtpbmRhIHVubmVjZXNzYXJ5LCBidXQgc2luY2UgaXQgYWxyZWFkeQo+ID4gPiA+ID4gPiBl eGlzdHMgb24gbXVzYiBzdGFjayBmb3IgYSBsb25nIHRpbWUsIEkgZG9uJ3QgcGxhbiB0byBjaGFu Z2UgaXQuIEJlY2F1c2UgSQo+ID4gPiA+ID4gPiBjYW5ub3QgdGhpbmsgb2YgYSB1c2UgY2FzZSBp biByZWFsIHByb2R1Y3RzIHRoYXQgZG9lc24ndCBhdXRvbWF0aWNhbGx5Cj4gPiA+ID4gPiA+IGxv YWQgYSBnYWRnZXQgZnVuY3Rpb24gb24gdGhlIGR1YWwtcm9sZSBwb3J0Lgo+ID4gPiA+ID4gPiAK PiA+ID4gPiA+ID4gSWYgeW91IGNhbiBleHBsYWluIGEgdXNlIGNhc2UgaW4gcmVhbCB3b3JsZCAo bm90IGEgZW5naW5lZXJpbmcgbGFiKSB0aGF0Cj4gPiA+ID4gPiA+IHRoZSBnYWRnZXQgZHJpdmVy IHdpbGwgbm90IGJlIGxvYWRlZCBhdCBsaW51eCBib290aW5nIHVwLCBidXQgbGF0ZXIKPiA+ID4g PiA+ID4gYmFzZWQgb24gdXNlcidzIGlucHV0LCBJIHdpbGwgcmVjb25zaWRlciBteSBkZWNpc2lv bi4gVG8gcmVtb3ZlIHRoaXMKPiA+ID4gPiA+ID4gcmVxdWlyZW1lbnQgZnJvbSBtdXNiIHN0YWNr LCB0aGUgd29yayBpcyBtb3JlIHRoYW4gdGhpcyBwYXRjaC4KPiA+ID4gPiA+IAo+ID4gPiA+ID4g SSBoYXZlIG9uZSBmb3IgeW91OiB3ZSdyZSB3b3JraW5nIG9uIGEgZGV2aWNlIHRoYXQgYm9vdHMg cHJldHR5IGZhc3QsCj4gPiA+ID4gPiBhbmQgdGhlcmVmb3JlIGFyZSBwdXNoaW5nIGFzIG11Y2gg dGhpbmdzIGFzIHdlIGNhbiB0byBtb2R1bGVzLiBJdAo+ID4gPiA+ID4gaW5jbHVkZXMgZ2FkZ2V0 cywgdGhlIG11c2IgZHJpdmVyIGFuZCBnbHVlLCBldGMuIFRoYXQgZG9lc24ndCBzb3VuZAo+ID4g PiA+ID4gd2F5IHZlcnkgZGlmZmVyZW50IGZyb20gd2hhdCBhIGdlbmVyaWMgZGlzdHJvIHdvdWxk IGRvIGFzIHdlbGwuCj4gPiA+ID4gPiAKPiA+ID4gPiA+IEF0IGJvb3QsIHRoZSB2YXJpb3VzIG1v ZHVsZXMgZm9yIHRoZSBoYXJkd2FyZSBhcmUgbG9hZGVkCj4gPiA+ID4gPiBhdXRvbWF0aWNhbGx5 OiB0aGUgbXVzYiBnbHVlLCB0aGUgbXVzYiBjb3JlLCBvdXIgVVNCIFBIWSwgZXRjLiBXZSBlbmQK PiA+ID4gPiA+IHVwIGluIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBtdXNiIGRyaXZlciBpcyBsb2Fk ZWQgYW5kIHJlcG9ydGVkIHRvIHdvcmsKPiA+ID4gPiA+IHByb3Blcmx5LiBUaGUgVVNCIGNhYmxl IHRvIHRoZSBPVEcgcG9ydCAoaW4gcGVyaXBoZXJhbCkgbWlnaHQgb3IgbWlnaHQKPiA+ID4gPiA+ IG5vdCBiZSBjb25uZWN0ZWQsIGl0J3Mga2luZCBvZiBpcnJlbGV2YW50Lgo+ID4gPiA+ID4gCj4g PiA+ID4gPiBUaGUgZ2FkZ2V0cywgaG93ZXZlciwgYXJlIG5vdCBsb2FkZWQgYXV0b21hdGljYWxs eS4KPiA+ID4gPiA+IAo+ID4gPiA+ID4gTm93IGNvbWVzIGEgdXNlciB0aGF0IHdhbnRzIHRvIHVz ZSBtdXNiIGFzIGEgaG9zdCwgYW5kIGNvbm5lY3QgYQo+ID4gPiA+ID4gcHJvcGVyIFVTQiBhZGFw dGVyLCB0aGF0IHdpcmVzIHRoZSBJRCBwaW4gcHJvcGVybHkuIEluIG91ciBjYXNlLCB0aGUKPiA+ ID4gPiA+IHBoeSBkZXRlY3RzIGl0LCByZXBvcnRzIHRoZSBtb2RlIGNoYW5nZSwgYW5kIC4uLi4g bm90aGluZy4KPiA+ID4gPiA+IAo+ID4gPiA+ID4gVGhhdCBkb2Vzbid0IHJlYWxseSBsb29rIGxp a2UgYW4gZW5naW5lZXJpbmcgbGFiIHNldHVwIHRvIG1lLgo+ID4gPiA+IAo+ID4gPiA+IEkgYWdy ZWUsIHRoYXQgc291bmRzIGxpa2UgYSB2YWxpZCBzZXR1cC4KPiA+ID4gPiAKPiA+ID4gPiBBbHNv IHJlYWxpemUgdGhhdCBBbmRyb2lkIGlzIHB1c2hpbmcgdG8gaGF2ZSBhbGwgZHJpdmVycyBhcyBt b2R1bGVzLCBzbwo+ID4gPiA+IHlvdSB3aWxsIHN0YXJ0IHRvIHNlZSBhIHdob2xlIGxvdCBtb3Jl IGRldmljZXMgb3V0IHRoZXJlIGJlIG1vZHVsYXIKPiA+ID4gPiBpbnN0ZWFkIG9mIHN0YXRpY2Fs bHkgYnVpbHQga2VybmVscy4gIFNvIGlzc3VlcyBsaWtlIHRoaXMgYXJlIGdvb2QgdG8KPiA+ID4g PiByZXNvbHZlIDopCj4gPiA+IAo+ID4gPiBUaGlzIGlzc3VlIGhlcmUgaXMgbm90IHJlbGF0ZWQg dG8gYnVpbGRpbmcgYWxsIGRyaXZlcnMgYXMgbW9kdWxlcy4gVG9kYXkKPiA+ID4gd2UgYWxyZWFk eSBoYXZlIGFsbCBtdXNiIHJlbGF0ZWQgZHJpdmVycyBpbmNsdWRpbmcgZ2FkZ2V0IGRyaXZlcnMg aW4KPiA+ID4gbW9kdWxlcy4KPiA+ID4gCj4gPiA+IFRoZSBpc3N1ZSBkaXNjdXNzZWQgaGVyZSBp cyB0aGF0IHdoZW4gbXVzYiBpcyBjb25maWd1cmVkIGluIGR1YWwtcm9sZQo+ID4gPiBtb2RlIChk cl9tb2RlID0gJ290ZycgaW4gZHRzKSwgYSBnYWRnZXQgZHJpdmVyIGhhcyB0byBiZSBib3VuZCB0 byB0aGUKPiA+ID4gdWRjIHRvIG1ha2UgbXVzYiB3b3JraW5nIGluIGhvc3QgbW9kZS4KPiA+ID4g Cj4gPiA+IEkgbmV2ZXIgZGlzYWdyZWUgaXQgaXMgbm90IGlkZWFsLCBidXQgSSBjb25zaWRlciBp dCBpcyBtaW5vciAtIHNpbmNlIHRoZQo+ID4gPiBwb3J0IGlzIGNvbmZpZ3VyZWQgdG8gZHVhbC1y b2xlIG1vZGUsIGl0IGlzIGludGVuZGVkIHRvIHdvcmsgaW4KPiA+ID4gcGVyaXBoZXJhbCBtb2Rl LCB0aGVuIHdoeSBub3QgYXV0b21hdGljYWxseSBsb2FkIHRoZSBnYWRnZXQgZHJpdmVyIHdoZW4K PiA+ID4gbGludXggYm9vdHMgdXAuCj4gPiAKPiA+IEkgc3RpbGwgaGF2ZSBhIGZ1bmRhbWVudGFs IGRpc2FncmVlbWVudCBoZXJlLCBhbmQgSSB0aGluayBpdCB3b3VsZCBiZQo+ID4gaW50ZXJlc3Rp bmcgdG8gZGlzY3VzcyBpdCB3aXRoIEdyZWcgaW4gdGhlIGxvb3AuIEkgdGhpbmsgdGhhdCB3aGV0 aGVyCj4gPiBvciBub3Qgd2UgbG9hZCBhIGdhZGdldCBkcml2ZXIgd2hlbiB0aGUgcG9ydCBpcyBk ZWNsYXJlZCBhcyBPVEcgaXMKPiA+IHBvbGljeSwgd2hpY2ggaXMgc2hvdWxkIGJlIGxlZnQgdG8g Y29uZmlnIG9yIHVzZXJzcGFjZSBhbmQgc2hvdWxkIG5vdAo+ID4gYmUgYSBwcmVyZXF1aXNpdGUg Zm9yIHRoZSBkcml2ZXIgdG8gd29yay4KPiA+IAo+ID4gVG8gbWUsIE9URyBpbXBsaWVzIHRoYXQg aG9zdCBhbmQgcGVyaXBoZXJhbCBhcmUgc3VwcG9ydGVkIGVxdWFsbHksIGFuZAo+ID4gb25lIHNo b3VsZCBub3QgcHJldmFpbCBvdmVyIHRoZSBvdGhlci4KPiA+IAo+ID4gSSdtIHdvbmRlcmluZyBp ZiB0aGVyZSBhcmUgZ2VuZXJhbCBrZXJuZWwgcnVsZXMgdGhhdCBzaG91bGQgYXBwbHkgaGVyZSwK PiA+IGluZGVwZW5kZW50bHkgZnJvbSB0aGUgdGVjaG5pY2FsIGFyZ3VtZW50IHJlbGF0ZWQgdG8g dXNpbmcgZ2FkZ2V0Cj4gPiBtb2R1bGVzPwo+ID4gCj4gPiA+IFRvIHN1bW1hcmllcyBteSBjb21t ZW50cyBvbiB0aGlzIGFnYWluLCBzaW5jZSBpdCBpcyBtaW5vciBpbiBteSBvcGluaW9uLAo+ID4g PiBJIHdvbid0IHNwZW5kIHRpbWUgdG8gc29sdmUgaXQgbXlzZWxmIChpbiBhIG5lYXIgZnV0dXJl KSwgYnV0IEkgYW0gbW9yZQo+ID4gPiB0aGFuIGhhcHB5IHRvIHJldmlldyBhbmQgdGFrZSBhbnkg cGF0Y2ggd2hpY2ggc29sdmUgaXQuIAo+ID4gCj4gPiBJdCBpcyBkZWZpbml0ZWx5IHZlcnkgbXVj aCBhcHByZWNpYXRlZCB0aGF0IHlvdSBhcmUgb3BlbiB0byBhY2NlcHRpbmcgYQo+ID4gZml4IGZv ciB0aGlzIGlzc3VlIGV2ZW4gdGhvdWdoIHlvdSBjb25zaWRlciBpdCBhIG5vbi1pc3N1ZSA6KQo+ IAo+IEkgYmVsaWV2ZSBpbiBwcmV2aW91cyBkaXNjdXNzaW9uIEkgaGF2ZSBleHByZXNzZWQgSSBh bSBvcGVuIHRvIGEKPiBzb2x1dGlvbiA7KQoKSW5kZWVkLCB5b3Ugd2VyZSBhbHdheXMgb3BlbiB0 byBzZWVpbmcgdGhlIGlzc3VlIHNvbHZlZCA6KQoKPiBidXQgSSBkb24ndCBjb25zaWRlciAiaXQg aXMgYSBub24taXNzdWUiLCBpdCBpcyBtaW5vciBpbiBteSBvcGluaW9uLAo+IHRoZW4gSSBkb24n dCBoYXZlIHRpbWUgdG8gc29sdmUgaXQgbXlzZWxmLgoKUmlnaHQsIHNvcnJ5IGZvciBvdmVyLXN0 YXRpbmcgdGhpcyEKCkNoZWVycywKClBhdWwK