From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: [Draft E] Xen on ARM vITS Handling Date: Tue, 9 Jun 2015 16:42:45 +0100 Message-ID: <1433864565.7108.565.camel@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel Cc: manish.jaggi@caviumnetworks.com, Julien Grall , Stefano Stabellini , Vijay Kilari List-Id: xen-devel@lists.xenproject.org RHJhZnQgRSBmb2xsb3dzLiBBbHNvIGF0OgpodHRwOi8veGVuYml0cy54ZW4ub3JnL3Blb3BsZS9p YW5jL3ZpdHMvZHJhZnRFLntwZGYsaHRtbH0KClRoZSBtYWpvciBjaGFuZ2UgaGVyZSBhcmlzZXMg ZnJvbSB0aGUgcmVhbGlzYXRpb24gdGhhdCBpdCBpcyBub3QKcG9zc2libGUgdG8gYXNzb2NpYXRl IGEgdlBMSSB3aXRoIGEgc2luZ2xlIHBMUEksIHdoaWNoIGhhcyByYW1pZmljYXRpb25zCmZvciB0 aGUgbWFuYWdlbWVudCBvZiBlbmFibGluZy9kaXNhYmxpbmcgcExQSXMgYW5kIHRoZSBoYW5kbGlu ZyBvZgpzcHVyaW91cyBwTFBJcyB3aGljaCB3ZSBhcmUgbm93IGV4cGVjdGluZyB0byBzZWUgYXMg YSBjb25zZXF1ZW5jZS4gT24KdGhlIHBsdXMgc2lkZSB0aGlzIGVuZGVkIHVwIHRha2luZyBjYXJl IG9mIFVJMSBhbmQgdGhlcmUgYXJlIG5vdyBubwptYWpvciBzdHVtYmxpbmcgYmxvY2tzIHRoYXQg SSBjYW4gc2VlLgoKSSBzdWdnZXN0IHdlIGdpdmUgcGVvcGxlIGEgZGF5IHRvIGRpZ2VzdCBhbmQg dGhlbiBtZWV0IG9uIElSQyAoI3hlbmFybQpvbiBGcmVlbm9kZSkgb24gVGh1cnNkYXkgKDExIEp1 bmUpIHRvIGRpc2N1c3MgYW55IHJlbWFpbmluZyBpc3N1ZXMuCgpJJ20gbm90IHN1cmUgd2hhdCB0 aW1lIHpvbmUgZm9sa3MgYXJlIGluLCBhc3N1bWluZyBFdXJvcGUrQXNpYSBJIHByb3Bvc2UKMTFB TSBCU1QsIHdoaWNoIGlzIDEwQU0gR01ULCAzOjMwUE0gSVNUIG9yIDNBTSBQRFQuIElmIHRoZXJl IGFyZSBmb2xrcwpvbiBXZXN0IENvc3QgVVNBIHRoZW4gd2UgbWlnaHQgbmVlZCB0byB0aGluayBh Z2Fpbi4KCklhbi4KCi0tLS0tLS04Pi0tLS0tLQoKJSBYZW4gb24gQVJNIHZJVFMgSGFuZGxpbmcK JSBJYW4gQ2FtcGJlbGwgPGlhbi5jYW1wYmVsbEBjaXRyaXguY29tPgolIERyYWZ0IEUKCiMgQ2hh bmdlbG9nCgojIyBTaW5jZSBEcmFmdCBECgoqIEZpeGVkIGFzc3VtcHRpb25zIGFib3V0IHZMUEkt PnBMUEkgbWFwcGluZywgd2hpY2ggaXMgbm90CiAgcG9zc2libGUuIFRoaXMgbGVhZCB0byBjaGFu Z2VzIHRvIHRoZSBtb2RlbCBmb3IgZW5hYmxpbmcgYW5kCiAgZGlzYWJsaW5nIHBMUEkgYW5kIHZM UEkgYW5kIHRoZSBoYW5kbGluZyBvZiB0aGUgdmlydHVhbCBMUEkKICBjb25maWd1cmF0aW9uIHRh YmxlLCByZXNvbHZpbmcgX1VucmVzb2x2ZWQgSXNzdWUgMV8uCiogTWFkZSB0aGUgcExQSSBhbmQg dkxQSSBpbnRlcnJ1cHQgcHJpb3JpdGllcyBleHBsaWNpdC4KKiBBdHRlbXB0ZWQgdG8gY2xhcmlm eSB0aGUgdHJ1c3QgaXNzdWVzIHJlZ2FyZGluZyBpbi1ndWVzdCBkYXRhCiAgc3RydWN0dXJlcy4K KiBNYW5kYXRlIGEgcGFydGljdWxhciBjYWNoZWFiaWxpdHkgZm9yIHRhYmxlcyBpbiBndWVzdCBt ZW1vcnkuCgojIyBTaW5jZSBEcmFmdCBDCgoqIF9NYWpvcl8gcmV3b3JrLCBpbiBhbiBhdHRlbXB0 IHRvIHNpbXBsaWZ5IGV2ZXJ5dGhpbmcgaW50byBzb21ldGhpbmcKICBtb3JlIGxpa2VseSB0byBi ZSBhY2hpZXZhYmxlIGZvciA0LjYuCiAgICAqIE1hZGUgc29tZSBzaW1wbGlmeWluZyBhc3N1bXB0 aW9ucy4KICAgICogUmVkdWNlZCB0aGUgc2NvcGUgb2Ygc29tZSBzdXBwb3J0LgogICAgKiBDb21t YW5kIGVtdWxhdGlvbiBpcyBub3cgbW9zdGx5IHRyaXZpYWwuCiAgICAqIEV4cGFuZGVkIGRldGFp bCBvbiBob3N0IHNldHVwLCBhbGxvd2luZyBvdGhlciBhc3N1bXB0aW9ucyB0byBiZQogICAgICBt YWRlIGR1cmluZyBlbXVsYXRpb24uCiogTWFueSBvdGhlciB0aGluZ3MgbG9zdCBpbiB0aGUgbm9p c2Ugb2YgdGhlIGFib3ZlLgoKIyMgU2luY2UgRHJhZnQgQgoKKiBEZXRhaWxzIG9mIGNvbW1hbmQg dHJhbnNsYXRpb24gKHRoYW5rcyB0byBKdWxpZW4gYW5kIFZpamF5KQoqIEFkZGVkIGJhY2tncm91 bmQgb24gTFBJIFRyYW5zbGF0aW9uIGFuZCBQZW5kaW5nIHRhYmxlcwoqIEFkZGVkIGJhY2tncm91 bmQgb24gQ29sbGVjdGlvbnMKKiBTZXR0bGVkIG9uIGBOOk5gIHNjaGVtZSBmb3IgdklUUzpwYXQn cyBtYXBwaW5nLgoqIFJlamlnZ2VkIHNlY3Rpb24gbmVzdGluZyBhIGJpdC4KKiBTaW5jZSB3ZSBu b3cgdGhpbmcgdHJhbnNsYXRpb24gc2hvdWxkIGJlIGNoZWFwLCBzZXR0bGUgb24KICB0cmFuc2xh dGlvbiBhdCBzY2hlZHVsaW5nIHRpbWUuCiogTGF6eSBgSU5WQUxMYCBhbmQgYFNZTkNgCgojIyBT aW5jZSBEcmFmdCBBCgoqIEFkZGVkIGRpc2N1c3Npb24gb2Ygd2hlbi93aGVyZSBjb21tYW5kIHRy YW5zbGF0aW9uIG9jY3Vycy4KKiBDb250ZW50aW9uIG9uIHNjaGVkdWxlciBsb2NrLCBzdWdnZXN0 aW9uIHRvIHVzZSBTT0ZUSVJRLgoqIEhhbmRsaW5nIG9mIGRvbWFpbiBzaHV0ZG93bi4KKiBNb3Jl IGRldGFpbGVkIGRpc2N1c3Npb24gb2YgbXVsdGlwbGUgdnMgc2luZ2xlIHZpdHMgcHJvcy9jb25z LgoKIyBJbnRyb2R1Y3Rpb24KCkFSTSBzeXN0ZW1zIGNvbnRhaW5pbmcgYSBHSUMgdmVyc2lvbiAz IG9yIGxhdGVyIG1heSBjb250YWluIG9uZSBvcgptb3JlIElUUyBsb2dpY2FsIGJsb2Nrcy4gQW4g SVRTIGlzIHVzZWQgdG8gcm91dGUgTWVzc2FnZSBTaWduYWxsZWQKaW50ZXJydXB0cyBmcm9tIGRl dmljZXMgaW50byBhbiBMUEkgaW5qZWN0aW9uIG9uIHRoZSBwcm9jZXNzb3IuCgpUaGUgZm9sbG93 aW5nIHN1bW1hcmlzZXMgdGhlIElUUyBoYXJkd2FyZSBkZXNpZ24gYW5kIHNlcnZlcyBhcyBhIHNl dApvZiBhc3N1bXB0aW9ucyBmb3IgdGhlIHZJVFMgc29mdHdhcmUgZGVzaWduLiBGb3IgZnVsbCBk ZXRhaWxzIG9mIHRoZQpJVFMgc2VlIHRoZSAiR0lDIEFyY2hpdGVjdHVyZSBTcGVjaWZpY2F0aW9u Ii4KCiMjIExvY2FsaXR5LXNwZWNpZmljIFBlcmlwaGVyYWwgSW50ZXJydXB0cyAoYExQSWApCgpU aGlzIGlzIGEgbmV3IGNsYXNzIG9mIG1lc3NhZ2Ugc2lnbmFsbGVkIGludGVycnVwdHMgaW50cm9k dWNlZCBpbgpHSUN2My4gVGhleSBvY2N1cHkgdGhlIGludGVycnVwdCBJRCBzcGFjZSBmcm9tIGA4 MTkyLi4oMl4zMiktMWAuCgpUaGUgbnVtYmVyIG9mIExQSXMgc3VwcG9ydCBieSBhbiBJVFMgaXMg ZXhwb3NlZCB2aWEKYEdJVFNfVFlQRVIuSURiaXRzYCAoYXMgbnVtYmVyIG9mIGJpdHMgLSAxKSwg aXQgbWF5IGJlIHVwIHRvCjJeMzIuIF9Ob3RlXzogVGhpcyBmaWVsZCBhbHNvIGNvbnRhaW5zIHRo ZSBudW1iZXIgb2YgRXZlbnQgSURzCnN1cHBvcnRlZCBieSB0aGUgSVRTLgoKIyMjIExQSSBDb25m aWd1cmF0aW9uIFRhYmxlCgpFYWNoIExQSSBoYXMgYW4gYXNzb2NpYXRlZCBjb25maWd1cmF0aW9u IGJ5dGUgaW4gdGhlIExQSSBDb25maWd1cmF0aW9uClRhYmxlIChtYW5hZ2VkIHZpYSB0aGUgR0lD IFJlZGlzdHJpYnV0b3IgYW5kIHBsYWNlZCBhdApgR0lDUl9QUk9QQkFTRVJgIG9yIGBHSUNSX1ZQ Uk9QQkFTRVJgKS4gVGhpcyBieXRlIGNvbmZpZ3VyZXM6CgoqIFRoZSBMUEkncyBwcmlvcml0eTsK KiBXaGV0aGVyIHRoZSBMUEkgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4KClNvZnR3YXJlIHVwZGF0 ZXMgdGhlIENvbmZpZ3VyYXRpb24gVGFibGUgZGlyZWN0bHkgYnV0IG11c3QgdGhlbiBpc3N1ZQph biBpbnZhbGlkYXRlIGNvbW1hbmQgKHBlci1kZXZpY2UgYElOVmAgSVRTIGNvbW1hbmQsIGdsb2Jh bCBgSU5WQUxMYApJVFMgY29tbWFuZCBvciB3cml0ZSBgR0lDUl9JTlZMUElSYCkgZm9yIHRoZSBh ZmZlY3QgdG8gYmUgZ3VhcmFudGVlZAp0byBiZWNvbWUgdmlzaWJsZSAocG9zc2libHkgcmVxdWly aW5nIGFuIElUUyBgU1lOQ2AgY29tbWFuZCB0byBlbnN1cmUKY29tcGxldGlvbiBvZiB0aGUgYElO VmAgb3IgYElOVkFMTGApLiBOb3RlIHRoYXQgaXQgaXMgdmFsaWQgZm9yIGFuCmltcGxlbWVudGF0 aW9uIHRvIHJlcmVhZCB0aGUgY29uZmlndXJhdGlvbiB0YWJsZSBhdCBhbnkgdGltZSAoSU9XIGl0 CmlzIF9ub3RfIGd1YXJhbnRlZWQgdGhhdCBhIGNoYW5nZSB0byB0aGUgTFBJIENvbmZpZ3VyYXRp b24gVGFibGUgd29uJ3QKYmUgdmlzaWJsZSB1bnRpbCBhbiBpbnZhbGlkYXRlIGlzIGlzc3VlZCku CgojIyMgTFBJIFBlbmRpbmcgVGFibGUKCkVhY2ggTFBJIGFsc28gaGFzIGFuIGFzc29jaWF0ZWQg Yml0IGluIHRoZSBMUEkgUGVuZGluZyBUYWJsZSAobWFuYWdlZApieSB0aGUgR0lDIHJlZGlzdHJp YnV0b3IpLiBUaGlzIGJpdCBzaWduYWxzIHdoZXRoZXIgdGhlIExQSSBpcyBwZW5kaW5nCm9yIG5v dC4KClRoaXMgcmVnaW9uIG1heSBjb250YWluIG91dCBvZiBkYXRlIGluZm9ybWF0aW9uIGFuZCB0 aGUgbWVjaGFuaXNtIHRvCnN5bmNocm9uaXNlIGlzIGBJTVBMRU1FTlRBVElPTiBERUZJTkVEYC4K CiMjIEludGVycnVwdCBUcmFuc2xhdGlvbiBTZXJ2aWNlIChgSVRTYCkKCiMjIyBEZXZpY2UgSWRl bnRpZmllcnMKCkVhY2ggZGV2aWNlIHVzaW5nIHRoZSBJVFMgaXMgYXNzb2NpYXRlZCB3aXRoIGEg dW5pcXVlICJEZXZpY2UKSWRlbnRpZmllciIuCgpUaGUgZGV2aWNlIElEcyBhcmUgcHJvcGVydGll cyBvZiB0aGUgaW1wbGVtZW50YXRpb24gYW5kIGFyZSB0eXBpY2FsbHkKZGVzY3JpYmVkIHZpYSBz eXN0ZW0gZmlybXdhcmUsIGUuZy4gdGhlIEFDUEkgSU9SVCB0YWJsZSBvciB2aWEgZGV2aWNlCnRy ZWUuCgpUaGUgbnVtYmVyIG9mIGRldmljZSBpZHMgaW4gYSBzeXN0ZW0gZGVwZW5kcyBvbiB0aGUg aW1wbGVtZW50YXRpb24gYW5kCmNhbiBiZSBkaXNjb3ZlcmVkIHZpYSBgR0lUU19UWVBFUi5EZXZi aXRzYC4gVGhpcyBmaWVsZCBhbGxvd3MgYW4gSVRTCnRvIGhhdmUgdXAgdG8gMl4zMiBkZXZpY2Vz LgoKIyMjIEV2ZW50cwoKRWFjaCBkZXZpY2UgY2FuIGdlbmVyYXRlICJFdmVudHMiIChjYWxsZWQg YElEYCBpbiB0aGUgc3BlYykgdGhlc2UKY29ycmVzcG9uZCB0byBwb3NzaWJsZSBpbnRlcnJ1cHQg c291cmNlcyBpbiB0aGUgZGV2aWNlIChlLmcuIE1TSQpvZmZzZXQpLgoKVGhlIG1heGltdW0gbnVt YmVyIG9mIGludGVycnVwdCBzb3VyY2VzIGlzIGRldmljZSBzcGVjaWZpYy4gSXQgaXMKdXN1YWxs eSBkaXNjb3ZlcmVkIGVpdGhlciBmcm9tIGZpcm13YXJlIHRhYmxlcyAoZS5nLiBEVCBvciBBQ1BJ KSBvcgpmcm9tIGJ1cyBzcGVjaWZpYyBtZWNoYW5pc21zIChlLmcuIFBDSSBjb25maWcgc3BhY2Up LgoKVGhlIG1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyBpZHMgc3VwcG9ydCBieSBhbiBJVFMgaXMg ZXhwb3NlZCB2aWEKYEdJVFNfVFlQRVIuSURiaXRzYCAoYXMgbnVtYmVyIG9mIGJpdHMgLSAxKSwg aXQgbWF5IGJlIHVwIHRvCjJeMzIuIF9Ob3RlXzogVGhpcyBmaWVsZCBhbHNvIGNvbnRhaW5zIHRo ZSBudW1iZXIgb2YgYExQSXNgIHN1cHBvcnRlZApieSB0aGUgSVRTLgoKIyMjIEludGVycnVwdCBD b2xsZWN0aW9ucwoKRWFjaCBpbnRlcnJ1cHQgaXMgYSBtZW1iZXIgb2YgYW4gIkludGVycnVwdCBD b2xsZWN0aW9uIi4gVGhpcyBhbGxvd3MKc29mdHdhcmUgdG8gbWFuYWdlIGxhcmdlIG51bWJlcnMg b2YgcGh5c2ljYWwgaW50ZXJydXB0cyB3aXRoIGEgc21hbGwKbnVtYmVyIG9mIGNvbW1hbmRzIHJh dGhlciB0aGFuIGlzc3Vpbmcgb25lIGNvbW1hbmQgcGVyIGludGVycnVwdC4KCk9uIGEgc3lzdGVt IHdpdGggTiBwcm9jZXNzb3JzLCB0aGUgSVRTIG11c3QgcHJvdmlkZSBhdCBsZWFzdCBOKzEKY29s bGVjdGlvbnMuCgpBbiBJVFMgbWF5IHN1cHBvcnQgc29tZSBudW1iZXIgb2YgaW50ZXJuYWwgY29s bGVjdGlvbnMgKGluZGljYXRlZCBieQpgR0lUU19UWVBFUi5IQ0NgKSBhbmQgZXh0ZXJuYWwgb25l cyB3aGljaCByZXF1aXJlIG1lbW9yeSBwcm92aXNpb25lZApieSB0aGUgT3BlcmF0aW5nIFN5c3Rl bSB2aWEgYSBgR0lUU19CQVNFUm5gIHJlZ2lzdGVyLgoKIyMjIFRhcmdldCBBZGRyZXNzZXMKClRo ZSBUYXJnZXQgQWRkcmVzcyBjb3JyZXNwb25kIHRvIGEgc3BlY2lmaWMgR0lDIHJlLWRpc3RyaWJ1 dG9yLiBUaGUKZm9ybWF0IG9mIHRoaXMgZmllbGQgZGVwZW5kcyBvbiB0aGUgdmFsdWUgb2YgdGhl IGBHSVRTX1RZUEVSLlBUQWAgYml0OgoKKiAxOiB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSByZS1k aXN0cmlidXRvciB0YXJnZXQgaXMgdXNlZAoqIDA6IGEgdW5pcXVlIHByb2Nlc3NvciBudW1iZXIg aXMgdXNlZC4gVGhlIG1hcHBpbmcgYmV0d2VlbiB0aGUKICBwcm9jZXNzb3IgYWZmaW5pdHkgdmFs dWUgKGBNUElEUmApIGFuZCB0aGUgcHJvY2Vzc29yIG51bWJlciBpcwogIGRpc2NvdmVyYWJsZSB2 aWEgYEdJQ1JfVFlQRVIuUHJvY2Vzc29yTnVtYmVyYC4KClRoaXMgdmFsdWUgaXMgdXAgdG8gdGhl IElUUyBpbXBsZW1lbnRlciAoYEdJVFNfVFlQRVJgIGlzIGEgcmVhZC1vbmx5CnJlZ2lzdGVyKS4K CiMjIyBEZXZpY2UgVGFibGUKCkEgRGV2aWNlIFRhYmxlIGlzIGNvbmZpZ3VyZWQgaW4gZWFjaCBJ VFMgd2hpY2ggbWFwcyBpbmNvbWluZyBkZXZpY2UKaWRlbnRpZmllcnMgaW50byBhbiBJVFMgSW50 ZXJydXB0IFRyYW5zbGF0aW9uIFRhYmxlLgoKIyMjIEludGVycnVwdCBUcmFuc2xhdGlvbiBUYWJs ZSAoYElUVGApIGFuZCBDb2xsZWN0aW9uIFRhYmxlCgpBbiBgRXZlbnRgIGdlbmVyYXRlZCBieSBh IGBEZXZpY2VgIGlzIHRyYW5zbGF0ZWQgaW50byBhbiBgTFBJYCB2aWEgYQpwZXItRGV2aWNlIElu dGVycnVwdCBUcmFuc2xhdGlvbiBUYWJsZS4gVGhlIHN0cnVjdHVyZSBvZiB0aGlzIHRhYmxlIGlz CmRlc2NyaWJlZCBpbiBHSUMgU3BlYyA0LjkuMTIuCgpUaGUgSVRTIHRyYW5zbGF0aW9uIHRhYmxl IG1hcHMgdGhlIGRldmljZSBpZCBvZiB0aGUgb3JpZ2luYXRpbmcgZGV2aWNlCmludG8gYSBwaHlz aWNhbCBpbnRlcnJ1cHQgKGBMUElgKSBhbmQgYW4gSW50ZXJydXB0IENvbGxlY3Rpb24uCgpUaGUg Q29sbGVjdGlvbiBpcyBpbiB0dXJuIGxvb2tlZCB1cCBpbiB0aGUgQ29sbGVjdGlvbiBUYWJsZSB0 byBwcm9kdWNlCmEgVGFyZ2V0IEFkZHJlc3MsIGluZGljYXRpbmcgYSByZWRpc3RyaWJ1dG9yIChB S0EgQ1BVKSB0byB3aGljaCB0aGUKTFBJIGlzIGRlbGl2ZXJlZC4KCiMjIyBPUyBQcm92aXNpb25l ZCBNZW1vcnkgUmVnaW9ucwoKVGhlIElUUyBoYXJkd2FyZSBkZXNpZ24gcHJvdmlkZXMgbWVjaGFu aXNtcyBmb3IgYW4gSVRTIHRvIGJlIHByb3ZpZGVkCndpdGggdmFyaW91cyBibG9ja3Mgb2YgbWVt b3J5IGJ5IHRoZSBPUyBmb3IgSVRTIGludGVybmFsIHVzZSwgdGhpcwppbmNsdWRlIHRoZSBwZXIt ZGV2aWNlIElUVCAoZXN0YWJsaXNoZWQgd2l0aCBgTUFQRGApIGFuZCBtZW1vcnkKcmVnaW9ucyBm b3IgRGV2aWNlIFRhYmxlcywgVmlydHVhbCBQcm9jZXNzb3JzIGFuZCBJbnRlcnJ1cHQKQ29sbGVj dGlvbnMuIFVwIHRvIDggc3VjaCByZWdpb25zIGNhbiBiZSByZXF1ZXN0ZWQgYnkgdGhlIElUUyBh bmQKcHJvdmlzaW9uZWQgYnkgdGhlIE9TIHZpYSB0aGUgYEdJVFNfQkFTRVJuYCByZWdpc3RlcnMu CgojIyMgSVRTIENvbmZpZ3VyYXRpb24KClRoZSBJVFMgaXMgY29uZmlndXJlZCBhbmQgbWFuYWdl ZCwgaW5jbHVkaW5nIGVzdGFibGlzaGluZyBhbmQKY29uZmlndXJpbmcgdGhlIFRyYW5zbGF0aW9u IFRhYmxlcyBhbmQgQ29sbGVjdGlvbiBUYWJsZSwgdmlhIGFuIGluCm1lbW9yeSByaW5nIHNoYXJl ZCBiZXR3ZWVuIHRoZSBDUFUgYW5kIHRoZSBJVFMgY29udHJvbGxlci4gVGhlIHJpbmcgaXMKbWFu YWdlZCB2aWEgdGhlIGBHSVRTX0NCQVNFUmAgcmVnaXN0ZXIgYW5kIGluZGV4ZWQgYnkgYEdJVFNf Q1dSSVRFUmAKYW5kIGBHSVRTX0NSRUFEUmAgcmVnaXN0ZXJzLgoKQSBwcm9jZXNzb3IgYWRkcyBj b21tYW5kcyB0byB0aGUgc2hhcmVkIHJpbmcgYW5kIHRoZW4gdXBkYXRlcwpgR0lUU19DV1JJVEVS YCB0byBtYWtlIHRoZW0gdmlzaWJsZSB0byB0aGUgSVRTIGNvbnRyb2xsZXIuCgpUaGUgSVRTIGNv bnRyb2xsZXIgcHJvY2Vzc2VzIGNvbW1hbmRzIGZyb20gdGhlIHJpbmcgYW5kIHRoZW4gdXBkYXRl cwpgR0lUU19DUkVBRFJgIHRvIGluZGljYXRlIHRoZSB0aGUgcHJvY2Vzc29yIHRoYXQgdGhlIGNv bW1hbmQgaGFzIGJlZW4KcHJvY2Vzc2VkLgoKQ29tbWFuZHMgYXJlIHByb2Nlc3NlZCBzZXF1ZW50 aWFsbHkuCgpDb21tYW5kcyBzZW50IG9uIHRoZSByaW5nIGluY2x1ZGUgb3BlcmF0aW9uYWwgY29t bWFuZHM6CgoqIFJvdXRpbmcgaW50ZXJydXB0cyB0byBwcm9jZXNzb3JzOwoqIEdlbmVyYXRpbmcg aW50ZXJydXB0czsKKiBDbGVhcmluZyB0aGUgcGVuZGluZyBzdGF0ZSBvZiBpbnRlcnJ1cHRzOwoq IFN5bmNocm9uaXNpbmcgdGhlIGNvbW1hbmQgcXVldWUKCmFuZCBtYWludGVuYW5jZSBjb21tYW5k czoKCiogTWFwIGRldmljZS9jb2xsZWN0aW9uL3Byb2Nlc3NvcjsKKiBNYXAgdmlydHVhbCBpbnRl cnJ1cHQ7CiogQ2xlYW4gaW50ZXJydXB0czsKKiBEaXNjYXJkIGludGVycnVwdHM7CgpUaGUgZmll bGQgYEdJVFNfQ0JBU0VSLlNpemVgIGVuY29kZXMgdGhlIG51bWJlciBvZiA0S0IgcGFnZXMgbWlu dXMgMApjb25zaXN0aW5nIG9mIHRoZSBjb21tYW5kIHF1ZXVlLiBUaGlzIGZpZWxkIGlzIDggYml0 cyB3aGljaCBtZWFucyB0aGUKbWF4aW11bSBzaXplIGlzIDJeOCAqIDRLQiA9IDFNQi4gR2l2ZW4g dGhhdCBlYWNoIGNvbW1hbmQgaXMgMzIgYnl0ZXMsCnRoZXJlIGlzIGEgbWF4aW11bSBvZiAzMjc2 OCBjb21tYW5kcyBpbiB0aGUgcXVldWUuCgpUaGUgSVRTIHByb3ZpZGVzIG5vIHNwZWNpZmljIGNv bXBsZXRpb24gbm90aWZpY2F0aW9uCm1lY2hhbmlzbS4gQ29tcGxldGlvbiBpcyBtb25pdG9yZWQg YnkgYSBjb21iaW5hdGlvbiBvZiBhIGBTWU5DYApjb21tYW5kIGFuZCBlaXRoZXIgcG9sbGluZyBg R0lUU19DUkVBRFJgIG9yIG5vdGlmaWNhdGlvbiB2aWEgYW4KaW50ZXJydXB0IGdlbmVyYXRlZCB2 aWEgdGhlIGBJTlRgIGNvbW1hbmQuCgpOb3RlIHRoYXQgdGhlIGludGVycnVwdCBnZW5lcmF0aW9u IHZpYSBgSU5UYCByZXF1aXJlcyBhbiBvcmlnaW5hdGluZwpkZXZpY2UgSUQgdG8gYmUgc3VwcGxp ZWQgKHdoaWNoIGlzIHRoZW4gdHJhbnNsYXRlZCB2aWEgdGhlIElUUyBpbnRvIGFuCkxQSSkuIE5v IHNwZWNpZmljIGRldmljZSBJRCBpcyBkZWZpbmVkIGZvciB0aGlzIHB1cnBvc2UgYW5kIHNvIHRo ZSBPUwpzb2Z0d2FyZSBpcyBleHBlY3RlZCB0byBmYWJyaWNhdGUgb25lLgoKUG9zc2libGUgd2F5 cyBvZiBpbnZlbnRpbmcgc3VjaCBhIGRldmljZSBJRCBhcmU6CgoqIEVudW1lcmF0ZSBhbGwgZGV2 aWNlIGlkcyBpbiB0aGUgc3lzdGVtIGFuZCBwaWNrIGFub3RoZXIgb25lOwoqIFVzZSBhIFBDSSBC REYgYXNzb2NpYXRlZCB3aXRoIGEgbm9uLWV4aXN0ZW50IGRldmljZSBmdW5jdGlvbiAoc3VjaAog IGFzIGFuIHVudXNlZCBvbmUgcmVsYXRpbmcgdG8gdGhlIFBDSSByb290LWJyaWRnZSkgYW5kIHRy YW5zbGF0ZSB0aGF0CiAgKHZpYSBmaXJtd2FyZSB0YWJsZXMpIGludG8gYSBzdWl0YWJsZSBkZXZp Y2UgaWQ7CiogPz8/CgojIExQSSBIYW5kbGluZyBpbiBYZW4KCiMjIElSUSBkZXNjcmlwdG9ycwoK Q3VycmVudGx5IGFsbCBTR0kvUFBJL1NQSSBpbnRlcnJ1cHRzIGFyZSBjb3ZlcmVkIGJ5IGEgc2lu Z2xlIHN0YXRpYwphcnJheSBvZiBgc3RydWN0IGlycV9kZXNjYCB3aXRoIH4xMDI0IGVudHJpZXMg KHRoZSBtYXhpbXVtIGludGVycnVwdApudW1iZXIgaW4gdGhhdCBzZXQgb2YgaW50ZXJydXB0IHR5 cGVzKS4KClRoZSBhZGRpdGlvbiBvZiBMUElzIGluIEdJQ3YzIG1lYW5zIHRoYXQgdGhlIGxhcmdl c3QgcG90ZW50aWFsCmludGVycnVwdCBzcGVjaWZpZXIgaXMgbXVjaCBsYXJnZXIuCgpUaGVyZWZv cmUgYSBzZWNvbmQgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFycmF5IHdpbGwgYmUgYWRkZWQgdG8g Y292ZXIKdGhlIHJhbmdlIGA4MTkyLi5ucl9scGlzYC4gVGhlIGBpcnFfdG9fZGVzY2AgZnVuY3Rp b24gd2lsbCBkZXRlcm1pbmUKd2hpY2ggYXJyYXkgdG8gdXNlIChzdGF0aWMgYDAuLjEwMjRgIG9y IGR5bmFtaWMgYDgxOTIuLmVuZGAgbHBpIGRlc2MKYXJyYXkpIGJhc2VkIG9uIHRoZSBpbnB1dCBp cnEgbnVtYmVyLiBUd28gYXJyYXlzIGFyZSB1c2VkIHRvIGF2b2lkIGEKd2FzdGVmdWwgYWxsb2Nh dGlvbiBjb3ZlcmluZyB0aGUgdW51c2VkL3VudXNhYmxlKSBgMTAyNC4uODE5MWAgcmFuZ2UuCgoj IyBWaXJ0dWFsIExQSSBpbnRlcnJ1cHQgaW5qZWN0aW9uCgpBIHBoeXNpY2FsIGludGVycnVwdCB3 aGljaCBpcyByb3V0ZWQgdG8gYSBndWVzdCB2Q1BVIGhhcyB0aGUKYF9JUlFfR1VFU1RgIGZsYWcg c2V0IGluIHRoZSBgaXJxX2Rlc2NgIHN0YXR1cyBtYXNrLiBTdWNoIGludGVycnVwdHMKaGF2ZSBh biBhc3NvY2lhdGVkIGluc3RhbmNlIG9mIGBzdHJ1Y3QgaXJxX2d1ZXN0YCB3aGljaCBjb250YWlu cyB0aGUKdGFyZ2V0IGBzdHJ1Y3QgZG9tYWluYCBwb2ludGVyIGFuZCB2aXJ0dWFsIGludGVycnVw dCBudW1iZXIuCgpJbiBYZW4gYSB2aXJ0dWFsIGludGVycnVwdCAoZWl0aGVyIGFyaXNpbmcgZnJv bSBhIHBoeXNpY2FsIGludGVycnVwdApvciBjb21wbGV0ZWx5IHZpcnR1YWwpIGlzIHVsdGltYXRl bHkgaW5qZWN0ZWQgdG8gYSBWQ1BVIHVzaW5nIHRoZQpgdmdpY192Y3B1X2luamVjdF9pcnFgIGZ1 bmN0aW9uLCBvciBgdmdpY192Y3B1X2luamVjdF9scGlgLgoKVGhpcyBtZWNoYW5pc20gd2lsbCBs aWtlbHkgbmVlZCB1cGRhdGluZyB0byBoYW5kbGUgdGhlIGluamVjdGlvbiBvZgp2aXJ0dWFsIExQ SXMuIEluIHBhcnRpY3VsYXIgcmF0aGVyIHRoYW4gYEdJQ0RfSVRBUkdFUlJuYCBvcgpgR0lDRF9J Uk9VVEVSbmAgcm91dGluZyBvZiBMUElzIGlzIHBlcmZvcm1lZCB2aWEgdGhlIElUUyBjb2xsZWN0 aW9ucwptZWNoYW5pc20uIFRoaXMgaXMgZGlzY3Vzc2VkIGJlbG93IChJbiBfdklUU186X1ZpcnR1 YWwgTFBJIGluamVjdGlvbl8pLgoKIyBTY29wZQoKVGhlIElUUyBpcyByYXRoZXIgY29tcGxpY2F0 ZWQsIGVzcGVjaWFsbHkgd2hlbiBjb21iaW5lZCB3aXRoCnZpcnR1YWxpc2F0aW9uLiBUbyBzaW1w bGlmeSB0aGluZ3Mgd2UgaW5pdGlhbGx5IG9taXQgdGhlIGZvbGxvd2luZwpmdW5jdGlvbmFsaXR5 OgoKLSBJbnRlcnJ1cHQgLT4gdkNQVSAtPiBwQ1BVIGFmZmluaXR5LiBUaGUgbWFuYWdlbWVudCBv ZiBwaHlzaWNhbCB2cwogIHZpcnR1YWwgQ29sbGVjdGlvbnMgaXMgYSBmZWF0dXJlIG9mIEdJQ3Y0 LCB0aHVzIGlzIG9taXR0ZWQgaW4gdGhpcwogIGRlc2lnbiBmb3IgR0lDdjMuIFBoeXNpY2FsIGlu dGVycnVwdHMgd2hpY2ggb2NjdXIgb24gYSBwQ1BVIHdoZXJlCiAgdGhlIHRhcmdldCB2Q1BVIGlz IG5vdCBhbHJlYWR5IHJlc2lkZW50IHdpbGwgYmUgZm9yd2FyZGVkICh2aWEgSVBJKQogIHRvIHRo ZSBjb3JyZWN0IHBDUFUgZm9yIGluamVjdGlvbiB2aWEgdGhlIGV4aXN0aW5nCiAgYHZnaWNfdmNw dV9pbmplY3RfaXJxYCBtZWNoYW5pc20gKGV4dGVuZGVkIHRvIGhhbmRsZSBMUEkgaW5qZWN0aW9u CiAgY29ycmVjdGx5KS4KLSBDbGVhcmluZyBvZiB0aGUgcGVuZGluZyBzdGF0ZSBvZiBhbiBMUEkg dW5kZXIgdmFyaW91cyBjaXJjdW1zdGFuY2VzCiAgKGBNT1ZJYCwgYERJU0NBUkRgLCBgQ0xFQVJg IGNvbW1hbmRzKSBpcyBub3QgZG9uZS4gVGhpcyB3aWxsIHJlc3VsdAogIGluIGd1ZXN0cyBzZWVp bmcgc29tZSBwZXJoYXBzIHNwdXJpb3VzIGludGVycnVwdHMuCi0gdklUUyBmdW5jdGlvbmFsaXR5 IHdpbGwgb25seSBiZSBhdmFpbGFibGUgb24gNjQtYml0IEFSTSBob3N0cywKICBhdm9pZGluZyB0 aGUgbmVlZCB0byB3b3JyeSBhYm91dCBmYXN0IGFjY2VzcyB0byBndWVzdCBvd25lZCBkYXRhCiAg c3RydWN0dXJlcyAoNjQtYml0IHVzZXMgYSBkaXJlY3QgbWFwKS4gKE5COiAzMi1iaXQgZ3Vlc3Rz IG9uIDY0LWJpdAogIGhvc3RzIGNhbiBiZSBjb25zaWRlcmVkIHRvIGhhdmUgYWNjZXNzKQoKIyBw SVRTCgojIyBBc3N1bXB0aW9ucwoKSXQgaXMgYXNzdW1lZCB0aGF0IGBHSVRTX1RZUEVSLklEYml0 c2AgaXMgbGFyZ2UgZW5vdWdoIHRoYXQgdGhlcmUgYXJlCnN1ZmZpY2llbnQgTFBJcyBhdmFpbGFi bGUgdG8gY292ZXIgdGhlIHN1bSBvZiB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlCmV2ZW50cyBnZW5l cmF0ZWQgYnkgZWFjaCBkZXZpY2UgaW4gdGhlIHN5c3RlbSAodGhhdCBpcyB0aGUgc3VtIG9mIHRo ZQphY3R1YWwgZXZlbnRzIGZvciBlYWNoIGJpdCBvZiBoYXJkd2FyZSwgcmF0aGVyIHRoYW4gdGhl IG5vdGlvbmFsCnBlci1kZXZpY2UgbWF4aW11bSBmcm9tIGBHSVRTX1RZUEVSLklkYml0c2ApLgoK VGhpcyBhc3N1bXB0aW9uIGF2b2lkcyB0aGUgbmVlZCB0byBkbyBtZW1vcnkgYWxsb2NhdGlvbnMg YW5kIGludGVycnVwdApyb3V0aW5nIGF0IHJ1biB0aW1lLCBlLmcuIGR1cmluZyBjb21tYW5kIHBy b2Nlc3NpbmcgYnkgYWxsb3dpbmcgdXMgdG8Kc2V0dXAgZXZlcnl0aGluZyB1cCBmcm9udC4KCiMj IERyaXZlcgoKVGhlIHBoeXNpY2FsIGRyaXZlciB3aWxsIHByb3ZpZGUgZnVuY3Rpb25zIGZvciBl bmFibGluZywgZGlzYWJsaW5nCnJvdXRpbmcgZXRjIGEgc3BlY2lmaWVkIGludGVycnVwdCwgdmlh IHRoZSB1c3VhbCBYZW4gQVBJcyBmb3IgZG9pbmcKc3VjaCB0aGluZ3MuCgpUaGlzIHdpbGwgbGlr ZWx5IGludm9sdmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcGh5c2ljYWwgSVRTIGNvbW1hbmQKcXVl dWUgZXRjLiBJbiB0aGlzIGRvY3VtZW50IHN1Y2ggaW50ZXJhY3Rpb25zIGFyZSBjb25zaWRlcmVk IGludGVybmFsCnRvIHRoZSBkcml2ZXIgKGkuZS4gd2UgY2FyZSB0aGF0IHRoZSBBUEkgdG8gZW5h YmxlIGFuIGludGVycnVwdApleGlzdHMsIG5vdCBob3cgaXQgaXMgaW1wbGVtZW50ZWQpLgoKVGhl IHBoeXNpY2FsIElUUyB3aWxsIGJlIHByb3Zpc2lvbmVkIHdpdGggd2hhdGV2ZXIgdGFibGVzIGl0 IHJlcXVlc3RzCnZpYSBpdHMgYEdJVFNfQkFTRVJuYCByZWdpc3RlcnMuCgojIyBDb2xsZWN0aW9u cwoKVGhlIGBwSVRTYCB3aWxsIGJlIGNvbmZpZ3VyZWQgYXQgc3RhcnQgb2YgZGF5IHdpdGggMSBD b2xsZWN0aW9uIG1hcHBlZAp0byBlYWNoIHBoeXNpY2FsIHByb2Nlc3NvciwgdXNpbmcgdGhlIGBN QVBDYCBjb21tYW5kIG9uIHRoZSBwaHlzaWNhbApJVFMuCgojIyBQZXIgRGV2aWNlIEluZm9ybWF0 aW9uCgpFYWNoIHBoeXNpY2FsIGRldmljZSBpbiB0aGUgc3lzdGVtIHdoaWNoIGNhbiBiZSB1c2Vk IHRvZ2V0aGVyIHdpdGggYW4KSVRTICh3aGV0aGVyIHVzaW5nIHBhc3N0aHJvdWdoIG9yIG5vdCkg d2lsbCBoYXZlIGFzc29jaWF0ZWQgd2l0aCBpdCBhCmRhdGEgc3RydWN0dXJlOgoKICAgIHN0cnVj dCBpdHNfZGV2aWNlIHsKICAgICAgICBzdHJ1Y3QgcGl0cyAqcGl0czsKICAgICAgICB1aW50Tk5f dCBwaHlzX2RldmljZV9pZDsKICAgICAgICB1aW50Tk5fdCB2aXJ0X2RldmljZV9pZDsKICAgICAg ICB1bnNpZ25lZCBpbnQgKmV2ZW50czsKICAgICAgICB1bnNpZ25lZCBpbnQgbnJfZXZlbnRzOwog ICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBpdHQ7CiAgICAgICAgdW5zaWduZWQgaW50IG5yX3Bp dHRfcGFnZXM7CiAgICAgICAgLyogT3RoZXIgZmllbGRzIHJlbGF0aW5nIHRvIHBJVFMgbWFpbnRl bmFuY2UgYnV0IHVucmVsYXRlZCB0byB2SVRTICovCiAgICB9OwoKV2hlcmU6CgotIGBwaXRzYDog UG9pbnRlciB0byB0aGUgYXNzb2NpYXRlZCBwaHlzaWNhbCBJVFMuCi0gYHBoeXNfZGV2aWNlX2lk YDogVGhlIHBoeXNpY2FsIGRldmljZSBJRCBvZiB0aGUgcGh5c2ljYWwgZGV2aWNlCi0gYHZpcnRf ZGV2aWNlX2lkYDogVGhlIHZpcnR1YWwgZGV2aWNlIElEIGlmIHRoZSBkZXZpY2UgaXMgYWNjZXNz aWJsZQogIHRvIGEgZG9tYWluCi0gYGV2ZW50c2A6IEFuIGFycmF5IG1hcHBpbmcgYSBwZXItZGV2 aWNlIGV2ZW50IG51bWJlciBpbnRvIGEgcGh5c2ljYWwKICBMUEkuCi0gYG5yX2V2ZW50c2A6IFRo ZSBudW1iZXIgb2YgZXZlbnRzIHdoaWNoIHRoaXMgZGV2aWNlIGlzIGFibGUgdG8KICBnZW5lcmF0 ZS4KLSBgcGl0dGAsIGBucl9waXR0X3BhZ2VzYDogUmVjb3JkcyBhbGxvY2F0aW9uIG9mIHBhZ2Vz IGZvciBwaHlzaWNhbAogIElUVCAobm90IGRpcmVjdGx5IGFjY2Vzc2libGUpLgoKRHVyaW5nIGl0 cyBsaWZldGltZSB0aGlzIHN0cnVjdHVyZSBtYXkgYmUgcmVmZXJlbmNlZCBieSBzZXZlcmFsCmRp ZmZlcmVudCBtYXBwaW5ncyAoZS5nLiBwaHlzaWNhbCBhbmQgdmlydHVhbCBkZXZpY2UgaWQgbWFw cywgdmlydHVhbApjb2xsZWN0aW9uIGRldmljZSBpZCkuCgojIyBEZXZpY2UgRGlzY292ZXJ5L1Jl Z2lzdHJhdGlvbiBhbmQgQ29uZmlndXJhdGlvbgoKUGVyIGRldmljZSBpbmZvcm1hdGlvbiB3aWxs IGJlIGRpc2NvdmVyZWQgYmFzZWQgb24gZmlybXdhcmUgdGFibGVzIChEVApvciBBQ1BJKSBhbmQg aW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgZG9tMCAoZS5nLiByZWFkaW5nIGFzc29jaWF0ZWQgUENJ CmNmZyBzcGFjZSwgcmVnaXN0cmF0aW9uIHZpYSBQSFlTREVWT1BfcGNpX2RldmljZV9hZGQgb3Ig bmV3IGN1c3RvbQpoeXBlcmNhbGxzKS4KClRoaXMgaW5mb3JtYXRpb24gc2hhbGwgaW5jbHVkZSBh dCBsZWFzdDoKCi0gVGhlIERldmljZSBJRCBvZiB0aGUgZGV2aWNlLgotIFRoZSBtYXhpbXVtIG51 bWJlciBvZiBFdmVudHMgd2hpY2ggdGhlIGRldmljZSBpcyBjYXBhYmxlIG9mCiAgZ2VuZXJhdGlu Zy4KCldoZW4gYSBkZXZpY2UgaXMgZGlzY292ZXJlZC9yZWdpc3RlcmVkIChpLmUuIHdoZW4gYWxs IG5lY2Vzc2FyeQppbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUpIHRoZW46CgotIGBzdHJ1Y3QgaXRz X2RldmljZWAgYW5kIHRoZSBlbWJlZGRlZCBgZXZlbnRzYCBhcnJheSB3aWxsIGJlCiAgYWxsb2Nh dGVkICh0aGUgbGF0dGVyIHdpdGggYG5yX2V2ZW50c2AgZWxlbWVudHMpLgotIFRoZSBgc3RydWN0 IGl0c19kZXZpY2VgIHdpbGwgYmUgaW5zZXJ0ZWQgaW50byBhIG1hcHBpbmcgKHBvc3NpYmx5IGFu CiAgUi1CIHRyZWUpIGZyb20gaXRzIHBoeXNpY2FsIERldmljZSBJRCB0byB0aGUgYHN0cnVjdCBp dHNgLgotIGBucl9ldmVudHNgIHBoeXNpY2FsIExQSXMgd2lsbCBiZSBhbGxvY2F0ZWQgYW5kIHJl Y29yZGVkIGluIHRoZQogIGBldmVudHNgIGFycmF5LgotIEFuIElUVCB0YWJsZSB3aWxsIGJlIGFs bG9jYXRlZCBmb3IgdGhlIGRldmljZSBhbmQgdGhlIGFwcHJvcHJpYXRlCiAgYE1BUERgIGNvbW1h bmQgd2lsbCBiZSBpc3N1ZWQgdG8gdGhlIHBoeXNpY2FsIElUUy4gVGhlIGxvY2F0aW9uIHdpbGwK ICBiZSByZWNvcmRlZCBpbiBgc3RydWN0IGl0c19kZXZpY2UucGl0dGAuCi0gRWFjaCBFdmVudCB3 aGljaCB0aGUgZGV2aWNlIG1heSBnZW5lcmF0ZSB3aWxsIGJlIG1hcHBlZCB0byB0aGUKICBjb3Jy ZXNwb25kaW5nIExQSSBpbiB0aGUgYGV2ZW50c2AgYXJyYXkgYW5kIGEgY29sbGVjdGlvbiwgYnkg aXNzdWluZwogIGEgc2VyaWVzIG9mIGBNQVBWSWAgY29tbWFuZHMuIEV2ZW50cyB3aWxsIGJlIGFz c2lnbmVkIHRvIHBoeXNpY2FsCiAgY29sbGVjdGlvbnMgaW4gYSByb3VuZC1yb2JpbiBmYXNoaW9u LgoKVGhpcyBzZXR1cCBtdXN0IG9jY3VyIGZvciBhIGdpdmVuIGRldmljZSBiZWZvcmUgYW55IElU UyBpbnRlcnJ1cHRzIG1heQpiZSBjb25maWd1cmVkIGZvciB0aGUgZGV2aWNlIGFuZCBjZXJ0YWlu bHkgYmVmb3JlIGEgZGV2aWNlIGlzIHBhc3NlZAp0aHJvdWdoIHRvIGEgZ3Vlc3QuIFRoaXMgaW1w bGllcyB0aGF0IGRvbTAgY2Fubm90IHVzZSBNU0lzIG9uIGEgUENJCmRldmljZSBiZWZvcmUgaGF2 aW5nIGNhbGxlZCBgUEhZU0RFVk9QX3BjaV9kZXZpY2VfYWRkYC4KCiMgRGV2aWNlIEFzc2lnbm1l bnQKCkVhY2ggZG9tYWluIHdpbGwgaGF2ZSBhbiBhc3NvY2lhdGVkIG1hcHBpbmcgZnJvbSB2aXJ0 dWFsIGRldmljZSBpZHMKaW50byBhIGRhdGEgc3RydWN0dXJlIGRlc2NyaWJpbmcgdGhlIHBoeXNp Y2FsIGRldmljZSwgaW5jbHVkaW5nIGEKcmVmZXJlbmNlIHRvIHRoZSByZWxldmFudCBgc3RydWN0 IGl0c19kZXZpY2VgLgoKVGhlIG51bWJlciBvZiBwb3NzaWJsZSBkZXZpY2UgSURzIG1heSBiZSBs YXJnZSBzbyBhIHNpbXBsZSBhcnJheSBvcgpsaXN0IGlzIGxpa2VseSB1bnN1aXRhYmxlLiBBIHRy ZWUgKGUuZy4gUmVkLUJsYWNrIG1heSBiZSBhIHN1aXRhYmxlCmRhdGEgc3RydWN0dXJlLiBDdXJy ZW50bHkgd2UgZG8gbm90IG5lZWQgdG8gcGVyZm9ybSBsb29rdXBzIGluIHRoaXMKdHJlZSBvbiBh bnkgaG90IHBhdGhzLgoKX05vdGVfOiBJbiB0aGUgY29udGV4dCBvZiB2aXJ0dWFsaXNlZCBkZXZp Y2UgaWRzIChlc3BlY2lhbGx5IGZvciBkb21VKQppdCBtYXkgYmUgcG9zc2libGUgdG8gYXJyYW5n ZSBmb3IgdGhlIHVwcGVyIGJvdW5kIG9uIHRoZSBudW1iZXIgb2YKZGV2aWNlIElEcyB0byBiZSBs b3dlciBhbGxvd2luZyBhIG1vcmUgZWZmaWNpZW50IGRhdGEgc3RydWN0dXJlIHRvIGJlCnVzZWQu IFRoaXMgaXMgbGVmdCBmb3IgYSBmdXR1cmUgaW1wcm92ZW1lbnQuCgpXaGVuIGEgZGV2aWNlIGlz IGFzc2lnbmVkIHRvIGEgZG9tYWluIChpbmNsdWRpbmcgdG8gZG9tYWluIDApIHRoZQptYXBwaW5n IGZvciB0aGUgbmV3IHZpcnR1YWwgZGV2aWNlIElEIHdpbGwgYmUgZW50ZXJlZCBpbnRvIHRoZSB0 cmVlLgoKRHVyaW5nIGFzc2lnbm1lbnQgYWxsIExQSXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXZp Y2Ugd2lsbCBiZSByb3V0ZWQKdG8gdGhlIGd1ZXN0IChpLmUuIGByb3V0ZV9pcnFfdG9fZ3Vlc3Rg IHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIExQSSBpbgp0aGUgYHN0cnVjdCBpdHNfZGV2aWNlLmV2 ZW50c2AgYXJyYXkpIGFuZCB0aGUgcExQSSB3aWxsIGJlIGVuYWJsZWQgaW4KdGhlIHBoeXNpY2Fs IExQSSBjb25maWd1cmF0aW9uIHRhYmxlIHdpdGggYSBwcmlvcml0eSBvZiBgR0lDX1BSSV9JUlFg Cihub3QgYW55IHByaW9yaXR5IGZyb20gdGhlIGd1ZXN0KS4KCiMgdklUUwoKQSBndWVzdCBkb21h aW4gd2hpY2ggaXMgYWxsb3dlZCB0byB1c2UgSVRTIGZ1bmN0aW9uYWxpdHkgKGkuZS4gaGFzCmJl ZW4gYXNzaWduZWQgcGFzcy10aHJvdWdoIGRldmljZXMgd2hpY2ggY2FuIGdlbmVyYXRlIE1TSXMp IHdpbGwgYmUKcHJlc2VudGVkIHdpdGggYSB2aXJ0dWFsaXNlZCBJVFMuCgpBY2Nlc3NlcyB0byB0 aGUgdklUUyByZWdpc3RlcnMgd2lsbCB0cmFwIHRvIFhlbiBhbmQgYmUgZW11bGF0ZWQgYW5kIGEK dmlydHVhbGlzZWQgQ29tbWFuZCBRdWV1ZSB3aWxsIGJlIHByb3ZpZGVkLgoKQ29tbWFuZHMgZW50 ZXJlZCBvbnRvIHRoZSB2aXJ0dWFsIENvbW1hbmQgUXVldWUgd2lsbCBiZSB0cmFuc2xhdGVkCmlu dG8gcGh5c2ljYWwgY29tbWFuZHMsIGFzIGRlc2NyaWJlZCBsYXRlciBpbiB0aGlzIGRvY3VtZW50 LgoKVGhlcmUgYXJlIG90aGVyIGFzcGVjdHMgdG8gdmlydHVhbGlzaW5nIHRoZSBJVFMgKExQSSBj b2xsZWN0aW9uCm1hbmFnZW1lbnQsIGFzc2lnbm1lbnQgb2YgTFBJIHJhbmdlcyB0byBndWVzdHMs IGRldmljZQptYW5hZ2VtZW50KS4gSG93ZXZlciB0aGVzZSBhcmUgb25seSBjb25zaWRlcmVkIGhl cmUgdG8gdGhlIGV4dGVudApuZWVkZWQgZm9yIGRlc2NyaWJpbmcgdGhlIHZJVFMgZW11bGF0aW9u LgoKIyMgWGVuIGludGVyYWN0aW9uIHdpdGggZ3Vlc3QgT1MgcHJvdmlzaW9uZWQgdklUUyBtZW1v cnkKCk1lbW9yeSB3aGljaCB0aGUgZ3Vlc3QgcHJvdmlzaW9ucyB0byB0aGUgdklUUyAoSVRUIHZp YSBgTUFQRGAgb3Igb3RoZXIKdGFibGVzIHZpYSBgR0lUU19CQVNFUm5gKSBuZWVkcyBjYXJlZnVs IGhhbmRsaW5nIGluIFhlbi4KCiMjIyBUcnVzdAoKU2luY2UgWGVuIGNhbm5vdCB0cnVzdCBkYXRh IGluIGRhdGEgc3RydWN0dXJlcyBjb250YWluZWQgaW4gc3VjaAptZW1vcnkgaWYgYSBndWVzdCBj YW4gdHJhbXBsZSBvdmVyIGl0IGF0IHdpbGwuIFRoZXJlZm9yZSBYZW4gZWl0aGVyCm11c3QgdGFr ZSBncmVhdCBjYXJlIHdoZW4gYWNjZXNzaW5nIGRhdGEgc3RydWN0dXJlcyBzdG9yZWQgaW4gc3Vj aAptZW1vcnkgdG8gdmFsaWRhdGUgdGhlIGNvbnRlbnRzIGUuZy4gbm90IHRydXN0IHRoYXQgdmFs dWVzIGFyZSB3aXRoaW4KdGhlIHJlcXVpcmVkIGxpbWl0cyBvciBpdCBtdXN0IHRha2Ugc3RlcHMg dG8gcmVzdHJpY3QgZ3Vlc3QgYWNjZXNzIHRvCnRoZSBtZW1vcnkgd2hlbiBpdCBpcyBwcm92aXNp b25lZC4gU2luY2UgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUKc2ltcGxlIGFuZCBtb3N0IGFjY2Vz c29ycyBuZWVkIHRvIGRvIGJvdW5kcyBjaGVjayBhbnl3YXkgaXQgaXMKY29uc2lkZXJlZCBzdWZm aWNpZW50IHRvIHNpbXBseSBkbyB0aGUgbmVjZXNzYXJ5IGNoZWNrcyBvbiBhY2Nlc3MuCgoqKkFu eSBpbmZvcm1hdGlvbiByZWFkIG1lbW9yeSB3aGljaCBoYXMgYmVlbiBwcm92aXNpb25lZCBieSB0 aGUgZ3Vlc3QKICAgT1Mgc2hvdWxkIG5vdCBiZSB0cnVzdGVkIGFuZCBtdXN0IGJlIGNhcmVmdWxs eSBjaGVja2VkIChlLmcuIHJhbmdlcwogICBldGMpIGJlZm9yZSB1c2UuKioKCiMjIyBNYXBwaW5n CgpNb3N0IGRhdGEgc3RydWN0dXJlcyBzdG9yZWQgaW4gdGhpcyBzaGFyZWQgbWVtb3J5IGFyZSBh Y2Nlc3NlZCBvbiB0aGUKaG90IGludGVycnVwdCBpbmplY3Rpb24gcGF0aCBhbmQgbXVzdCB0aGVy ZWZvcmUgYmUgcXVpY2tseSBhY2Nlc3NpYmxlCmZyb20gd2l0aGluIFhlbi4gU2luY2Ugd2UgaGF2 ZSByZXN0cmljdGVkIHZpdHMgc3VwcG9ydCB0byA2NC1iaXQgaG9zdHMKb25seSBgbWFwX2RvbWFp bl9wYWdlYCBpcyBmYXN0IGVub3VnaCB0byBiZSB1c2VkIG9uIHRoZSBmbHkgYW5kCnRoZXJlZm9y ZSB3ZSBkbyBub3QgbmVlZCB0byBiZSBjb25jZXJuZWQgYWJvdXQgdW5ib3VuZGVkIGFtb3VudHMg b2YKcGVybWFuZW50bHkgbWFwcGVkIG1lbW9yeSBjb25zdW1lZCBieSBlYWNoIGBNQVBEYCBjb21t YW5kLgoKQWx0aG91Z2ggYG1hcF9kb21haW5fcGFnZWAgaXMgZmFzdCwgYHAybV9sb29rdXBgICh0 cmFuc2xhdGlvbiBmcm9tIElQQQp0byBQQSkgaXMgbm90IG5lY2Vzc2FyaWx5IHNvLiBGb3Igbm93 IHdlIGFjY2VwdCB0aGlzLCBhcyBhIGZ1dHVyZQpleHRlbnNpb24gYSBzcGFyc2UgbWFwcGluZyBv ZiB0aGUgZ3Vlc3QgZGV2aWNlIHRhYmxlIGluIHZtYXAgc3BhY2UKY291bGQgYmUgY29uc2lkZXJl ZCwgd2l0aCBsaW1pdHMgb24gdGhlIHRvdGFsIGFtb3VudCBvZiB2bWFwIHNwYWNlIHdoaWNoCndl IGFsbG93IGVhY2ggZG9tYWluIHRvIGNvbnN1bWUuCgpUaGUgYEdJVFNfQkFTRVJuYCByZWdpc3Rl cnMgYWxsb3cgZm9yIHRoZSBndWVzdCB0byBzcGVjaWZ5IGNhY2hlCmF0dHJpYnV0ZXMgZm9yIHRo ZSBtZW1vcnkuIEZvciBub3cgd2UgcmVxdWlyZSB0aGF0IHRoZXNlIGhhdmUgdGhlIHNhbWUKYXR0 cmlidXRlcyBhcyBoeXBlcmNhbGwgYXJndW1lbnRzIGluIGdlbmVyYWwgKHNlZSBgcHVibGljL2Fy Y2gtYXJtLmhgKQoKSW4gYWRkaXRpb24gd2hpbGUgYEdJVFNfQkFTRVJuYCBhbGxvd3MgdGhlIENh Y2hlYWJpbGl0eSB0byBiZQpzcGVjaWZpZWQgYXMgYERldmljZS1uR25SbkVgIHdlIHJlcXVpcmUg dGhhdCB0aGUgdGFibGVzIHByb3ZpZGVkIGJlIGluCm5vcm1hbCBndWVzdCBSQU0gKG5vdCBNTUlP LCBub3QgZ3JhbnRlZCBtZW1vcnkgZXRjKSwgdGhhdCBpcyBpdCBtdXN0CmhhdmUgdHlwZSBgcDJt X3JhbV9yd2AuCgojIyB2SVRTIHByb3BlcnRpZXMKClRoZSB2SVRTIGltcGxlbWVudGF0aW9uIHNo YWxsIGhhdmU6CgotIGBHSVRTX1RZUEVSLkhDQyA9PSBucl92Y3B1cyArIDFgLgotIGBHSVRTX1RZ UEVSLlBUQSA9PSAwYC4gVGFyZ2V0IGFkZHJlc3NlcyBhcmUgbGluZWFyIHByb2Nlc3NvciBudW1i ZXJzLgotIGBHSVRTX1RZUEVSLkRldmJpdHMgPT0gU2VlIGJlbG93YC4KLSBgR0lUU19UWVBFUi5J RGJpdHMgPT0gU2VlIGJlbG93YC4KLSBgR0lUU19UWVBFUi5JVFQgRW50cnkgU2l6ZSA9PSA3YCwg bWVhbmluZyA4IGJ5dGVzLCB3aGljaCBpcyB0aGUgc2l6ZQogIG9mIGBzdHJ1Y3Qgdml0dGAgKGRl ZmluZWQgYmVsb3cpLgoKYEdJVFNfVFlQRVIuRGV2Yml0c2AgYW5kIGBHSVRTX1RZUEVSLklkYml0 c2Agd2lsbCBuZWVkIHRvIGJlIGNob3NlbiB0bwpyZWZsZWN0IHRoZSBob3N0IGFuZCBndWVzdCBj b25maWd1cmF0aW9ucyAobnVtYmVyIG9mIExQSXMsIG1heGltdW0KZGV2aWNlIElEIGV0YykuCgpP dGhlciBmaWVsZHMgKG5vdCBtZW50aW9uZWQgaGVyZSkgd2lsbCBiZSBzZXQgdG8gc29tZSBzZW5z aWJsZSAob3IKbWFuZGF0ZWQpIHZhbHVlLgoKVGhlIGBHSVRTX0JBU0VSMGAgd2lsbCBiZSBzZXR1 cCB0byByZXF1ZXN0IHN1ZmZpY2llbnQgbWVtb3J5IGZvciBhCmRldmljZSB0YWJsZSBjb25zaXN0 aW5nIG9mIGVudHJpZXMgb2Y6CgogICAgc3RydWN0IHZkZXZpY2VfdGFibGUgewogICAgICAgIHVp bnQ2NF90IHZpdHRfaXBhOwogICAgICAgIHVpbnQzMl90IHZpdHRfc2l6ZTsKICAgICAgICB1aW50 MzJfdCBwYWRkaW5nOwogICAgfTsKICAgIEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHZkZXZp Y2VfdGFibGUpICE9IDE2KTsKCk9uIHdyaXRlIHRvIGBHSVRTX0JBU0VSMGAgdGhlIHJlbGV2YW50 IGRldGFpbHMgb2YgdGhlIERldmljZSBUYWJsZQooSVBBLCBzaXplLCBjYWNoZSBhdHRyaWJ1dGVz IHRvIHVzZSB3aGVuIG1hcHBpbmcpIHdpbGwgYmUgcmVjb3JkZWQgaW4KYHN0cnVjdCBkb21haW5g LgoKQWxsIG90aGVyIGBHSVRTX0JBU0VSbi5WYWxpZCA9PSAwYC4KCiMjIHZJVFMgdG8gcElUUyBt YXBwaW5nCgpBIHBoeXNpY2FsIHN5c3RlbSBtYXkgaGF2ZSBtdWx0aXBsZSBwaHlzaWNhbCBJVFNz LgoKV2l0aCB0aGUgc2ltcGxpZmllZCB2aXRzIGNvbW1hbmQgbW9kZWwgcHJlc2VudGVkIGhlcmUg b25seSBhIHNpbmdsZQpgdml0c2AgaXMgcmVxdWlyZWQuCgpJbiB0aGUgZnV0dXJlIGEgbW9yZSBj b21wbGV4IGFycmFuZ2VtZW50IG1heSBiZSBkZXNpcmVkLiBTaW5jZSB0aGUKY2hvaWNlIG9mIG1v ZGVsIGlzIGludGVybmFsIHRvIHRoZSBoeXBlcnZpc29yL3Rvb2xzIGFuZCBpcwpjb21tdW5pY2F0 ZWQgdG8gdGhlIGd1ZXN0IHZpYSBmaXJtd2FyZSB0YWJsZXMgd2UgYXJlIG5vdCB0aWVkIHRvIHRo aXMKbW9kZWwgYXMgYW4gQUJJIGlmIHdlIGRlY2lkZSB0byBjaGFuZ2UuCgpXaGVuIGNvbnN0cnVj dGluZyBkb20wIGl0IHdpbGwgdGhlcmVmb3JlIGJlIG5lY2Vzc2FyeSB0byByZXdyaXRlIGFueQpE VFMgcHJvcGVydGllcyB3aGljaCByZWZlciB0byBhbiBJVFMgdG8gcG9pbnQgdG8gdGhlIHNpbmds ZSBwcm92aWRlZApJVFMsIGFzIHdlbGwgYXMgZHJvcHBpbmcgYWxsIElUUyBub2RlcyBhbmQgcmVw bGFjaW5nIHRoZW0gd2l0aCBhCnNpbmdsZSBub2RlIHJlcHJlc2VudGluZyB0aGUgdklUUy4KCiMj IE1hcHBpbmcgZnJvbSBgdkxQSWAgYmFjayB0byBgcExQSWAKCldoaWxlIHdlIGhhdmUgYXJyYW5n ZWQgZm9yIGEgKGBwRGV2aWNlYCxgcEV2ZW50YCkgdG8gbWFwIHRvIGEgc2luZ2xlCmBwTFBJYCB3 ZSBjYW5ub3QgZ3VhcmFudGVlIHRoYXQgYSBnaXZlbiBgdkxQSWAgaXMgbWFwcGVkIGJ5IGEgc2lu Z2xlCihgdkRldmljZWAsYHZFdmVudGApIHNpbmNlIHRoZSBndWVzdCBtYXkgc2V0dXAgbXVsdGlw bGUgSVRUIHRhYmxlcwpzdWNoIHRoYXQgdGhpcyBpcyBub3QgdGhlIGNhc2UuIEVuZm9yY2luZyB0 aGF0IHRoaXMgaXMgdGhlIGNhc2UgaXMKcHJvaGliaXRpdmVseSBleHBlbnNpdmUuCgpUaGVyZWZv cmUgaXQgaXMgbm90IGluIGdlbmVyYWwgcG9zc2libGUgdG8gYXNzb2NpYXRlIGEgYHZMUElgIHdp dGggYQpgcExQSWAuCgojIyBMUEkgQ29uZmlndXJhdGlvbiBUYWJsZSBWaXJ0dWFsaXNhdGlvbgoK QSBgdkxQSWAgY2Fubm90IGluIGdlbmVyYWwgYmUgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMK YHBMUElgLiBUaGVyZWZvcmUgdGhlcmUgaXMgbm8gdmlydHVhbGlzYXRpb24gdG8gYmUgZG9uZSBo ZXJlLgoKSW5zdGVhZCBhIGxvb2t1cCBpcyBtYWRlIGludG8gdGhlIHRhYmxlIGVhY2ggdGltZSBh IGB2TFBJYCBpcyB0byBiZQpkZWxpdmVyZWQuCgogICAgZGVmaW5lIGdldF92bHBpX2NmZyhkb21h aW4sIHZscGksIHVpbnQ4X3QgKmNmZyk6CiAgICAgICAgb2Zmc2V0ID0gdmxwaSpzaXplb2YodWlu dDhfdCkKICAgICAgICBpZiBvZmZzZXQgPiA8TFBJIENGRyBUYWJsZSBzaXplPjogZXJyb3IKCiAg ICAgICAgbHBpX2VudHJ5ID0gPExQSSBDRkcgSVBBPiArIG9mZnNldAogICAgICAgIHBhZ2UgPSBw Mm1fbG9va3VwKGRvbWFpbiwgbHBpX2VudHJ5LCBwMm1fcmFtKQogICAgICAgIGlmICFwYWdlOiBl cnJvcgogICAgICAgIC8qIG5iOiBub24tUkFNIHBhZ2VzLCBlLmcuIGdyYW50IG1hcHBpbmdzLAog ICAgICAgICAqIGFyZSByZWplY3RlZCBieSB0aGlzIGxvb2t1cCAqLwoKICAgICAgICBscGlfbWFw cGluZyA9IG1hcF9kb21haW5fcGFnZShwYWdlKQoKICAgICAgICAqY2ZnID0gbHBpX21hcHBpbmdb PGFwcHJvcHJpYXRlIHBhZ2Ugb2Zmc2V0Pl07CgogICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKGxw aV9tYXBwaW5nKQoKTm90ZSB0aGF0IHBoeXNpY2FsIGludGVycnVwdHMgYXJlIGFsd2F5cyBjb25m aWd1cmVkIHdpdGggYSBwcmlvcml0eSBvZgpgR0lDX1BSSV9JUlFgLCByZWdhcmRsZXNzIG9mIHRo ZSBwcmlvcml0eSBvZiBhbnkgdmlydHVhbCBpbnRlcnJ1cHQuCgojIyMgRW5hYmxpbmcgYW5kIGRp c2FibGluZyBMUElzCgpTaW5jZSB0aGVyZSBpcyBubyAxOjEgbGluayBiZXR3ZWVuIGEgYHZMUElg IGFuZCBgcExQSWAgZW5hYmxpbmcgYW5kCmRpc2FibGluZyBvZiBwaHlpc2NhbCBMUElzIGNhbm5v dCBiZSBkcml2ZW4gZnJvbSB0aGUgc3RhdGUgb2YgYW4KYXNzb2NpYXRlZCB2TFBJLgoKRWFjaCBg cExQSWAgaXMgcm91dGVkIGFuZCBlbmFibGVkIGR1cmVpbmcgZGV2aWNlIGFzc2lnbm1lbnQsIHRo ZXJlZm9yZQppdCBpcyBwb3NzaWJsZSB0byByZWNlaXZlIGEgcGh5c2ljYWwgTFBJIHdoaWNoIGhh cyB5ZXQgdG8gYmUgcm91dGVkCih2aWEgYSBgdklUU2ApIHRvIGEgYHZMUElgIG9yIGZvciB3aGlj aCB0aGUgYHZMUElgIGhhcyBub3QgeWV0IGJlCmNvbmZpZ3VyZWQvZW5hYmxlZC4KClNpbWlsYXJs eSBpZiBhIGd1ZXN0IHJvdXRlcyBtdWx0aXBsZSBFdmVudHMgdG8gYSBzaW5nbGUgYHZMUElgIHRo ZQppbnRlcnJ1cHQgbWF5IGFscmVhZHkgYmUgcGVuZGluZyB3aGVuIHdlIGF0dGVtcHQgdG8gZGVs aXZlciBpdC4KClN1Y2ggYHBMUElgcyBzaGFsbCBiZSBpZ25vcmVkIGFuZCBsZWZ0IGluIHRoZSBw cmlvcml0eSBkcm9wcGVkIHN0YXRlCihwZXIgdGhlIHJlYWQgZnJvbSBgR0lDQ19JQVJgKS4gVGhl eSB3aWxsIG5vdCBiZSBgRU9JYC1kIGluIG9yZGVyIHRvCmF2b2lkIGEgcG9zc2libGUgaW50ZXJy dXB0IHN0b3JtLgoKT24gZGV2aWNlIGRlYXNzaWdubWVudCAoaW5jbHVkaW5nIGFzIHBhcnQgb2Yg ZG9tYWluIGRlc3Ryb3kpIGFmdGVyCnJlc2V0dGluZyB0aGUgZGV2aWNlIGl0IHdpbGwgYmUgbmVj ZXNzYXJ5IHRvIEVPSSBhbnkgaW50ZXJydXB0cyBpbgpzdWNoIGEgc3RhdGUgYnkgd2Fsa2luZyBv dmVyIGFsbCBldmVudHMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYHN0cnVjdAppdHNfZGV2aWNlYC4K CiMjIExQSSBQZW5kaW5nIFRhYmxlIFZpcnR1YWxpc2F0aW9uCgpBY2NvcmRpbmcgdG8gR0lDIHNw ZWMgNC44LjUgdGhpcyB0YWJsZSBpcyBub3QgbmVjZXNzYXJpbHkgaW4gc3luYyBhbmQKdGhlIG1l Y2hhbmlzbSB0byBmb3JjZSBhIHN5bmMgaXMgYElNUExFTUVOVEFUSU9OIERFRklORURgLCBoZW5j ZSB3ZQpkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgoKIyMgRGV2aWNlIFRhYmxlIFZpcnR1YWxp c2F0aW9uCgpUaGUgSVBBLCBzaXplIGFuZCBjYWNoZWFiaWxpdHkgYXR0cmlidXRlcyBvZiB0aGUg Z3Vlc3QgZGV2aWNlIHRhYmxlCndpbGwgYmUgcmVjb3JkZWQgaW4gYHN0cnVjdCBkb21haW5gIHVw b24gd3JpdGUgdG8gYEdJVFNfQkFTRVIwYC4KCkluIG9yZGVyIHRvIGxvb2t1cCBhbiBlbnRyeSBm b3IgYGRldmljZWA6CgogICAgZGVmaW5lIHtnZXQsc2V0fV92ZGV2aWNlX2VudHJ5KGRvbWFpbiwg ZGV2aWNlLCBzdHJ1Y3QgZGV2aWNlX3RhYmxlICplbnRyeSk6CiAgICAgICAgb2Zmc2V0ID0gZGV2 aWNlKnNpemVvZihzdHJ1Y3QgdmRldmljZV90YWJsZSkKICAgICAgICBpZiBvZmZzZXQgPiA8RFQg c2l6ZT46IGVycm9yCgogICAgICAgIGR0X2VudHJ5ID0gPERUIGJhc2UgSVBBPiArIGRldmljZSpz aXplb2Yoc3RydWN0IHZkZXZpY2VfdGFibGUpCiAgICAgICAgcGFnZSA9IHAybV9sb29rdXAoZG9t YWluLCBkdF9lbnRyeSwgcDJtX3JhbSkKICAgICAgICBpZiAhcGFnZTogZXJyb3IKICAgICAgICAv KiBuYjogbm9uLVJBTSBwYWdlcywgZS5nLiBncmFudCBtYXBwaW5ncywKICAgICAgICAgKiBhcmUg cmVqZWN0ZWQgYnkgdGhpcyBsb29rdXAgKi8KCiAgICAgICAgZHRfbWFwcGluZyA9IG1hcF9kb21h aW5fcGFnZShwYWdlKQoKICAgICAgICBpZiAoc2V0KQogICAgICAgICAgICAgZHRfbWFwcGluZ1s8 YXBwcm9wcmlhdGUgcGFnZSBvZmZzZXQgZnJvbSBkZXZpY2U+XSA9ICplbnRyeTsKICAgICAgICBl bHNlCiAgICAgICAgICAgICAqZW50cnkgPSBkdF9tYXBwaW5nWzxhcHByb3ByaWF0ZSBwYWdlIG9m ZnNldD5dOwoKICAgICAgICB1bm1hcF9kb21haW5fcGFnZShkdF9tYXBwaW5nKQoKU2luY2UgZXZl cnl0aGluZyBpcyBiYXNlZCB1cG9uIElQQSAoZ3Vlc3QgYWRkcmVzc2VzKSBhIG1hbGljaW91cyBn dWVzdApjYW4gb25seSByZWZlcmVuY2UgaXRzIG93biBSQU0gaGVyZS4KCiMjIElUVCBWaXJ0dWFs aXNhdGlvbgoKVGhlIGxvY2F0aW9uIG9mIGEgVklUUyB3aWxsIGhhdmUgYmVlbiByZWNvcmRlZCBp biB0aGUgZG9tYWluIERldmljZQpUYWJsZSBieSBhIGBNQVBJYCBvciBgTUFQVklgIGNvbW1hbmQg YW5kIGlzIGxvb2tlZCB1cCBhcyBhYm92ZS4KClRoZSBgdml0dGAgaXMgYSBgc3RydWN0IHZpdHRg OgoKICAgIHN0cnVjdCB2aXR0IHsKICAgICAgICB1aW50MTZfdCB2YWxpZDoxOwogICAgICAgIHVp bnQxNl90IHBhZDoxNTsKICAgICAgICB1aW50MTZfdCBjb2xsZWN0aW9uOwogICAgICAgIHVpbnQz Ml90IHZscGk7CiAgICB9OwogICAgQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qgdml0dCkgIT0g OCk7CgpBIGxvb2t1cCBvY2N1cnMgc2ltaWxhciB0byBmb3IgYSBkZXZpY2UgdGFibGUsIHRoZSBv ZmZzZXQgaXMgcmFuZ2UKY2hlY2tlZCBhZ2FpbnN0IHRoZSBgdml0dF9zaXplYCBmcm9tIHRoZSBk ZXZpY2UgdGFibGUuIFRvIGxvb2t1cApgZXZlbnRgIG9uIGBkZXZpY2VgOgoKICAgIGRlZmluZSB7 Z2V0LHNldH1fdml0dF9lbnRyeShkb21haW4sIGRldmljZSwgZXZlbnQsIHN0cnVjdCB2aXR0ICpl bnRyeSk6CiAgICAgICAgZ2V0X3ZkZXZpY2VfZW50cnkoZG9tYWluLCBkZXZpY2UsICZkdCkKCiAg ICAgICAgb2Zmc2V0ID0gZXZlbnQqc2l6ZW9mKHN0cnVjdCB2aXR0KTsKICAgICAgICBpZiBvZmZz ZXQgPiBkdC0+dml0dF9zaXplOiBlcnJvcgoKICAgICAgICB2aXR0X2VudHJ5ID0gZHQtPnZpdGFf aXBhICsgZXZlbnQqc2l6ZW9mKHN0cnVjdCB2aXR0KQogICAgICAgIHBhZ2UgPSBwMm1fbG9va3Vw KGRvbWFpbiwgdml0dF9lbnRyeSwgcDJtX3JhbSkKICAgICAgICBpZiAhcGFnZTogZXJyb3IKICAg ICAgICAvKiBuYjogbm9uLVJBTSBwYWdlcywgZS5nLiBncmFudCBtYXBwaW5ncywKICAgICAgICAg KiBhcmUgcmVqZWN0ZWQgYnkgdGhpcyBsb29rdXAgKi8KCiAgICAgICAgdml0dF9tYXBwaW5nID0g bWFwX2RvbWFpbl9wYWdlKHBhZ2UpCgogICAgICAgIGlmIChzZXQpCiAgICAgICAgICAgICB2aXR0 X21hcHBpbmdbPGFwcHJvcHJpYXRlIHBhZ2Ugb2Zmc2V0IGZyb20gZXZlbnQ+XSA9ICplbnRyeTsK ICAgICAgICBlbHNlCiAgICAgICAgICAgICAqZW50cnkgPSB2aXR0X21hcHBpbmdbPGFwcHJvcHJp YXRlIHBhZ2Ugb2Zmc2V0Pl07CgogICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKGVudHJ5KQoKQWdh aW4gc2luY2UgdGhpcyBpcyBJUEEgYmFzZWQgYSBtYWxpY2lvdXMgZ3Vlc3QgY2FuIG9ubHkgcG9p bnQgdGhpbmdzCnRvIGl0cyBvd24gcmFtLgoKIyMgQ29sbGVjdGlvbiBUYWJsZSBWaXJ0dWFsaXNh dGlvbgoKQSBwb2ludGVyIHRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFycmF5IGBpdHNfY29s bGVjdGlvbnNgIG1hcHBpbmcKY29sbGVjdGlvbiBJRCB0byB2Y3B1IElEIHdpbGwgYmUgYWRkZWQg dG8gYHN0cnVjdCBkb21haW5gLiBUaGUgYXJyYXkKc2hhbGwgaGF2ZSBgbnJfdmNwdXMgKyAxYCBl bnRyaWVzIGFuZCByZXNldHMgdG8gfjAgKG9yIGFub3RoZXIKZXhwbGljaXRseSBpbnZhbGlkIHZw Y3UgbnIpLgoKIyMgVmlydHVhbCBMUEkgaW5qZWN0aW9uCgpBcyBkaXNjdXNzZWQgYWJvdmUgdGhl IGB2Z2ljX3ZjcHVfaW5qZWN0X2lycWAgZnVuY3Rpb25hbGl0eSB3aWxsIG5lZWQKdG8gYmUgZXh0 ZW5kZWQgdG8gY292ZXIgdGhpcyBuZXcgY2FzZSwgbW9zdCBsaWtlbHkgdmlhIGEgbmV3CmB2Z2lj X3ZjcHVfaW5qZWN0X2xwaWAgZnJvbnRlbmQgZnVuY3Rpb24uIGB2Z2ljX3ZjcHVfaW5qZWN0X2ly cWAgd2lsbAphbHNvIHJlcXVpcmUgc29tZSByZWZhY3RvcmluZyB0byBhbGxvdyB0aGUgcHJpb3Jp dHkgdG8gYmUgcGFzc2VkIGluCmZyb20gdGhlIGNhbGxlciAoc2luY2UgYExQSWAgcHJvcHJpdHkg Y29tZXMgZnJvbSB0aGUgYExQSWAgQ0ZHIHRhYmxlLAp3aGlsZSBgU1BJYCBhbmQgYFBQSWAgcHJp b3JpdHkgaXMgY29uZmlndXJlZCB2aWEgb3RoZXIgbWVhbnMpLgoKYHZnaWNfdmNwdV9pbmplY3Rf bHBpYCByZWNlaXZlcyBhIGBzdHJ1Y3QgZG9tYWluICpgIGFuZCBhIHZpcnR1YWwKaW50ZXJydXB0 IG51bWJlciAoY29ycmVzcG9uZGluZyB0byBhIHZMUEkpIGFuZCBuZWVkcyB0byBmaWd1cmUgb3V0 CndoaWNoIHZjcHUgdGhpcyBzaG91bGQgbWFwIHRvLgoKVG8gZG8gdGhpcyBpdCBtdXN0IGxvb2sg dXAgdGhlIENvbGxlY3Rpb24gSUQgYXNzb2NpYXRlZCAodmlhIHRoZSB2SVRTKQp3aXRoIHRoYXQg TFBJLgoKUHJvcG9zYWw6IEFkZCBhIG5ldyBgaXRzX2RldmljZWAgZmllbGQgdG8gYHN0cnVjdCBp cnFfZ3Vlc3RgLCBhCnBvaW50ZXIgdG8gdGhlIGFzc29jaWF0ZWQgYHN0cnVjdCBpdHNfZGV2aWNl YC4gVGhlIGV4aXN0aW5nIGBzdHJ1Y3QKaXJxX2d1ZXN0LnZpcnFgIGZpZWxkIGNvbnRhaW5zIHRo ZSBldmVudCBJRCAocGVyaGFwcyB1c2UgYSBgdW5pb25gCnRvIGdpdmUgYSBtb3JlIGFwcHJvcHJp YXRlIG5hbWUpIGFuZCBfbm90XyB0aGUgdmlydHVhbCBMUEkuIEluamVjdGlvbgp0aGVuIGNvbnNp c3RzIG9mOgoKICAgICAgICBkID0gaXJxX2d1ZXN0LT5kb21haW4KICAgICAgICB2aXJxID0gaXJx X2d1ZXN0LT52aXJxCiAgICAgICAgaXRzX2RldmljZSA9IGlycV9ndWVzdC0+aXRzX2RldmljZQoK ICAgICAgICBnZXRfdml0dF9lbnRyeShkLCBpdHNfZGV2aWNlLT52aXJ0X2RldmljZV9pZCwgdmly cSwgJnZpdHQpCiAgICAgICAgdmNwdSA9IGQtPml0c19jb2xsZWN0aW9uc1t2aXR0LmNvbGxlY3Rp b25dCgogICAgICAgIGlmICFpc192YWxpZF9scGkodml0dC52bHBpKTogZXJyb3IKCiAgICAgICAg Z2V0X3ZscGlfY2ZnKGQsIHZpdHQudmxwaSwgJmNmZykKICAgICAgICBpZiAhY2ZnLmVuYWJsZWQ6 IGlnbm9yZQoKICAgICAgICB2Z2ljX3ZjcHVfaW5qZWN0X2lycSgmZC0+dmNwdXNbdmNwdV0sIHZp dHQudmxwaSwgY2ZnLnByaW9yaXR5KQoKIyMgQ29tbWFuZCBRdWV1ZSBWaXJ0dWFsaXNhdGlvbgoK VGhlIGNvbW1hbmQgdHJhbnNsYXRpb24vZW11bGF0aW9uIGluIHRoaXMgZGVzaWduIGhhcyBiZWVu IGFycmFuZ2VkIHRvCmJlIGFzIGNoZWFwIGFzIHBvc3NpYmxlIChlLmcuIGluIG1hbnkgY2FzZXMg dGhlIGFjdGlvbnMgYXJlIE5PUHMpLAphdm9pZGluZyBwcmV2aW91cyBjb25jZXJucyBhYm91dCB0 aGUgbGVuZ3RoIG9mIHRpbWUgd2hpY2ggYW4gZW11bGF0ZWQKd3JpdGUgdG8gYSBgQ1dSSVRFUmAg cmVnaXN0ZXIgbWF5IGJsb2NrIHRoZSB2Y3B1LgoKVGhlIHZpdHMgd2lsbCBzaW1wbHkgdHJhY2sg aXRzIHJlYWRlciBhbmQgd3JpdGVyIHBvaW50ZXJzLiBPbiB3cml0ZQp0byBgQ1dSSVRFUmAgaXQg d2lsbCBpbW1lZGlhdGVseSBhbmQgc3luY2hyb25vdXNseSBwcm9jZXNzIGFsbApjb21tYW5kcyBp biB0aGUgcXVldWUgYW5kIHVwZGF0ZSBpdHMgc3RhdGUgYWNjb3JkaW5nbHkuCgpJdCBtaWdodCBi ZSBwb3NzaWJsZSB0byBpbXBsZW1lbnQgYSBydWRpbWVudGFyeSBmb3JtIG9mIHByZWVtcHRpb24g YnkKcGVyaW9kaWNhbGx5IChhcyBkZXRlcm1pbmVkIGJ5IGBoeXBlcmNhbGxfcHJlZW1wdF9jaGVj aygpYCkgcmV0dXJuaW5nCnRvIHRoZSBndWVzdCB3aXRob3V0IGluY3JlbWVudGluZyBQQyBidXQg d2l0aCB1cGRhdGVkIGludGVybmFsCmBDUkVBRFJgIHN0YXRlLCBtZWFuaW5nIGl0IHdpbGwgcmVl eGVjdXRlIHRoZSB3cml0ZSB0byBgQ1dSSVRFUmAgYW5kCndlIGNhbiBwaWNrdXAgd2hlcmUgd2Ug bGVmdCBvZmYgZm9yIGFub3RoZXIgaXRlcmF0aW9uLiBUaGlzIGF0IGxlYXN0CmxldHMgdXMgc2No ZWR1bGUgb3RoZXIgdmNwdXMgZXRjIGFuZCBwcmV2ZW50cyBhIG1vbm9wb2x5LgoKIyMgSVRTIENv bW1hbmQgVHJhbnNsYXRpb24KClRoaXMgc2VjdGlvbiBpcyBiYXNlZCBvbiB0aGUgc2VjdGlvbiA1 LjEzIG9mIEdJQ3YzIHNwZWNpZmljYXRpb24KKFBSRDAzLUdFTkMtMDEwNzQ1IDI0LjApIGFuZCBw cm92aWRlcyBjb25jcmV0ZSBpZGVhcyBvZiBob3cgdGhpcyBjYW4KYmUgaW50ZXJwcmV0ZWQgZm9y IFhlbi4KClRoZSBJVFMgcHJvdmlkZXMgMTIgY29tbWFuZHMgaW4gb3JkZXIgdG8gbWFuYWdlIGlu dGVycnVwdCBjb2xsZWN0aW9ucywKZGV2aWNlcyBhbmQgaW50ZXJydXB0cy4gUG9zc2libGUgY29t bWFuZCBwYXJhbWV0ZXJzIGFyZToKCi0gRGV2aWNlIElEIChgRGV2aWNlYCkgKGNhbGxlZCBgZGV2 aWNlYCBpbiB0aGUgc3BlYykuCi0gRXZlbnQgSUQgKGBFdmVudGApIChjYWxsZWQgYElEYCBpbiB0 aGUgc3BlYykuIFRoaXMgaXMgYW4gaW5kZXggaW50bwogIGEgZGV2aWNlcyBgSVRUYC4KLSBDb2xs ZWN0aW9uIElEIChgQ29sbGVjdGlvbmApIChjYWxsZWQgYGNvbGxlY3Rpb25gIGluIHRoZSBzcGVj KQotIExQSSBJRCAoYExQSWApIChjYWxsZWQgYHBJRGAgaW4gdGhlIHNwZWMpCi0gVGFyZ2V0IEFk ZHJlc3MgKGBUQWApIChjYWxsZWQgYFRBYCBpbiB0aGUgc3BlY2ApCgpUaGVzZSBwYXJhbWV0ZXJz IG5lZWQgdG8gYmUgdmFsaWRhdGVkIGFuZCB0cmFuc2xhdGVkIGZyb20gVmlydHVhbCAoYHZgCnBy ZWZpeCkgdG8gUGh5c2ljYWwgKGBwYCBwcmVmaXgpLgoKTm90ZSwgd2UgZGlmZmVyIGZyb20gdGhl IG5hbWluZyBpbiB0aGUgR0lDIHNwZWMgZm9yIGNsYXJpdHksIGluCnBhcnRpY3VsYXIgd2UgdXNl IGBFdmVudGAgbm90IGBJRGAgYW5kIGBMUElgIG5vdCBgcElEYCB0byByZWR1Y2UKY29uZnVzaW9u LCBlc3BlY2lhbGx5IHdoZW4gYHZgIGFuZCBgcGAgc3VmZml4ZXMgYXJlIHVzZWQgZHVlIHRvCnZp cnR1YWxpc2F0aW9uLgoKIyMjIFBhcmFtZXRlciBWYWxpZGF0aW9uIC8gVHJhbnNsYXRpb24KCkVh Y2ggY29tbWFuZCBjb250YWlucyBwYXJhbWV0ZXJzIHRoYXQgbmVlZHMgdG8gYmUgdmFsaWRhdGVk IGJlZm9yZSBhbnkKdXNhZ2UgaW4gWGVuIG9yIHBhc3NpbmcgdG8gdGhlIGhhcmR3YXJlLgoKIyMj IyBEZXZpY2UgSUQgKGBEZXZpY2VgKQoKQ29ycmVzcG9uZGluZyBJVFQgb2J0YWluZWQgYnkgbG9v a2luZyB1cCBhcyBkZXNjcmliZWQgYWJvdmUuCgpUaGUgcGh5c2ljYWwgYHN0cnVjdCBpdHNfZGV2 aWNlYCBjYW4gYmUgZm91bmQgYnkgbG9va2luZyB1cCBpbiB0aGUKZG9tYWluJ3MgZGV2aWNlIG1h cC4KCklmIGxvb2t1cCBmYWlscyBvciB0aGUgcmVzdWx0aW5nIGRldmljZSB0YWJsZSBlbnRyeSBp cyBpbnZhbGlkIHRoZW4KdGhlIERldmljZSBpcyBpbnZhbGlkLgoKIyMjIyBFdmVudCBJRCAoYEV2 ZW50YCkKClZhbGlkYXRlZCBhZ2FpbnN0IGVtdWxhdGVkIGBHSVRTX1RZUEVSLklEYml0c2AuCgpJ dCBpcyBub3QgbmVjZXNzYXJ5IHRvIHRyYW5zbGF0ZSBhIGB2RXZlbnRgLgoKIyMjIyBMUEkgKGBM UElgKQoKVmFsaWRhdGVkIGFnYWluc3QgZW11bGF0ZWQgYEdJVFNfVFlQRVIuSURiaXRzYC4KCkl0 IGlzIG5vdCBuZWNlc3NhcnkgdG8gdHJhbnNsYXRlIGEgYHZMUElgIGludG8gYSBgcExQSWAgc2lu Y2UgdGhlCnRhYmxlcyBhbGwgY29udGFpbiBgdkxQSWAuIChUcmFuc2xhdGlvbiBmcm9tIGBwTFBJ YCB0byBgdkxQSWAgaGFwcGVucwp2aWEgYHN0cnVjdCBpcnFfZ3Vlc3RgIHdoZW4gd2UgcmVjZWl2 ZSB0aGUgSVJRKS4KCiMjIyMgSW50ZXJydXB0IENvbGxlY3Rpb24gKGBDb2xsZWN0aW9uYCkKClRo ZSBgQ29sbGVjdGlvbmAgaXMgdmFsaWRhdGVkIGFnYWluc3QgdGhlIHNpemUgb2YgdGhlIHBlci1k b21haW4KYGl0c19jb2xsZWN0aW9uc2AgYXJyYXkgKGkuZS4gbnJfdmNwdXMgKyAxKSBhbmQgdGhl biB0cmFuc2xhdGVkIGJ5IGEKc2ltcGxlIGxvb2t1cCBpbiB0aGF0IGFycmF5LgoKICAgICB2Y3B1 X25yID0gZC0+aXRzX2NvbGxlY3Rpb25zW0NvbGxlY3Rpb25dCgpBIHJlc3VsdCA+IGBucl9jcHVz YCBpcyBpbnZhbGlkCgojIyMjIFRhcmdldCBBZGRyZXNzIChgVEFgKQoKVGhpcyBwYXJhbWV0ZXIg aXMgdXNlZCBpbiBjb21tYW5kcyB3aGljaCBtYW5hZ2UgY29sbGVjdGlvbnMuIEl0IGlzIGEKdW5p cXVlIGlkZW50aWZpZXIgcGVyIHByb2Nlc3Nvci4KCldlIGhhdmUgY2hvc2VuIHRvIGltcGxlbWVu dCBgR0lUU19UWVBFUi5QVEFgIGFzIDAsIGhlbmNlIGB2VEFgIHNpbXBseQpjb3JyZXNwb25kcyB0 byB0aGUgYHZjcHVfaWRgLCBzbyBvbmx5IG5lZWRzIGJvdW5kcyBjaGVja2luZyBhZ2FpbnN0CmBu cl92Y3B1c2AuCgojIyMgQ29tbWFuZHMKClRvIGJlIHJlYWQgd2l0aCByZWZlcmVuY2UgdG8gc3Bl YyBmb3IgZWFjaCBjb21tYW5kICh3aGljaCBpbmNsdWRlcwplcnJvciBjaGVja3MgZXRjIHdoaWNo IGFyZSBvbWl0dGVkIGhlcmUpLgoKSXQgaXMgYXNzdW1lZCB0aGF0IGlucHV0cyB3aWxsIGJlIGJv dW5kcyBhbmQgdmFsaWRpdHkgY2hlY2tlZCBhcwpkZXNjcmliZWQgYWJvdmUsIHRodXMgZXJyb3Ig aGFuZGxpbmcgaXMgb21pdHRlZCBmb3IgYnJldml0eSAoaS5lLiBpZgpnZXQgYW5kL29yIHNldCBm YWlsIHRoZW4gc28gYmUgaXQpLiBJbiBnZW5lcmFsIGludmFsaWQgY29tbWFuZHMgYXJlCnNpbXBs eSBpZ25vcmVkLgoKIyMjIyBgTUFQRGA6IE1hcCBhIHBoeXNpY2FsIGRldmljZSB0byBhbiBJVFQu CgpfRm9ybWF0XzogYE1BUEQgRGV2aWNlLCBWYWxpZCwgSVRUIEFkZHJlc3MsIElUVCBTaXplYC4K Cl9TcGVjXzogNS4xMy4xMQoKYE1BUERgIGlzIHNlbnQgd2l0aCBgVmFsaWRgIGJpdCBzZXQgaWYg dGhlIG1hcHBpbmcgaXMgdG8gYmUgYWRkZWQgYW5kCnJlc2V0IHdoZW4gbWFwcGluZyBpcyByZW1v dmVkLgoKV2hlbiB0aGUgYFZhbGlkYCBiaXQgaXMgc2V0IHRoZW4gdGhlIHJhbmdlIGBJVFQgQWRk cmVzc2AgdG8gYElUVApBZGRyZXNzYCArIGBJVFQgU2l6ZWAgbmVlZCBub3QgYmUgdmFsaWRhdGVk LCB0aGlzIGlzIGRvbmUgaW4KYHtnZXQsc2V0fV92ZGV2aWNlX2VudHJ5YCB3aGVuIGNhbGxpbmcg dGhlIGBwMm1fbG9va3VwYApmdW5jdGlvbi4gVmFsaWRhdGluZyB0aGUgbWVtb3J5IGF0IGBNQVBE YCB0aW1lIHdvdWxkIHNlcnZlIG5vIHB1cnBvc2UKc2luY2UgdGhlIGd1ZXN0IGNvdWxkIHN1YnNl cXVlbnRseSBiYWxsb29uIGl0IG91dCBvciBncmFudCBtYXAgb3ZlciBpdCBldGMuCgpUaGUgZG9t YWluJ3MgZGV2aWNlIHRhYmxlIGlzIHVwZGF0ZWQgd2l0aCB0aGUgcHJvdmlkZWQgaW5mb3JtYXRp b24uCgpUaGUgYHZpdHRfbWFwZGAgZmllbGQgaXMgc2V0IGFjY29yZGluZyB0byB0aGUgYFZhbGlk YCBmbGFnIGluIHRoZQpjb21tYW5kOgoKICAgIGR0X2VudHJ5LnZpdHRfaXBhID0gSVRUIEFkZHJl c3MKICAgIGR0X2VudHJ5LnZpdHRfc2l6ZSA9IElUVCBTaXplCiAgICBzZXRfdmRldmljZV9lbnRy eShjdXJyZW50LT5kb21haW4sIERldmljZSwgJmR0X2VudHJ5KQoKIyMjIyBgTUFQQ2A6IE1hcCBh biBpbnRlcnJ1cHQgY29sbGVjdGlvbiB0byBhIHRhcmdldCBwcm9jZXNzb3IKCl9Gb3JtYXRfOiBg TUFQQyBDb2xsZWN0aW9uLCBUQWAKCl9TcGVjXzogNS4xMy4xMgoKVGhlIHVwZGF0ZWQgYHZUQWAg KGEgdmNwdSBudW1iZXIpIGlzIHJlY29yZGVkIGluIHRoZSBgaXRzX2NvbGxlY3Rpb25zYAphcnJh eSBvZiB0aGUgZG9tYWluIHN0cnVjdDoKCiAgICBkLT5pdHNfY29sbGVjdGlvbnNbQ29sbGVjdGlv bl0gPSBUQQoKIyMjIyBgTUFQSWA6IE1hcCBhbiBpbnRlcnJ1cHQgdG8gYW4gaW50ZXJydXB0IGNv bGxlY3Rpb24uCgpfRm9ybWF0XzogYE1BUEkgRGV2aWNlLCBMUEksIENvbGxlY3Rpb25gCgpfU3Bl Y186IDUuMTMuMTMKCkFmdGVyIHZhbGlkYXRpb246CgogICAgdml0dC52YWxpZCA9IFRydWUKICAg IHZpdHQuY29sbGVjdGlvbiA9IENvbGxlY3Rpb24KICAgIHZpdHQudmxwaSA9IExQSQogICAgc2V0 X3ZpdHRfZW50cnkoY3VycmVudC0+ZG9taWFuLCBEZXZpY2UsIExQSSwgJnZpdHQpCgojIyMjIGBN QVBWSWA6IE1hcCBhbiBpbnB1dCBpZGVudGlmaWVyIHRvIGEgcGh5c2ljYWwgaW50ZXJydXB0IGFu ZCBhbiBpbnRlcnJ1cHQgY29sbGVjdGlvbi4KCkZvcm1hdDogYE1BUFZJIERldmljZSwgRXZlbnQs IExQSSwgQ29sbGVjdGlvbmAKCiAgICB2aXR0LnZhbGlkID0gVHJ1ZQogICAgdml0dC5jb2xsZWN0 aW9uID0gQ29sbGVjdGlvbgogICAgdml0dC52bHBpID0gTFBJCiAgICBzZXRfdml0dF9lbnRyeShj dXJyZW50LT5vZG1pYW4sIERldmljZSwgRXZlbnQsICZ2aXR0KQoKIyMjIyBgTU9WSWA6IFJlZGly ZWN0IGludGVycnVwdCB0byBhbiBpbnRlcnJ1cHQgY29sbGVjdGlvbgoKX0Zvcm1hdF86IGBNT1ZJ IERldmljZSwgRXZlbnQsIENvbGxlY3Rpb25gCgpfU3BlY186IDUuMTMuMTUKCiAgICBnZXRfdml0 dF9lbnRyeShjdXJyZW50LT5kb21haW4sIERldmljZSwgRXZlbnQsICZ2aXR0KQogICAgdml0dC5j b2xsZWN0aW9uID0gQ29sbGVjdGlvbgogICAgc2V0X3ZpdHRfZW50cnkoY3VycmVudC0+ZG9tYWlu LCBEZXZpY2UsIEV2ZW50LCAmdml0dCkKCiAgICBYWFggY29uc2lkZXIgaGVscGVyIHdoaWNoIHNl dHMgZmllbGQgd2l0aG91dCBtYXBwaW5nL3VubWFwcGluZwogICAgdHdpY2UuCgpUaGlzIGNvbW1h bmQgaXMgc3VwcG9zZWQgdG8gbW92ZSBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIGFzc29jaWF0ZWQK d2l0aCBgRXZlbnRgIHRvIHRoZSB2Y3B1IGltcGxpZWQgYnkgdGhlIG5ldyBgQ29sbGVjdGlvbmAs IHdoaWNoIGlzCnRyaWNreS4gRm9yIG5vdyB3ZSBpZ25vcmUgdGhpcyByZXF1aXJlbWVudCAoYXMg d2UgZG8gZm9yCmBHSUNEX0lST1VURVJuYCBhbmQgYEdJQ0RfVEFSR0VUUm5gIGZvciBvdGhlciBp bnRlcnJ1cHQgdHlwZXMpLgoKIyMjIyBgRElTQ0FSRGA6IERpc2NhcmQgaW50ZXJydXB0IHJlcXVl c3RzCgpfRm9ybWF0XzogYERJU0NBUkQgRGV2aWNlLCBFdmVudGAKCl9TcGVjXzogNS4xMy4xNgoK ICAgIGdldF92aXR0X2VudHJ5KGN1cnJlbnQtPmRvbWFpbiwgRGV2aWNlLCBFdmVudCwgJnZpdHQp CiAgICB2aXR0LnZhbGlkID0gRmFsc2UKICAgIHNldF92aXR0X2VudHJ5KGN1cnJlbnQtPmRvbWFp biwgRGV2aWNlLCBFdmVudCwgJnZpdHQpCgogICAgWFhYIGNvbnNpZGVyIGhlbHBlciB3aGljaCBz ZXRzIGZpZWxkIHdpdGhvdXQgbWFwcGluZy91bm1hcHBpbmcKICAgIHR3aWNlLgoKVGhpcyBjb21t YW5kIGlzIHN1cHBvc2VkIHRvIGNsZWFyIHRoZSBwZW5kaW5nIHN0YXRlIG9mIGFueSBhc3NvY2lh dGVkCmludGVycnVwdC4gVGhpcyByZXF1aXJlbWVudCBpcyBpZ25vcmVkIChndWVzdCBtYXkgc2Vl IGEgc3B1cmlvdXMKaW50ZXJydXB0KS4KCiMjIyMgYElOVmA6IENsZWFuIGFueSBjYWNoZXMgYXNz b2NpYXRlZCB3aXRoIGludGVycnVwdAoKX0Zvcm1hdF86IGBJTlYgRGV2aWNlLCBFdmVudGAKCl9T cGVjXzogNS4xMy4xNwoKU2luY2UgTFBJIENvbmZpZ3VyYXRpb24gdGFibGUgdXBkYXRlcyBhcmUg bm90IHRyYXBwZWQgYW5kIHRoZSBjb25maWcKaXMgcmVhZCBvbiB1c2UsIHRoZXJlIGlzIG5vdGhp bmcgdG8gZG8gaGVyZS4KCiMjIyMgYElOVkFMTGA6IENsZWFuIGFueSBjYWNoZXMgYXNzb2NpYXRl ZCB3aXRoIGFuIGludGVycnVwdCBjb2xsZWN0aW9uCgpfRm9ybWF0XzogYElOVkFMTCBDb2xsZWN0 aW9uYAoKX1NwZWNfOiA1LjEzLjE5CgpTaW5jZSBMUEkgQ29uZmlndXJhdGlvbiB0YWJsZSB1cGRh dGVzIGFyZSBub3QgdHJhcHBlZCBhbmQgdGhlIGNvbmZpZwppcyByZWFkIG9uIHVzZSwgdGhlcmUg aXMgbm90aGluZyB0byBkbyBoZXJlLgoKIyMjIyBgSU5UYDogR2VuZXJhdGUgYW4gaW50ZXJydXB0 CgpfRm9ybWF0XzogYElOVCBEZXZpY2UsIEV2ZW50YAoKX1NwZWNfOiA1LjEzLjIwCgpUaGUgYHZp dHRgIGVudHJ5IGNvcnJlc29uZGluZyB0byBgRGV2aWNlLEV2ZW50YCBpcyBsb29rZWQgdXAgYW5k IHRoZW46CgogICAgZ2V0X3ZpdHRfZW50cnkoY3VycmVudC0+ZG9tYWluLCBEZXZpY2UsIEV2ZW50 LCAmdml0dCkKICAgIHZnaWNfdmNwdV9pbmplY3RfbHBpKGN1cnJlbnQtPmRvbWFpbiwgdml0dC52 bHBpKQoKX19Ob3RlXzogV2hlcmUgKERldmljZSxFdmVudCkgaXMgcmVhbCBtYXkgbmVlZCBjb25z aWRlcmF0aW9uIG9mCmludGVyYWN0aW9ucyB3aXRoIHJlYWwgTFBJcyBiZWluZyBkZWxpdmVyZWQ6 IEp1bGllbiBoYWQgY29uY2VybnMgYWJvdXQKWGVuJ3MgaW50ZXJuYWwgSVJRIFN0YXRlIHRyYWNr aW5nLiBpZiB0aGlzIGlzIGEgcHJvYmxlbSB0aGVuIG1heSBuZWVkCmNoYW5nZXMgdG8gSVJRIHN0 YXRlIHRyYWNraW5nLCBvciB0byBpbmplY3QgYXMgYSByZWFsIElSUSBhbmQgbGV0CnBoeXNpY2Fs IElSUSBpbmplY3Rpb24gaGFuZGxlIGl0LCBvciB3cml0ZSB0byBgR0lDUl9TRVRMUElSYD8KCiMj IyMgYENMRUFSYDogQ2xlYXIgdGhlIHBlbmRpbmcgc3RhdGUgb2YgYW4gaW50ZXJydXB0CgpfRm9y bWF0XzogYENMRUFSIERldmljZSwgRXZlbnRgCgpfU3BlY186IDUuMTMuMjEKClNob3VsZCBjbGVh ciBwZW5kaW5nIHN0YXRlIG9mIExQSS4gSWdub3JlIChndWVzdCBtYXkgc2VlIGEgc3B1cmlvdXMK aW50ZXJydXB0KS4KCiMjIyMgYFNZTkNgOiBXYWl0IGZvciBjb21wbGV0aW9uIG9mIGFueSBvdXRz dGFuZGluZyBJVFMgYWN0aW9ucyBmb3IgY29sbGVjdGlvbgoKX0Zvcm1hdF86IGBTWU5DIFRBYAoK X1NwZWNfOiA1LjEzLjIyCgpUaGlzIGNvbW1hbmQgY2FuIGJlIGlnbm9yZWQuCgojIEdJQ3Y0IERp cmVjdCBJbnRlcnJ1cHQgSW5qZWN0aW9uCgpHSUN2NCB3aWxsIGRpcmVjdGx5IG1hcmsgdGhlIExQ SXMgcGVuZGluZyBpbiB0aGUgdmlydHVhbCBwZW5kaW5nIHRhYmxlCndoaWNoIGlzIHBlci1yZWRp c3RyaWJ1dG9yIChpLmUgcGVyLXZDUFUpLgoKTFBJcyB3aWxsIGJlIHJlY2VpdmVkIGJ5IHRoZSBn dWVzdCB0aGUgc2FtZSB3YXkgYXMgYW4gU1BJcy4gSS5lIHRyYXAgaW4KSVJRIG1vZGUgdGhlbiBy ZWFkIElDQ19JQVIxX0VMMSAoZm9yIEdJQ3YzKS4KClRoZXJlZm9yZSBHSUN2NCB3aWxsIG5vdCBy ZXF1aXJlIG9uZSB2SVRTIHBlciBwSVRTLgoKIyBFdmVudCBDaGFubmVscwoKSXQgaGFzIGJlZW4g cHJvcG9zZWQgdGhhdCBpdCBtaWdodCBiZSBuaWNlIHRvIGluamVjdCBldmVudCBjaGFubmVscyBh cwpMUElzIGluIHRoZSBmdXR1cmUuIFdoZXRoZXIgb3Igbm90IHRoYXQgd291bGQgaW52b2x2ZSBh bnkgc29ydCBvZiB2SVRTCmlzIHVuY2xlYXIsIGJ1dCBpZiBpdCBkaWQgdGhlbiBpdCB3b3VsZCBs aWtlbHkgYmUgYSBzZXBhcmF0ZSBlbXVsYXRpb24KdG8gdGhlIHZJVFMgZW11bGF0aW9uIHVzZWQg d2l0aCBhIHBJVFMgYW5kIGFzIHN1Y2ggaXMgbm90IGNvbnNpZGVyZWQKZnVydGhlciBoZXJlLgoK IyBHbG9zc2FyeQoKKiBfTVNJXzogTWVzc2FnZSBTaWduYWxsZWQgSW50ZXJydXB0CiogX0lUU186 IEludGVycnVwdCBUcmFuc2xhdGlvbiBTZXJ2aWNlCiogX0dJQ186IEdlbmVyaWMgSW50ZXJydXB0 IENvbnRyb2xsZXIKKiBfTFBJXzogTG9jYWxpdHktc3BlY2lmaWMgUGVyaXBoZXJhbCBJbnRlcnJ1 cHQKCiMgUmVmZXJlbmNlcwoKIkdJQyBBcmNoaXRlY3R1cmUgU3BlY2lmaWNhdGlvbiIgUFJEMDMt R0VOQy0wMTA3NDUgMjQuMC4KCiJJTyBSZW1hcHBpbmcgVGFibGUgU3lzdGVtIFNvZnR3YXJlIG9u IEFSTcKuIFBsYXRmb3JtcyIgQVJNIERFTiAwMDQ5QS4KCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZl bEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=