From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: Re: [PATCH 2/3] qemu: Implement virtio-pstore device Date: Tue, 13 Sep 2016 18:57:10 +0300 Message-ID: <20160913155710.3q6yj6yqdyozemul__23702.2698660896$1473782273$gmane$org@redhat.com> References: <20160820080744.10344-1-namhyung@kernel.org> <20160820080744.10344-3-namhyung@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20160820080744.10344-3-namhyung@kernel.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: Namhyung Kim Cc: virtio-dev@lists.oasis-open.org, Tony Luck , "Daniel P . Berrange" , Kees Cook , kvm@vger.kernel.org, Radim =?utf-8?B?S3LEjW3DocWZ?= , Anton Vorontsov , LKML , Steven Rostedt , qemu-devel@nongnu.org, Minchan Kim , Anthony Liguori , Colin Cross , Paolo Bonzini , virtualization@lists.linux-foundation.org, Ingo Molnar List-Id: virtualization@lists.linuxfoundation.org T24gU2F0LCBBdWcgMjAsIDIwMTYgYXQgMDU6MDc6NDNQTSArMDkwMCwgTmFtaHl1bmcgS2ltIHdy b3RlOgo+IEFkZCB2aXJ0aW8gcHN0b3JlIGRldmljZSB0byBhbGxvdyBrZXJuZWwgbG9nIGZpbGVz IHNhdmVkIG9uIHRoZSBob3N0Lgo+IEl0IHdpbGwgc2F2ZSB0aGUgbG9nIGZpbGVzIG9uIHRoZSBk aXJlY3RvcnkgZ2l2ZW4gYnkgcHN0b3JlIGRldmljZQo+IG9wdGlvbi4KPiAKPiAgICQgcWVtdS1z eXN0ZW0teDg2XzY0IC1kZXZpY2UgdmlydGlvLXBzdG9yZSxkaXJlY3Rvcnk9ZGlyLXh4IC4uLgo+ IAo+ICAgKGd1ZXN0KSAjIGVjaG8gYyA+IC9wcm9jL3N5c3JxLXRyaWdnZXIKPiAKPiAgICQgbHMg ZGlyLXh4Cj4gICBkbWVzZy0xLmVuYy56ICBkbWVzZy0yLmVuYy56Cj4gCj4gVGhlIGxvZyBmaWxl cyBhcmUgdXN1YWxseSBjb21wcmVzc2VkIHVzaW5nIHpsaWIuICBVc2VycyBjYW4gc2VlIHRoZSBs b2cKPiBtZXNzYWdlcyBkaXJlY3RseSBvbiB0aGUgaG9zdCBvciBvbiB0aGUgZ3Vlc3QgKHVzaW5n IHBzdG9yZSBmaWxlc3lzdGVtKS4KPiAKPiBUaGUgJ2RpcmVjdG9yeScgcHJvcGVydHkgaXMgcmVx dWlyZWQgZm9yIHZpcnRpby1wc3RvcmUgZGV2aWNlIHRvIHdvcmsuCj4gSXQgYWxzbyBhZGRzICdi dWZzaXplJyBwcm9wZXJ0eSB0byBzZXQgc2l6ZSBvZiBwc3RvcmUgYnVmZXIuCj4gCj4gQ2M6IFBh b2xvIEJvbnppbmkgPHBib256aW5pQHJlZGhhdC5jb20+Cj4gQ2M6IFJhZGltIEtyxI1tw6HFmSA8 cmtyY21hckByZWRoYXQuY29tPgo+IENjOiAiTWljaGFlbCBTLiBUc2lya2luIiA8bXN0QHJlZGhh dC5jb20+Cj4gQ2M6IEFudGhvbnkgTGlndW9yaSA8YWxpZ3VvcmlAYW1hem9uLmNvbT4KPiBDYzog QW50b24gVm9yb250c292IDxhbnRvbkBlbm9tc2cub3JnPgo+IENjOiBDb2xpbiBDcm9zcyA8Y2Ny b3NzQGFuZHJvaWQuY29tPgo+IENjOiBLZWVzIENvb2sgPGtlZXNjb29rQGNocm9taXVtLm9yZz4K PiBDYzogVG9ueSBMdWNrIDx0b255Lmx1Y2tAaW50ZWwuY29tPgo+IENjOiBTdGV2ZW4gUm9zdGVk dCA8cm9zdGVkdEBnb29kbWlzLm9yZz4KPiBDYzogSW5nbyBNb2xuYXIgPG1pbmdvQGtlcm5lbC5v cmc+Cj4gQ2M6IE1pbmNoYW4gS2ltIDxtaW5jaGFuQGtlcm5lbC5vcmc+Cj4gQ2M6IERhbmllbCBQ LiBCZXJyYW5nZSA8YmVycmFuZ2VAcmVkaGF0LmNvbT4KPiBDYzoga3ZtQHZnZXIua2VybmVsLm9y Zwo+IENjOiBxZW11LWRldmVsQG5vbmdudS5vcmcKPiBDYzogdmlydHVhbGl6YXRpb25AbGlzdHMu bGludXgtZm91bmRhdGlvbi5vcmcKPiBTaWduZWQtb2ZmLWJ5OiBOYW1oeXVuZyBLaW0gPG5hbWh5 dW5nQGtlcm5lbC5vcmc+Cj4gLS0tCj4gIGh3L3ZpcnRpby9NYWtlZmlsZS5vYmpzICAgICAgICAg ICAgICAgICAgICAgICAgfCAgIDIgKy0KPiAgaHcvdmlydGlvL3ZpcnRpby1wY2kuYyAgICAgICAg ICAgICAgICAgICAgICAgICB8ICA1MiArKwo+ICBody92aXJ0aW8vdmlydGlvLXBjaS5oICAgICAg ICAgICAgICAgICAgICAgICAgIHwgIDE0ICsKPiAgaHcvdmlydGlvL3ZpcnRpby1wc3RvcmUuYyAg ICAgICAgICAgICAgICAgICAgICB8IDY5OSArKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGlu Y2x1ZGUvaHcvcGNpL3BjaS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwo+ICBp bmNsdWRlL2h3L3ZpcnRpby92aXJ0aW8tcHN0b3JlLmggICAgICAgICAgICAgIHwgIDM2ICsrCj4g IGluY2x1ZGUvc3RhbmRhcmQtaGVhZGVycy9saW51eC92aXJ0aW9faWRzLmggICAgfCAgIDEgKwo+ ICBpbmNsdWRlL3N0YW5kYXJkLWhlYWRlcnMvbGludXgvdmlydGlvX3BzdG9yZS5oIHwgIDc2ICsr Kwo+ICBxZGV2LW1vbml0b3IuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAx ICsKPiAgOSBmaWxlcyBjaGFuZ2VkLCA4ODEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgaHcvdmlydGlvL3ZpcnRpby1wc3RvcmUuYwo+ICBjcmVhdGUg bW9kZSAxMDA2NDQgaW5jbHVkZS9ody92aXJ0aW8vdmlydGlvLXBzdG9yZS5oCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBpbmNsdWRlL3N0YW5kYXJkLWhlYWRlcnMvbGludXgvdmlydGlvX3BzdG9yZS5o Cj4gCj4gZGlmZiAtLWdpdCBhL2h3L3ZpcnRpby9NYWtlZmlsZS5vYmpzIGIvaHcvdmlydGlvL01h a2VmaWxlLm9ianMKPiBpbmRleCAzZTJiMTc1Li5hYWU3MDgyIDEwMDY0NAo+IC0tLSBhL2h3L3Zp cnRpby9NYWtlZmlsZS5vYmpzCj4gKysrIGIvaHcvdmlydGlvL01ha2VmaWxlLm9ianMKPiBAQCAt NCw0ICs0LDQgQEAgY29tbW9uLW9iai15ICs9IHZpcnRpby1idXMubwo+ICBjb21tb24tb2JqLXkg Kz0gdmlydGlvLW1taW8ubwo+ICAKPiAgb2JqLXkgKz0gdmlydGlvLm8gdmlydGlvLWJhbGxvb24u byAKPiAtb2JqLSQoQ09ORklHX0xJTlVYKSArPSB2aG9zdC5vIHZob3N0LWJhY2tlbmQubyB2aG9z dC11c2VyLm8KPiArb2JqLSQoQ09ORklHX0xJTlVYKSArPSB2aG9zdC5vIHZob3N0LWJhY2tlbmQu byB2aG9zdC11c2VyLm8gdmlydGlvLXBzdG9yZS5vCj4gZGlmZiAtLWdpdCBhL2h3L3ZpcnRpby92 aXJ0aW8tcGNpLmMgYi9ody92aXJ0aW8vdmlydGlvLXBjaS5jCj4gaW5kZXggNzU1ZjkyMS4uYzE4 NDgyMyAxMDA2NDQKPiAtLS0gYS9ody92aXJ0aW8vdmlydGlvLXBjaS5jCj4gKysrIGIvaHcvdmly dGlvL3ZpcnRpby1wY2kuYwo+IEBAIC0yNDE2LDYgKzI0MTYsNTcgQEAgc3RhdGljIGNvbnN0IFR5 cGVJbmZvIHZpcnRpb19ob3N0X3BjaV9pbmZvID0gewo+ICB9Owo+ICAjZW5kaWYKPiAgCj4gKy8q IHZpcnRpby1wc3RvcmUtcGNpICovCj4gKwo+ICtzdGF0aWMgdm9pZCB2aXJ0aW9fcHN0b3JlX3Bj aV9yZWFsaXplKFZpcnRJT1BDSVByb3h5ICp2cGNpX2RldiwgRXJyb3IgKiplcnJwKQo+ICt7Cj4g KyAgICBWaXJ0SU9Qc3RvcmVQQ0kgKnZwcyA9IFZJUlRJT19QU1RPUkVfUENJKHZwY2lfZGV2KTsK PiArICAgIERldmljZVN0YXRlICp2ZGV2ID0gREVWSUNFKCZ2cHMtPnZkZXYpOwo+ICsgICAgRXJy b3IgKmVyciA9IE5VTEw7Cj4gKwo+ICsgICAgcWRldl9zZXRfcGFyZW50X2J1cyh2ZGV2LCBCVVMo JnZwY2lfZGV2LT5idXMpKTsKPiArICAgIG9iamVjdF9wcm9wZXJ0eV9zZXRfYm9vbChPQkpFQ1Qo dmRldiksIHRydWUsICJyZWFsaXplZCIsICZlcnIpOwo+ICsgICAgaWYgKGVycikgewo+ICsgICAg ICAgIGVycm9yX3Byb3BhZ2F0ZShlcnJwLCBlcnIpOwo+ICsgICAgICAgIHJldHVybjsKPiArICAg IH0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmlydGlvX3BzdG9yZV9wY2lfY2xhc3NfaW5pdChP YmplY3RDbGFzcyAqa2xhc3MsIHZvaWQgKmRhdGEpCj4gK3sKPiArICAgIERldmljZUNsYXNzICpk YyA9IERFVklDRV9DTEFTUyhrbGFzcyk7Cj4gKyAgICBWaXJ0aW9QQ0lDbGFzcyAqayA9IFZJUlRJ T19QQ0lfQ0xBU1Moa2xhc3MpOwo+ICsgICAgUENJRGV2aWNlQ2xhc3MgKnBjaWRldl9rID0gUENJ X0RFVklDRV9DTEFTUyhrbGFzcyk7Cj4gKwo+ICsgICAgay0+cmVhbGl6ZSA9IHZpcnRpb19wc3Rv cmVfcGNpX3JlYWxpemU7Cj4gKyAgICBzZXRfYml0KERFVklDRV9DQVRFR09SWV9NSVNDLCBkYy0+ Y2F0ZWdvcmllcyk7Cj4gKwo+ICsgICAgcGNpZGV2X2stPnZlbmRvcl9pZCA9IFBDSV9WRU5ET1Jf SURfUkVESEFUX1FVTVJBTkVUOwo+ICsgICAgcGNpZGV2X2stPmRldmljZV9pZCA9IFBDSV9ERVZJ Q0VfSURfVklSVElPX1BTVE9SRTsKPiArICAgIHBjaWRldl9rLT5yZXZpc2lvbiA9IFZJUlRJT19Q Q0lfQUJJX1ZFUlNJT047Cj4gKyAgICBwY2lkZXZfay0+Y2xhc3NfaWQgPSBQQ0lfQ0xBU1NfT1RI RVJTOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2aXJ0aW9fcHN0b3JlX3BjaV9pbnN0YW5jZV9p bml0KE9iamVjdCAqb2JqKQo+ICt7Cj4gKyAgICBWaXJ0SU9Qc3RvcmVQQ0kgKmRldiA9IFZJUlRJ T19QU1RPUkVfUENJKG9iaik7Cj4gKwo+ICsgICAgdmlydGlvX2luc3RhbmNlX2luaXRfY29tbW9u KG9iaiwgJmRldi0+dmRldiwgc2l6ZW9mKGRldi0+dmRldiksCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVFlQRV9WSVJUSU9fUFNUT1JFKTsKPiArICAgIG9iamVjdF9wcm9wZXJ0 eV9hZGRfYWxpYXMob2JqLCAiZGlyZWN0b3J5IiwgT0JKRUNUKCZkZXYtPnZkZXYpLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlyZWN0b3J5IiwgJmVycm9yX2Fib3J0KTsKPiAr ICAgIG9iamVjdF9wcm9wZXJ0eV9hZGRfYWxpYXMob2JqLCAiYnVmc2l6ZSIsIE9CSkVDVCgmZGV2 LT52ZGV2KSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1ZnNpemUiLCAmZXJy b3JfYWJvcnQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3QgVHlwZUluZm8gdmlydGlvX3BzdG9y ZV9wY2lfaW5mbyA9IHsKPiArICAgIC5uYW1lICAgICAgICAgID0gVFlQRV9WSVJUSU9fUFNUT1JF X1BDSSwKPiArICAgIC5wYXJlbnQgICAgICAgID0gVFlQRV9WSVJUSU9fUENJLAo+ICsgICAgLmlu c3RhbmNlX3NpemUgPSBzaXplb2YoVmlydElPUHN0b3JlUENJKSwKPiArICAgIC5pbnN0YW5jZV9p bml0ID0gdmlydGlvX3BzdG9yZV9wY2lfaW5zdGFuY2VfaW5pdCwKPiArICAgIC5jbGFzc19pbml0 ICAgID0gdmlydGlvX3BzdG9yZV9wY2lfY2xhc3NfaW5pdCwKPiArfTsKPiArCj4gIC8qIHZpcnRp by1wY2ktYnVzICovCj4gIAo+ICBzdGF0aWMgdm9pZCB2aXJ0aW9fcGNpX2J1c19uZXcoVmlydGlv QnVzU3RhdGUgKmJ1cywgc2l6ZV90IGJ1c19zaXplLAo+IEBAIC0yNDg1LDYgKzI1MzYsNyBAQCBz dGF0aWMgdm9pZCB2aXJ0aW9fcGNpX3JlZ2lzdGVyX3R5cGVzKHZvaWQpCj4gICNpZmRlZiBDT05G SUdfVkhPU1RfU0NTSQo+ICAgICAgdHlwZV9yZWdpc3Rlcl9zdGF0aWMoJnZob3N0X3Njc2lfcGNp X2luZm8pOwo+ICAjZW5kaWYKPiArICAgIHR5cGVfcmVnaXN0ZXJfc3RhdGljKCZ2aXJ0aW9fcHN0 b3JlX3BjaV9pbmZvKTsKPiAgfQo+ICAKPiAgdHlwZV9pbml0KHZpcnRpb19wY2lfcmVnaXN0ZXJf dHlwZXMpCj4gZGlmZiAtLWdpdCBhL2h3L3ZpcnRpby92aXJ0aW8tcGNpLmggYi9ody92aXJ0aW8v dmlydGlvLXBjaS5oCj4gaW5kZXggMjVmYmY4YS4uMzU0YjJiNyAxMDA2NDQKPiAtLS0gYS9ody92 aXJ0aW8vdmlydGlvLXBjaS5oCj4gKysrIGIvaHcvdmlydGlvL3ZpcnRpby1wY2kuaAo+IEBAIC0z MSw2ICszMSw3IEBACj4gICNpZmRlZiBDT05GSUdfVkhPU1RfU0NTSQo+ICAjaW5jbHVkZSAiaHcv dmlydGlvL3Zob3N0LXNjc2kuaCIKPiAgI2VuZGlmCj4gKyNpbmNsdWRlICJody92aXJ0aW8vdmly dGlvLXBzdG9yZS5oIgo+ICAKPiAgdHlwZWRlZiBzdHJ1Y3QgVmlydElPUENJUHJveHkgVmlydElP UENJUHJveHk7Cj4gIHR5cGVkZWYgc3RydWN0IFZpcnRJT0Jsa1BDSSBWaXJ0SU9CbGtQQ0k7Cj4g QEAgLTQ0LDYgKzQ1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgVmlydElPSW5wdXRQQ0kgVmlydElPSW5w dXRQQ0k7Cj4gIHR5cGVkZWYgc3RydWN0IFZpcnRJT0lucHV0SElEUENJIFZpcnRJT0lucHV0SElE UENJOwo+ICB0eXBlZGVmIHN0cnVjdCBWaXJ0SU9JbnB1dEhvc3RQQ0kgVmlydElPSW5wdXRIb3N0 UENJOwo+ICB0eXBlZGVmIHN0cnVjdCBWaXJ0SU9HUFVQQ0kgVmlydElPR1BVUENJOwo+ICt0eXBl ZGVmIHN0cnVjdCBWaXJ0SU9Qc3RvcmVQQ0kgVmlydElPUHN0b3JlUENJOwo+ICAKPiAgLyogdmly dGlvLXBjaS1idXMgKi8KPiAgCj4gQEAgLTMyNCw2ICszMjYsMTggQEAgc3RydWN0IFZpcnRJT0dQ VVBDSSB7Cj4gICAgICBWaXJ0SU9HUFUgdmRldjsKPiAgfTsKPiAgCj4gKy8qCj4gKyAqIHZpcnRp by1wc3RvcmUtcGNpOiBUaGlzIGV4dGVuZHMgVmlydGlvUENJUHJveHkuCj4gKyAqLwo+ICsjZGVm aW5lIFRZUEVfVklSVElPX1BTVE9SRV9QQ0kgInZpcnRpby1wc3RvcmUtcGNpIgo+ICsjZGVmaW5l IFZJUlRJT19QU1RPUkVfUENJKG9iaikgXAo+ICsgICAgICAgIE9CSkVDVF9DSEVDSyhWaXJ0SU9Q c3RvcmVQQ0ksIChvYmopLCBUWVBFX1ZJUlRJT19QU1RPUkVfUENJKQo+ICsKPiArc3RydWN0IFZp cnRJT1BzdG9yZVBDSSB7Cj4gKyAgICBWaXJ0SU9QQ0lQcm94eSBwYXJlbnRfb2JqOwo+ICsgICAg VmlydElPUHN0b3JlIHZkZXY7Cj4gK307Cj4gKwo+ICAvKiBWaXJ0aW8gQUJJIHZlcnNpb24sIGlm IHdlIGluY3JlbWVudCB0aGlzLCB3ZSBicmVhayB0aGUgZ3Vlc3QgZHJpdmVyLiAqLwo+ICAjZGVm aW5lIFZJUlRJT19QQ0lfQUJJX1ZFUlNJT04gICAgICAgICAgMAo+ICAKPiBkaWZmIC0tZ2l0IGEv aHcvdmlydGlvL3ZpcnRpby1wc3RvcmUuYyBiL2h3L3ZpcnRpby92aXJ0aW8tcHN0b3JlLmMKPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmI4ZmI0YmUKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvaHcvdmlydGlvL3ZpcnRpby1wc3RvcmUuYwo+IEBAIC0wLDAgKzEsNjk5IEBA Cj4gKy8qCj4gKyAqIFZpcnRpbyBQc3RvcmUgRGV2aWNlCj4gKyAqCj4gKyAqIENvcHlyaWdodCAo QykgMjAxNiAgTEcgRWxlY3Ryb25pY3MKPiArICoKPiArICogQXV0aG9yczoKPiArICogIE5hbWh5 dW5nIEtpbSAgPG5hbWh5dW5nQGdtYWlsLmNvbT4KPiArICoKPiArICogVGhpcyB3b3JrIGlzIGxp Y2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVyc2lvbiAyIG9yIGxhdGVy Lgo+ICsgKiBTZWUgdGhlIENPUFlJTkcgZmlsZSBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4K PiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8c3RkaW8uaD4KPiArCj4gKyNpbmNsdWRlICJx ZW11L29zZGVwLmgiCj4gKyNpbmNsdWRlICJxZW11L2lvdi5oIgo+ICsjaW5jbHVkZSAicWVtdS1j b21tb24uaCIKPiArI2luY2x1ZGUgInFlbXUvY3V0aWxzLmgiCj4gKyNpbmNsdWRlICJxZW11L2Vy cm9yLXJlcG9ydC5oIgo+ICsjaW5jbHVkZSAic3lzZW11L2t2bS5oIgo+ICsjaW5jbHVkZSAicWFw aS92aXNpdG9yLmgiCj4gKyNpbmNsdWRlICJxYXBpLWV2ZW50LmgiCj4gKyNpbmNsdWRlICJpby9j aGFubmVsLXV0aWwuaCIKPiArI2luY2x1ZGUgInRyYWNlLmgiCj4gKwo+ICsjaW5jbHVkZSAiaHcv dmlydGlvL3ZpcnRpby5oIgo+ICsjaW5jbHVkZSAiaHcvdmlydGlvL3ZpcnRpby1idXMuaCIKPiAr I2luY2x1ZGUgImh3L3ZpcnRpby92aXJ0aW8tYWNjZXNzLmgiCj4gKyNpbmNsdWRlICJody92aXJ0 aW8vdmlydGlvLXBzdG9yZS5oIgo+ICsKPiArI2RlZmluZSBQU1RPUkVfREVGQVVMVF9CVUZTSVpF ICAgKDE2ICogMTAyNCkKPiArI2RlZmluZSBQU1RPUkVfREVGQVVMVF9GSUxFX01BWCAgNQo+ICsK PiArLyogdGhlIGluZGV4IHNob3VsZCBtYXRjaCB0byB0aGUgdHlwZSB2YWx1ZSAqLwo+ICtzdGF0 aWMgY29uc3QgY2hhciAqdmlydGlvX3BzdG9yZV9maWxlX3ByZWZpeFtdID0gewo+ICsgICAgInVu a25vd24tIiwJCS8qIFZJUlRJT19QU1RPUkVfVFlQRV9VTktOT1dOICovCgpJcyB0aGVyZSB2YWx1 ZSBpbiB0cmVhdGluZyBldmVyeXRoaW5nIHVuZXhwZWN0ZWQgYXMgInVua25vd24iCmFuZCByb3Rh dGluZyB0aGVtIGFzIGlmIHRoZXkgd2VyZSBsb2dzPwpJdCBtaWdodCBiZSBiZXR0ZXIgdG8gdHJl YXQgZXZlcnl0aGluZyB0aGF0J3Mgbm90IGtub3duCmFzIGd1ZXN0IGVycm9yLgoKCj4gKyAgICAi ZG1lc2ctIiwJCS8qIFZJUlRJT19QU1RPUkVfVFlQRV9ETUVTRyAqLwoKdXNlIG5hbWVkIGluaXRp YWxpemVycyBmb3IgdGhpcyBpbnN0ZWFkIG9mIGNvbW1lbnRzLgoKPiArfTsKPiArCj4gK3N0YXRp YyBjaGFyICp2aXJ0aW9fcHN0b3JlX3RvX2ZpbGVuYW1lKFZpcnRJT1BzdG9yZSAqcywKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZpcnRpb19wc3RvcmVf cmVxICpyZXEpCj4gK3sKPiArICAgIGNvbnN0IGNoYXIgKmJhc2VuYW1lOwo+ICsgICAgdW5zaWdu ZWQgbG9uZyBsb25nIGlkOwo+ICsgICAgdW5zaWduZWQgaW50IHR5cGUgPSBsZTE2X3RvX2NwdShy ZXEtPnR5cGUpOwo+ICsgICAgdW5zaWduZWQgaW50IGZsYWdzID0gbGUzMl90b19jcHUocmVxLT5m bGFncyk7Cj4gKwo+ICsgICAgaWYgKHR5cGUgPCBBUlJBWV9TSVpFKHZpcnRpb19wc3RvcmVfZmls ZV9wcmVmaXgpKSB7Cj4gKyAgICAgICAgYmFzZW5hbWUgPSB2aXJ0aW9fcHN0b3JlX2ZpbGVfcHJl Zml4W3R5cGVdOwo+ICsgICAgfSBlbHNlIHsKPiArICAgICAgICBiYXNlbmFtZSA9ICJ1bmtub3du LSI7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWQgPSBzLT5pZCsrOwo+ICsgICAgcmV0dXJuIGdfc3Ry ZHVwX3ByaW50ZigiJXMvJXMlbGx1JXMiLCBzLT5kaXJlY3RvcnksIGJhc2VuYW1lLCBpZCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICYgVklSVElPX1BTVE9SRV9GTF9DT01Q UkVTU0VEID8gIi5lbmMueiIgOiAiIik7Cj4gK30KPiArCj4gK3N0YXRpYyBjaGFyICp2aXJ0aW9f cHN0b3JlX2Zyb21fZmlsZW5hbWUoVmlydElPUHN0b3JlICpzLCBjaGFyICpuYW1lLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aXJ0aW9fcHN0b3Jl X2ZpbGVpbmZvICppbmZvKQo+ICt7Cj4gKyAgICBjaGFyICpmaWxlbmFtZTsKPiArICAgIHVuc2ln bmVkIGludCBpZHg7Cj4gKwo+ICsgICAgZmlsZW5hbWUgPSBnX3N0cmR1cF9wcmludGYoIiVzLyVz Iiwgcy0+ZGlyZWN0b3J5LCBuYW1lKTsKPiArICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQo+ICsg ICAgICAgIHJldHVybiBOVUxMOwo+ICsKPiArICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlf U0laRSh2aXJ0aW9fcHN0b3JlX2ZpbGVfcHJlZml4KTsgaWR4KyspIHsKPiArICAgICAgICBpZiAo Z19zdHJfaGFzX3ByZWZpeChuYW1lLCB2aXJ0aW9fcHN0b3JlX2ZpbGVfcHJlZml4W2lkeF0pKSB7 Cj4gKyAgICAgICAgICAgIGluZm8tPnR5cGUgPSBpZHg7Cj4gKyAgICAgICAgICAgIG5hbWUgKz0g c3RybGVuKHZpcnRpb19wc3RvcmVfZmlsZV9wcmVmaXhbaWR4XSk7Cj4gKyAgICAgICAgICAgIGJy ZWFrOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICBpZiAoaWR4ID09IEFSUkFZX1NJ WkUodmlydGlvX3BzdG9yZV9maWxlX3ByZWZpeCkpIHsKPiArICAgICAgICBnX2ZyZWUoZmlsZW5h bWUpOwo+ICsgICAgICAgIHJldHVybiBOVUxMOwo+ICsgICAgfQo+ICsKPiArICAgIHFlbXVfc3Ry dG91bGwobmFtZSwgTlVMTCwgMCwgJmluZm8tPmlkKTsKCldoYXQgaWYgdGhpcyBmYWlscz8KCj4g Kwo+ICsgICAgaW5mby0+ZmxhZ3MgPSAwOwo+ICsgICAgaWYgKGdfc3RyX2hhc19zdWZmaXgobmFt ZSwgIi5lbmMueiIpKSB7Cj4gKyAgICAgICAgaW5mby0+ZmxhZ3MgfD0gVklSVElPX1BTVE9SRV9G TF9DT01QUkVTU0VEOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiBmaWxlbmFtZTsKPiArfQo+ ICsKPiArc3RhdGljIGludCBwcmVmaXhfaWR4Owo+ICtzdGF0aWMgaW50IHByZWZpeF9jb3VudDsK PiArc3RhdGljIGludCBwcmVmaXhfbGVuOwpUaGlzIGRvZXMgbm90IHdvcmsgcHJvcGVybHkgaWYg dGhlcmUgYXJlIG11bHRpcGxlIGluc3RhbmNlcwpvZiBpdC4gUGxzIG1vdmUgZXZlcnl0aGluZyBp bnRvIGRldmljZSBzdGF0ZS4KCj4gKwo+ICtzdGF0aWMgaW50IGZpbHRlcl9wc3RvcmUoY29uc3Qg c3RydWN0IGRpcmVudCAqZGUpCj4gK3sKPiArICAgIGludCBpOwo+ICsKPiArICAgIGZvciAoaSA9 IDA7IGkgPCBwcmVmaXhfY291bnQ7IGkrKykgewo+ICsgICAgICAgIGNvbnN0IGNoYXIgKnByZWZp eCA9IHZpcnRpb19wc3RvcmVfZmlsZV9wcmVmaXhbcHJlZml4X2lkeCArIGldOwo+ICsKPiArICAg ICAgICBpZiAoZ19zdHJfaGFzX3ByZWZpeChkZS0+ZF9uYW1lLCBwcmVmaXgpKSB7Cj4gKyAgICAg ICAgICAgIHJldHVybiAxOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiArICAgIHJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHNvcnRfcHN0b3JlKGNvbnN0IHN0cnVjdCBkaXJlbnQgKiph LCBjb25zdCBzdHJ1Y3QgZGlyZW50ICoqYikKPiArewo+ICsgICAgdWludDY0X3QgaWRfYSwgaWRf YjsKPiArCj4gKyAgICBxZW11X3N0cnRvdWxsKCgqYSktPmRfbmFtZSArIHByZWZpeF9sZW4sIE5V TEwsIDAsICZpZF9hKTsKPiArICAgIHFlbXVfc3RydG91bGwoKCpiKS0+ZF9uYW1lICsgcHJlZml4 X2xlbiwgTlVMTCwgMCwgJmlkX2IpOwo+ICsKPiArICAgIHJldHVybiBpZF9hIC0gaWRfYjsKPiAr fQo+ICsKPiArc3RhdGljIGludCByb3RhdGVfcHN0b3JlX2ZpbGUoVmlydElPUHN0b3JlICpzLCB1 bnNpZ25lZCBzaG9ydCB0eXBlKQo+ICt7Cj4gKyAgICBpbnQgcmV0ID0gMDsKPiArICAgIGludCBp LCBudW07Cj4gKyAgICBjaGFyICpmaWxlbmFtZTsKPiArICAgIHN0cnVjdCBkaXJlbnQgKipmaWxl czsKPiArCj4gKyAgICBpZiAodHlwZSA+PSBBUlJBWV9TSVpFKHZpcnRpb19wc3RvcmVfZmlsZV9w cmVmaXgpKSB7Cj4gKyAgICAgICAgdHlwZSA9IFZJUlRJT19QU1RPUkVfVFlQRV9VTktOT1dOOwo+ ICsgICAgfQo+ICsKPiArICAgIHByZWZpeF9pZHggPSB0eXBlOwo+ICsgICAgcHJlZml4X2xlbiA9 IHN0cmxlbih2aXJ0aW9fcHN0b3JlX2ZpbGVfcHJlZml4W3R5cGVdKTsKPiArICAgIHByZWZpeF9j b3VudCA9IDE7ICAvKiBvbmx5IHNjYW4gY3VycmVudCB0eXBlICovCj4gKwo+ICsgICAgLyogZGVs ZXRlIHRoZSBvbGRlc3QgZmlsZSBpbiB0aGUgc2FtZSB0eXBlICovCj4gKyAgICBudW0gPSBzY2Fu ZGlyKHMtPmRpcmVjdG9yeSwgJmZpbGVzLCBmaWx0ZXJfcHN0b3JlLCBzb3J0X3BzdG9yZSk7Cj4g KyAgICBpZiAobnVtIDwgMCkKPiArICAgICAgICByZXR1cm4gbnVtOwo+ICsgICAgaWYgKG51bSA8 IChpbnQpcy0+ZmlsZV9tYXgpCj4gKyAgICAgICAgZ290byBvdXQ7Cj4gKwo+ICsgICAgZmlsZW5h bWUgPSBnX3N0cmR1cF9wcmludGYoIiVzLyVzIiwgcy0+ZGlyZWN0b3J5LCBmaWxlc1swXS0+ZF9u YW1lKTsKPiArICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7Cj4gKyAgICAgICAgcmV0ID0gLTE7 Cj4gKyAgICAgICAgZ290byBvdXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gdW5saW5rKGZp bGVuYW1lKTsKPiArCj4gK291dDoKPiArICAgIGZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewo+ ICsgICAgICAgIGdfZnJlZShmaWxlc1tpXSk7Cj4gKyAgICB9Cj4gKyAgICBnX2ZyZWUoZmlsZXMp Owo+ICsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KClBscyBwcmVmaXggZXZlcnl0aGluZyB3aXRo IHZpcnRpb19wc3RvcmUgb3IgYW5vdGhlcgp1bmlxdWUgcHJlZml4LiBhbHNvIGJlbG93LgoKPiAr Cj4gK3N0YXRpYyBzc2l6ZV90IHZpcnRpb19wc3RvcmVfZG9fb3BlbihWaXJ0SU9Qc3RvcmUgKnMp Cj4gK3sKPiArICAgIC8qIHNjYW4gYWxsIHBzdG9yZSBmaWxlcyAqLwo+ICsgICAgcHJlZml4X2lk eCA9IDA7Cj4gKyAgICBwcmVmaXhfY291bnQgPSBBUlJBWV9TSVpFKHZpcnRpb19wc3RvcmVfZmls ZV9wcmVmaXgpOwo+ICsKPiArICAgIHMtPmZpbGVfaWR4ID0gMDsKPiArICAgIHMtPm51bV9maWxl ID0gc2NhbmRpcihzLT5kaXJlY3RvcnksICZzLT5maWxlcywgZmlsdGVyX3BzdG9yZSwgYWxwaGFz b3J0KTsKPiArCj4gKyAgICByZXR1cm4gcy0+bnVtX2ZpbGUgPj0gMCA/IDAgOiAtMTsKPiArfQo+ ICsKPiArc3RhdGljIHNzaXplX3QgdmlydGlvX3BzdG9yZV9kb19jbG9zZShWaXJ0SU9Qc3RvcmUg KnMpCj4gK3sKPiArICAgIGludCBpOwo+ICsKPiArICAgIGZvciAoaSA9IDA7IGkgPCBzLT5udW1f ZmlsZTsgaSsrKSB7Cj4gKyAgICAgICAgZ19mcmVlKHMtPmZpbGVzW2ldKTsKPiArICAgIH0KPiAr ICAgIGdfZnJlZShzLT5maWxlcyk7Cj4gKyAgICBzLT5maWxlcyA9IE5VTEw7Cj4gKwo+ICsgICAg cy0+bnVtX2ZpbGUgPSAwOwo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6 ZV90IHZpcnRpb19wc3RvcmVfZG9fZXJhc2UoVmlydElPUHN0b3JlICpzLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcSAqcmVx KQo+ICt7Cj4gKyAgICBjaGFyICpmaWxlbmFtZTsKPiArICAgIGludCByZXQ7Cj4gKwo+ICsgICAg ZmlsZW5hbWUgPSB2aXJ0aW9fcHN0b3JlX3RvX2ZpbGVuYW1lKHMsIHJlcSk7Cj4gKyAgICBpZiAo ZmlsZW5hbWUgPT0gTlVMTCkKPiArICAgICAgICByZXR1cm4gLTE7Cgp0aGlzIGNhbid0IGhhcHBl bi4KCmFsc28gdGhpcyBpcyBhIGNvZGluZyBzdHlsZSB2aW9sYXRpb24uCgo+ICsKPiArICAgIHJl dCA9IHVubGluayhmaWxlbmFtZSk7Cj4gKwo+ICsgICAgZ19mcmVlKGZpbGVuYW1lKTsKPiArICAg IHJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0cnVjdCBwc3RvcmVfcmVhZF9hcmcgewo+ICsgICAg VmlydElPUHN0b3JlICp2cHM7Cj4gKyAgICBWaXJ0UXVldWVFbGVtZW50ICplbGVtOwo+ICsgICAg c3RydWN0IHZpcnRpb19wc3RvcmVfZmlsZWluZm8gaW5mbzsKPiArICAgIFFJT0NoYW5uZWwgKmlv YzsKPiArfTsKPiArCj4gK3N0YXRpYyBnYm9vbGVhbiBwc3RvcmVfYXN5bmNfcmVhZF9mbihRSU9D aGFubmVsICppb2MsIEdJT0NvbmRpdGlvbiBjb25kaXRpb24sCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBkYXRhKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgcHN0 b3JlX3JlYWRfYXJnICpyYXJnID0gZGF0YTsKPiArICAgIHN0cnVjdCB2aXJ0aW9fcHN0b3JlX2Zp bGVpbmZvICppbmZvID0gJnJhcmctPmluZm87Cj4gKyAgICBWaXJ0SU9Qc3RvcmUgKnZwcyA9IHJh cmctPnZwczsKPiArICAgIFZpcnRRdWV1ZUVsZW1lbnQgKmVsZW0gPSByYXJnLT5lbGVtOwo+ICsg ICAgc3RydWN0IHZpcnRpb19wc3RvcmVfcmVzIHJlczsKPiArICAgIHNpemVfdCBvZmZzZXQgPSBz aXplb2YocmVzKSArIHNpemVvZigqaW5mbyk7Cj4gKyAgICBzdHJ1Y3QgaW92ZWMgKnNnID0gZWxl bS0+aW5fc2c7Cj4gKyAgICB1bnNpZ25lZCBpbnQgc2dfbnVtID0gZWxlbS0+aW5fbnVtOwo+ICsg ICAgRXJyb3IgKmVyciA9IE5VTEw7Cj4gKyAgICBzc2l6ZV90IGxlbjsKPiArICAgIGludCByZXQ7 Cj4gKwo+ICsgICAgLyogc2tpcCByZXMgYW5kIGZpbGVpbmZvICovCj4gKyAgICBpb3ZfZGlzY2Fy ZF9mcm9udCgmc2csICZzZ19udW0sIHNpemVvZihyZXMpICsgc2l6ZW9mKCppbmZvKSk7Cj4gKwo+ ICsgICAgbGVuID0gcWlvX2NoYW5uZWxfcmVhZHYocmFyZy0+aW9jLCBzZywgc2dfbnVtLCAmZXJy KTsKPiArICAgIGlmIChsZW4gPCAwKSB7Cj4gKyAgICAgICAgaWYgKGVycm5vID09IEVBR0FJTikg ewo+ICsgICAgICAgICAgICBsZW4gPSAwOwo+ICsgICAgICAgIH0KPiArICAgICAgICByZXQgPSAt MTsKPiArICAgIH0gZWxzZSB7Cj4gKyAgICAgICAgaW5mby0+bGVuID0gY3B1X3RvX2xlMzIobGVu KTsKPiArICAgICAgICByZXQgPSAwOwo+ICsgICAgfQo+ICsKPiArICAgIHJlcy5jbWQgID0gY3B1 X3RvX2xlMTYoVklSVElPX1BTVE9SRV9DTURfUkVBRCk7Cj4gKyAgICByZXMudHlwZSA9IGNwdV90 b19sZTE2KFZJUlRJT19QU1RPUkVfVFlQRV9VTktOT1dOKTsKPiArICAgIHJlcy5yZXQgID0gY3B1 X3RvX2xlMzIocmV0KTsKPiArCj4gKyAgICAvKiBub3cgY29weSByZXMgYW5kIGZpbGVpbmZvICov Cj4gKyAgICBpb3ZfZnJvbV9idWYoZWxlbS0+aW5fc2csIGVsZW0tPmluX251bSwgMCwgJnJlcywg c2l6ZW9mKHJlcykpOwo+ICsgICAgaW92X2Zyb21fYnVmKGVsZW0tPmluX3NnLCBlbGVtLT5pbl9u dW0sIHNpemVvZihyZXMpLCBpbmZvLCBzaXplb2YoKmluZm8pKTsKPiArCj4gKyAgICBsZW4gKz0g b2Zmc2V0Owo+ICsgICAgdmlydHF1ZXVlX3B1c2godnBzLT5ydnEsIGVsZW0sIGxlbik7Cj4gKyAg ICB2aXJ0aW9fbm90aWZ5KFZJUlRJT19ERVZJQ0UodnBzKSwgdnBzLT5ydnEpOwo+ICsKPiArICAg IHJldHVybiBHX1NPVVJDRV9SRU1PVkU7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGZyZWVfcmFy Z19mbihncG9pbnRlciBkYXRhKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgcHN0b3JlX3JlYWRfYXJnICpy YXJnID0gZGF0YTsKPiArCj4gKyAgICBxaW9fY2hhbm5lbF9jbG9zZShyYXJnLT5pb2MsIE5VTEwp Owo+ICsKPiArICAgIGdfZnJlZShyYXJnLT5lbGVtKTsKPiArICAgIGdfZnJlZShyYXJnKTsKPiAr fQo+ICsKPiArc3RhdGljIHNzaXplX3QgdmlydGlvX3BzdG9yZV9kb19yZWFkKFZpcnRJT1BzdG9y ZSAqcywgVmlydFF1ZXVlRWxlbWVudCAqZWxlbSkKPiArewo+ICsgICAgY2hhciAqZmlsZW5hbWUg PSBOVUxMOwo+ICsgICAgaW50IGZkLCBpZHg7Cj4gKyAgICBzdHJ1Y3Qgc3RhdCBzdGJ1ZjsKPiAr ICAgIHN0cnVjdCBwc3RvcmVfcmVhZF9hcmcgKnJhcmcgPSBOVUxMOwo+ICsgICAgRXJyb3IgKmVy ciA9IE5VTEw7Cj4gKyAgICBpbnQgcmV0ID0gLTE7Cj4gKwo+ICsgICAgaWYgKHMtPmZpbGVfaWR4 ID49IHMtPm51bV9maWxlKSB7Cj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgcmFyZyA9IGdfbWFsbG9jKHNpemVvZigqcmFyZykpOwo+ICsgICAgaWYgKHJhcmcgPT0gTlVM TCkgewo+ICsgICAgICAgIHJldHVybiAtMTsKPiArICAgIH0KPiArCj4gKyAgICBpZHggPSBzLT5m aWxlX2lkeCsrOwo+ICsgICAgZmlsZW5hbWUgPSB2aXJ0aW9fcHN0b3JlX2Zyb21fZmlsZW5hbWUo cywgcy0+ZmlsZXNbaWR4XS0+ZF9uYW1lLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnJhcmctPmluZm8pOwo+ICsgICAgaWYgKGZpbGVuYW1lID09IE5VTEwp IHsKPiArICAgICAgICBnb3RvIG91dDsKPiArICAgIH0KPiArCj4gKyAgICBmZCA9IG9wZW4oZmls ZW5hbWUsIE9fUkRPTkxZKTsKPiArICAgIGlmIChmZCA8IDApIHsKPiArICAgICAgICBlcnJvcl9y ZXBvcnQoImNhbm5vdCBvcGVuICVzIiwgZmlsZW5hbWUpOwo+ICsgICAgICAgIGdvdG8gb3V0Owo+ ICsgICAgfQoKSSBzZWUgb3BlbiBoZXJlIGJ1dCBjbG9zZSBub3doZXJlLiBEb2VzIHRoaXMgbGVh ayBmZHM/Cgo+ICsKPiArICAgIGlmIChmc3RhdChmZCwgJnN0YnVmKSA8IDApIHsKClNvIHdlIGNh biBzdGF0LCBidXQgY2FuIHdlIGUuZy4gcmVhZD8KCgo+ICsgICAgICAgIGdvdG8gb3V0Owo+ICsg ICAgfQo+ICsKPiArICAgIHJhcmctPnZwcyAgICAgICAgICAgID0gczsKPiArICAgIHJhcmctPmVs ZW0gICAgICAgICAgID0gZWxlbTsKPiArICAgIHJhcmctPmluZm8uaWQgICAgICAgID0gY3B1X3Rv X2xlNjQocmFyZy0+aW5mby5pZCk7Cj4gKyAgICByYXJnLT5pbmZvLnR5cGUgICAgICA9IGNwdV90 b19sZTE2KHJhcmctPmluZm8udHlwZSk7Cj4gKyAgICByYXJnLT5pbmZvLmZsYWdzICAgICA9IGNw dV90b19sZTMyKHJhcmctPmluZm8uZmxhZ3MpOwo+ICsgICAgcmFyZy0+aW5mby50aW1lX3NlYyAg PSBjcHVfdG9fbGU2NChzdGJ1Zi5zdF9jdGltLnR2X3NlYyk7CgpJcyB0aGlzIHNlY29uZHMgc2lu Y2UgZXBvY2g/CldoeSBjdGltIHNwZWNpZmljYWxseT8KUGxzIGFkZCBjb21tZW50cy4KCj4gKyAg ICByYXJnLT5pbmZvLnRpbWVfbnNlYyA9IGNwdV90b19sZTMyKHN0YnVmLnN0X2N0aW0udHZfbnNl Yyk7CgpOb3QgYWxsIGhvc3RzIHN1cHBvcnQgbmFub3NlY29uZCBwcmVjaXNpb24uCkRvIHdlIG5l ZWQgc29tZSB3YXkgdG8gdGVsbCBndWVzdCB3aGF0J3MgcmVsaWFibGU/CgpVbmxlc3MgeW91IGxp bWl0IHRoaXMgdG8gbGludXggaG9zdCwgeW91IHNob3VsZCBjYXJlIGFib3V0IHRoaW5ncwpsaWtl IHRoaXMgKGluIG1hbiBmc3RhdCkKCiAgICAgICAgICAgU2luY2UgIGtlcm5lbCAyLjUuNDgsIHRo ZSBzdGF0IHN0cnVjdHVyZSBzdXBwb3J0cyBuYW5vc2Vjb25kCiAgICByZXNvbHV0aW9uIGZvciB0 aGUgdGhyZWUgZmlsZSB0aW1lc3RhbXAgZmllbGRzLiAgVGhlIG5hbm9zZWNvbmQgY29tcG/igJAK ICAgIG5lbnRzIG9mIGVhY2ggdGltZXN0YW1wIGFyZSBhdmFpbGFibGUgdmlhIG5hbWVzIG9mIHRo ZSBmb3JtCiAgICBzdF9hdGltLnR2X25zZWMgaWYgdGhlIF9CU0RfU09VUkNFIG9yIF9TVklEX1NP VVJDRSBmZWF0dXJlICB0ZXN0ICBtYWNybwogICAgaXMgIGRlZmluZWQuICAgTmFub3NlY29uZCAg dGltZXN0YW1wcyBhcmUgbm93YWRheXMgc3RhbmRhcmRpemVkLAogICAgc3RhcnRpbmcgd2l0aCBQ T1NJWC4xLTIwMDgsIGFuZCwgc3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDIuMTIsIGdsaWJjIGFsc28K ICAgIGV4cG9zZXMgdGhlIG5hbm9zZWNvbmQgY29tcG9uZW50IG5hbWVzIGlmIF9QT1NJWF9DX1NP VVJDRSBpcyBkZWZpbmVkCiAgICB3aXRoIHRoZSB2YWx1ZSAyMDA4MDlMIG9yIGdyZWF0ZXIsICBv ciAgX1hPUEVOX1NPVVJDRSAgaXMgZGVmaW5lZCAgd2l0aAogICAgdGhlICB2YWx1ZSA3MDAgb3Ig Z3JlYXRlci4gIElmIG5vbmUgb2YgdGhlIGFmb3JlbWVudGlvbmVkIG1hY3JvcyBhcmUKICAgIGRl ZmluZWQsIHRoZW4gdGhlIG5hbm9zZWNvbmQgdmFsdWVzIGFyZSBleHBvc2VkIHdpdGggbmFtZXMg b2YgdGhlIGZvcm0KICAgIHN0X2F0aW1lbnNlYy4KCgoKCj4gKwo+ICsgICAgcmFyZy0+aW9jID0g cWlvX2NoYW5uZWxfbmV3X2ZkKGZkLCAmZXJyKTsKPiArICAgIGlmIChlcnIpIHsKPiArICAgICAg ICBlcnJvcl9yZXBvcnRmX2VycihlcnIsICJjYW5ub3QgY3JlYXRlIGlvIGNoYW5uZWw6ICIpOwo+ ICsgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgfQo+ICsKPiArICAgIHFpb19jaGFubmVsX3NldF9i bG9ja2luZyhyYXJnLT5pb2MsIGZhbHNlLCAmZXJyKTsKPiArICAgIHFpb19jaGFubmVsX2FkZF93 YXRjaChyYXJnLT5pb2MsIEdfSU9fSU4sIHBzdG9yZV9hc3luY19yZWFkX2ZuLCByYXJnLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfcmFyZ19mbik7Cj4gKyAgICBnX2ZyZWUoZmls ZW5hbWUpOwo+ICsgICAgcmV0dXJuIDE7Cj4gKwo+ICtvdXQ6Cj4gKyAgICBnX2ZyZWUoZmlsZW5h bWUpOwo+ICsgICAgZ19mcmVlKHJhcmcpOwo+ICsKPiArICAgIHJldHVybiByZXQ7Cj4gK30KPiAr Cj4gK3N0cnVjdCBwc3RvcmVfd3JpdGVfYXJnIHsKPiArICAgIFZpcnRJT1BzdG9yZSAqdnBzOwo+ ICsgICAgVmlydFF1ZXVlRWxlbWVudCAqZWxlbTsKPiArICAgIHN0cnVjdCB2aXJ0aW9fcHN0b3Jl X3JlcSAqcmVxOwo+ICsgICAgUUlPQ2hhbm5lbCAqaW9jOwo+ICt9Owo+ICsKPiArc3RhdGljIGdi b29sZWFuIHBzdG9yZV9hc3luY193cml0ZV9mbihRSU9DaGFubmVsICppb2MsIEdJT0NvbmRpdGlv biBjb25kaXRpb24sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bv aW50ZXIgZGF0YSkKPiArewo+ICsgICAgc3RydWN0IHBzdG9yZV93cml0ZV9hcmcgKndhcmcgPSBk YXRhOwo+ICsgICAgVmlydElPUHN0b3JlICp2cHMgPSB3YXJnLT52cHM7Cj4gKyAgICBWaXJ0UXVl dWVFbGVtZW50ICplbGVtID0gd2FyZy0+ZWxlbTsKPiArICAgIHN0cnVjdCBpb3ZlYyAqc2cgPSBl bGVtLT5vdXRfc2c7Cj4gKyAgICB1bnNpZ25lZCBpbnQgc2dfbnVtID0gZWxlbS0+b3V0X251bTsK PiArICAgIHN0cnVjdCB2aXJ0aW9fcHN0b3JlX3JlcyByZXM7Cj4gKyAgICBFcnJvciAqZXJyID0g TlVMTDsKPiArICAgIHNzaXplX3QgbGVuOwo+ICsgICAgaW50IHJldDsKPiArCj4gKyAgICAvKiB3 ZSBhbHJlYWR5IGNvbnN1bWVkIHRoZSByZXEgKi8KPiArICAgIGlvdl9kaXNjYXJkX2Zyb250KCZz ZywgJnNnX251bSwgc2l6ZW9mKCp3YXJnLT5yZXEpKTsKPiArCj4gKyAgICBsZW4gPSBxaW9fY2hh bm5lbF93cml0ZXYod2FyZy0+aW9jLCBzZywgc2dfbnVtLCAmZXJyKTsKPiArICAgIGlmIChsZW4g PCAwKSB7Cj4gKyAgICAgICAgcmV0ID0gLTE7Cj4gKyAgICB9IGVsc2Ugewo+ICsgICAgICAgIHJl dCA9IDA7Cj4gKyAgICB9CgpUaGlzIGNhbiBkaXNjYXJkIHBhcnQgb2YgdGhlIGRhdGEgd3JpdHRl bi4KRG9uJ3Qgd2UgY2FyZT8KCj4gKwo+ICsgICAgcmVzLmNtZCAgPSBjcHVfdG9fbGUxNihWSVJU SU9fUFNUT1JFX0NNRF9XUklURSk7Cj4gKyAgICByZXMudHlwZSA9IHdhcmctPnJlcS0+dHlwZTsK PiArICAgIHJlcy5yZXQgID0gY3B1X3RvX2xlMzIocmV0KTsKPiArCj4gKyAgICAvKiB0ZWxsIHRo ZSByZXN1bHQgdG8gZ3Vlc3QgKi8KPiArICAgIGlvdl9mcm9tX2J1ZihlbGVtLT5pbl9zZywgZWxl bS0+aW5fbnVtLCAwLCAmcmVzLCBzaXplb2YocmVzKSk7Cj4gKwo+ICsgICAgdmlydHF1ZXVlX3B1 c2godnBzLT53dnEsIGVsZW0sIHNpemVvZihyZXMpKTsKPiArICAgIHZpcnRpb19ub3RpZnkoVklS VElPX0RFVklDRSh2cHMpLCB2cHMtPnd2cSk7Cj4gKwo+ICsgICAgcmV0dXJuIEdfU09VUkNFX1JF TU9WRTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZnJlZV93YXJnX2ZuKGdwb2ludGVyIGRhdGEp Cj4gK3sKPiArICAgIHN0cnVjdCBwc3RvcmVfd3JpdGVfYXJnICp3YXJnID0gZGF0YTsKPiArCj4g KyAgICBxaW9fY2hhbm5lbF9jbG9zZSh3YXJnLT5pb2MsIE5VTEwpOwo+ICsKPiArICAgIGdfZnJl ZSh3YXJnLT5lbGVtKTsKPiArICAgIGdfZnJlZSh3YXJnKTsKPiArfQo+ICsKPiArc3RhdGljIHNz aXplX3QgdmlydGlvX3BzdG9yZV9kb193cml0ZShWaXJ0SU9Qc3RvcmUgKnMsIFZpcnRRdWV1ZUVs ZW1lbnQgKmVsZW0sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHZpcnRpb19wc3RvcmVfcmVxICpyZXEpCj4gK3sKPiArICAgIHVuc2lnbmVkIHNob3J0IHR5 cGUgPSBsZTE2X3RvX2NwdShyZXEtPnR5cGUpOwo+ICsgICAgY2hhciAqZmlsZW5hbWUgPSBOVUxM Owo+ICsgICAgaW50IGZkOwo+ICsgICAgaW50IGZsYWdzID0gT19XUk9OTFkgfCBPX0NSRUFUIHwg T19UUlVOQzsKPiArICAgIHN0cnVjdCBwc3RvcmVfd3JpdGVfYXJnICp3YXJnID0gTlVMTDsKPiAr ICAgIEVycm9yICplcnIgPSBOVUxMOwo+ICsgICAgaW50IHJldCA9IC0xOwo+ICsKPiArICAgIC8q IGRvIG5vdCBrZWVwIHNhbWUgdHlwZSBvZiBmaWxlcyBtb3JlIHRoYW4gJ2ZpbGUtbWF4JyAqLwo+ ICsgICAgcm90YXRlX3BzdG9yZV9maWxlKHMsIHR5cGUpOwoKSWYgeW91IGRvbid0IGNhcmUgYWJv dXQgZmFpbHVyZXMsIHNob3VsZCB0aGlzIGZ1bmN0aW9uCnJldHVybiBhIHZhbHVlPyBIb3cgYWJv dXQgcmVwb3J0aW5nIGl0IHRvIHRoZSB1c2VyPwoKCj4gKwo+ICsgICAgZmlsZW5hbWUgPSB2aXJ0 aW9fcHN0b3JlX3RvX2ZpbGVuYW1lKHMsIHJlcSk7Cj4gKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVM TCkgewo+ICsgICAgICAgIHJldHVybiAtMTsKPiArICAgIH0KCnRoaXMgY2FuJ3QgaGFwcGVuCgo+ ICsKPiArICAgIHdhcmcgPSBnX21hbGxvYyhzaXplb2YoKndhcmcpKTsKPiArICAgIGlmICh3YXJn ID09IE5VTEwpIHsKPiArICAgICAgICBnb3RvIG91dDsKPiArICAgIH0KPiArCj4gKyAgICBmZCA9 IG9wZW4oZmlsZW5hbWUsIGZsYWdzLCAwNjQ0KTsKPiArICAgIGlmIChmZCA8IDApIHsKPiArICAg ICAgICBlcnJvcl9yZXBvcnQoImNhbm5vdCBvcGVuICVzIiwgZmlsZW5hbWUpOwo+ICsgICAgICAg IHJldCA9IGZkOwo+ICsgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgfQo+ICsKPiArICAgIHdhcmct PnZwcyAgICAgICAgICAgID0gczsKPiArICAgIHdhcmctPmVsZW0gICAgICAgICAgID0gZWxlbTsK PiArICAgIHdhcmctPnJlcSAgICAgICAgICAgID0gcmVxOwo+ICsKPiArICAgIHdhcmctPmlvYyA9 IHFpb19jaGFubmVsX25ld19mZChmZCwgJmVycik7Cj4gKyAgICBpZiAoZXJyKSB7Cj4gKyAgICAg ICAgZXJyb3JfcmVwb3J0Zl9lcnIoZXJyLCAiY2Fubm90IGNyZWF0ZSBpbyBjaGFubmVsOiAiKTsK PiArICAgICAgICBnb3RvIG91dDsKPiArICAgIH0KPiArCj4gKyAgICBxaW9fY2hhbm5lbF9zZXRf YmxvY2tpbmcod2FyZy0+aW9jLCBmYWxzZSwgJmVycik7Cj4gKyAgICBxaW9fY2hhbm5lbF9hZGRf d2F0Y2god2FyZy0+aW9jLCBHX0lPX09VVCwgcHN0b3JlX2FzeW5jX3dyaXRlX2ZuLCB3YXJnLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfd2FyZ19mbik7Cj4gKyAgICBnX2ZyZWUo ZmlsZW5hbWUpOwo+ICsgICAgcmV0dXJuIDE7Cj4gKwo+ICtvdXQ6Cj4gKyAgICBnX2ZyZWUoZmls ZW5hbWUpOwo+ICsgICAgZ19mcmVlKHdhcmcpOwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgdmlydGlvX3BzdG9yZV9oYW5kbGVfaW8oVmlydElPRGV2aWNlICp2ZGV2 LCBWaXJ0UXVldWUgKnZxKQo+ICt7Cj4gKyAgICBWaXJ0SU9Qc3RvcmUgKnMgPSBWSVJUSU9fUFNU T1JFKHZkZXYpOwo+ICsgICAgVmlydFF1ZXVlRWxlbWVudCAqZWxlbTsKPiArICAgIHN0cnVjdCB2 aXJ0aW9fcHN0b3JlX3JlcSByZXE7Cj4gKyAgICBzdHJ1Y3QgdmlydGlvX3BzdG9yZV9yZXMgcmVz Owo+ICsgICAgc3NpemVfdCBsZW4gPSAwOwo+ICsgICAgaW50IHJldDsKPiArCj4gKyAgICBmb3Ig KDs7KSB7Cj4gKyAgICAgICAgZWxlbSA9IHZpcnRxdWV1ZV9wb3AodnEsIHNpemVvZihWaXJ0UXVl dWVFbGVtZW50KSk7Cj4gKyAgICAgICAgaWYgKCFlbGVtKSB7Cj4gKyAgICAgICAgICAgIHJldHVy bjsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlmIChlbGVtLT5vdXRfbnVtIDwgMSB8fCBl bGVtLT5pbl9udW0gPCAxKSB7Cj4gKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgicmVxdWVzdCBv ciByZXNwb25zZSBidWZmZXIgaXMgbWlzc2luZyIpOwo+ICsgICAgICAgICAgICBleGl0KDEpOwo+ ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgaWYgKGVsZW0tPm91dF9udW0gPiAyIHx8IGVsZW0t PmluX251bSA+IDMpIHsKPiArICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJpbnZhbGlkIG51bWJl ciBvZiBpbnB1dC9vdXRwdXQgYnVmZmVyIik7Cj4gKyAgICAgICAgICAgIGV4aXQoMSk7Cj4gKyAg ICAgICAgfQo+ICsKPiArICAgICAgICBsZW4gPSBpb3ZfdG9fYnVmKGVsZW0tPm91dF9zZywgZWxl bS0+b3V0X251bSwgMCwgJnJlcSwgc2l6ZW9mKHJlcSkpOwo+ICsgICAgICAgIGlmIChsZW4gIT0g KHNzaXplX3Qpc2l6ZW9mKHJlcSkpIHsKPiArICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJpbnZh bGlkIHJlcXVlc3Qgc2l6ZTogJWxkIiwgKGxvbmcpbGVuKTsKPiArICAgICAgICAgICAgZXhpdCgx KTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgcmVzLmNtZCAgPSByZXEuY21kOwo+ICsgICAgICAg IHJlcy50eXBlID0gcmVxLnR5cGU7Cj4gKwo+ICsgICAgICAgIHN3aXRjaCAobGUxNl90b19jcHUo cmVxLmNtZCkpIHsKPiArICAgICAgICBjYXNlIFZJUlRJT19QU1RPUkVfQ01EX09QRU46Cj4gKyAg ICAgICAgICAgIHJldCA9IHZpcnRpb19wc3RvcmVfZG9fb3BlbihzKTsKPiArICAgICAgICAgICAg YnJlYWs7Cj4gKyAgICAgICAgY2FzZSBWSVJUSU9fUFNUT1JFX0NNRF9DTE9TRToKPiArICAgICAg ICAgICAgcmV0ID0gdmlydGlvX3BzdG9yZV9kb19jbG9zZShzKTsKPiArICAgICAgICAgICAgYnJl YWs7Cj4gKyAgICAgICAgY2FzZSBWSVJUSU9fUFNUT1JFX0NNRF9FUkFTRToKPiArICAgICAgICAg ICAgcmV0ID0gdmlydGlvX3BzdG9yZV9kb19lcmFzZShzLCAmcmVxKTsKPiArICAgICAgICAgICAg YnJlYWs7Cj4gKyAgICAgICAgY2FzZSBWSVJUSU9fUFNUT1JFX0NNRF9SRUFEOgo+ICsgICAgICAg ICAgICByZXQgPSB2aXJ0aW9fcHN0b3JlX2RvX3JlYWQocywgZWxlbSk7Cj4gKyAgICAgICAgICAg IGlmIChyZXQgPT0gMSkgewo+ICsgICAgICAgICAgICAgICAgLyogYXN5bmMgY2hhbm5lbCBpbyAq Lwo+ICsgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAg ICAgICAgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSBWSVJUSU9fUFNUT1JFX0NNRF9XUklURToKPiAr ICAgICAgICAgICAgcmV0ID0gdmlydGlvX3BzdG9yZV9kb193cml0ZShzLCBlbGVtLCAmcmVxKTsK PiArICAgICAgICAgICAgaWYgKHJldCA9PSAxKSB7Cj4gKyAgICAgICAgICAgICAgICAvKiBhc3lu YyBjaGFubmVsIGlvICovCj4gKyAgICAgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICAg ICAgfQo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICBkZWZhdWx0Ogo+ICsgICAgICAg ICAgICByZXQgPSAtMTsKPiArICAgICAgICAgICAgYnJlYWs7Cj4gKyAgICAgICAgfQo+ICsKPiAr ICAgICAgICByZXMucmV0ID0gcmV0Owo+ICsKPiArICAgICAgICBpb3ZfZnJvbV9idWYoZWxlbS0+ aW5fc2csIGVsZW0tPmluX251bSwgMCwgJnJlcywgc2l6ZW9mKHJlcykpOwo+ICsgICAgICAgIHZp cnRxdWV1ZV9wdXNoKHZxLCBlbGVtLCBzaXplb2YocmVzKSArIGxlbik7Cj4gKwo+ICsgICAgICAg IHZpcnRpb19ub3RpZnkodmRldiwgdnEpOwo+ICsgICAgICAgIGdfZnJlZShlbGVtKTsKPiArCj4g KyAgICAgICAgaWYgKHJldCA8IDApIHsKPiArICAgICAgICAgICAgcmV0dXJuOwoKd2hhdCBkb2Vz IHRoaXMgZG8/Cgo+ICsgICAgICAgIH0KPiArICAgIH0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQg dmlydGlvX3BzdG9yZV9kZXZpY2VfcmVhbGl6ZShEZXZpY2VTdGF0ZSAqZGV2LCBFcnJvciAqKmVy cnApCj4gK3sKPiArICAgIFZpcnRJT0RldmljZSAqdmRldiA9IFZJUlRJT19ERVZJQ0UoZGV2KTsK PiArICAgIFZpcnRJT1BzdG9yZSAqcyA9IFZJUlRJT19QU1RPUkUoZGV2KTsKPiArCj4gKyAgICB2 aXJ0aW9faW5pdCh2ZGV2LCAidmlydGlvLXBzdG9yZSIsIFZJUlRJT19JRF9QU1RPUkUsCj4gKyAg ICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHZpcnRpb19wc3RvcmVfY29uZmlnKSk7Cj4gKwo+ ICsgICAgcy0+aWQgPSAxOwo+ICsKPiArICAgIGlmICghcy0+YnVmc2l6ZSkKPiArICAgICAgICBz LT5idWZzaXplID0gUFNUT1JFX0RFRkFVTFRfQlVGU0laRTsKPiArICAgIGlmICghcy0+ZmlsZV9t YXgpCj4gKyAgICAgICAgcy0+ZmlsZV9tYXggPSBQU1RPUkVfREVGQVVMVF9GSUxFX01BWDsKPiAr Cj4gKyAgICBzLT5ydnEgPSB2aXJ0aW9fYWRkX3F1ZXVlKHZkZXYsIDEyOCwgdmlydGlvX3BzdG9y ZV9oYW5kbGVfaW8pOwo+ICsgICAgcy0+d3ZxID0gdmlydGlvX2FkZF9xdWV1ZSh2ZGV2LCAxMjgs IHZpcnRpb19wc3RvcmVfaGFuZGxlX2lvKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdmlydGlv X3BzdG9yZV9kZXZpY2VfdW5yZWFsaXplKERldmljZVN0YXRlICpkZXYsIEVycm9yICoqZXJycCkK PiArewo+ICsgICAgVmlydElPRGV2aWNlICp2ZGV2ID0gVklSVElPX0RFVklDRShkZXYpOwo+ICsK PiArICAgIHZpcnRpb19jbGVhbnVwKHZkZXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCB2aXJ0 aW9fcHN0b3JlX2dldF9jb25maWcoVmlydElPRGV2aWNlICp2ZGV2LCB1aW50OF90ICpjb25maWdf ZGF0YSkKPiArewo+ICsgICAgVmlydElPUHN0b3JlICpkZXYgPSBWSVJUSU9fUFNUT1JFKHZkZXYp Owo+ICsgICAgc3RydWN0IHZpcnRpb19wc3RvcmVfY29uZmlnIGNvbmZpZzsKCkFkZCB7fSBoZXJl IC0geW91IHdhbnQgYWxsIGZpZWxkcyBpbml0aWFsaXplZAppZiB5b3UgYWRkIHRoZW0sIHRvIGF2 b2lkIGxlYWtpbmcgdGhlbSB0byBndWVzdC4KCj4gKwo+ICsgICAgY29uZmlnLmJ1ZnNpemUgPSBj cHVfdG9fbGUzMihkZXYtPmJ1ZnNpemUpOwo+ICsKPiArICAgIG1lbWNweShjb25maWdfZGF0YSwg JmNvbmZpZywgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fcHN0b3JlX2NvbmZpZykpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCB2aXJ0aW9fcHN0b3JlX3NldF9jb25maWcoVmlydElPRGV2aWNlICp2ZGV2 LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAq Y29uZmlnX2RhdGEpCj4gK3sKPiArICAgIFZpcnRJT1BzdG9yZSAqZGV2ID0gVklSVElPX1BTVE9S RSh2ZGV2KTsKPiArICAgIHN0cnVjdCB2aXJ0aW9fcHN0b3JlX2NvbmZpZyBjb25maWc7Cj4gKwo+ ICsgICAgbWVtY3B5KCZjb25maWcsIGNvbmZpZ19kYXRhLCBzaXplb2Yoc3RydWN0IHZpcnRpb19w c3RvcmVfY29uZmlnKSk7Cj4gKwo+ICsgICAgZGV2LT5idWZzaXplID0gbGUzMl90b19jcHUoY29u ZmlnLmJ1ZnNpemUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdWludDY0X3QgZ2V0X2ZlYXR1cmVzKFZp cnRJT0RldmljZSAqdmRldiwgdWludDY0X3QgZiwgRXJyb3IgKiplcnJwKQo+ICt7Cj4gKyAgICBy ZXR1cm4gZjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcHN0b3JlX2dldF9kaXJlY3RvcnkoT2Jq ZWN0ICpvYmosIFZpc2l0b3IgKnYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKm9wYXF1ZSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRXJyb3IgKiplcnJwKQo+ICt7Cj4gKyAgICBWaXJ0SU9Qc3RvcmUgKnMgPSBv cGFxdWU7Cj4gKwo+ICsgICAgdmlzaXRfdHlwZV9zdHIodiwgbmFtZSwgJnMtPmRpcmVjdG9yeSwg ZXJycCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHBzdG9yZV9zZXRfZGlyZWN0b3J5KE9iamVj dCAqb2JqLCBWaXNpdG9yICp2LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICpuYW1lLCB2b2lkICpvcGFxdWUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEVycm9yICoqZXJycCkKPiArewo+ICsgICAgVmlydElPUHN0b3JlICpzID0gb3Bh cXVlOwo+ICsgICAgRXJyb3IgKmxvY2FsX2VyciA9IE5VTEw7Cj4gKyAgICBjaGFyICp2YWx1ZTsK PiArCj4gKyAgICB2aXNpdF90eXBlX3N0cih2LCBuYW1lLCAmdmFsdWUsICZsb2NhbF9lcnIpOwo+ ICsgICAgaWYgKGxvY2FsX2Vycikgewo+ICsgICAgICAgIGVycm9yX3Byb3BhZ2F0ZShlcnJwLCBs b2NhbF9lcnIpOwo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0KPiArCj4gKyAgICBnX2ZyZWUo cy0+ZGlyZWN0b3J5KTsKPiArICAgIHMtPmRpcmVjdG9yeSA9IHZhbHVlOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBwc3RvcmVfcmVsZWFzZV9kaXJlY3RvcnkoT2JqZWN0ICpvYmosIGNvbnN0IGNo YXIgKm5hbWUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpv cGFxdWUpCj4gK3sKPiArICAgIFZpcnRJT1BzdG9yZSAqcyA9IG9wYXF1ZTsKPiArCj4gKyAgICBn X2ZyZWUocy0+ZGlyZWN0b3J5KTsKPiArICAgIHMtPmRpcmVjdG9yeSA9IE5VTEw7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIHBzdG9yZV9nZXRfYnVmc2l6ZShPYmplY3QgKm9iaiwgVmlzaXRvciAq diwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZv aWQgKm9wYXF1ZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yICoqZXJy cCkKPiArewo+ICsgICAgVmlydElPUHN0b3JlICpzID0gb3BhcXVlOwo+ICsgICAgdWludDY0X3Qg dmFsdWUgPSBzLT5idWZzaXplOwo+ICsKPiArICAgIHZpc2l0X3R5cGVfc2l6ZSh2LCBuYW1lLCAm dmFsdWUsIGVycnApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBwc3RvcmVfc2V0X2J1ZnNpemUo T2JqZWN0ICpvYmosIFZpc2l0b3IgKnYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpvcGFxdWUsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBFcnJvciAqKmVycnApCj4gK3sKPiArICAgIFZpcnRJT1BzdG9yZSAqcyA9IG9w YXF1ZTsKPiArICAgIEVycm9yICplcnJvciA9IE5VTEw7Cj4gKyAgICB1aW50NjRfdCB2YWx1ZTsK PiArCj4gKyAgICB2aXNpdF90eXBlX3NpemUodiwgbmFtZSwgJnZhbHVlLCAmZXJyb3IpOwo+ICsg ICAgaWYgKGVycm9yKSB7Cj4gKyAgICAgICAgZXJyb3JfcHJvcGFnYXRlKGVycnAsIGVycm9yKTsK PiArICAgICAgICByZXR1cm47Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKHZhbHVlIDwgNDA5Nikg ewo+ICsgICAgICAgIGVycm9yX3NldGcoJmVycm9yLCAiV2FybmluZzogdG9vIHNtYWxsIGJ1ZmZl ciBzaXplOiAlIlBSSXU2NCwgdmFsdWUpOwo+ICsgICAgICAgIGVycm9yX3Byb3BhZ2F0ZShlcnJw LCBlcnJvcik7Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsgICAgfQo+ICsKPiArICAgIHMtPmJ1ZnNp emUgPSB2YWx1ZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcHN0b3JlX2dldF9maWxlX21heChP YmplY3QgKm9iaiwgVmlzaXRvciAqdiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpvcGFxdWUsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRXJyb3IgKiplcnJwKQo+ICt7Cj4gKyAgICBWaXJ0SU9Qc3RvcmUgKnMgPSBv cGFxdWU7Cj4gKyAgICBpbnQ2NF90IHZhbHVlID0gcy0+ZmlsZV9tYXg7Cj4gKwo+ICsgICAgdmlz aXRfdHlwZV9pbnQodiwgbmFtZSwgJnZhbHVlLCBlcnJwKTsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgcHN0b3JlX3NldF9maWxlX21heChPYmplY3QgKm9iaiwgVmlzaXRvciAqdiwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpvcGFxdWUs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3IgKiplcnJwKQo+ICt7Cj4g KyAgICBWaXJ0SU9Qc3RvcmUgKnMgPSBvcGFxdWU7Cj4gKyAgICBFcnJvciAqZXJyb3IgPSBOVUxM Owo+ICsgICAgaW50NjRfdCB2YWx1ZTsKPiArCj4gKyAgICB2aXNpdF90eXBlX2ludCh2LCBuYW1l LCAmdmFsdWUsICZlcnJvcik7Cj4gKyAgICBpZiAoZXJyb3IpIHsKPiArICAgICAgICBlcnJvcl9w cm9wYWdhdGUoZXJycCwgZXJyb3IpOwo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH0KPiArCj4g KyAgICBzLT5maWxlX21heCA9IHZhbHVlOwo+ICt9CgpEbyB5b3UgbmVlZCBkeW5hbWljIHByb3Bl cnRpZXM/IFRoZXJlIGFyZSBlYXNpZXIgd2F5cwp0byBkZWZpbmUgYW4gaW50IHByb3BlcnR5LiBT YW1lIGZvciBvdGhlcnMuCgo+ICsKPiArc3RhdGljIFByb3BlcnR5IHZpcnRpb19wc3RvcmVfcHJv cGVydGllc1tdID0gewo+ICsgICAgREVGSU5FX1BST1BfRU5EX09GX0xJU1QoKSwKPiArfTsKPiAr Cj4gK3N0YXRpYyB2b2lkIHZpcnRpb19wc3RvcmVfaW5zdGFuY2VfaW5pdChPYmplY3QgKm9iaikK PiArewo+ICsgICAgVmlydElPUHN0b3JlICpzID0gVklSVElPX1BTVE9SRShvYmopOwo+ICsKPiAr ICAgIG9iamVjdF9wcm9wZXJ0eV9hZGQob2JqLCAiZGlyZWN0b3J5IiwgInN0ciIsCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgIHBzdG9yZV9nZXRfZGlyZWN0b3J5LCBwc3RvcmVfc2V0X2RpcmVj dG9yeSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgcHN0b3JlX3JlbGVhc2VfZGlyZWN0b3J5 LCBzLCBOVUxMKTsKPiArICAgIG9iamVjdF9wcm9wZXJ0eV9hZGQob2JqLCAiYnVmc2l6ZSIsICJz aXplIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgcHN0b3JlX2dldF9idWZzaXplLCBwc3Rv cmVfc2V0X2J1ZnNpemUsIE5VTEwsIHMsIE5VTEwpOwo+ICsgICAgb2JqZWN0X3Byb3BlcnR5X2Fk ZChvYmosICJmaWxlLW1heCIsICJpbnQiLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBwc3Rv cmVfZ2V0X2ZpbGVfbWF4LCBwc3RvcmVfc2V0X2ZpbGVfbWF4LCBOVUxMLCBzLCBOVUxMKTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgdmlydGlvX3BzdG9yZV9jbGFzc19pbml0KE9iamVjdENsYXNz ICprbGFzcywgdm9pZCAqZGF0YSkKPiArewo+ICsgICAgRGV2aWNlQ2xhc3MgKmRjID0gREVWSUNF X0NMQVNTKGtsYXNzKTsKPiArICAgIFZpcnRpb0RldmljZUNsYXNzICp2ZGMgPSBWSVJUSU9fREVW SUNFX0NMQVNTKGtsYXNzKTsKPiArCj4gKyAgICBkYy0+cHJvcHMgPSB2aXJ0aW9fcHN0b3JlX3By b3BlcnRpZXM7Cj4gKyAgICBzZXRfYml0KERFVklDRV9DQVRFR09SWV9NSVNDLCBkYy0+Y2F0ZWdv cmllcyk7Cj4gKyAgICB2ZGMtPnJlYWxpemUgPSB2aXJ0aW9fcHN0b3JlX2RldmljZV9yZWFsaXpl Owo+ICsgICAgdmRjLT51bnJlYWxpemUgPSB2aXJ0aW9fcHN0b3JlX2RldmljZV91bnJlYWxpemU7 Cj4gKyAgICB2ZGMtPmdldF9jb25maWcgPSB2aXJ0aW9fcHN0b3JlX2dldF9jb25maWc7Cj4gKyAg ICB2ZGMtPnNldF9jb25maWcgPSB2aXJ0aW9fcHN0b3JlX3NldF9jb25maWc7Cj4gKyAgICB2ZGMt PmdldF9mZWF0dXJlcyA9IGdldF9mZWF0dXJlczsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IFR5 cGVJbmZvIHZpcnRpb19wc3RvcmVfaW5mbyA9IHsKPiArICAgIC5uYW1lID0gVFlQRV9WSVJUSU9f UFNUT1JFLAo+ICsgICAgLnBhcmVudCA9IFRZUEVfVklSVElPX0RFVklDRSwKPiArICAgIC5pbnN0 YW5jZV9zaXplID0gc2l6ZW9mKFZpcnRJT1BzdG9yZSksCj4gKyAgICAuaW5zdGFuY2VfaW5pdCA9 IHZpcnRpb19wc3RvcmVfaW5zdGFuY2VfaW5pdCwKPiArICAgIC5jbGFzc19pbml0ID0gdmlydGlv X3BzdG9yZV9jbGFzc19pbml0LAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgdmlydGlvX3JlZ2lz dGVyX3R5cGVzKHZvaWQpCj4gK3sKPiArICAgIHR5cGVfcmVnaXN0ZXJfc3RhdGljKCZ2aXJ0aW9f cHN0b3JlX2luZm8pOwo+ICt9Cj4gKwo+ICt0eXBlX2luaXQodmlydGlvX3JlZ2lzdGVyX3R5cGVz KQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2h3L3BjaS9wY2kuaCBiL2luY2x1ZGUvaHcvcGNpL3Bj aS5oCj4gaW5kZXggOTI5ZWMyZi4uYjMxNzc0YSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2h3L3Bj aS9wY2kuaAo+ICsrKyBiL2luY2x1ZGUvaHcvcGNpL3BjaS5oCj4gQEAgLTc5LDYgKzc5LDcgQEAK PiAgI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJUlRJT19TQ1NJICAgICAgICAweDEwMDQKPiAgI2Rl ZmluZSBQQ0lfREVWSUNFX0lEX1ZJUlRJT19STkcgICAgICAgICAweDEwMDUKPiAgI2RlZmluZSBQ Q0lfREVWSUNFX0lEX1ZJUlRJT185UCAgICAgICAgICAweDEwMDkKPiArI2RlZmluZSBQQ0lfREVW SUNFX0lEX1ZJUlRJT19QU1RPUkUgICAgICAweDEwMGEKPiAgCj4gICNkZWZpbmUgUENJX1ZFTkRP Ul9JRF9SRURIQVQgICAgICAgICAgICAgMHgxYjM2Cj4gICNkZWZpbmUgUENJX0RFVklDRV9JRF9S RURIQVRfQlJJREdFICAgICAgMHgwMDAxCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvaHcvdmlydGlv L3ZpcnRpby1wc3RvcmUuaCBiL2luY2x1ZGUvaHcvdmlydGlvL3ZpcnRpby1wc3RvcmUuaAo+IG5l dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uODViMTgyOAo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9pbmNsdWRlL2h3L3ZpcnRpby92aXJ0aW8tcHN0b3JlLmgKPiBAQCAtMCwwICsx LDM2IEBACj4gKy8qCj4gKyAqIFZpcnRpbyBQc3RvcmUgU3VwcG9ydAo+ICsgKgo+ICsgKiBBdXRo b3JzOgo+ICsgKiAgTmFtaHl1bmcgS2ltICAgICAgPG5hbWh5dW5nQGdtYWlsLmNvbT4KPiArICoK PiArICogVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQ TCwgdmVyc2lvbiAyLiAgU2VlCj4gKyAqIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHRvcC1sZXZl bCBkaXJlY3RvcnkuCj4gKyAqCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfUUVNVV9WSVJUSU9fUFNU T1JFX0gKPiArI2RlZmluZSBfUUVNVV9WSVJUSU9fUFNUT1JFX0gKPiArCj4gKyNpbmNsdWRlICJz dGFuZGFyZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb19wc3RvcmUuaCIKPiArI2luY2x1ZGUgImh3L3Zp cnRpby92aXJ0aW8uaCIKPiArI2luY2x1ZGUgImh3L3BjaS9wY2kuaCIKPiArCj4gKyNkZWZpbmUg VFlQRV9WSVJUSU9fUFNUT1JFICJ2aXJ0aW8tcHN0b3JlLWRldmljZSIKPiArI2RlZmluZSBWSVJU SU9fUFNUT1JFKG9iaikgXAo+ICsgICAgICAgIE9CSkVDVF9DSEVDSyhWaXJ0SU9Qc3RvcmUsIChv YmopLCBUWVBFX1ZJUlRJT19QU1RPUkUpCj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBWaXJ0SU9Qc3Rv cmUgewo+ICsgICAgVmlydElPRGV2aWNlICAgIHBhcmVudF9vYmo7Cj4gKyAgICBWaXJ0UXVldWUg ICAgICAqcnZxOwo+ICsgICAgVmlydFF1ZXVlICAgICAgKnd2cTsKPiArICAgIGNoYXIgICAgICAg ICAgICpkaXJlY3Rvcnk7Cj4gKyAgICBpbnQgICAgICAgICAgICAgZmlsZV9pZHg7Cj4gKyAgICBp bnQgICAgICAgICAgICAgbnVtX2ZpbGU7Cj4gKyAgICBzdHJ1Y3QgZGlyZW50ICoqZmlsZXM7Cj4g KyAgICB1aW50NjRfdCAgICAgICAgaWQ7Cj4gKyAgICB1aW50NjRfdCAgICAgICAgYnVmc2l6ZTsK PiArICAgIHVpbnQ2NF90ICAgICAgICBmaWxlX21heDsKPiArfSBWaXJ0SU9Qc3RvcmU7Cj4gKwo+ ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdGFuZGFyZC1oZWFkZXJzL2xpbnV4L3Zp cnRpb19pZHMuaCBiL2luY2x1ZGUvc3RhbmRhcmQtaGVhZGVycy9saW51eC92aXJ0aW9faWRzLmgK PiBpbmRleCA3NzkyNWY1Li5jNzJhOWFiIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvc3RhbmRhcmQt aGVhZGVycy9saW51eC92aXJ0aW9faWRzLmgKPiArKysgYi9pbmNsdWRlL3N0YW5kYXJkLWhlYWRl cnMvbGludXgvdmlydGlvX2lkcy5oCj4gQEAgLTQxLDUgKzQxLDYgQEAKPiAgI2RlZmluZSBWSVJU SU9fSURfQ0FJRgkgICAgICAgMTIgLyogVmlydGlvIGNhaWYgKi8KPiAgI2RlZmluZSBWSVJUSU9f SURfR1BVICAgICAgICAgIDE2IC8qIHZpcnRpbyBHUFUgKi8KPiAgI2RlZmluZSBWSVJUSU9fSURf SU5QVVQgICAgICAgIDE4IC8qIHZpcnRpbyBpbnB1dCAqLwo+ICsjZGVmaW5lIFZJUlRJT19JRF9Q U1RPUkUgICAgICAgMjIgLyogdmlydGlvIHBzdG9yZSAqLwo+ICAKPiAgI2VuZGlmIC8qIF9MSU5V WF9WSVJUSU9fSURTX0ggKi8KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdGFuZGFyZC1oZWFkZXJz L2xpbnV4L3ZpcnRpb19wc3RvcmUuaCBiL2luY2x1ZGUvc3RhbmRhcmQtaGVhZGVycy9saW51eC92 aXJ0aW9fcHN0b3JlLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjJm OTE4MzkKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvaW5jbHVkZS9zdGFuZGFyZC1oZWFkZXJzL2xp bnV4L3ZpcnRpb19wc3RvcmUuaAo+IEBAIC0wLDAgKzEsNzYgQEAKPiArI2lmbmRlZiBfTElOVVhf VklSVElPX1BTVE9SRV9ICj4gKyNkZWZpbmUgX0xJTlVYX1ZJUlRJT19QU1RPUkVfSAo+ICsvKiBU aGlzIGhlYWRlciBpcyBCU0QgbGljZW5zZWQgc28gYW55b25lIGNhbiB1c2UgdGhlIGRlZmluaXRp b25zIHRvIGltcGxlbWVudAo+ICsgKiBjb21wYXRpYmxlIGRyaXZlcnMvc2VydmVycy4KPiArICoK PiArICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0Cj4gKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwo+ICsgKiBhcmUgbWV0Ogo+ICsgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAo+ICsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuCj4gKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK PiArICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlIGRpc3RyaWJ1dGlvbi4KPiArICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBJQk0gbm9y IHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCj4gKyAqICAgIG1heSBiZSB1c2VkIHRvIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQo+ICsg KiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KPiArICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS SUJVVE9SUyBgYEFTIElTJycgQU5ECj4gKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQo+ICsgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRQo+ICsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIElCTSBPUiBD T05UUklCVVRPUlMgQkUgTElBQkxFCj4gKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCj4gKyAqIERBTUFH RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTCj4gKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQo+ICsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAo+ICsg KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg QVJJU0lORyBJTiBBTlkgV0FZCj4gKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKPiArICogU1VDSCBEQU1BR0Uu ICovCj4gKyNpbmNsdWRlICJzdGFuZGFyZC1oZWFkZXJzL2xpbnV4L3R5cGVzLmgiCj4gKyNpbmNs dWRlICJzdGFuZGFyZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb190eXBlcy5oIgo+ICsjaW5jbHVkZSAi c3RhbmRhcmQtaGVhZGVycy9saW51eC92aXJ0aW9faWRzLmgiCj4gKyNpbmNsdWRlICJzdGFuZGFy ZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb19jb25maWcuaCIKPiArCj4gKyNkZWZpbmUgVklSVElPX1BT VE9SRV9DTURfTlVMTCAgIDAKPiArI2RlZmluZSBWSVJUSU9fUFNUT1JFX0NNRF9PUEVOICAgMQo+ ICsjZGVmaW5lIFZJUlRJT19QU1RPUkVfQ01EX1JFQUQgICAyCj4gKyNkZWZpbmUgVklSVElPX1BT VE9SRV9DTURfV1JJVEUgIDMKPiArI2RlZmluZSBWSVJUSU9fUFNUT1JFX0NNRF9FUkFTRSAgNAo+ ICsjZGVmaW5lIFZJUlRJT19QU1RPUkVfQ01EX0NMT1NFICA1Cj4gKwo+ICsjZGVmaW5lIFZJUlRJ T19QU1RPUkVfVFlQRV9VTktOT1dOICAwCj4gKyNkZWZpbmUgVklSVElPX1BTVE9SRV9UWVBFX0RN RVNHICAgIDEKPiArCj4gKyNkZWZpbmUgVklSVElPX1BTVE9SRV9GTF9DT01QUkVTU0VEICAxCj4g Kwo+ICtzdHJ1Y3QgdmlydGlvX3BzdG9yZV9yZXEgewo+ICsgICAgX192aXJ0aW8xNiBjbWQ7Cj4g KyAgICBfX3ZpcnRpbzE2IHR5cGU7Cj4gKyAgICBfX3ZpcnRpbzMyIGZsYWdzOwo+ICsgICAgX192 aXJ0aW82NCBpZDsKPiArICAgIF9fdmlydGlvMzIgY291bnQ7Cj4gKyAgICBfX3ZpcnRpbzMyIHJl c2VydmVkOwo+ICt9Owo+ICsKPiArc3RydWN0IHZpcnRpb19wc3RvcmVfcmVzIHsKPiArICAgIF9f dmlydGlvMTYgY21kOwo+ICsgICAgX192aXJ0aW8xNiB0eXBlOwo+ICsgICAgX192aXJ0aW8zMiBy ZXQ7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgdmlydGlvX3BzdG9yZV9maWxlaW5mbyB7Cj4gKyAgICBf X3ZpcnRpbzY0IGlkOwo+ICsgICAgX192aXJ0aW8zMiBjb3VudDsKPiArICAgIF9fdmlydGlvMTYg dHlwZTsKPiArICAgIF9fdmlydGlvMTYgdW51c2VkOwo+ICsgICAgX192aXJ0aW8zMiBmbGFnczsK PiArICAgIF9fdmlydGlvMzIgbGVuOwo+ICsgICAgX192aXJ0aW82NCB0aW1lX3NlYzsKPiArICAg IF9fdmlydGlvMzIgdGltZV9uc2VjOwo+ICsgICAgX192aXJ0aW8zMiByZXNlcnZlZDsKPiArfTsK PiArCj4gK3N0cnVjdCB2aXJ0aW9fcHN0b3JlX2NvbmZpZyB7Cj4gKyAgICBfX3ZpcnRpbzMyIGJ1 ZnNpemU7Cj4gK307Cj4gKwo+ICsjZW5kaWYgLyogX0xJTlVYX1ZJUlRJT19QU1RPUkVfSCAqLwo+ IGRpZmYgLS1naXQgYS9xZGV2LW1vbml0b3IuYyBiL3FkZXYtbW9uaXRvci5jCj4gaW5kZXggZTE5 NjE3Zi4uZTFkZjVhOSAxMDA2NDQKPiAtLS0gYS9xZGV2LW1vbml0b3IuYwo+ICsrKyBiL3FkZXYt bW9uaXRvci5jCj4gQEAgLTczLDYgKzczLDcgQEAgc3RhdGljIGNvbnN0IFFEZXZBbGlhcyBxZGV2 X2FsaWFzX3RhYmxlW10gPSB7Cj4gICAgICB7ICJ2aXJ0aW8tc2VyaWFsLXBjaSIsICJ2aXJ0aW8t c2VyaWFsIiwgUUVNVV9BUkNIX0FMTCAmIH5RRU1VX0FSQ0hfUzM5MFggfSwKPiAgICAgIHsgInZp cnRpby10YWJsZXQtY2N3IiwgInZpcnRpby10YWJsZXQiLCBRRU1VX0FSQ0hfUzM5MFggfSwKPiAg ICAgIHsgInZpcnRpby10YWJsZXQtcGNpIiwgInZpcnRpby10YWJsZXQiLCBRRU1VX0FSQ0hfQUxM ICYgflFFTVVfQVJDSF9TMzkwWCB9LAo+ICsgICAgeyAidmlydGlvLXBzdG9yZS1wY2kiLCAidmly dGlvLXBzdG9yZSIgfSwKPiAgICAgIHsgfQo+ICB9Owo+ICAKPiAtLSAKPiAyLjkuMwpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpWaXJ0dWFsaXphdGlvbiBt YWlsaW5nIGxpc3QKVmlydHVhbGl6YXRpb25AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKaHR0 cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vdmlydHVhbGl6 YXRpb24=