From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9280289BAF for ; Tue, 16 Apr 2019 12:02:24 +0000 (UTC) References: <20190411123648.4123-1-simon.ser@intel.com> <20190411123648.4123-2-simon.ser@intel.com> From: Martin Peres Message-ID: <55db79de-0a06-0169-3abb-c5b34af10fb8@linux.intel.com> Date: Tue, 16 Apr 2019 15:02:17 +0300 MIME-Version: 1.0 In-Reply-To: <20190411123648.4123-2-simon.ser@intel.com> Content-Language: en-GB Subject: Re: [igt-dev] [PATCH i-g-t v4 1/5] tests/kms_chamelium: add dp-audio test List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Simon Ser , igt-dev@lists.freedesktop.org List-ID: T24gMTEvMDQvMjAxOSAxNTozNiwgU2ltb24gU2VyIHdyb3RlOgo+IFRoaXMgbmV3IHRlc3QgZW5z dXJlcyBEaXNwbGF5UG9ydCBhdWRpbyB3b3JrcyBieSB1c2luZyB0aGUgQ2hhbWVsaXVtLgo+IAo+ IEl0IGVuYWJsZXMgdGhlIERpc3BsYXlQb3J0IG91dHB1dCBhbmQgc2VuZHMgYW4gYXVkaW8gc2ln bmFsIGNvbnRhaW5pbmcgYSBzZXQgb2YKPiBmcmVxdWVuY2llcyB3ZSBjaG9vc2UgdG8gYWxsIEhE TUkvRGlzcGxheVBvcnQgYXVkaW8gZGV2aWNlcy4gSXQgc3RhcnRzCj4gcmVjb3JkaW5nIGF1ZGlv IG9uIHRoZSBDaGFtZWxpdW0gZGV2aWNlIGFuZCB1c2VzIHRoZSBzdHJlYW0gc2VydmVyIHRvIHJl dHJpZXZlCj4gY2FwdHVyZWQgYXVkaW8gcGFnZXMuIEl0IHRoZW4gY2hlY2tzIHRoYXQgdGhlIGNh cHR1cmUgYXVkaW8gc2lnbmFsIGNvbnRhaW5zIHRoZQo+IGZyZXF1ZW5jaWVzIHdlIHNlbnQsIGFu ZCBvbmx5IHRob3NlLCBieSBjb21wdXRpbmcgYSBGRlQuCj4gCj4gQSBuZXcgbGlicmFyeSBoYXMg YmVlbiBhZGRlZCB0byBsaWJpZ3QgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgc3RyZWFtIHNlcnZl ci4KPiBJdCBpbXBsZW1lbnRzIGEgc2ltcGxlIGN1c3RvbSBUQ1AgcHJvdG9jb2wuCj4gCj4gSW4g Y2FzZSB0aGUgdGVzdCBmYWlscywgYSBXQVYgZmlsZSB3aXRoIHRoZSBjYXB0dXJlZCBkYXRhIGlz IHNhdmVkIG9uIGRpc2suCj4gCj4gUmlnaHQgbm93IHRoZSB0ZXN0IGhhcyBhIGZldyBsaW1pdGF0 aW9uczoKPiAKPiAtIE9ubHkgdGhlIGZpcnN0IGNoYW5uZWwgaXMgY2hlY2tlZAo+IC0gSUdUIG9u bHkgZ2VuZXJhdGVzIGF1ZGlvIHdpdGggYSBzaW5nbGUgc2FtcGxpbmcgcmF0ZSAoNDggS0h6KQo+ IC0gQXVkaW8gZGF0YSBpcyBub3QgY2FwdHVyZWQgaW4gcmVhbC10aW1lCj4gCj4gVGhlc2UgbGlt aXRhdGlvbnMgd2lsbCBiZSBsaWZ0ZWQgaW4gZnV0dXJlIHBhdGNoZXMuCj4gCj4gUHVsc2VBdWRp byBtdXN0IG5vdCBydW4gZHVyaW5nIHRoZSB0ZXN0cyBzaW5jZSBBTFNBIGlzIHVzZWQgZGlyZWN0 bHkuIFRvIGVuc3VyZQo+IHRoaXMsIGVkaXQgL2V0Yy9wdWxzZS9jbGllbnQuY29uZiBhbmQgYWRk IGBhdXRvc3Bhd249bm9gLiBUaGVuIHJ1bgo+IGBwdWxzZWF1ZGlvIC0ta2lsbGAuCj4gCj4gVGhp cyBjb21taXQgZGVsZXRlcyB0aGUgZXhpc3RpbmcgYXVkaW8gdGVzdHMuIFRoZXkgd2VyZW4ndCBy dW4gYW5kIHJlcXVpcmVkIGFuCj4gZXhvdGljIGNvbmZpZ3VyYXRpb24gKEhETUkgYXVkaW8gc3Bs aXR0ZXIsIGR1bW15IEhETUkgc2luayBhbmQgYSBsaW5lLWluIHBvcnQKPiBvbiB0aGUgRFVUKS4K PiAKPiBUaGlzIHBhdGNoIGRlcGVuZHMgb24gdGhlIGZvbGxvd2luZyBDaGFtZWxlb24gYnVnczoK PiAKPiAtIGh0dHBzOi8vY3JidWcuY29tLzk0ODA2MAo+IC0gaHR0cHM6Ly9jcmJ1Zy5jb20vOTUw ODU3CgpTZWVtcyBsaWtlIHlvdXIgZml4ZXMgbGFuZGVkIGFscmVhZHkhIEdyZWF0IQoKPiAKPiBT aWduZWQtb2ZmLWJ5OiBTaW1vbiBTZXIgPHNpbW9uLnNlckBpbnRlbC5jb20+Cj4gLS0tCj4gIGRv Y3MvYXVkaW8udHh0ICAgICAgICAgICAgIHwgIDQ1IC0tLQo+ICBkb2NzL2NoYW1lbGl1bS50eHQg ICAgICAgICB8ICAzMiArLQo+ICBsaWIvaWd0LmggICAgICAgICAgICAgICAgICB8ICAgMSArCj4g IGxpYi9pZ3RfYWxzYS5jICAgICAgICAgICAgIHwgIDQyICsrLQo+ICBsaWIvaWd0X2Fsc2EuaCAg ICAgICAgICAgICB8ICAgMSArCj4gIGxpYi9pZ3RfYXVkaW8uYyAgICAgICAgICAgIHwgMjg1ICsr KysrKysrKysrKy0tLS0tLQo+ICBsaWIvaWd0X2F1ZGlvLmggICAgICAgICAgICB8ICAxMiArLQo+ ICBsaWIvaWd0X2F1eC5jICAgICAgICAgICAgICB8ICAzMSArKwo+ICBsaWIvaWd0X2F1eC5oICAg ICAgICAgICAgICB8ICAgMSArCj4gIGxpYi9pZ3RfY2hhbWVsaXVtLmMgICAgICAgIHwgMTAxICsr KysrKysKPiAgbGliL2lndF9jaGFtZWxpdW0uaCAgICAgICAgfCAgMTEgKwo+ICBsaWIvaWd0X2No YW1lbGl1bV9zdHJlYW0uYyB8IDU5MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCj4gIGxpYi9pZ3RfY2hhbWVsaXVtX3N0cmVhbS5oIHwgIDUyICsrKysKPiAgbGliL21lc29u LmJ1aWxkICAgICAgICAgICAgfCAgIDUgKy0KPiAgbWVzb24uYnVpbGQgICAgICAgICAgICAgICAg fCAgNTIgKystLQo+ICBtZXNvbl9vcHRpb25zLnR4dCAgICAgICAgICB8ICAgNiAtCj4gIHRlc3Rz L2F1ZGlvLmMgICAgICAgICAgICAgIHwgMTkzIC0tLS0tLS0tLS0tLQo+ICB0ZXN0cy9rbXNfY2hh bWVsaXVtLmMgICAgICB8IDI3NiArKysrKysrKysrKysrKysrLQo+ICB0ZXN0cy9tZXNvbi5idWls ZCAgICAgICAgICB8ICAgOSArLQo+ICAxOSBmaWxlcyBjaGFuZ2VkLCAxMzU4IGluc2VydGlvbnMo KyksIDM4OSBkZWxldGlvbnMoLSkKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRvY3MvYXVkaW8udHh0 Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2NoYW1lbGl1bV9zdHJlYW0uYwo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgbGliL2lndF9jaGFtZWxpdW1fc3RyZWFtLmgKPiAgZGVsZXRlIG1vZGUg MTAwNjQ0IHRlc3RzL2F1ZGlvLmMKPiAKPiBkaWZmIC0tZ2l0IGEvZG9jcy9hdWRpby50eHQgYi9k b2NzL2F1ZGlvLnR4dAo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDE1OGFkNWQx Li4wMDAwMDAwMAo+IC0tLSBhL2RvY3MvYXVkaW8udHh0Cj4gKysrIC9kZXYvbnVsbAo+IEBAIC0x LDQ1ICswLDAgQEAKPiAtQXVkaW8gU3VwcG9ydCBpbiBJR1QKPiAtPT09PT09PT09PT09PT09PT09 PT0KPiAtCj4gLVRoaXMgZG9jdW1lbnQgcHJvdmlkZXMgaW5mb3JtYXRpb24gYW5kIGluc3RydWN0 aW9ucyBhYm91dCBhdWRpbyBzdXBwb3J0IGluIElHVC4KPiAtCj4gLUludHJvZHVjdGlvbgo+IC0t LS0tLS0tLS0tLS0KPiAtCj4gLVRoZSBhdWRpbyB0ZXN0IGlzIGFpbWVkIGF0IHRlc3RpbmcgdGhl IGF1ZGlvIGZlYXR1cmVzIG9mIGRpc3BsYXkgY29ubmVjdG9ycywKPiAtc3VjaCBhcyBIRE1JLgo+ IC0KPiAtVGVzdCBzZXR1cAo+IC0tLS0tLS0tLS0tCj4gLQo+IC1UaGUgc2V0dXAgcmVxdWlyZWQg Zm9yIHRoZSBhdWRpbyB0ZXN0IGNvbnNpc3RzIG9mIHVzaW5nIGFuIEhETUktVkdBIGFkYXB0ZXIg d2l0aAo+IC1hbiBhdWRpby1vdXQgMy41IG1tIGphY2sgdG8gZXh0cmFjdCB0aGUgYXVkaW8gZnJv bSB0aGUgSERNSSBpbnRlcmZhY2UuCj4gLVRoZSBhdWRpby1vdXQgamFjayBpcyBjb25uZWN0ZWQg YmFjayB0byB0aGUgZGV2aWNlLXVuZGVyLXRlc3QncyBsaW5lLWluLgo+IC0KPiAtRGVwZW5kaW5n IG9uIHRoZSBiZWhhdmlvciBvZiB0aGUgYWRhcHRlciwgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBj b25uZWN0IGEKPiAtZ2hvc3QgVkdBIGRvbmdsZSB0byBpdCAoaW4gb3JkZXIgdG8gZW11bGF0ZSBh IGNvbm5lY3RlZCBkaXNwbGF5KSB0byBlbmFibGUgdGhlCj4gLWF1ZGlvIG91dHB1dC4gVGhlcmUg YXJlIGd1aWRlcyBhdmFpbGFibGUgZGV0YWlsaW5nIGhvdyB0byBidWlsZCB0aGVzZS4KPiAtCj4g LVdoZW4gZXhlY3V0ZWQsIHRoZSB0ZXN0IHdpbGwgYXV0b21hdGljYWxseSBzZW5kIHRoZSB0ZXN0 IGF1ZGlvIHNpZ25hbCB0byBhbGwKPiAtQUxTQSBhdWRpbyBIRE1JIG91dHB1dHMgYW5kIHJlY29y ZCBmcm9tIHRoZSBzdGFuZGFyZCBBTFNBIGNhcHR1cmUgZGV2aWNlLgo+IC0KPiAtQ29uZmlndXJh dGlvbgo+IC0tLS0tLS0tLS0tLS0tCj4gLQo+IC1JbiBvcmRlciB0byBkZXBsb3kgdGhlIHRlc3Qs IEFMU0EgY29udHJvbHMgaGF2ZSB0byBiZSBjb25maWd1cmVkIHRvIHNldCB0aGUKPiAtQUxTQSBj YXB0dXJlIHNvdXJjZSB0byBsaW5lLWluLiBPbiBJbnRlbCB4ODYgc3lzdGVtcywgdGhpcyBjYW4g YmUgYWNoaWV2ZWQKPiAtd2l0aCB0aGUgZm9sbG93aW5nIGNhbGxzIHRvIHRoZSBhbWl4ZXIgdXRp bGl0eToKPiAtIyBhbWl4ZXIgc3NldCBMaW5lIDMxIG9uCj4gLSMgYW1peGVyIHNzZXQgIklucHV0 IFNvdXJjZSIgTGluZQo+IC0KPiAtSXQgaXMgdGhlbiB1c2VmdWwgdG8gc3RvcmUgdGhlIEFMU0Eg c3RhdGUgcGVybWFuZW50bHkgd2l0aCB0aGUgYWxzYWN0bCB1dGlsaXR5Ogo+IC0jIGFsc2FjdGwg c3RvcmUKPiAtCj4gLVRoZXNlIHNldHRpbmdzIGNhbiBiZSByZXN0b3JlZCB3aXRoIHRoZSBhbHNh Y3RsIHV0aWxpdHk6Cj4gLSMgYWxzYWN0bCByZXN0b3JlCj4gLQo+IC1JdCBpcyBkZXNpcmFibGUg dG8gZW5zdXJlIHRoYXQgdGhlIGFsc2EtcmVzdG9yZSBhbmQgYWxzYS1zdGF0ZSBzeXN0ZW1kIHNl cnZpY2VzCj4gLWFyZSBlbmFibGVkIHRvIGRvIHRoaXMgam9iIGF1dG9tYXRpY2FsbHksIGVzcGVj aWFsbHkgaW4gdGhlIGNhc2Ugb2YgYW4KPiAtYXV0b21hdGVkIHRlc3Rpbmcgc3lzdGVtOgo+IC0j IHN5c3RlbWN0bCBlbmFibGUgYWxzYS1yZXN0b3JlCj4gLSMgc3lzdGVtY3RsIGVuYWJsZSBhbHNh LXN0YXRlCj4gZGlmZiAtLWdpdCBhL2RvY3MvY2hhbWVsaXVtLnR4dCBiL2RvY3MvY2hhbWVsaXVt LnR4dAo+IGluZGV4IDBjYWJjZGM2Li4zMTZkZDYwNyAxMDA2NDQKPiAtLS0gYS9kb2NzL2NoYW1l bGl1bS50eHQKPiArKysgYi9kb2NzL2NoYW1lbGl1bS50eHQKPiBAQCAtMTM5LDYgKzEzOSwyMyBA QCAkIG1ha2UgcmVtb3RlLWluc3RhbGwgQ0hBTUVMRU9OX0hPU1Q9MTkyLjE2OC43Mi4xCj4gIAo+ ICBUaGUgcHJvY2VzcyByZXF1aXJlcyB0aGUgQ2hhbWVsaXVtIHRvIGJlIGNvbm5lY3RlZCB0byB0 aGUgSW50ZXJuZXQgdG8gc3VjY2VlZC4KPiAgCj4gK0F1ZGlvIENhcHR1cmUKPiArLS0tLS0tLS0t LS0tLQo+ICsKPiArVGhlIENoYW1lbGl1bSBzdXBwb3J0cyBhdWRpbyBjYXB0dXJlLiBJR1QgdGVz dHMgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlCj4gK0NoYW1lbGl1bSBzdHJlYW1pbmcgc2VydmVyIHRv IGRvd25sb2FkIGF1ZGlvIHNhbXBsZXMgZnJvbSB0aGUgQ2hhbWVsaXVtLgo+ICsKPiArSUdUIG5l ZWRzIGRpcmVjdCBhY2Nlc3MgdG8gYXVkaW8gZGV2aWNlcyB0aHJvdWdoIEFMU0EsIHNvIFB1bHNl QXVkaW8gbmVlZHMgdG8KPiArYmUgc3RvcHBlZCAob3RoZXJ3aXNlIGF1ZGlvIHRlc3RzIHdpbGwg YXV0b21hdGljYWxseSBnZXQgc2tpcHBlZCkuIFRvIG1ha2Ugc3VyZQo+ICtQdWxzZUF1ZGlvIGlz bid0IHJ1bm5pbmc6Cj4gKwo+ICstIEVkaXQgL2V0Yy9wdWxzZS9jbGllbnQuY29uZiBhbmQgYWRk IGF1dG9zcGF3bj1ubwo+ICstIFJ1biBgcHVsc2VhdWRpbyAtLWtpbGxgIChpZiBpdCBzdWNjZWVk cywgaXQgbWVhbnMgUHVsc2VBdWRpbyB3YXMgcnVubmluZykKPiArLSBNYWtlIHN1cmUgYSBERSB0 aGF0IGF1dG9tYXRpY2FsbHkgc3Bhd25zIFB1bHNlQXVkaW8gaXNuJ3QgcnVubmluZwo+ICsKPiAr SW4gY2FzZSBhIHRlc3QgZmFpbHMsIHRoZSByYXcgY2FwdHVyZWQgYXVkaW8gZmlsZXMgd2lsbCBi ZSBkdW1wZWQgaW4gYSBXQVYKPiArZmlsZS4KPiArCj4gIENvbnRyaWJ1dGluZyBDaGFuZ2VzIHRv IHRoZSBEYWVtb24KPiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICAKPiBA QCAtMTQ2LDEwICsxNjMsMTEgQEAgQ29udHJpYnV0aW9ucyB0byB0aGUgQ2hhbWVsaXVtIGRhZW1v biwganVzdCBsaWtlIGFueSBjb250cmlidXRpb24gdG8gQ2hyb21pdW1PUywKPiAgYXJlIHN1Ym1p dHRlZCBhbmQgcmV2aWV3ZWQgYXQ6IGh0dHBzOi8vY2hyb21pdW0tcmV2aWV3Lmdvb2dsZXNvdXJj ZS5jb20vCj4gIAo+ICBUaGUgQ2hyb21pdW1PUyBwcm9qZWN0IHByb3ZpZGVzIGFuIGV4dGVuc2l2 ZSBkZXZlbG9wZXIgZ3VpZGU6Cj4gLWh0dHBzOi8vd3d3LmNocm9taXVtLm9yZy9jaHJvbWl1bS1v cy9kZXZlbG9wZXItZ3VpZGUgdGhhdCBhc3N1bWVzIHJ1bm5pbmcgd2l0aGluCj4gLXRoZSBDaHJv bWl1bU9TIGJ1aWxkIHN5c3RlbS4gU2luY2UgdGhpcyBpcyBsaWtlbHkgbm90IHRoZSBjYXNlIGZv ciBjb250cmlidXRpbmcKPiAtdG8gdGhlIENoYW1lbGl1bSBkYWVtb24sIG9ubHkgdGhlIHBhcnQg YWJvdXQgdXBsb2FkaW5nIGNoYW5nZXMgaXMgcmVsZXZhbnQ6Cj4gLWh0dHBzOi8vd3d3LmNocm9t aXVtLm9yZy9jaHJvbWl1bS1vcy9kZXZlbG9wZXItZ3VpZGUjVE9DLVVwbG9hZC15b3VyLWNoYW5n ZXMtYW5kLWdldC1hLWNvZGUtcmV2aWV3Cj4gK2h0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNl LmNvbS9jaHJvbWl1bW9zL2RvY3MvKy9tYXN0ZXIvZGV2ZWxvcGVyX2d1aWRlLm1kCj4gK0l0IHRo YXQgYXNzdW1lcyBydW5uaW5nIHdpdGhpbiB0aGUgQ2hyb21pdW1PUyBidWlsZCBzeXN0ZW0uIFNp bmNlIHRoaXMgaXMKClRoZSB3b3JkICJ0aGF0IiBzZWVtcyBvdXQgb2YgcGxhY2UuCgo+ICtsaWtl bHkgbm90IHRoZSBjYXNlIGZvciBjb250cmlidXRpbmcgdG8gdGhlIENoYW1lbGl1bSBkYWVtb24s IG9ubHkgdGhlIHBhcnQKPiArYWJvdXQgdXBsb2FkaW5nIGNoYW5nZXMgaXMgcmVsZXZhbnQ6Cj4g K2h0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bW9zL2RvY3MvKy9tYXN0 ZXIvZGV2ZWxvcGVyX2d1aWRlLm1kI1VwbG9hZC15b3VyLWNoYW5nZXMtYW5kLWdldC1hLWNvZGUt cmV2aWV3Cj4gIAo+ICBNb3N0IG9mIHRoZSBwcm9jZXNzIGlzIGFib3V0IHVzaW5nIHRoZSBHZXJy aXQgd2ViIGludGVyZmFjZSBmb3Igc3VibWl0dGluZyBhbmQKPiAgaGF2aW5nIHRoZSBjaGFuZ2Ug cmV2aWV3ZWQgYW5kIG5vdCBmb3JnZXR0aW5nIHRoZSBDaGFuZ2UtSWQsIFRFU1Q9IGFuZCBCVUc9 Cj4gQEAgLTE2Miw3ICsxODAsNyBAQCBTdXBwb3J0IGZvciB0aGUgQ2hhbWVsaXVtIHBsYXRmb3Jt IGluIElHVCBpcyBmb3VuZCBpbiB0aGUgZm9sbG93aW5nIHBsYWNlczoKPiAgKiBsaWIvaWd0X2No YW1lbGl1bS5jOiBsaWJyYXJ5IHdpdGggQ2hhbWVsaXVtLXJlbGF0ZWQgaGVscGVycwo+ICAqIHRl c3RzL2ttc19jaGFtZWxpdW0uYzogc3ViLXRlc3RzIHVzaW5nIHRoZSBDaGFtZWxpdW0KPiAgCj4g LUFzIG9mIGxhdGUgQXVndXN0IDIwMTcsIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3Rl ZCBieSBJR1Q6Cj4gK0FzIG9mIGVhcmx5IEFwcmlsIDIwMTksIHRoZSBmb2xsb3dpbmcgZmVhdHVy ZXMgYXJlIHRlc3RlZCBieSBJR1Q6Cj4gICogUGl4ZWwtYnktcGl4ZWwgZnJhbWUgaW50ZWdyaXR5 IHRlc3RzIGZvciBEUCBhbmQgSERNSQo+ICAqIEVycm9yLXRyZW5kLWJhc2VkIGZyYW1lIGludGVn cml0eSB0ZXN0cyBmb3IgVkdBCj4gICogQ1JDLWJhc2VkIGZyYW1lIGludGVncml0eSB0ZXN0cyBm b3IgRFAgYW5kIEhETUkKPiBAQCAtMTczLDYgKzE5MSw3IEBAIEFzIG9mIGxhdGUgQXVndXN0IDIw MTcsIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHRlc3RlZCBieSBJR1Q6Cj4gICAgZWFjaCBp bnRlcmZhY2Ugb3IgY29tYmluZWQKPiAgKiBFRElEIGRpc3BsYXkgaWRlbnRpZmllciBpbnRlZ3Jp dHkgY2hlY2sgZm9yIGFsbCBpbnRlcmZhY2VzCj4gICogRURJRCBkaXNwbGF5IGlkZW50aWZpZXIg Y2hhbmdlIGR1cmluZyBzdXNwZW5kIGZvciBhbGwgaW50ZXJmYWNlcwo+ICsqIEF1ZGlvIEZvdXJp ZXItYmFzZWQgdGVzdHMgZm9yIERQIGF0IDQ4S0h6CgpNYXliZSBhbiBleHRyYSBwYXRjaCB3aWxs IGJlIG5lZWRlZCB0byB1cGRhdGUgdGhlIGxpc3Qgb2YKY2FwYWJpbGl0aWVzLi4uIG9yIHdlIGp1 c3QgaW1wbGVtZW50IHRoZW0gOnAKCj4gIAo+ICBGdXR1cmUgRGV2ZWxvcG1lbnRzCj4gIC0tLS0t LS0tLS0tLS0tLS0tLS0KPiBAQCAtMTgwLDcgKzE5OSw4IEBAIEZ1dHVyZSBEZXZlbG9wbWVudHMK PiAgV2l0aCB0aGUgY3VycmVudCBnZW5lcmF0aW9uIG9mIHRoZSBoYXJkd2FyZSBwbGF0Zm9ybSwg c3VwcG9ydCBmb3IgdGVzdGluZyBhCj4gIG51bWJlciBvZiBhZGRpdGlvbmFsIGRpc3BsYXkgZmVh dHVyZXMgY291bGQgYmUgaW5jbHVkZWQgYXMgZnV0dXJlIGRldmVsb3BtZW50cywKPiAgaW5jbHVk aW5nOgo+IC0qIEF1ZGlvIGNhcHR1cmUgZnJvbSBIRE1JIGFuZCBEUAo+ICsqIEF1ZGlvIGNhcHR1 cmUgZnJvbSBIRE1JLCB3aXRoIG11bHRpcGxlIGNoYW5uZWxzIGFuZCB3aXRoIG90aGVyIHBsYXli YWNrCj4gKyAgc2FtcGxpbmcgcmF0ZXMKCkRvbid0IHJlbW92ZSBEUCBzaW5jZSBpdCBkb2VzIG5v dCB5ZXQgaGF2ZSB0aGUgZmVhdHVyZXMgeW91IGFyZSB0YWxraW5nCmFib3V0LgoKPiAgKiBIaWdo LWJhbmR3aWR0aCBEaWdpdGFsIENvbnRlbnQgUHJvdGVjdGlvbiAoSERDUCkgc3RyZWFtaW5nIHRv IHRoZSBkaXNwbGF5Cj4gICogUmVtb3RlIGNvbnRyb2wgZm9yd2FyZGluZyAoQ0VDKSBzZW50IGZy b20gdGhlIGRpc3BsYXkKPiAgKiBZVVYgY29sb3JzcGFjZSBmb3IgSERNSSwgaW5zdGVhZCBvZiBS R0IKPiBkaWZmIC0tZ2l0IGEvbGliL2lndC5oIGIvbGliL2lndC5oCj4gaW5kZXggNjY1NGE2NTku LjU4NTJkNTU3IDEwMDY0NAo+IC0tLSBhL2xpYi9pZ3QuaAo+ICsrKyBiL2xpYi9pZ3QuaAo+IEBA IC00Myw2ICs0Myw3IEBACj4gICNpbmNsdWRlICJpZ3Rfc3RhdHMuaCIKPiAgI2lmZGVmIEhBVkVf Q0hBTUVMSVVNCj4gICNpbmNsdWRlICJpZ3RfY2hhbWVsaXVtLmgiCj4gKyNpbmNsdWRlICJpZ3Rf Y2hhbWVsaXVtX3N0cmVhbS5oIgo+ICAjZW5kaWYKPiAgI2luY2x1ZGUgImluc3Rkb25lLmgiCj4g ICNpbmNsdWRlICJpbnRlbF9iYXRjaGJ1ZmZlci5oIgo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2Fs c2EuYyBiL2xpYi9pZ3RfYWxzYS5jCj4gaW5kZXggYmI2NjgyY2MuLjQ1NmMwYzg1IDEwMDY0NAo+ IC0tLSBhL2xpYi9pZ3RfYWxzYS5jCj4gKysrIGIvbGliL2lndF9hbHNhLmMKPiBAQCAtMjYsOSAr MjYsMTEgQEAKPiAgCj4gICNpbmNsdWRlICJjb25maWcuaCIKPiAgCj4gKyNpbmNsdWRlIDxsaW1p dHMuaD4KPiAgI2luY2x1ZGUgPGFsc2EvYXNvdW5kbGliLmg+Cj4gIAo+ICAjaW5jbHVkZSAiaWd0 X2Fsc2EuaCIKPiArI2luY2x1ZGUgImlndF9hdXguaCIKPiAgI2luY2x1ZGUgImlndF9jb3JlLmgi Cj4gIAo+ICAjZGVmaW5lIEhBTkRMRVNfTUFYCTgKPiBAQCAtNjEsNiArNjMsMjUgQEAgc3RydWN0 IGFsc2Egewo+ICAJaW50IGlucHV0X3NhbXBsZXNfdHJpZ2dlcjsKPiAgfTsKPiAgCj4gKy8qKgo+ ICsgKiBhbHNhX2hhc19leGNsdXNpdmVfYWNjZXNzOgo+ICsgKiBDaGVjayB3aGV0aGVyIEFMU0Eg aGFzIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gYXVkaW8gZGV2aWNlcy4gRmFpbHMgaWYKPiArICogUHVs c2VBdWRpbyBpcyBydW5uaW5nLgo+ICsgKi8KPiArYm9vbCBhbHNhX2hhc19leGNsdXNpdmVfYWNj ZXNzKHZvaWQpCj4gK3sKPiArCWlmIChpZ3RfaXNfcHJvY2Vzc19ydW5uaW5nKCJwdWxzZWF1ZGlv IikpIHsKPiArCQlpZ3Rfd2FybigiSXQgc2VlbXMgdGhhdCBQdWxzZUF1ZGlvIGlzIHJ1bm5pbmcu IEF1ZGlvIHRlc3RzICIKPiArCQkJICJuZWVkIGRpcmVjdCBhY2Nlc3MgdG8gYXVkaW8gZGV2aWNl cywgc28gUHVsc2VBdWRpbyAiCj4gKwkJCSAibmVlZHMgdG8gYmUgc3RvcHBlZC4gWW91IGNhbiBk byBzbyBieSBydW5uaW5nICIKPiArCQkJICJgcHVsc2VhdWRpbyAtLWtpbGxgLiBBbHNvIG1ha2Ug c3VyZSB0byBhZGQgIgo+ICsJCQkgImF1dG9zcGF3bj1ubyB0byAvZXRjL3B1bHNlL2NsaWVudC5j b25mXG4iKTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4g K30KPiArCj4gIHN0YXRpYyB2b2lkIGFsc2FfZXJyb3JfaGFuZGxlcihjb25zdCBjaGFyICpmaWxl LCBpbnQgbGluZSwgY29uc3QgY2hhciAqZnVuY3Rpb24sCj4gIAkJCSAgICAgICBpbnQgZXJyLCBj b25zdCBjaGFyICpmbXQsIC4uLikKPiAgewo+IEBAIC03OCw2ICs5OSwxMSBAQCBzdHJ1Y3QgYWxz YSAqYWxzYV9pbml0KHZvaWQpCj4gIHsKPiAgCXN0cnVjdCBhbHNhICphbHNhOwo+ICAKPiArCWlm ICghYWxzYV9oYXNfZXhjbHVzaXZlX2FjY2VzcygpKSB7Cj4gKwkJaWd0X3dhcm4oImFsc2EgZG9l c24ndCBoYXZlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gYXVkaW8gZGV2aWNlc1xuIik7CgpIb3cgYWJv dXQgZm9sZGluZyB0aGUgc2Vjb25kIHdhcm4gaW4gYWxzYV9oYXNfZXhjbHVzaXZlX2FjY2Vzcygp PyBJdAp3b3VsZCBpbXByb3ZlIHRoZSBjaGFuY2VzIG9mIGhhdmluZyBhIGNvbnNpc3RlbnQgc3Ry aW5nIHRvIGdyZXAgb24gaW4KY2lidWdsb2cgaW4gY2FzZSBvdGhlciB1c2VycyBkZWNpZGUgdG8g dXNlIHRoZSBmdW5jdGlvbi4KCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwl9Cj4gKwo+ICAJYWxzYSA9 IG1hbGxvYyhzaXplb2Yoc3RydWN0IGFsc2EpKTsKPiAgCW1lbXNldChhbHNhLCAwLCBzaXplb2Yo c3RydWN0IGFsc2EpKTsKPiAgCj4gQEAgLTU1MywxNiArNTc5LDIwIEBAIGludCBhbHNhX3J1bihz dHJ1Y3QgYWxzYSAqYWxzYSwgaW50IGR1cmF0aW9uX21zKQo+ICAJCQkJCWlmIChyZXQgPCAwKSB7 Cj4gIAkJCQkJCXJldCA9IHNuZF9wY21fcmVjb3ZlcihoYW5kbGUsCj4gIAkJCQkJCQkJICAgICAg cmV0LCAwKTsKPiAtCQkJCQkJaWYgKHJldCA8IDApCj4gKwkJCQkJCWlmIChyZXQgPCAwKSB7Cj4g KwkJCQkJCQlpZ3RfZGVidWcoInNuZF9wY21fcmVjb3ZlciBhZnRlciBzbmRfcGNtX3dyaXRlaSBm YWlsZWQiKTsKPiAgCQkJCQkJCWdvdG8gY29tcGxldGU7Cj4gKwkJCQkJCX0KPiAgCQkJCQl9Cj4g IAo+ICAJCQkJCW91dHB1dF9jb3VudHNbaV0gKz0gcmV0Owo+ICAJCQkJfSBlbHNlIGlmIChvdXRw dXRfY291bnRzW2ldIDwgb3V0cHV0X3RyaWdnZXIgJiYKPiAgCQkJCQkgICByZXQgPCAwKSB7Cj4g IAkJCQkJcmV0ID0gc25kX3BjbV9yZWNvdmVyKGhhbmRsZSwgcmV0LCAwKTsKPiAtCQkJCQlpZiAo cmV0IDwgMCkKPiArCQkJCQlpZiAocmV0IDwgMCkgewo+ICsJCQkJCQlpZ3RfZGVidWcoInNuZF9w Y21fcmVjb3ZlciBmYWlsZWQiKTsKPiAgCQkJCQkJZ290byBjb21wbGV0ZTsKPiArCQkJCQl9Cj4g IAkJCQl9Cj4gIAkJCX0KPiAgCj4gQEAgLTYwOSwxNiArNjM5LDIwIEBAIGludCBhbHNhX3J1bihz dHJ1Y3QgYWxzYSAqYWxzYSwgaW50IGR1cmF0aW9uX21zKQo+ICAJCQkJCXJldCA9IDA7Cj4gIAkJ CQl9IGVsc2UgaWYgKHJldCA8IDApIHsKPiAgCQkJCQlyZXQgPSBzbmRfcGNtX3JlY292ZXIoaGFu ZGxlLCByZXQsIDApOwo+IC0JCQkJCWlmIChyZXQgPCAwKQo+ICsJCQkJCWlmIChyZXQgPCAwKSB7 Cj4gKwkJCQkJCWlndF9kZWJ1Zygic25kX3BjbV9yZWNvdmVyIGFmdGVyIHNuZF9wY21fcmVhZGkg ZmFpbGVkIik7Cj4gIAkJCQkJCWdvdG8gY29tcGxldGU7Cj4gKwkJCQkJfQo+ICAJCQkJfQo+ICAK PiAgCQkJCWlucHV0X2NvdW50ICs9IHJldDsKPiAgCQkJCWlucHV0X3RvdGFsICs9IHJldDsKPiAg CQkJfSBlbHNlIGlmIChpbnB1dF9jb3VudCA8IGlucHV0X3RyaWdnZXIgJiYgcmV0IDwgMCkgewo+ ICAJCQkJcmV0ID0gc25kX3BjbV9yZWNvdmVyKGhhbmRsZSwgcmV0LCAwKTsKPiAtCQkJCWlmIChy ZXQgPCAwKQo+ICsJCQkJaWYgKHJldCA8IDApIHsKPiArCQkJCQlpZ3RfZGVidWcoInNuZF9wY21f cmVjb3ZlciBmYWlsZWQiKTsKPiAgCQkJCQlnb3RvIGNvbXBsZXRlOwo+ICsJCQkJfQo+ICAJCQl9 Cj4gIAkJfQo+ICAJfSB3aGlsZSAoIXJlYWNoZWQpOwo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2Fs c2EuaCBiL2xpYi9pZ3RfYWxzYS5oCj4gaW5kZXggNTA3OTUxMzAuLjVjODA0YjQ2IDEwMDY0NAo+ IC0tLSBhL2xpYi9pZ3RfYWxzYS5oCj4gKysrIGIvbGliL2lndF9hbHNhLmgKPiBAQCAtMzMsNiAr MzMsNyBAQAo+ICAKPiAgc3RydWN0IGFsc2E7Cj4gIAo+ICtib29sIGFsc2FfaGFzX2V4Y2x1c2l2 ZV9hY2Nlc3Modm9pZCk7Cj4gIHN0cnVjdCBhbHNhICphbHNhX2luaXQodm9pZCk7Cj4gIGludCBh bHNhX29wZW5fb3V0cHV0KHN0cnVjdCBhbHNhICphbHNhLCBjb25zdCBjaGFyICpkZXZpY2VfbmFt ZSk7Cj4gIGludCBhbHNhX29wZW5faW5wdXQoc3RydWN0IGFsc2EgKmFsc2EsIGNvbnN0IGNoYXIg KmRldmljZV9uYW1lKTsKPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9hdWRpby5jIGIvbGliL2lndF9h dWRpby5jCj4gaW5kZXggYTA1OTJkNTMuLjRjYzliZGYwIDEwMDY0NAo+IC0tLSBhL2xpYi9pZ3Rf YXVkaW8uYwo+ICsrKyBiL2xpYi9pZ3RfYXVkaW8uYwo+IEBAIC0yNiw4ICsyNiwxMSBAQAo+ICAK PiAgI2luY2x1ZGUgImNvbmZpZy5oIgo+ICAKPiAtI2luY2x1ZGUgPG1hdGguaD4KPiArI2luY2x1 ZGUgPGVycm5vLmg+Cj4gKyNpbmNsdWRlIDxmY250bC5oPgo+ICAjaW5jbHVkZSA8Z3NsL2dzbF9m ZnRfcmVhbC5oPgo+ICsjaW5jbHVkZSA8bWF0aC5oPgo+ICsjaW5jbHVkZSA8dW5pc3RkLmg+Cj4g IAo+ICAjaW5jbHVkZSAiaWd0X2F1ZGlvLmgiCj4gICNpbmNsdWRlICJpZ3RfY29yZS5oIgo+IEBA IC0xMjgsNyArMTMxLDcgQEAgaW50IGF1ZGlvX3NpZ25hbF9hZGRfZnJlcXVlbmN5KHN0cnVjdCBh dWRpb19zaWduYWwgKnNpZ25hbCwgaW50IGZyZXF1ZW5jeSkKPiAgICovCj4gIHZvaWQgYXVkaW9f c2lnbmFsX3N5bnRoZXNpemUoc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsKQo+ICB7Cj4gLQlz aG9ydCAqcGVyaW9kOwo+ICsJaW50MTZfdCAqcGVyaW9kOwo+ICAJZG91YmxlIHZhbHVlOwo+ICAJ aW50IGZyYW1lczsKPiAgCWludCBmcmVxOwo+IEBAIC0xNDUsOSArMTQ4LDkgQEAgdm9pZCBhdWRp b19zaWduYWxfc3ludGhlc2l6ZShzdHJ1Y3QgYXVkaW9fc2lnbmFsICpzaWduYWwpCj4gIAo+ICAJ CWZvciAoaiA9IDA7IGogPCBmcmFtZXM7IGorKykgewo+ICAJCQl2YWx1ZSA9IDIuMCAqIE1fUEkg KiBmcmVxIC8gc2lnbmFsLT5zYW1wbGluZ19yYXRlICogajsKPiAtCQkJdmFsdWUgPSBzaW4odmFs dWUpICogU0hSVF9NQVggLyBzaWduYWwtPmZyZXFzX2NvdW50Owo+ICsJCQl2YWx1ZSA9IHNpbih2 YWx1ZSkgKiBJTlQxNl9NQVggLyBzaWduYWwtPmZyZXFzX2NvdW50Owo+ICAKPiAtCQkJcGVyaW9k W2pdID0gKHNob3J0KSB2YWx1ZTsKPiArCQkJcGVyaW9kW2pdID0gKGludDE2X3QpIHZhbHVlOwoK U2VlbXMgbGlrZSBhbGwgdGhlc2UgYWxzYSBjaGFuZ2VzIHNob3VsZCBiZSBpbiB0aGVpciBvd24g cGF0Y2hlcyBzbyBhcwp5b3UgY291bGQgZXhwbGFpbiB3aHkgdGhlc2UgY2hhbmdlcyBhcmUgbmVl ZGVkLgoKQXJlIHlvdSBhZnJhaWQgdGhhdCBzb21lIHBsYXRmb3JtcyB3b3VsZCBub3QgaGF2ZSBT SE9SVCA9PSBJTlQxNj8KCklmIHRoZXNlIGNoYW5nZXMgd291bGQgaGF2ZSByZXF1aXJlZCBjaGFu Z2VzIGluIGNvZGUgdGhhdCB5b3Ugd291bGQKY2hhbmdlIGFueXdheSByaWdodCBhZnRlciwgdGhl biBhdCBsZWFzdCBleHBsYWluIHRoZSBjaGFuZ2VzIGluIHRoZQpjb21taXQgbG9nIDopCgo+ICAJ CX0KPiAgCj4gIAkJc2lnbmFsLT5mcmVxc1tpXS5wZXJpb2QgPSBwZXJpb2Q7Cj4gQEAgLTE4Niwx NyArMTg5LDE2IEBAIHZvaWQgYXVkaW9fc2lnbmFsX2NsZWFuKHN0cnVjdCBhdWRpb19zaWduYWwg KnNpZ25hbCkKPiAgICogc2lnbmFsIGRhdGEgKGluIGludGVybGVhdmVkIFMxNl9MRSBmb3JtYXQp LCBhdCB0aGUgcmVxdWVzdGVkIHNhbXBsaW5nIHJhdGUKPiAgICogYW5kIG51bWJlciBvZiBjaGFu bmVscy4KPiAgICovCj4gLXZvaWQgYXVkaW9fc2lnbmFsX2ZpbGwoc3RydWN0IGF1ZGlvX3NpZ25h bCAqc2lnbmFsLCBzaG9ydCAqYnVmZmVyLCBpbnQgZnJhbWVzKQo+ICt2b2lkIGF1ZGlvX3NpZ25h bF9maWxsKHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbCwgaW50MTZfdCAqYnVmZmVyLCBpbnQg ZnJhbWVzKQo+ICB7Cj4gLQlzaG9ydCAqZGVzdGluYXRpb247Cj4gLQlzaG9ydCAqc291cmNlOwo+ ICsJaW50MTZfdCAqZGVzdGluYXRpb24sICpzb3VyY2U7Cj4gIAlpbnQgdG90YWw7Cj4gIAlpbnQg ZnJlcV9mcmFtZXM7Cj4gIAlpbnQgZnJlcV9vZmZzZXQ7Cj4gIAlpbnQgY291bnQ7Cj4gIAlpbnQg aSwgaiwgazsKPiAgCj4gLQltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2Yoc2hvcnQpICogc2lnbmFs LT5jaGFubmVscyAqIGZyYW1lcyk7Cj4gKwltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoaW50MTZf dCkgKiBzaWduYWwtPmNoYW5uZWxzICogZnJhbWVzKTsKPiAgCj4gIAlmb3IgKGkgPSAwOyBpIDwg c2lnbmFsLT5mcmVxc19jb3VudDsgaSsrKSB7Cj4gIAkJdG90YWwgPSAwOwo+IEBAIC0yMjksOTcg KzIzMSwyMTQgQEAgdm9pZCBhdWRpb19zaWduYWxfZmlsbChzdHJ1Y3QgYXVkaW9fc2lnbmFsICpz aWduYWwsIHNob3J0ICpidWZmZXIsIGludCBmcmFtZXMpCj4gIH0KPiAgCj4gIC8qKgo+IC0gKiBh dWRpb19zaWduYWxfZGV0ZWN0Ogo+IC0gKiBAc2lnbmFsOiBUaGUgdGFyZ2V0IHNpZ25hbCBzdHJ1 Y3R1cmUKPiAtICogQGNoYW5uZWxzOiBUaGUgaW5wdXQgZGF0YSdzIG51bWJlciBvZiBjaGFubmVs cwo+IC0gKiBAc2FtcGxpbmdfcmF0ZTogVGhlIGlucHV0IGRhdGEncyBzYW1wbGluZyByYXRlCj4g LSAqIEBidWZmZXI6IFRoZSBpbnB1dCBkYXRhJ3MgYnVmZmVyCj4gLSAqIEBmcmFtZXM6IFRoZSBp bnB1dCBkYXRhJ3MgbnVtYmVyIG9mIGZyYW1lcwo+IC0gKgo+IC0gKiBEZXRlY3QgdGhhdCB0aGUg ZnJlcXVlbmNpZXMgc3BlY2lmaWVkIGluIEBzaWduYWwsIGFuZCBvbmx5IHRob3NlLCBhcmUKPiAt ICogcHJlc2VudCBpbiB0aGUgaW5wdXQgZGF0YS4gVGhlIGlucHV0IGRhdGEncyBmb3JtYXQgaXMg cmVxdWlyZWQgdG8gYmUgUzE2X0xFLgo+ICsgKiBDaGVja3MgdGhhdCBmcmVxdWVuY2llcyBzcGVj aWZpZWQgaW4gc2lnbmFsLCBhbmQgb25seSB0aG9zZSwgYXJlIGluY2x1ZGVkCj4gKyAqIGluIHRo ZSBpbnB1dCBkYXRhLgo+ICAgKgo+IC0gKiBSZXR1cm5zOiBBIGJvb2xlYW4gaW5kaWNhdGluZyB3 aGV0aGVyIHRoZSBkZXRlY3Rpb24gd2FzIHN1Y2Nlc3NmdWwKPiArICogc2FtcGxpbmdfcmF0ZSBp cyBnaXZlbiBpbiBIei4gZGF0YV9sZW4gaXMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBkYXRh Lgo+ICAgKi8KPiAtYm9vbCBhdWRpb19zaWduYWxfZGV0ZWN0KHN0cnVjdCBhdWRpb19zaWduYWwg KnNpZ25hbCwgaW50IGNoYW5uZWxzLAo+IC0JCQkgaW50IHNhbXBsaW5nX3JhdGUsIHNob3J0ICpi dWZmZXIsIGludCBmcmFtZXMpCj4gK2Jvb2wgYXVkaW9fc2lnbmFsX2RldGVjdChzdHJ1Y3QgYXVk aW9fc2lnbmFsICpzaWduYWwsIGludCBzYW1wbGluZ19yYXRlLAo+ICsJCQkgZG91YmxlICpkYXRh LCBzaXplX3QgZGF0YV9sZW4pCj4gIHsKPiAtCWRvdWJsZSBkYXRhW2ZyYW1lc107Cj4gLQlpbnQg YW1wbGl0dWRlW2ZyYW1lcyAvIDJdOwo+ICsJc2l6ZV90IGFtcGxpdHVkZV9sZW4gPSBkYXRhX2xl biAvIDIgKyAxOwo+ICsJZG91YmxlIGFtcGxpdHVkZVthbXBsaXR1ZGVfbGVuXTsKCmJpbl9wb3dl cj8KCj4gIAlib29sIGRldGVjdGVkW3NpZ25hbC0+ZnJlcXNfY291bnRdOwo+IC0JaW50IHRocmVz aG9sZDsKPiAtCWJvb2wgYWJvdmU7Cj4gLQlpbnQgZXJyb3I7Cj4gLQlpbnQgZnJlcSA9IDA7Cj4g LQlpbnQgbWF4Owo+IC0JaW50IGMsIGksIGo7Cj4gLQo+IC0JLyogQWxsb3dlZCBlcnJvciBpbiBI eiBkdWUgdG8gRkZUIHN0ZXAuICovCj4gLQllcnJvciA9IHNhbXBsaW5nX3JhdGUgLyBmcmFtZXM7 Cj4gKwlpbnQgcmV0LCBlcHNpbG9uLCBmcmVxLCBtYXhfZnJlcTsKPiArCWRvdWJsZSBtYXgsIHRo cmVzaG9sZDsKPiArCXNpemVfdCBpLCBqOwo+ICsJYm9vbCBhYm92ZSwgc3VjY2VzczsKPiArCj4g KwkvKiBBbGxvd2VkIGVycm9yIGluIEh6IGR1ZSB0byBGRlQgc3RlcCAqLwo+ICsJZXBzaWxvbiA9 IHNhbXBsaW5nX3JhdGUgLyBkYXRhX2xlbjsKCmZyZXFfYWNjdXJhY3kgd291bGQgYmUgYSBuaWNl ciBuYW1lLgoKPiArCWlndF9kZWJ1ZygiYWxsb3dlZCBmcmVxLiBlcnJvcjogJWQgSHpcbiIsIGVw c2lsb24pOwo+ICsKPiArCXJldCA9IGdzbF9mZnRfcmVhbF9yYWRpeDJfdHJhbnNmb3JtKGRhdGEs IDEsIGRhdGFfbGVuKTsKPiArCWlndF9hc3NlcnQocmV0ID09IDApOwo+ICsKPiArCS8qIEZvciBp IDwgZGF0YV9sZW4gLyAyLCB0aGUgcmVhbCBwYXJ0IG9mIHRoZSBpLXRoIHRlcm0gaXMgc3RvcmVk IGF0Cj4gKwkgKiBkYXRhW2ldIGFuZCBpdHMgaW1hZ2luYXJ5IHBhcnQgaXMgc3RvcmVkIGF0IGRh dGFbZGF0YV9sZW4gLSBpXS4KPiArCSAqIGkgPSAwIGFuZCBpID0gZGF0YV9sZW4gLyAyIGFyZSBz cGVjaWFsIGNhc2VzLCB0aGV5IGFyZSBwdXJlbHkgcmVhbAo+ICsJICogc28gdGhlaXIgaW1hZ2lu YXJ5IHBhcnQgaXNuJ3Qgc3RvcmVkLgo+ICsJICoKPiArCSAqIFRoZSBhbXBsaXR1ZGUgaXMgZW5j b2RlZCBhcyB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb21wbGV4IG51bWJlciBhbmQKPiArCSAqIHRo ZSBwaGFzZSBpcyBlbmNvZGVkIGFzIGl0cyBhbmdsZS4KPiArCSAqLwoKVGhhbmtzIGZvciBkb2N1 bWVudGluZyB0aGUgaWRpb3N5bmNyYXNpZXMgb2YgR1NMIQoKLyogY29tcHV0ZSB0aGUgcG93ZXIg cmVjZWl2ZWQgYXQgZXZlcnkgYmluIG9mIHRoZSBGRlQsIGFuZCByZWNvcmQgdGhlCiAqIG1heGlt dW0gcG93ZXIgcmVjZWl2ZWQgYXMgYSB3YXkgdG8gbm9ybWFsaXplIGFsbCB0aGUgb3RoZXJzLgog Ki8KCj4gKwltYXggPSAwOwo+ICsJYW1wbGl0dWRlWzBdID0gZGF0YVswXTsKPiArCWZvciAoaSA9 IDE7IGkgPCBhbXBsaXR1ZGVfbGVuIC0gMTsgaSsrKSB7Cj4gKwkJYW1wbGl0dWRlW2ldID0gaHlw b3QoZGF0YVtpXSwgZGF0YVtkYXRhX2xlbiAtIGldKTsKPiArCQlpZiAoYW1wbGl0dWRlW2ldID4g bWF4KQo+ICsJCQltYXggPSBhbXBsaXR1ZGVbaV07Cj4gKwl9Cj4gKwlhbXBsaXR1ZGVbYW1wbGl0 dWRlX2xlbiAtIDFdID0gZGF0YVtkYXRhX2xlbiAvIDJdOwoKV2hhdCdzIHRoZSBjb2Rpbmcgc3R5 bGUgb2YgSUdUIHdydCBzcGFjZXMgdnMgdGFicz8KCj4gIAo+IC0JZm9yIChjID0gMDsgYyA8IGNo YW5uZWxzOyBjKyspIHsKPiAtCQlmb3IgKGkgPSAwOyBpIDwgZnJhbWVzOyBpKyspCj4gLQkJCWRh dGFbaV0gPSAoZG91YmxlKSBidWZmZXJbaSAqIGNoYW5uZWxzICsgY107Cj4gKwlmb3IgKGkgPSAw OyBpIDwgc2lnbmFsLT5mcmVxc19jb3VudDsgaSsrKQo+ICsJCWRldGVjdGVkW2ldID0gZmFsc2U7 CgpUaGlzIGNvdWxkIGhhdmUgYmVlbiBhIGJpdGZpZWxkLCBidXQgbWVoIQoKPiAgCj4gLQkJZ3Ns X2ZmdF9yZWFsX3JhZGl4Ml90cmFuc2Zvcm0oZGF0YSwgMSwgZnJhbWVzKTsKPiArCS8qIFdlIHdh bnQgdG8gZGV0ZWN0IHBlYWtzIGFib3ZlIGEgZ2l2ZW4gdGhyZXNob2xkLiAqLwoKLyogRG8gYSBs aW5lYXIgc2VhcmNoIHRocm91Z2ggdGhlIEZGVCBiaW5zJyBwb3dlciB0byBmaW5kIHRoZSB0aGUg bG9jYWwKICogbWF4aW11bXMgdGhhdCBleGNlZWQgaGFsZiBvZiB0aGUgYWJzb2x1dGUgbWF4aW11 bSB0aGF0IHdlIHByZXZpb3VzbHkKICogY2FsY3VsYXRlZC4KICoKICogU2luY2UgdGhlIGZyZXF1 ZW5jaWVzIG1pZ2h0IG5vdCBiZSBwZXJmZWN0bHkgYWxpZ25lZCB3aXRoIHRoZSBiaW5zIG9mCiAq IHRoZSBGRlQsIHdlIG5lZWQgdG8gZmluZCB0aGUgbG9jYWwgbWF4aW11bSBhY3Jvc3Mgc29tZSBj b25zZWN1dGl2ZQogKiBiaW5zLiBPbmNlIHRoZSBwb3dlciByZXR1cm5zIHVuZGVyIHRoZSBwb3dl ciB0aHJlc2hvbGQsIHdlIGNvbXBhcmUKICogdGhlIGZyZXF1ZW5jeSBvZiB0aGUgYmluIHRoYXQg cmVjZWl2ZWQgdGhlIG1heGltdW0gcG93ZXIgdG8gdGhlCiAqIGV4cGVjdGVkIGZyZXF1ZW5jaWVz LiBJZiBmb3VuZCwgd2UgbWFyayB0aGlzIGZyZXF1ZW5jeSBhcyBzdWNoLAogKiBvdGhlcndpc2Ug d2Ugd2FybiB0aGF0IGFuIHVuZXhwZWN0ZWQgZnJlcXVlbmN5IHdhcyBmb3VuZC4KICovCgo+ICsJ dGhyZXNob2xkID0gbWF4IC8gMjsKPiArCXN1Y2Nlc3MgPSB0cnVlOwo+ICsJYWJvdmUgPSBmYWxz ZTsKPiArCW1heCA9IDA7Cj4gKwltYXhfZnJlcSA9IC0xOwoKbG9jYWxfbWF4ID0gMDsKbG9jYWxf bWF4X2ZyZXEgPSAtMTsKCj4gKwlmb3IgKGkgPSAwOyBpIDwgYW1wbGl0dWRlX2xlbjsgaSsrKSB7 Cj4gKwkJZnJlcSA9IHNhbXBsaW5nX3JhdGUgKiBpIC8gZGF0YV9sZW47Cj4gIAo+IC0JCW1heCA9 IDA7Cj4gKwkJaWYgKGFtcGxpdHVkZVtpXSA+IHRocmVzaG9sZCkKPiArCQkJYWJvdmUgPSB0cnVl Owo+ICAKPiAtCQlmb3IgKGkgPSAwOyBpIDwgZnJhbWVzIC8gMjsgaSsrKSB7Cj4gLQkJCWFtcGxp dHVkZVtpXSA9IGh5cG90KGRhdGFbaV0sIGRhdGFbZnJhbWVzIC0gaV0pOwo+IC0JCQlpZiAoYW1w bGl0dWRlW2ldID4gbWF4KQo+IC0JCQkJbWF4ID0gYW1wbGl0dWRlW2ldOwo+ICsJCWlmICghYWJv dmUpIHsKPiArCQkJY29udGludWU7Cj4gIAkJfQo+ICAKPiAtCQlmb3IgKGkgPSAwOyBpIDwgc2ln bmFsLT5mcmVxc19jb3VudDsgaSsrKQo+IC0JCQlkZXRlY3RlZFtpXSA9IGZhbHNlOwo+IC0KPiAt CQl0aHJlc2hvbGQgPSBtYXggLyAyOwo+IC0JCWFib3ZlID0gZmFsc2U7Cj4gLQkJbWF4ID0gMDsK PiAtCj4gLQkJZm9yIChpID0gMDsgaSA8IGZyYW1lcyAvIDI7IGkrKykgewo+IC0JCQlpZiAoYW1w bGl0dWRlW2ldID4gdGhyZXNob2xkKQo+IC0JCQkJYWJvdmUgPSB0cnVlOwo+IC0KPiAtCQkJaWYg KGFib3ZlKSB7Cj4gLQkJCQlpZiAoYW1wbGl0dWRlW2ldIDwgdGhyZXNob2xkKSB7Cj4gLQkJCQkJ YWJvdmUgPSBmYWxzZTsKPiAtCQkJCQltYXggPSAwOwo+IC0KPiAtCQkJCQlmb3IgKGogPSAwOyBq IDwgc2lnbmFsLT5mcmVxc19jb3VudDsgaisrKSB7Cj4gLQkJCQkJCWlmIChzaWduYWwtPmZyZXFz W2pdLmZyZXEgPgo+IC0JCQkJCQkgICAgZnJlcSAtIGVycm9yICYmCj4gLQkJCQkJCSAgICBzaWdu YWwtPmZyZXFzW2pdLmZyZXEgPAo+IC0JCQkJCQkgICAgZnJlcSArIGVycm9yKSB7Cj4gLQkJCQkJ CQlkZXRlY3RlZFtqXSA9IHRydWU7Cj4gLQkJCQkJCQlicmVhazsKPiAtCQkJCQkJfQo+IC0JCQkJ CX0KPiAtCj4gLQkJCQkJLyogRGV0ZWN0ZWQgZnJlcXVlbmN5IHdhcyBub3QgZ2VuZXJhdGVkLiAq Lwo+IC0JCQkJCWlmIChqID09IHNpZ25hbC0+ZnJlcXNfY291bnQpIHsKPiAtCQkJCQkJaWd0X2Rl YnVnKCJEZXRlY3RlZCBhZGRpdGlvbmFsIGZyZXF1ZW5jeTogJWRcbiIsCj4gLQkJCQkJCQkgIGZy ZXEpOwo+IC0JCQkJCQlyZXR1cm4gZmFsc2U7Cj4gLQkJCQkJfQo+ICsJCS8qIElmIHdlIHdlcmUg YWJvdmUgdGhlIHRocmVzaG9sZCBhbmQgd2UncmUgbm90IGFueW1vcmUsIGl0J3MKPiArCQkgKiB0 aW1lIHRvIGRlY2lkZSB3aGV0aGVyIHRoZSBwZWFrIGZyZXF1ZW5jeSBpcyBjb3JyZWN0IG9yCj4g KwkJICogaW52YWxpZC4gKi8KPiArCQlpZiAoYW1wbGl0dWRlW2ldIDwgdGhyZXNob2xkKSB7Cj4g KwkJCWZvciAoaiA9IDA7IGogPCBzaWduYWwtPmZyZXFzX2NvdW50OyBqKyspIHsKPiArCQkJCWlm IChzaWduYWwtPmZyZXFzW2pdLmZyZXEgPgo+ICsJCQkJICAgIG1heF9mcmVxIC0gZXBzaWxvbiAm Jgo+ICsJCQkJICAgIHNpZ25hbC0+ZnJlcXNbal0uZnJlcSA8Cj4gKwkJCQkgICAgbWF4X2ZyZXEg KyBlcHNpbG9uKSB7Cj4gKwkJCQkJZGV0ZWN0ZWRbal0gPSB0cnVlOwo+ICsJCQkJCWlndF9kZWJ1 ZygiRnJlcXVlbmN5ICVkIGRldGVjdGVkXG4iLAo+ICsJCQkJCQkgIG1heF9mcmVxKTsKPiArCQkJ CQlicmVhazsKPiAgCQkJCX0KPiArCQkJfQo+ICAKPiAtCQkJCWlmIChhbXBsaXR1ZGVbaV0gPiBt YXgpIHsKPiAtCQkJCQltYXggPSBhbXBsaXR1ZGVbaV07Cj4gLQkJCQkJZnJlcSA9IHNhbXBsaW5n X3JhdGUgKiBpIC8gZnJhbWVzOwo+IC0JCQkJfQo+ICsJCQkvKiBXZSBoYXZlbid0IGdlbmVyYXRl ZCB0aGlzIGZyZXF1ZW5jeSwgYnV0IHdlIGRldGVjdGVkCj4gKwkJCSAqIGl0LiAqLwo+ICsJCQlp ZiAoaiA9PSBzaWduYWwtPmZyZXFzX2NvdW50KSB7Cj4gKwkJCQlpZ3RfZGVidWcoIkRldGVjdGVk IGFkZGl0aW9uYWwgZnJlcXVlbmN5OiAlZFxuIiwKPiArCQkJCQkgIG1heF9mcmVxKTsKPiArCQkJ CXN1Y2Nlc3MgPSBmYWxzZTsKPiAgCQkJfQo+ICsKPiArCQkJYWJvdmUgPSBmYWxzZTsKPiArCQkJ bWF4ID0gMDsKPiArCQkJbWF4X2ZyZXEgPSAtMTsKPiAgCQl9Cj4gIAo+IC0JCWZvciAoaSA9IDA7 IGkgPCBzaWduYWwtPmZyZXFzX2NvdW50OyBpKyspIHsKPiAtCQkJaWYgKCFkZXRlY3RlZFtpXSkg ewo+IC0JCQkJaWd0X2RlYnVnKCJNaXNzaW5nIGZyZXF1ZW5jeTogJWRcbiIsCj4gLQkJCQkJICBz aWduYWwtPmZyZXFzW2ldLmZyZXEpOwo+IC0JCQkJcmV0dXJuIGZhbHNlOwo+IC0JCQl9Cj4gKwkJ aWYgKGFtcGxpdHVkZVtpXSA+IG1heCkgewo+ICsJCQltYXggPSBhbXBsaXR1ZGVbaV07Cj4gKwkJ CW1heF9mcmVxID0gZnJlcTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJLyogQ2hlY2sgdGhhdCBhbGwg ZnJlcXVlbmNpZXMgd2UgZ2VuZXJhdGVkIGhhdmUgYmVlbiBkZXRlY3RlZC4gKi8KPiArCWZvciAo aSA9IDA7IGkgPCBzaWduYWwtPmZyZXFzX2NvdW50OyBpKyspIHsKPiArCQlpZiAoIWRldGVjdGVk W2ldKSB7Cj4gKwkJCWlndF9kZWJ1ZygiTWlzc2luZyBmcmVxdWVuY3k6ICVkXG4iLAo+ICsJCQkJ ICBzaWduYWwtPmZyZXFzW2ldLmZyZXEpOwo+ICsJCQlzdWNjZXNzID0gZmFsc2U7Cj4gIAkJfQo+ ICAJfQo+ICAKPiAtCXJldHVybiB0cnVlOwo+ICsJcmV0dXJuIHN1Y2Nlc3M7Cj4gK30KPiArCj4g Ky8qKgo+ICsgKiBFeHRyYWN0cyBhIHNpbmdsZSBjaGFubmVsIGZyb20gYSBtdWx0aS1jaGFubmVs IFMzMl9MRSBpbnB1dCBidWZmZXIuCj4gKyAqLwo+ICtzaXplX3QgYXVkaW9fZXh0cmFjdF9jaGFu bmVsX3MzMl9sZShkb3VibGUgKmRzdCwgc2l6ZV90IGRzdF9jYXAsCj4gKwkJCQkgICAgaW50MzJf dCAqc3JjLCBzaXplX3Qgc3JjX2xlbiwKPiArCQkJCSAgICBpbnQgbl9jaGFubmVscywgaW50IGNo YW5uZWwpCj4gK3sKPiArCXNpemVfdCBkc3RfbGVuLCBpOwo+ICsKPiArCWlndF9hc3NlcnQoY2hh bm5lbCA8IG5fY2hhbm5lbHMpOwo+ICsJaWd0X2Fzc2VydChzcmNfbGVuICUgbl9jaGFubmVscyA9 PSAwKTsKPiArCWRzdF9sZW4gPSBzcmNfbGVuIC8gbl9jaGFubmVsczsKPiArCWlndF9hc3NlcnQo ZHN0X2xlbiA8PSBkc3RfY2FwKTsKPiArCWZvciAoaSA9IDA7IGkgPCBkc3RfbGVuOyBpKyspCj4g KwkJZHN0W2ldID0gKGRvdWJsZSkgc3JjW2kgKiBuX2NoYW5uZWxzICsgY2hhbm5lbF07Cj4gKwo+ ICsJcmV0dXJuIGRzdF9sZW47Cj4gK30KPiArCj4gKyNkZWZpbmUgUklGRl9UQUcgIlJJRkYiCj4g KyNkZWZpbmUgV0FWRV9UQUcgIldBVkUiCj4gKyNkZWZpbmUgRk1UX1RBRyAiZm10ICIKPiArI2Rl ZmluZSBEQVRBX1RBRyAiZGF0YSIKPiArCj4gK3N0YXRpYyB2b2lkCj4gK2FwcGVuZF90b19idWZm ZXIoY2hhciAqZHN0LCBzaXplX3QgKmksIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IHNyY19zaXpl KQo+ICt7Cj4gKwltZW1jcHkoJmRzdFsqaV0sIHNyYywgc3JjX3NpemUpOwo+ICsJKmkgKz0gc3Jj X3NpemU7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBDcmVhdGVzIGEgbmV3IFdBViBmaWxlLiBzYW1w bGVfcmF0ZSBpcyBpbiBIei4gSWYgcGF0aCBpcyBub3QgTlVMTCwgaXQgd2lsbAo+ICsgKiBiZSBz ZXQgdG8gdGhlIG5ldyBmaWxlIHBhdGggKHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZy ZWUtaW5nIGl0KS4KPiArICoKPiArICogQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0aGUg Y2FsbGVyIGlzIGV4cGVjdGVkIHRvIHdyaXRlIFMzMl9MRSBQQ00gZGF0YQo+ICsgKiB0byB0aGUg cmV0dXJuZWQgZmlsZSBkZXNjcmlwdG9yLgo+ICsgKgo+ICsgKiBTZWUgaHR0cDovL3d3dy1tbXNw LmVjZS5tY2dpbGwuY2EvRG9jdW1lbnRzL0F1ZGlvRm9ybWF0cy9XQVZFL1dBVkUuaHRtbCBmb3IK PiArICogYSBXQVYgZmlsZSBmb3JtYXQgc3BlY2lmaWNhdGlvbi4KPiArICovCj4gK2ludCBhdWRp b19jcmVhdGVfd2F2X2ZpbGVfczMyX2xlKGNvbnN0IGNoYXIgKnF1YWxpZmllciwgdWludDMyX3Qg c2FtcGxlX3JhdGUsCj4gKwkJCQkgdWludDE2X3QgY2hhbm5lbHMsIGNoYXIgKipwYXRoKQoKV2hh dCBpcyBxdWFsaWZpZXI/CgpNYXliZSB3ZSBjYW4gcmVuYW1lIHRoYXQgdG8gY2hhbm5lbF9jb3Vu dD8KCj4gK3sKPiArCWNoYXIgX3BhdGhbUEFUSF9NQVhdOwo+ICsJY29uc3QgY2hhciAqdGVzdF9u YW1lLCAqc3VidGVzdF9uYW1lOwo+ICsJaW50IGZkOwo+ICsJY2hhciBoZWFkZXJbNDRdOwo+ICsJ c2l6ZV90IGkgPSAwOwo+ICsJdWludDMyX3QgZmlsZV9zaXplLCBjaHVua19zaXplLCBieXRlX3Jh dGU7Cj4gKwl1aW50MTZfdCBmb3JtYXQsIGJsb2NrX2FsaWduLCBiaXRzX3Blcl9zYW1wbGU7Cj4g Kwo+ICsJdGVzdF9uYW1lID0gaWd0X3Rlc3RfbmFtZSgpOwo+ICsJc3VidGVzdF9uYW1lID0gaWd0 X3N1YnRlc3RfbmFtZSgpOwo+ICsKPiArCWlndF9hc3NlcnQoaWd0X2ZyYW1lX2R1bXBfcGF0aCk7 Cj4gKwlzbnByaW50ZihfcGF0aCwgc2l6ZW9mKF9wYXRoKSwgIiVzL2F1ZGlvLSVzLSVzLSVzLndh diIsCj4gKwkJIGlndF9mcmFtZV9kdW1wX3BhdGgsIHRlc3RfbmFtZSwgc3VidGVzdF9uYW1lLCBx dWFsaWZpZXIpOwo+ICsKPiArCWlmIChwYXRoKQo+ICsJCSpwYXRoID0gc3RyZHVwKF9wYXRoKTsK PiArCj4gKwlpZ3RfZGVidWcoIkR1bXBpbmcgJXMgYXVkaW8gdG8gJXNcbiIsIHF1YWxpZmllciwg X3BhdGgpOwo+ICsJZmQgPSBvcGVuKF9wYXRoLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5D KTsKPiArCWlmIChmZCA8IDApIHsKPiArCQlpZ3Rfd2Fybigib3BlbiBmYWlsZWQ6ICVzXG4iLCBz dHJlcnJvcihlcnJubykpOwo+ICsJCXJldHVybiAtMTsKPiArCX0KPiArCj4gKwkvKiBGaWxlIGhl YWRlciAqLwo+ICsJZmlsZV9zaXplID0gVUlOVDMyX01BWDsgLyogdW5rbm93biBmaWxlIHNpemUg Ki8KPiArCWFwcGVuZF90b19idWZmZXIoaGVhZGVyLCAmaSwgUklGRl9UQUcsIHN0cmxlbihSSUZG X1RBRykpOwo+ICsJYXBwZW5kX3RvX2J1ZmZlcihoZWFkZXIsICZpLCAmZmlsZV9zaXplLCBzaXpl b2YoZmlsZV9zaXplKSk7Cj4gKwlhcHBlbmRfdG9fYnVmZmVyKGhlYWRlciwgJmksIFdBVkVfVEFH LCBzdHJsZW4oV0FWRV9UQUcpKTsKPiArCj4gKwkvKiBGb3JtYXQgY2h1bmsgKi8KPiArCWNodW5r X3NpemUgPSAxNjsKPiArCWZvcm1hdCA9IDE7IC8qIFBDTSAqLwo+ICsJYml0c19wZXJfc2FtcGxl ID0gMzI7IC8qIFMzMl9MRSAqLwo+ICsJYnl0ZV9yYXRlID0gc2FtcGxlX3JhdGUgKiBjaGFubmVs cyAqIGJpdHNfcGVyX3NhbXBsZSAvIDg7Cj4gKwlibG9ja19hbGlnbiA9IGNoYW5uZWxzICogYml0 c19wZXJfc2FtcGxlIC8gODsKPiArCWFwcGVuZF90b19idWZmZXIoaGVhZGVyLCAmaSwgRk1UX1RB Rywgc3RybGVuKEZNVF9UQUcpKTsKPiArCWFwcGVuZF90b19idWZmZXIoaGVhZGVyLCAmaSwgJmNo dW5rX3NpemUsIHNpemVvZihjaHVua19zaXplKSk7Cj4gKwlhcHBlbmRfdG9fYnVmZmVyKGhlYWRl ciwgJmksICZmb3JtYXQsIHNpemVvZihmb3JtYXQpKTsKPiArCWFwcGVuZF90b19idWZmZXIoaGVh ZGVyLCAmaSwgJmNoYW5uZWxzLCBzaXplb2YoY2hhbm5lbHMpKTsKPiArCWFwcGVuZF90b19idWZm ZXIoaGVhZGVyLCAmaSwgJnNhbXBsZV9yYXRlLCBzaXplb2Yoc2FtcGxlX3JhdGUpKTsKPiArCWFw cGVuZF90b19idWZmZXIoaGVhZGVyLCAmaSwgJmJ5dGVfcmF0ZSwgc2l6ZW9mKGJ5dGVfcmF0ZSkp Owo+ICsJYXBwZW5kX3RvX2J1ZmZlcihoZWFkZXIsICZpLCAmYmxvY2tfYWxpZ24sIHNpemVvZihi bG9ja19hbGlnbikpOwo+ICsJYXBwZW5kX3RvX2J1ZmZlcihoZWFkZXIsICZpLCAmYml0c19wZXJf c2FtcGxlLCBzaXplb2YoYml0c19wZXJfc2FtcGxlKSk7Cj4gKwo+ICsJLyogRGF0YSBjaHVuayAq Lwo+ICsJY2h1bmtfc2l6ZSA9IFVJTlQzMl9NQVg7IC8qIHVua25vd24gY2h1bmsgc2l6ZSAqLwo+ ICsJYXBwZW5kX3RvX2J1ZmZlcihoZWFkZXIsICZpLCBEQVRBX1RBRywgc3RybGVuKERBVEFfVEFH KSk7Cj4gKwlhcHBlbmRfdG9fYnVmZmVyKGhlYWRlciwgJmksICZjaHVua19zaXplLCBzaXplb2Yo Y2h1bmtfc2l6ZSkpOwo+ICsKPiArCWlndF9hc3NlcnQoaSA9PSBzaXplb2YoaGVhZGVyKSk7Cj4g Kwo+ICsJaWYgKHdyaXRlKGZkLCBoZWFkZXIsIHNpemVvZihoZWFkZXIpKSAhPSBzaXplb2YoaGVh ZGVyKSkgewo+ICsJCWlndF93YXJuKCJ3cml0ZSBmYWlsZWQ6ICVzJ24iLCBzdHJlcnJvcihlcnJu bykpOwo+ICsJCWNsb3NlKGZkKTsKPiArCQlyZXR1cm4gLTE7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJu IGZkOwo+ICB9Cj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3RfYXVkaW8uaCBiL2xpYi9pZ3RfYXVkaW8u aAo+IGluZGV4IGIzYjY1OGE0Li40YWE0M2U2OSAxMDA2NDQKPiAtLS0gYS9saWIvaWd0X2F1ZGlv LmgKPiArKysgYi9saWIvaWd0X2F1ZGlvLmgKPiBAQCAtMzAsNiArMzAsNyBAQAo+ICAjaW5jbHVk ZSAiY29uZmlnLmgiCj4gIAo+ICAjaW5jbHVkZSA8c3RkYm9vbC5oPgo+ICsjaW5jbHVkZSA8c3Rk aW50Lmg+Cj4gIAo+ICBzdHJ1Y3QgYXVkaW9fc2lnbmFsOwo+ICAKPiBAQCAtMzcsOCArMzgsMTMg QEAgc3RydWN0IGF1ZGlvX3NpZ25hbCAqYXVkaW9fc2lnbmFsX2luaXQoaW50IGNoYW5uZWxzLCBp bnQgc2FtcGxpbmdfcmF0ZSk7Cj4gIGludCBhdWRpb19zaWduYWxfYWRkX2ZyZXF1ZW5jeShzdHJ1 Y3QgYXVkaW9fc2lnbmFsICpzaWduYWwsIGludCBmcmVxdWVuY3kpOwo+ICB2b2lkIGF1ZGlvX3Np Z25hbF9zeW50aGVzaXplKHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbCk7Cj4gIHZvaWQgYXVk aW9fc2lnbmFsX2NsZWFuKHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbCk7Cj4gLXZvaWQgYXVk aW9fc2lnbmFsX2ZpbGwoc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsLCBzaG9ydCAqYnVmZmVy LCBpbnQgZnJhbWVzKTsKPiAtYm9vbCBhdWRpb19zaWduYWxfZGV0ZWN0KHN0cnVjdCBhdWRpb19z aWduYWwgKnNpZ25hbCwgaW50IGNoYW5uZWxzLAo+IC0JCQkgaW50IHNhbXBsaW5nX3JhdGUsIHNo b3J0ICpidWZmZXIsIGludCBmcmFtZXMpOwo+ICt2b2lkIGF1ZGlvX3NpZ25hbF9maWxsKHN0cnVj dCBhdWRpb19zaWduYWwgKnNpZ25hbCwgaW50MTZfdCAqYnVmZmVyLCBpbnQgZnJhbWVzKTsKPiAr Ym9vbCBhdWRpb19zaWduYWxfZGV0ZWN0KHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbCwgaW50 IHNhbXBsaW5nX3JhdGUsCj4gKwkJCSBkb3VibGUgKmRhdGEsIHNpemVfdCBkYXRhX2xlbik7Cj4g K3NpemVfdCBhdWRpb19leHRyYWN0X2NoYW5uZWxfczMyX2xlKGRvdWJsZSAqZHN0LCBzaXplX3Qg ZHN0X2NhcCwKPiArCQkJCSAgICBpbnQzMl90ICpzcmMsIHNpemVfdCBzcmNfbGVuLAo+ICsJCQkJ ICAgIGludCBuX2NoYW5uZWxzLCBpbnQgY2hhbm5lbCk7Cj4gK2ludCBhdWRpb19jcmVhdGVfd2F2 X2ZpbGVfczMyX2xlKGNvbnN0IGNoYXIgKnF1YWxpZmllciwgdWludDMyX3Qgc2FtcGxlX3JhdGUs Cj4gKwkJCQkgdWludDE2X3QgY2hhbm5lbHMsIGNoYXIgKipwYXRoKTsKPiAgCj4gICNlbmRpZgo+ IGRpZmYgLS1naXQgYS9saWIvaWd0X2F1eC5jIGIvbGliL2lndF9hdXguYwo+IGluZGV4IDA1NTI4 MzUyLi45NWNlYjg0NSAxMDA2NDQKPiAtLS0gYS9saWIvaWd0X2F1eC5jCj4gKysrIGIvbGliL2ln dF9hdXguYwo+IEBAIC0xMjU5LDYgKzEyNTksMzcgQEAgdm9pZCBpZ3Rfc2V0X21vZHVsZV9wYXJh bV9pbnQoY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbCkKPiAgCWlndF9zZXRfbW9kdWxlX3BhcmFt KG5hbWUsIHN0cik7Cj4gIH0KPiAgCj4gKy8qKgo+ICsgKiBpZ3RfaXNfcHJvY2Vzc19ydW5uaW5n Ogo+ICsgKiBAY29tbTogTmFtZSBvZiBwcm9jZXNzIGluIHRoZSBmb3JtIGZvdW5kIGluIC9wcm9j L3BpZC9jb21tIChsaW1pdGVkIHRvIDE1Cj4gKyAqIGNoYXJzKQo+ICsgKgo+ICsgKiBSZXR1cm5z OiB0cnVlIGluIGNhc2UgdGhlIHByb2Nlc3MgaGFzIGJlZW4gZm91bmQsIGZhbHNlIG90aGVyd2lz ZS4KPiArICoKPiArICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaW4gdGhlIHByb2Nlc3MgdGFibGUg Zm9yIGFuIGVudHJ5IHdpdGggdGhlIG5hbWUgQGNvbW0uCj4gKyAqLwo+ICtpbnQgaWd0X2lzX3By b2Nlc3NfcnVubmluZyhjb25zdCBjaGFyICpjb21tKQo+ICt7Cj4gKwlQUk9DVEFCICpwcm9jOwo+ ICsJcHJvY190ICpwcm9jX2luZm87Cj4gKwlib29sIGZvdW5kID0gZmFsc2U7Cj4gKwo+ICsJcHJv YyA9IG9wZW5wcm9jKFBST0NfRklMTENPTSB8IFBST0NfRklMTFNUQVQgfCBQUk9DX0ZJTExBUkcp OwoKU2VlbXMgbGlrZSB5b3UgY2FuIGRyb3AgRklMTEFSRzoKCkZyb20gbWFuOgogICAgICAgUFJP Q19GSUxMQVJHCiAgICAgICAgICAgIGVxdWl2YWxlbnQgdG8gUFJPQ19GSUxMQ09NCgo+ICsJaWd0 X2Fzc2VydChwcm9jICE9IE5VTEwpOwo+ICsKPiArCXdoaWxlICgocHJvY19pbmZvID0gcmVhZHBy b2MocHJvYywgTlVMTCkpKSB7Cj4gKwkJaWYgKCFzdHJuY2FzZWNtcChwcm9jX2luZm8tPmNtZCwg Y29tbSwgc2l6ZW9mKHByb2NfaW5mby0+Y21kKSkpIHsKPiArCQkJZnJlZXByb2MocHJvY19pbmZv KTsKPiArCQkJZm91bmQgPSB0cnVlOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwkJZnJlZXByb2Mo cHJvY19pbmZvKTsKPiArCX0KPiArCj4gKwljbG9zZXByb2MocHJvYyk7Cj4gKwlyZXR1cm4gZm91 bmQ7Cj4gK30KPiArCj4gIC8qKgo+ICAgKiBpZ3RfdGVybWluYXRlX3Byb2Nlc3M6Cj4gICAqIEBz aWc6IFNpZ25hbCB0byBzZW5kCj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3RfYXV4LmggYi9saWIvaWd0 X2F1eC5oCj4gaW5kZXggNTUzOTI3OTAuLmRiZDg4YjY3IDEwMDY0NAo+IC0tLSBhL2xpYi9pZ3Rf YXV4LmgKPiArKysgYi9saWIvaWd0X2F1eC5oCj4gQEAgLTI3OSw2ICsyNzksNyBAQCBib29sIGln dF9hbGxvd191bmxpbWl0ZWRfZmlsZXModm9pZCk7Cj4gIHZvaWQgaWd0X3NldF9tb2R1bGVfcGFy YW0oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsKTsKPiAgdm9pZCBpZ3Rfc2V0X21v ZHVsZV9wYXJhbV9pbnQoY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbCk7Cj4gIAo+ICtpbnQgaWd0 X2lzX3Byb2Nlc3NfcnVubmluZyhjb25zdCBjaGFyICpjb21tKTsKPiAgaW50IGlndF90ZXJtaW5h dGVfcHJvY2VzcyhpbnQgc2lnLCBjb25zdCBjaGFyICpjb21tKTsKPiAgdm9pZCBpZ3RfbHNvZihj b25zdCBjaGFyICpkcGF0aCk7Cj4gIAo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2NoYW1lbGl1bS5j IGIvbGliL2lndF9jaGFtZWxpdW0uYwo+IGluZGV4IDAyY2M5YjJjLi43YzkwMzBkMSAxMDA2NDQK PiAtLS0gYS9saWIvaWd0X2NoYW1lbGl1bS5jCj4gKysrIGIvbGliL2lndF9jaGFtZWxpdW0uYwo+ IEBAIC0yMTgsNiArMjE4LDEyIEBAIHZvaWQgY2hhbWVsaXVtX2Rlc3Ryb3lfZnJhbWVfZHVtcChz dHJ1Y3QgY2hhbWVsaXVtX2ZyYW1lX2R1bXAgKmR1bXApCj4gIAlmcmVlKGR1bXApOwo+ICB9Cj4g IAo+ICt2b2lkIGNoYW1lbGl1bV9kZXN0cm95X2F1ZGlvX2ZpbGUoc3RydWN0IGNoYW1lbGl1bV9h dWRpb19maWxlICphdWRpb19maWxlKQo+ICt7Cj4gKwlmcmVlKGF1ZGlvX2ZpbGUtPnBhdGgpOwo+ ICsJZnJlZShhdWRpb19maWxlKTsKPiArfQo+ICsKPiAgc3RydWN0IGZzbV9tb25pdG9yX2FyZ3Mg ewo+ICAJc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtOwo+ICAJc3RydWN0IGNoYW1lbGl1bV9w b3J0ICpwb3J0Owo+IEBAIC05MjQsNiArOTMwLDEwMSBAQCBpbnQgY2hhbWVsaXVtX2dldF9jYXB0 dXJlZF9mcmFtZV9jb3VudChzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW0pCj4gIAlyZXR1cm4g cmV0Owo+ICB9Cj4gIAo+ICsvKioKPiArICogY2hhbWVsaXVtX3N0YXJ0X2NhcHR1cmluZ19hdWRp bzoKPiArICogQGNoYW1lbGl1bTogdGhlIENoYW1lbGl1bSBpbnN0YW5jZQo+ICsgKiBAcG9ydDog dGhlIHBvcnQgdG8gY2FwdHVyZSBhdWRpbyBmcm9tIChpdCBtdXN0IHN1cHBvcnQgYXVkaW8pCj4g KyAqIEBzYXZlX3RvX2ZpbGU6IHdoZXRoZXIgdGhlIGNhcHR1cmVkIGF1ZGlvIGRhdGEgc2hvdWxk IGJlIHNhdmVkIHRvIGEgZmlsZSBvbgo+ICsgKiB0aGUgQ2hhbWVsaXVtIGRldmljZQo+ICsgKgo+ ICsgKiBTdGFydHMgY2FwdHVyaW5nIGF1ZGlvIGZyb20gYSBDaGFtZWxpdW0gcG9ydC4gVG8gc3Rv cCB0aGUgY2FwdHVyZSwgdXNlCj4gKyAqICNjaGFtZWxpdW1fc3RvcF9jYXB0dXJpbmdfYXVkaW8u IFRvIHJldHJpZXZlIHRoZSBhdWRpbyBkYXRhLCBlaXRoZXIgdXNlIHRoZQo+ICsgKiBzdHJlYW0g c2VydmVyIG9yIGVuYWJsZSBAc2F2ZV90b19maWxlICh0aGUgbGF0dGVyIGlzIG1haW5seSB1c2Vm dWwgZm9yCj4gKyAqIGRlYnVnZ2luZyBwdXJwb3NlcykuCj4gKyAqCj4gKyAqIEl0IGlzbid0IHBv c3NpYmxlIHRvIGNhcHR1cmUgYXVkaW8gZnJvbSBtdWx0aXBsZSBwb3J0cyBhdCB0aGUgc2FtZSB0 aW1lLgo+ICsgKi8KPiArdm9pZCBjaGFtZWxpdW1fc3RhcnRfY2FwdHVyaW5nX2F1ZGlvKHN0cnVj dCBjaGFtZWxpdW0gKmNoYW1lbGl1bSwKPiArCQkJCSAgICBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQg KnBvcnQsCj4gKwkJCQkgICAgYm9vbCBzYXZlX3RvX2ZpbGUpCj4gK3sKPiArCXhtbHJwY192YWx1 ZSAqcmVzOwo+ICsKPiArCXJlcyA9IGNoYW1lbGl1bV9ycGMoY2hhbWVsaXVtLCBwb3J0LCAiU3Rh cnRDYXB0dXJpbmdBdWRpbyIsICIoaWIpIiwKPiArCQkJICAgIHBvcnQtPmlkLCBzYXZlX3RvX2Zp bGUpOwo+ICsJeG1scnBjX0RFQ1JFRihyZXMpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhdWRp b19mb3JtYXRfZnJvbV94bWwoc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtLAo+ICsJCQkJICB4 bWxycGNfdmFsdWUgKnJlcywgaW50ICpyYXRlLCBpbnQgKmNoYW5uZWxzKQo+ICt7Cj4gKwl4bWxy cGNfdmFsdWUgKnJlc190eXBlLCAqcmVzX3JhdGUsICpyZXNfc2FtcGxlX2Zvcm1hdCwgKnJlc19j aGFubmVsOwo+ICsJY2hhciAqdHlwZSwgKnNhbXBsZV9mb3JtYXQ7Cj4gKwo+ICsJeG1scnBjX3N0 cnVjdF9maW5kX3ZhbHVlKCZjaGFtZWxpdW0tPmVudiwgcmVzLCAiZmlsZV90eXBlIiwgJnJlc190 eXBlKTsKPiArCXhtbHJwY19zdHJ1Y3RfZmluZF92YWx1ZSgmY2hhbWVsaXVtLT5lbnYsIHJlcywg InJhdGUiLCAmcmVzX3JhdGUpOwo+ICsJeG1scnBjX3N0cnVjdF9maW5kX3ZhbHVlKCZjaGFtZWxp dW0tPmVudiwgcmVzLCAic2FtcGxlX2Zvcm1hdCIsICZyZXNfc2FtcGxlX2Zvcm1hdCk7Cj4gKwl4 bWxycGNfc3RydWN0X2ZpbmRfdmFsdWUoJmNoYW1lbGl1bS0+ZW52LCByZXMsICJjaGFubmVsIiwg JnJlc19jaGFubmVsKTsKPiArCj4gKwl4bWxycGNfcmVhZF9zdHJpbmcoJmNoYW1lbGl1bS0+ZW52 LCByZXNfdHlwZSwgKGNvbnN0IGNoYXIgKiopICZ0eXBlKTsKPiArCWlndF9hc3NlcnQoc3RyY21w KHR5cGUsICJyYXciKSA9PSAwKTsKPiArCWZyZWUodHlwZSk7Cj4gKwo+ICsJeG1scnBjX3JlYWRf c3RyaW5nKCZjaGFtZWxpdW0tPmVudiwgcmVzX3NhbXBsZV9mb3JtYXQsIChjb25zdCBjaGFyICoq KSAmc2FtcGxlX2Zvcm1hdCk7Cj4gKwlpZ3RfYXNzZXJ0KHN0cmNtcChzYW1wbGVfZm9ybWF0LCAi UzMyX0xFIikgPT0gMCk7Cj4gKwlmcmVlKHNhbXBsZV9mb3JtYXQpOwo+ICsKPiArCXhtbHJwY19y ZWFkX2ludCgmY2hhbWVsaXVtLT5lbnYsIHJlc19yYXRlLCByYXRlKTsKPiArCXhtbHJwY19yZWFk X2ludCgmY2hhbWVsaXVtLT5lbnYsIHJlc19jaGFubmVsLCBjaGFubmVscyk7Cj4gKwo+ICsJeG1s cnBjX0RFQ1JFRihyZXNfY2hhbm5lbCk7Cj4gKwl4bWxycGNfREVDUkVGKHJlc19zYW1wbGVfZm9y bWF0KTsKPiArCXhtbHJwY19ERUNSRUYocmVzX3JhdGUpOwo+ICsJeG1scnBjX0RFQ1JFRihyZXNf dHlwZSk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBjaGFtZWxpdW1fc3RvcF9jYXB0dXJpbmdfYXVk aW86Cj4gKyAqIEBjaGFtZWxpdW06IHRoZSBDaGFtZWxpdW0gaW5zdGFuY2UKPiArICogQHBvcnQ6 IHRoZSBwb3J0IGZyb20gd2hpY2ggYXVkaW8gaXMgYmVpbmcgY2FwdHVyZWQKPiArICoKPiArICog U3RvcHMgY2FwdHVyaW5nIGF1ZGlvIGZyb20gYSBDaGFtZWxpdW0gcG9ydC4gSWYKPiArICogI2No YW1lbGl1bV9zdGFydF9jYXB0dXJpbmdfYXVkaW8gaGFzIGJlZW4gY2FsbGVkIHdpdGggQHNhdmVf dG9fZmlsZSBlbmFibGVkLAo+ICsgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgI2NoYW1l bGl1bV9hdWRpb19maWxlIHN0cnVjdCBjb250YWluaW5nIGRldGFpbHMKPiArICogYWJvdXQgdGhl IGF1ZGlvIGZpbGUuIE9uY2UgdGhlIGNhbGxlciBpcyBkb25lIHdpdGggdGhlIHN0cnVjdCwgdGhl eSBzaG91bGQKPiArICogcmVsZWFzZSBpdCB3aXRoICNjaGFtZWxpdW1fZGVzdHJveV9hdWRpb19m aWxlLgo+ICsgKi8KPiArc3RydWN0IGNoYW1lbGl1bV9hdWRpb19maWxlICpjaGFtZWxpdW1fc3Rv cF9jYXB0dXJpbmdfYXVkaW8oc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtLAo+ICsJCQkJCQkJ ICAgIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCkKPiArewo+ICsJeG1scnBjX3ZhbHVlICpy ZXMsICpyZXNfcGF0aCwgKnJlc19wcm9wczsKPiArCXN0cnVjdCBjaGFtZWxpdW1fYXVkaW9fZmls ZSAqZmlsZSA9IE5VTEw7Cj4gKwljaGFyICpwYXRoOwo+ICsKPiArCXJlcyA9IGNoYW1lbGl1bV9y cGMoY2hhbWVsaXVtLCBOVUxMLCAiU3RvcENhcHR1cmluZ0F1ZGlvIiwgIihpKSIsCj4gKwkJCSAg ICBwb3J0LT5pZCk7Cj4gKwl4bWxycGNfYXJyYXlfcmVhZF9pdGVtKCZjaGFtZWxpdW0tPmVudiwg cmVzLCAwLCAmcmVzX3BhdGgpOwo+ICsJeG1scnBjX2FycmF5X3JlYWRfaXRlbSgmY2hhbWVsaXVt LT5lbnYsIHJlcywgMSwgJnJlc19wcm9wcyk7Cj4gKwo+ICsJeG1scnBjX3JlYWRfc3RyaW5nKCZj aGFtZWxpdW0tPmVudiwgcmVzX3BhdGgsIChjb25zdCBjaGFyICoqKSAmcGF0aCk7Cj4gKwo+ICsJ aWYgKHN0cmxlbihwYXRoKSA+IDApIHsKPiArCQlmaWxlID0gY2FsbG9jKDEsIHNpemVvZigqZmls ZSkpOwo+ICsJCWZpbGUtPnBhdGggPSBwYXRoOwo+ICsKPiArCQlhdWRpb19mb3JtYXRfZnJvbV94 bWwoY2hhbWVsaXVtLCByZXNfcHJvcHMsCj4gKwkJCQkgICAgICAmZmlsZS0+cmF0ZSwgJmZpbGUt PmNoYW5uZWxzKTsKPiArCX0gZWxzZSB7Cj4gKwkJZnJlZShwYXRoKTsKPiArCX0KPiArCj4gKwl4 bWxycGNfREVDUkVGKHJlc19wcm9wcyk7Cj4gKwl4bWxycGNfREVDUkVGKHJlc19wYXRoKTsKPiAr CXhtbHJwY19ERUNSRUYocmVzKTsKPiArCj4gKwlyZXR1cm4gZmlsZTsKPiArfQo+ICsKPiAgc3Rh dGljIHBpeG1hbl9pbWFnZV90ICpjb252ZXJ0X2ZyYW1lX2Zvcm1hdChwaXhtYW5faW1hZ2VfdCAq c3JjLAo+ICAJCQkJCSAgICBpbnQgZm9ybWF0KQo+ICB7Cj4gZGlmZiAtLWdpdCBhL2xpYi9pZ3Rf Y2hhbWVsaXVtLmggYi9saWIvaWd0X2NoYW1lbGl1bS5oCj4gaW5kZXggMjMzZWFkODUuLjA0N2Y4 YzVkIDEwMDY0NAo+IC0tLSBhL2xpYi9pZ3RfY2hhbWVsaXVtLmgKPiArKysgYi9saWIvaWd0X2No YW1lbGl1bS5oCj4gQEAgLTUzLDYgKzUzLDEyIEBAIGVudW0gY2hhbWVsaXVtX2NoZWNrIHsKPiAg CUNIQU1FTElVTV9DSEVDS19DUkMsCj4gIH07Cj4gIAo+ICtzdHJ1Y3QgY2hhbWVsaXVtX2F1ZGlv X2ZpbGUgewo+ICsJY2hhciAqcGF0aDsKPiArCWludCByYXRlOyAvKiBIeiAqLwo+ICsJaW50IGNo YW5uZWxzOwo+ICt9Owo+ICsKPiAgc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtX2luaXQoaW50 IGRybV9mZCk7Cj4gIHZvaWQgY2hhbWVsaXVtX2RlaW5pdChzdHJ1Y3QgY2hhbWVsaXVtICpjaGFt ZWxpdW0pOwo+ICB2b2lkIGNoYW1lbGl1bV9yZXNldChzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxp dW0pOwo+IEBAIC0xMDAsNiArMTA2LDEwIEBAIHZvaWQgY2hhbWVsaXVtX3N0YXJ0X2NhcHR1cmUo c3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtLAo+ICB2b2lkIGNoYW1lbGl1bV9zdG9wX2NhcHR1 cmUoc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtLCBpbnQgZnJhbWVfY291bnQpOwo+ICB2b2lk IGNoYW1lbGl1bV9jYXB0dXJlKHN0cnVjdCBjaGFtZWxpdW0gKmNoYW1lbGl1bSwgc3RydWN0IGNo YW1lbGl1bV9wb3J0ICpwb3J0LAo+ICAJCSAgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQg aCwgaW50IGZyYW1lX2NvdW50KTsKPiArdm9pZCBjaGFtZWxpdW1fc3RhcnRfY2FwdHVyaW5nX2F1 ZGlvKHN0cnVjdCBjaGFtZWxpdW0gKmNoYW1lbGl1bSwKPiArCQkJCSAgICBzdHJ1Y3QgY2hhbWVs aXVtX3BvcnQgKnBvcnQsIGJvb2wgc2F2ZV90b19maWxlKTsKPiArc3RydWN0IGNoYW1lbGl1bV9h dWRpb19maWxlICpjaGFtZWxpdW1fc3RvcF9jYXB0dXJpbmdfYXVkaW8oc3RydWN0IGNoYW1lbGl1 bSAqY2hhbWVsaXVtLAo+ICsJCQkJCQkJICAgIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCk7 Cj4gIGlndF9jcmNfdCAqY2hhbWVsaXVtX3JlYWRfY2FwdHVyZWRfY3JjcyhzdHJ1Y3QgY2hhbWVs aXVtICpjaGFtZWxpdW0sCj4gIAkJCQkJaW50ICpmcmFtZV9jb3VudCk7Cj4gIHN0cnVjdCBjaGFt ZWxpdW1fZnJhbWVfZHVtcCAqY2hhbWVsaXVtX3JlYWRfY2FwdHVyZWRfZnJhbWUoc3RydWN0IGNo YW1lbGl1bSAqY2hhbWVsaXVtLAo+IEBAIC0xMzEsNSArMTQxLDYgQEAgdm9pZCBjaGFtZWxpdW1f YXNzZXJ0X2ZyYW1lX21hdGNoX29yX2R1bXAoc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtLAo+ ICB2b2lkIGNoYW1lbGl1bV9jcm9wX2FuYWxvZ19mcmFtZShzdHJ1Y3QgY2hhbWVsaXVtX2ZyYW1l X2R1bXAgKmR1bXAsIGludCB3aWR0aCwKPiAgCQkJCSBpbnQgaGVpZ2h0KTsKPiAgdm9pZCBjaGFt ZWxpdW1fZGVzdHJveV9mcmFtZV9kdW1wKHN0cnVjdCBjaGFtZWxpdW1fZnJhbWVfZHVtcCAqZHVt cCk7Cj4gK3ZvaWQgY2hhbWVsaXVtX2Rlc3Ryb3lfYXVkaW9fZmlsZShzdHJ1Y3QgY2hhbWVsaXVt X2F1ZGlvX2ZpbGUgKmF1ZGlvX2ZpbGUpOwo+ICAKPiAgI2VuZGlmIC8qIElHVF9DSEFNRUxJVU1f SCAqLwo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2NoYW1lbGl1bV9zdHJlYW0uYyBiL2xpYi9pZ3Rf Y2hhbWVsaXVtX3N0cmVhbS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MC4uOWUxYmExY2EKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliL2lndF9jaGFtZWxpdW1fc3Ry ZWFtLmMKPiBAQCAtMCwwICsxLDU5MiBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxOSBJ bnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9m IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJT b2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0 aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBz dWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0 aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1J VEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5U IFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBG T1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gKyAq IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsgKiBB dXRob3JzOiBTaW1vbiBTZXIgPHNpbW9uLnNlckBpbnRlbC5jb20+Cj4gKyAqLwo+ICsKPiArI2lu Y2x1ZGUgImNvbmZpZy5oIgo+ICsKPiArI2luY2x1ZGUgPGFycGEvaW5ldC5oPgo+ICsjaW5jbHVk ZSA8ZXJybm8uaD4KPiArI2luY2x1ZGUgPG5ldGRiLmg+Cj4gKyNpbmNsdWRlIDxzdGRib29sLmg+ Cj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4KPiArI2luY2x1ZGUgPHN5cy90eXBlcy5oPgo+ICsjaW5j bHVkZSA8c3lzL3NvY2tldC5oPgo+ICsKPiArI2luY2x1ZGUgImlndF9jaGFtZWxpdW1fc3RyZWFt LmgiCj4gKyNpbmNsdWRlICJpZ3RfY29yZS5oIgo+ICsjaW5jbHVkZSAiaWd0X3JjLmgiCj4gKwo+ ICsjZGVmaW5lIFNUUkVBTV9QT1JUIDk5OTQKPiArI2RlZmluZSBTVFJFQU1fVkVSU0lPTl9NQUpP UiAxCj4gKyNkZWZpbmUgU1RSRUFNX1ZFUlNJT05fTUlOT1IgMAo+ICsKPiArZW51bSBzdHJlYW1f ZXJyb3Igewo+ICsJU1RSRUFNX0VSUk9SX05PTkUgPSAwLAo+ICsJU1RSRUFNX0VSUk9SX0NPTU1B TkQgPSAxLAo+ICsJU1RSRUFNX0VSUk9SX0FSR1VNRU5UID0gMiwKPiArCVNUUkVBTV9FUlJPUl9F WElTVFMgPSAzLAo+ICsJU1RSRUFNX0VSUk9SX1ZJREVPX01FTV9PVkVSRkxPV19TVE9QID0gNCwK PiArCVNUUkVBTV9FUlJPUl9WSURFT19NRU1fT1ZFUkZMT1dfRFJPUCA9IDUsCj4gKwlTVFJFQU1f RVJST1JfQVVESU9fTUVNX09WRVJGTE9XX1NUT1AgPSA2LAo+ICsJU1RSRUFNX0VSUk9SX0FVRElP X01FTV9PVkVSRkxPV19EUk9QID0gNywKPiArCVNUUkVBTV9FUlJPUl9OT19NRU0gPSA4LAo+ICt9 Owo+ICsKPiArZW51bSBzdHJlYW1fbWVzc2FnZV9raW5kIHsKPiArCVNUUkVBTV9NRVNTQUdFX1JF UVVFU1QgPSAwLAo+ICsJU1RSRUFNX01FU1NBR0VfUkVTUE9OU0UgPSAxLAo+ICsJU1RSRUFNX01F U1NBR0VfREFUQSA9IDIsCj4gK307Cj4gKwo+ICtlbnVtIHN0cmVhbV9tZXNzYWdlX3R5cGUgewo+ ICsJU1RSRUFNX01FU1NBR0VfUkVTRVQgPSAwLAo+ICsJU1RSRUFNX01FU1NBR0VfR0VUX1ZFUlNJ T04gPSAxLAo+ICsJU1RSRUFNX01FU1NBR0VfVklERU9fU1RSRUFNID0gMiwKPiArCVNUUkVBTV9N RVNTQUdFX1NIUklOS19WSURFTyA9IDMsCj4gKwlTVFJFQU1fTUVTU0FHRV9WSURFT19GUkFNRSA9 IDQsCj4gKwlTVFJFQU1fTUVTU0FHRV9EVU1QX1JFQUxUSU1FX1ZJREVPID0gNSwKPiArCVNUUkVB TV9NRVNTQUdFX1NUT1BfRFVNUF9WSURFTyA9IDYsCj4gKwlTVFJFQU1fTUVTU0FHRV9EVU1QX1JF QUxUSU1FX0FVRElPID0gNywKPiArCVNUUkVBTV9NRVNTQUdFX1NUT1BfRFVNUF9BVURJTyA9IDgs Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSB7Cj4gKwljaGFyICpob3N0Owo+ ICsJdW5zaWduZWQgaW50IHBvcnQ7Cj4gKwo+ICsJaW50IGZkOwo+ICt9Owo+ICsKPiArc3RhdGlj IGNvbnN0IGNoYXIgKnN0cmVhbV9lcnJvcl9zdHIoZW51bSBzdHJlYW1fZXJyb3IgZXJyKQo+ICt7 Cj4gKwlzd2l0Y2ggKGVycikgewo+ICsJY2FzZSBTVFJFQU1fRVJST1JfTk9ORToKPiArCQlyZXR1 cm4gIm5vIGVycm9yIjsKPiArCWNhc2UgU1RSRUFNX0VSUk9SX0NPTU1BTkQ6Cj4gKwkJcmV0dXJu ICJpbnZhbGlkIGNvbW1hbmQiOwo+ICsJY2FzZSBTVFJFQU1fRVJST1JfQVJHVU1FTlQ6Cj4gKwkJ cmV0dXJuICJpbnZhbGlkIGFyZ3VtZW50cyI7Cj4gKwljYXNlIFNUUkVBTV9FUlJPUl9FWElTVFM6 Cj4gKwkJcmV0dXJuICJkdW1wIGFscmVhZHkgc3RhcnRlZCI7Cj4gKwljYXNlIFNUUkVBTV9FUlJP Ul9WSURFT19NRU1fT1ZFUkZMT1dfU1RPUDoKPiArCQlyZXR1cm4gInZpZGVvIGR1bXAgc3RvcHBl ZCBhZnRlciBvdmVyZmxvdyI7Cj4gKwljYXNlIFNUUkVBTV9FUlJPUl9WSURFT19NRU1fT1ZFUkZM T1dfRFJPUDoKPiArCQlyZXR1cm4gInZpZGVvIGZyYW1lIGRyb3BwZWQgYWZ0ZXIgb3ZlcmZsb3ci Owo+ICsJY2FzZSBTVFJFQU1fRVJST1JfQVVESU9fTUVNX09WRVJGTE9XX1NUT1A6Cj4gKwkJcmV0 dXJuICJhdWRpbyBkdW1wIHN0b3BwcmVkIGFmdGVyIG92ZXJmbG93IjsKPiArCWNhc2UgU1RSRUFN X0VSUk9SX0FVRElPX01FTV9PVkVSRkxPV19EUk9QOgo+ICsJCXJldHVybiAiYXVkaW8gcGFnZSBk cm9wcGVkIGFmdGVyIG92ZXJmbG93IjsKPiArCWNhc2UgU1RSRUFNX0VSUk9SX05PX01FTToKPiAr CQlyZXR1cm4gIm91dCBvZiBtZW1vcnkiOwo+ICsJfQo+ICsJcmV0dXJuICJ1bmtub3duIGVycm9y IjsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFRoZSBDaGFtZWxpdW0gVVJMIGlzIHNwZWNpZmllZCBp biB0aGUgY29uZmlndXJhdGlvbiBmaWxlLiBXZSBuZWVkIHRvIGV4dHJhY3QKPiArICogdGhlIGhv c3QgdG8gY29ubmVjdCB0byB0aGUgc3RyZWFtIHNlcnZlci4KPiArICovCj4gK3N0YXRpYyBjaGFy ICpwYXJzZV91cmxfaG9zdChjb25zdCBjaGFyICp1cmwpCj4gK3sKPiArCXN0YXRpYyBjb25zdCBj aGFyIHByZWZpeFtdID0gImh0dHA6Ly8iOwo+ICsJY2hhciAqY29sb247Cj4gKwo+ICsJaWYgKHN0 cnN0cih1cmwsIHByZWZpeCkgIT0gdXJsKQo+ICsJCXJldHVybiBOVUxMOwo+ICsJdXJsICs9IHN0 cmxlbihwcmVmaXgpOwo+ICsKPiArCWNvbG9uID0gc3RyY2hyKHVybCwgJzonKTsKPiArCWlmICgh Y29sb24pCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJcmV0dXJuIHN0cm5kdXAodXJsLCBjb2xv biAtIHVybCk7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGNoYW1lbGl1bV9zdHJlYW1fcmVhZF9j b25maWcoc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCkKPiArewo+ICsJR0Vycm9yICpl cnJvciA9IE5VTEw7Cj4gKwlnY2hhciAqY2hhbWVsaXVtX3VybDsKPiArCj4gKwlpZiAoIWlndF9r ZXlfZmlsZSkgewo+ICsJCWlndF93YXJuKCJObyBjb25maWd1cmF0aW9uIGZpbGUgYXZhaWxhYmxl IGZvciBjaGFtZWxpdW1cbiIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwljaGFt ZWxpdW1fdXJsID0gZ19rZXlfZmlsZV9nZXRfc3RyaW5nKGlndF9rZXlfZmlsZSwgIkNoYW1lbGl1 bSIsICJVUkwiLAo+ICsJCQkJCSAgICAgICZlcnJvcik7Cj4gKwlpZiAoIWNoYW1lbGl1bV91cmwp IHsKPiArCQlpZ3Rfd2FybigiQ291bGRuJ3QgcmVhZCBDaGFtZWxpdW0gVVJMIGZyb20gY29uZmln IGZpbGU6ICVzXG4iLAo+ICsJCQkgZXJyb3ItPm1lc3NhZ2UpOwo+ICsJCXJldHVybiBmYWxzZTsK PiArCX0KPiArCj4gKwljbGllbnQtPmhvc3QgPSBwYXJzZV91cmxfaG9zdChjaGFtZWxpdW1fdXJs KTsKPiArCWlmICghY2xpZW50LT5ob3N0KSB7Cj4gKwkJaWd0X3dhcm4oIkludmFsaWQgQ2hhbWVs aXVtIFVSTCBpbiBjb25maWcgZmlsZTogJXNcbiIsCj4gKwkJCSBjaGFtZWxpdW1fdXJsKTsKPiAr CQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwljbGllbnQtPnBvcnQgPSBTVFJFQU1fUE9SVDsKPiAr Cj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgY2hhbWVsaXVtX3N0cmVh bV9jb25uZWN0KHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQpCj4gK3sKPiArCWludCBy ZXQ7Cj4gKwljaGFyIHBvcnRfc3RyWzE2XTsKPiArCXN0cnVjdCBhZGRyaW5mbyBoaW50cyA9IHt9 Owo+ICsJc3RydWN0IGFkZHJpbmZvICpyZXN1bHRzLCAqYWk7Cj4gKwlzdHJ1Y3QgdGltZXZhbCB0 diA9IHt9Owo+ICsKPiArCWlndF9kZWJ1ZygiQ29ubmVjdGluZyB0byBDaGFtZWxpdW0gc3RyZWFt IHNlcnZlcjogdGNwOi8vJXM6JXVcbiIsCj4gKwkJICBjbGllbnQtPmhvc3QsIGNsaWVudC0+cG9y dCk7Cj4gKwo+ICsJc25wcmludGYocG9ydF9zdHIsIHNpemVvZihwb3J0X3N0ciksICIldSIsIGNs aWVudC0+cG9ydCk7Cj4gKwo+ICsJaGludHMuYWlfZmFtaWx5ID0gQUZfVU5TUEVDOwo+ICsJaGlu dHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKPiArCXJldCA9IGdldGFkZHJpbmZvKGNsaWVu dC0+aG9zdCwgcG9ydF9zdHIsICZoaW50cywgJnJlc3VsdHMpOwo+ICsJaWYgKHJldCAhPSAwKSB7 Cj4gKwkJaWd0X3dhcm4oImdldGFkZHJpbmZvIGZhaWxlZDogJXNcbiIsIGdhaV9zdHJlcnJvcihy ZXQpKTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJY2xpZW50LT5mZCA9IC0xOwo+ ICsJZm9yIChhaSA9IHJlc3VsdHM7IGFpICE9IE5VTEw7IGFpID0gYWktPmFpX25leHQpIHsKPiAr CQljbGllbnQtPmZkID0gc29ja2V0KGFpLT5haV9mYW1pbHksIGFpLT5haV9zb2NrdHlwZSwKPiAr CQkJCSAgICBhaS0+YWlfcHJvdG9jb2wpOwo+ICsJCWlmIChjbGllbnQtPmZkID09IC0xKQo+ICsJ CQljb250aW51ZTsKPiArCj4gKwkJaWYgKGNvbm5lY3QoY2xpZW50LT5mZCwgYWktPmFpX2FkZHIs IGFpLT5haV9hZGRybGVuKSA9PSAtMSkgewo+ICsJCQljbG9zZShjbGllbnQtPmZkKTsKPiArCQkJ Y2xpZW50LT5mZCA9IC0xOwo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ICsJCWJyZWFrOwo+ ICsJfQo+ICsKPiArCWZyZWVhZGRyaW5mbyhyZXN1bHRzKTsKPiArCj4gKwlpZiAoY2xpZW50LT5m ZCA8IDApIHsKPiArCQlpZ3Rfd2FybigiRmFpbGVkIHRvIGNvbm5lY3QgdG8gQ2hhbWVsaXVtIHN0 cmVhbSBzZXJ2ZXJcbiIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4gKwkvKiBTZXQg YSByZWFkIGFuZCB3cml0ZSB0aW1lb3V0IG9mIDUgc2Vjb25kcy4gKi8KPiArCXR2LnR2X3NlYyA9 IDU7Cj4gKwlzZXRzb2Nrb3B0KGNsaWVudC0+ZmQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCAm dHYsIHNpemVvZih0dikpOwo+ICsJc2V0c29ja29wdChjbGllbnQtPmZkLCBTT0xfU09DS0VULCBT T19TTkRUSU1FTywgJnR2LCBzaXplb2YodHYpKTsKPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ ICsKPiArc3RhdGljIGJvb2wgcmVhZF93aG9sZShpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1 Zl9sZW4pCj4gK3sKPiArCXNzaXplX3QgcmV0Owo+ICsJc2l6ZV90IG4gPSAwOwo+ICsJY2hhciAq cHRyOwo+ICsKPiArCXdoaWxlIChuIDwgYnVmX2xlbikgewo+ICsJCXB0ciA9IChjaGFyICopIGJ1 ZiArIG47Cj4gKwkJcmV0ID0gcmVhZChmZCwgcHRyLCBidWZfbGVuIC0gbik7Cj4gKwkJaWYgKHJl dCA8IDApIHsKPiArCQkJaWd0X3dhcm4oInJlYWQgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJy bm8pKTsKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsJCX0gZWxzZSBpZiAocmV0ID09IDApIHsKPiAr CQkJaWd0X3dhcm4oInNob3J0IHJlYWRcbiIpOwo+ICsJCQlyZXR1cm4gZmFsc2U7Cj4gKwkJfQo+ ICsJCW4gKz0gcmV0Owo+ICsJfQo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgYm9vbCB3cml0ZV93aG9sZShpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pCj4g K3sKPiArCXNzaXplX3QgcmV0Owo+ICsJc2l6ZV90IG4gPSAwOwo+ICsJY2hhciAqcHRyOwo+ICsK PiArCXdoaWxlIChuIDwgYnVmX2xlbikgewo+ICsJCXB0ciA9IChjaGFyICopIGJ1ZiArIG47Cj4g KwkJcmV0ID0gd3JpdGUoZmQsIHB0ciwgYnVmX2xlbiAtIG4pOwo+ICsJCWlmIChyZXQgPCAwKSB7 Cj4gKwkJCWlndF93YXJuKCJ3cml0ZSBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwo+ ICsJCQlyZXR1cm4gZmFsc2U7Cj4gKwkJfSBlbHNlIGlmIChyZXQgPT0gMCkgewo+ICsJCQlpZ3Rf d2Fybigic2hvcnQgd3JpdGVcbiIpOwo+ICsJCQlyZXR1cm4gZmFsc2U7Cj4gKwkJfQo+ICsJCW4g Kz0gcmV0Owo+ICsJfQo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9v bCByZWFkX2FuZF9kaXNjYXJkKGludCBmZCwgc2l6ZV90IGxlbikKPiArewo+ICsJY2hhciBidWZb MTAyNF07Cj4gKwlzaXplX3QgbjsKPiArCj4gKwl3aGlsZSAobGVuID4gMCkgewo+ICsJCW4gPSBs ZW47Cj4gKwkJaWYgKG4gPiBzaXplb2YoYnVmKSkKPiArCQkJbiA9IHNpemVvZihidWYpOwo+ICsK PiArCQlpZiAoIXJlYWRfd2hvbGUoZmQsIGJ1ZiwgbikpCj4gKwkJCXJldHVybiBmYWxzZTsKPiAr Cj4gKwkJbGVuIC09IG47Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gKy8q KiBSZWFkIGEgbWVzc2FnZSBoZWFkZXIgZnJvbSB0aGUgc29ja2V0Lgo+ICsgKgo+ICsgKiBUaGUg aGVhZGVyIGlzIGxhaWQgb3V0IGFzIGZvbGxvd3M6Cj4gKyAqIC0gdTE2OiBtZXNzYWdlIHR5cGUK PiArICogLSB1MTY6IGVycm9yIGNvZGUKPiArICogLSB1MzI6IG1lc3NhZ2UgbGVuZ3RoCj4gKyAq Lwo+ICtzdGF0aWMgYm9vbCBjaGFtZWxpdW1fc3RyZWFtX3JlYWRfaGVhZGVyKHN0cnVjdCBjaGFt ZWxpdW1fc3RyZWFtICpjbGllbnQsCj4gKwkJCQkJIGVudW0gc3RyZWFtX21lc3NhZ2Vfa2luZCAq a2luZCwKPiArCQkJCQkgZW51bSBzdHJlYW1fbWVzc2FnZV90eXBlICp0eXBlLAo+ICsJCQkJCSBl bnVtIHN0cmVhbV9lcnJvciAqZXJyLAo+ICsJCQkJCSBzaXplX3QgKmxlbikKPiArewo+ICsJdWlu dDE2X3QgX3R5cGU7Cj4gKwljaGFyIGJ1Zls4XTsKPiArCj4gKwlpZiAoIXJlYWRfd2hvbGUoY2xp ZW50LT5mZCwgYnVmLCBzaXplb2YoYnVmKSkpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCV90 eXBlID0gbnRvaHMoKih1aW50MTZfdCAqKSAmYnVmWzBdKTsKPiArCSp0eXBlID0gX3R5cGUgJiAw eEZGOwo+ICsJKmtpbmQgPSBfdHlwZSA+PiA4Owo+ICsJKmVyciA9IG50b2hzKCoodWludDE2X3Qg KikgJmJ1ZlsyXSk7Cj4gKwkqbGVuID0gbnRvaGwoKih1aW50MzJfdCAqKSAmYnVmWzRdKTsKPiAr Cj4gKwkvL2lndF9kZWJ1ZygicmVjZWl2ZWQgbWVzc2FnZToga2luZD0lZCB0eXBlPSVkIGVycj0l ZCBsZW49JXp1XG4iLAo+ICsJLy8JICAqa2luZCwgKnR5cGUsICplcnIsICpsZW4pOwoKWW91IHBy b2JhYmx5IHdhbnQgdG8ga2VlcCB0aGlzIGRlYnVnIG1lc3NhZ2UuIElmIG5vdCwgdGhlbiBjb21t ZW50IGl0CnByb3Blcmx5IHdpdGggLyogKi8gb3IgZGVsZXRlIGl0LgoKPiArCj4gKwlyZXR1cm4g dHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgY2hhbWVsaXVtX3N0cmVhbV93cml0ZV9oZWFk ZXIoc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCwKPiArCQkJCQkgIGVudW0gc3RyZWFt X21lc3NhZ2VfdHlwZSB0eXBlLAo+ICsJCQkJCSAgZW51bSBzdHJlYW1fZXJyb3IgZXJyLAo+ICsJ CQkJCSAgc2l6ZV90IGxlbikKPiArewo+ICsJY2hhciBidWZbOF07Cj4gKwl1aW50MTZfdCBfdHlw ZTsKPiArCj4gKwlfdHlwZSA9IHR5cGUgfCAoU1RSRUFNX01FU1NBR0VfUkVRVUVTVCA8PCA4KTsK PiArCj4gKwkqKHVpbnQxNl90ICopICZidWZbMF0gPSBodG9ucyhfdHlwZSk7Cj4gKwkqKHVpbnQx Nl90ICopICZidWZbMl0gPSBodG9ucyhlcnIpOwo+ICsJKih1aW50MzJfdCAqKSAmYnVmWzRdID0g aHRvbmwobGVuKTsKPiArCj4gKwlyZXR1cm4gd3JpdGVfd2hvbGUoY2xpZW50LT5mZCwgYnVmLCBz aXplb2YoYnVmKSk7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGNoYW1lbGl1bV9zdHJlYW1fcmVh ZF9yZXNwb25zZShzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqY2xpZW50LAo+ICsJCQkJCSAgIGVu dW0gc3RyZWFtX21lc3NhZ2VfdHlwZSB0eXBlLAo+ICsJCQkJCSAgIHZvaWQgKmJ1Ziwgc2l6ZV90 IGJ1Zl9sZW4pCj4gK3sKPiArCWVudW0gc3RyZWFtX21lc3NhZ2Vfa2luZCByZWFkX2tpbmQ7Cj4g KwllbnVtIHN0cmVhbV9tZXNzYWdlX3R5cGUgcmVhZF90eXBlOwo+ICsJZW51bSBzdHJlYW1fZXJy b3IgcmVhZF9lcnI7Cj4gKwlzaXplX3QgcmVhZF9sZW47Cj4gKwo+ICsJaWYgKCFjaGFtZWxpdW1f c3RyZWFtX3JlYWRfaGVhZGVyKGNsaWVudCwgJnJlYWRfa2luZCwgJnJlYWRfdHlwZSwKPiArCQkJ CQkgICZyZWFkX2VyciwgJnJlYWRfbGVuKSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJaWYg KHJlYWRfa2luZCAhPSBTVFJFQU1fTUVTU0FHRV9SRVNQT05TRSkgewo+ICsJCWlndF93YXJuKCJF eHBlY3RlZCBhIHJlc3BvbnNlLCBnb3Qga2luZCAlZFxuIiwgcmVhZF9raW5kKTsKPiArCQlyZXR1 cm4gZmFsc2U7Cj4gKwl9Cj4gKwlpZiAocmVhZF90eXBlICE9IHR5cGUpIHsKPiArCQlpZ3Rfd2Fy bigiRXhwZWN0ZWQgbWVzc2FnZSB0eXBlICVkLCBnb3QgJWRcbiIsCj4gKwkJCSB0eXBlLCByZWFk X3R5cGUpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCWlmIChyZWFkX2VyciAhPSBTVFJF QU1fRVJST1JfTk9ORSkgewo+ICsJCWlndF93YXJuKCJSZWNlaXZlZCBlcnJvcjogJXMgKCVkKVxu IiwKPiArCQkJIHN0cmVhbV9lcnJvcl9zdHIocmVhZF9lcnIpLCByZWFkX2Vycik7Cj4gKwkJcmV0 dXJuIGZhbHNlOwo+ICsJfQo+ICsJaWYgKGJ1Zl9sZW4gIT0gcmVhZF9sZW4pIHsKPiArCQlpZ3Rf d2FybigiUmVjZWl2ZWQgaW52YWxpZCBtZXNzYWdlIGJvZHkgc2l6ZSAiCj4gKwkJCSAiKGdvdCAl enUgYnl0ZXMsIHdhbnQgJXp1IGJ5dGVzKVxuIiwKPiArCQkJIHJlYWRfbGVuLCBidWZfbGVuKTsK PiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJlYWRfd2hvbGUoY2xpZW50 LT5mZCwgYnVmLCBidWZfbGVuKTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgY2hhbWVsaXVtX3N0 cmVhbV93cml0ZV9yZXF1ZXN0KHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQsCj4gKwkJ CQkJICAgZW51bSBzdHJlYW1fbWVzc2FnZV90eXBlIHR5cGUsCj4gKwkJCQkJICAgdm9pZCAqYnVm LCBzaXplX3QgYnVmX2xlbikKPiArewo+ICsJaWYgKCFjaGFtZWxpdW1fc3RyZWFtX3dyaXRlX2hl YWRlcihjbGllbnQsIHR5cGUsIFNUUkVBTV9FUlJPUl9OT05FLAo+ICsJCQkJCSAgIGJ1Zl9sZW4p KQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlpZiAoYnVmX2xlbiA9PSAwKQo+ICsJCXJldHVy biB0cnVlOwo+ICsKPiArCXJldHVybiB3cml0ZV93aG9sZShjbGllbnQtPmZkLCBidWYsIGJ1Zl9s ZW4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBjaGFtZWxpdW1fc3RyZWFtX2NhbGwoc3RydWN0 IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCwKPiArCQkJCSAgZW51bSBzdHJlYW1fbWVzc2FnZV90 eXBlIHR5cGUsCj4gKwkJCQkgIHZvaWQgKnJlcV9idWYsIHNpemVfdCByZXFfbGVuLAo+ICsJCQkJ ICB2b2lkICpyZXNwX2J1Ziwgc2l6ZV90IHJlc3BfbGVuKQo+ICt7Cj4gKwlpZiAoIWNoYW1lbGl1 bV9zdHJlYW1fd3JpdGVfcmVxdWVzdChjbGllbnQsIHR5cGUsIHJlcV9idWYsIHJlcV9sZW4pKQo+ ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlyZXR1cm4gY2hhbWVsaXVtX3N0cmVhbV9yZWFkX3Jl c3BvbnNlKGNsaWVudCwgdHlwZSwgcmVzcF9idWYsIHJlc3BfbGVuKTsKPiArfQo+ICsKPiArc3Rh dGljIGJvb2wgY2hhbWVsaXVtX3N0cmVhbV9jaGVja192ZXJzaW9uKHN0cnVjdCBjaGFtZWxpdW1f c3RyZWFtICpjbGllbnQpCj4gK3sKPiArCWNoYXIgcmVzcFsyXTsKPiArCXVpbnQ4X3QgbWFqb3Is IG1pbm9yOwo+ICsKPiArCWlmICghY2hhbWVsaXVtX3N0cmVhbV9jYWxsKGNsaWVudCwgU1RSRUFN X01FU1NBR0VfR0VUX1ZFUlNJT04sCj4gKwkJCQkgICBOVUxMLCAwLCByZXNwLCBzaXplb2YocmVz cCkpKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwltYWpvciA9IHJlc3BbMF07Cj4gKwltaW5v ciA9IHJlc3BbMV07Cj4gKwlpZiAobWFqb3IgIT0gU1RSRUFNX1ZFUlNJT05fTUFKT1IgfHwgbWlu b3IgPCBTVFJFQU1fVkVSU0lPTl9NSU5PUikgewo+ICsJCWlndF93YXJuKCJWZXJzaW9uIG1pc21h dGNoICh3YW50ICVkLiVkLCBnb3QgJWQuJWQpXG4iLAo+ICsJCQkgU1RSRUFNX1ZFUlNJT05fTUFK T1IsIFNUUkVBTV9WRVJTSU9OX01JTk9SLAo+ICsJCQkgbWFqb3IsIG1pbm9yKTsKPiArCQlyZXR1 cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gKy8qKgo+ICsg KiBjaGFtZWxpdW1fc3RyZWFtX2R1bXBfcmVhbHRpbWVfYXVkaW86Cj4gKyAqCj4gKyAqIFN0YXJ0 cyBhdWRpbyBjYXB0dXJlLiBUaGUgY2FsbGVyIGNhbiB0aGVuIGNhbGwKPiArICogI2NoYW1lbGl1 bV9zdHJlYW1fcmVjZWl2ZV9yZWFsdGltZV9hdWRpbyB0byByZWNlaXZlIGF1ZGlvIHBhZ2VzLgo+ ICsgKi8KPiArYm9vbCBjaGFtZWxpdW1fc3RyZWFtX2R1bXBfcmVhbHRpbWVfYXVkaW8oc3RydWN0 IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCwKPiArCQkJCQkgIGVudW0gY2hhbWVsaXVtX3N0cmVh bV9yZWFsdGltZV9tb2RlIG1vZGUpCj4gK3sKPiArCWNoYXIgcmVxWzFdOwo+ICsKPiArCWlndF9k ZWJ1ZygiU3RhcnRpbmcgcmVhbC10aW1lIGF1ZGlvIGNhcHR1cmVcbiIpOwo+ICsKPiArCXJlcVsw XSA9IG1vZGU7Cj4gKwlyZXR1cm4gY2hhbWVsaXVtX3N0cmVhbV9jYWxsKGNsaWVudCwgU1RSRUFN X01FU1NBR0VfRFVNUF9SRUFMVElNRV9BVURJTywKPiArCQkJCSAgICAgcmVxLCBzaXplb2YocmVx KSwgTlVMTCwgMCk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBjaGFtZWxpdW1fc3RyZWFtX3JlY2Vp dmVfcmVhbHRpbWVfYXVkaW86Cj4gKyAqIEBwYWdlX2NvdW50OiBpZiBub24tTlVMTCwgd2lsbCBi ZSBzZXQgdG8gdGhlIGR1bXBlZCBwYWdlIG51bWJlcgo+ICsgKiBAYnVmOiBtdXN0IGVpdGhlciBw b2ludCB0byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBtZW1vcnkgcmVnaW9uIG9yIE5VTEwKPiAr ICogQGJ1Zl9sZW46IG51bWJlciBvZiBlbGVtZW50cyBvZiAqQGJ1ZiwgZm9yIHplcm8gaWYgQGJ1 ZiBpcyBOVUxMCj4gKyAqCj4gKyAqIFJlY2VpdmVzIG9uZSBhdWRpbyBwYWdlIGZyb20gdGhlIHN0 cmVhbWluZyBzZXJ2ZXIuCj4gKyAqCj4gKyAqIEluICJiZXN0IGVmZm9ydCIgbW9kZSwgc29tZSBw YWdlcyBjYW4gYmUgZHJvcHBlZC4gVGhpcyBjYW4gYmUgZGV0ZWN0ZWQgdmlhCj4gKyAqIHRoZSBw YWdlIGNvdW50Lgo+ICsgKgo+ICsgKiBidWZfbGVuIHdpbGwgYmUgc2V0IHRvIHRoZSBzaXplIG9m IHRoZSBwYWdlLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgo+ICsgKiBjYWxsaW5nIGZy ZWUoMykgb24gKmJ1Zi4KPiArICovCj4gK2Jvb2wgY2hhbWVsaXVtX3N0cmVhbV9yZWNlaXZlX3Jl YWx0aW1lX2F1ZGlvKHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQsCj4gKwkJCQkJICAg ICBzaXplX3QgKnBhZ2VfY291bnQsCj4gKwkJCQkJICAgICBpbnQzMl90ICoqYnVmLCBzaXplX3Qg KmJ1Zl9sZW4pCj4gK3sKPiArCWVudW0gc3RyZWFtX21lc3NhZ2Vfa2luZCBraW5kOwo+ICsJZW51 bSBzdHJlYW1fbWVzc2FnZV90eXBlIHR5cGU7Cj4gKwllbnVtIHN0cmVhbV9lcnJvciBlcnI7Cj4g KwlzaXplX3QgYm9keV9sZW47Cj4gKwljaGFyIHBhZ2VfY291bnRfYnVmWzRdOwo+ICsJaW50MzJf dCAqcHRyOwo+ICsKPiArCXdoaWxlICh0cnVlKSB7Cj4gKwkJaWYgKCFjaGFtZWxpdW1fc3RyZWFt X3JlYWRfaGVhZGVyKGNsaWVudCwgJmtpbmQsICZ0eXBlLAo+ICsJCQkJCQkgICZlcnIsICZib2R5 X2xlbikpCj4gKwkJCXJldHVybiBmYWxzZTsKPiArCj4gKwkJaWYgKGtpbmQgIT0gU1RSRUFNX01F U1NBR0VfREFUQSkgewo+ICsJCQlpZ3Rfd2FybigiRXhwZWN0ZWQgYSBkYXRhIG1lc3NhZ2UsIGdv dCBraW5kICVkXG4iLCBraW5kKTsKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsJCX0KPiArCQlpZiAo dHlwZSAhPSBTVFJFQU1fTUVTU0FHRV9EVU1QX1JFQUxUSU1FX0FVRElPKSB7Cj4gKwkJCWlndF93 YXJuKCJFeHBlY3RlZCByZWFsLXRpbWUgYXVkaW8gZHVtcCBtZXNzYWdlLCAiCj4gKwkJCQkgImdv dCB0eXBlICVkXG4iLCB0eXBlKTsKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsJCX0KPiArCj4gKwkJ aWYgKGVyciA9PSBTVFJFQU1fRVJST1JfTk9ORSkKPiArCQkJYnJlYWs7Cj4gKwkJZWxzZSBpZiAo ZXJyICE9IFNUUkVBTV9FUlJPUl9BVURJT19NRU1fT1ZFUkZMT1dfRFJPUCkgewo+ICsJCQlpZ3Rf d2FybigiUmVjZWl2ZWQgZXJyb3I6ICVzICglZClcbiIsCj4gKwkJCQkgc3RyZWFtX2Vycm9yX3N0 cihlcnIpLCBlcnIpOwo+ICsJCQlyZXR1cm4gZmFsc2U7Cj4gKwkJfQo+ICsKPiArCQlpZ3RfZGVi dWcoIkRyb3BwZWQgYW4gYXVkaW8gcGFnZSBiZWNhdXNlIG9mIGFuIG92ZXJmbG93XG4iKTsKPiAr CQlpZ3RfYXNzZXJ0KGJvZHlfbGVuID09IDApOwo+ICsJfQo+ICsKPiArCWlndF9hc3NlcnQoYm9k eV9sZW4gPj0gc2l6ZW9mKHBhZ2VfY291bnRfYnVmKSk7Cj4gKwo+ICsJaWYgKCFyZWFkX3dob2xl KGNsaWVudC0+ZmQsIHBhZ2VfY291bnRfYnVmLCBzaXplb2YocGFnZV9jb3VudF9idWYpKSkKPiAr CQlyZXR1cm4gZmFsc2U7Cj4gKwlpZiAocGFnZV9jb3VudCkKPiArCQkqcGFnZV9jb3VudCA9IG50 b2hsKCoodWludDMyX3QgKikgJnBhZ2VfY291bnRfYnVmWzBdKTsKPiArCWJvZHlfbGVuIC09IHNp emVvZihwYWdlX2NvdW50X2J1Zik7Cj4gKwo+ICsJaWd0X2Fzc2VydChib2R5X2xlbiAlIHNpemVv ZihpbnQzMl90KSA9PSAwKTsKPiArCWlmICgqYnVmX2xlbiAqIHNpemVvZihpbnQzMl90KSAhPSBi b2R5X2xlbikgewo+ICsJCXB0ciA9IHJlYWxsb2MoKmJ1ZiwgYm9keV9sZW4pOwo+ICsJCWlmICgh cHRyKSB7Cj4gKwkJCWlndF93YXJuKCJyZWFsbG9jIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVy cm5vKSk7Cj4gKwkJCXJldHVybiBmYWxzZTsKPiArCQl9Cj4gKwkJKmJ1ZiA9IHB0cjsKPiArCQkq YnVmX2xlbiA9IGJvZHlfbGVuIC8gc2l6ZW9mKGludDMyX3QpOwo+ICsJfQo+ICsKPiArCXJldHVy biByZWFkX3dob2xlKGNsaWVudC0+ZmQsICpidWYsIGJvZHlfbGVuKTsKPiArfQo+ICsKPiArLyoq Cj4gKyAqIGNoYW1lbGl1bV9zdHJlYW1fc3RvcF9yZWFsdGltZV9hdWRpbzoKPiArICoKPiArICog U3RvcHMgcmVhbC10aW1lIGF1ZGlvIGNhcHR1cmUuIFRoaXMgYWxzbyBkcm9wcyBhbnkgYnVmZmVy ZWQgYXVkaW8gcGFnZXMuCj4gKyAqIFRoZSBjYWxsZXIgc2hvdWxkbid0IGNhbGwgI2NoYW1lbGl1 bV9zdHJlYW1fcmVjZWl2ZV9yZWFsdGltZV9hdWRpbyBhZnRlcgo+ICsgKiBzdG9wcGluZyBhdWRp byBjYXB0dXJlLgo+ICsgKi8KPiArYm9vbCBjaGFtZWxpdW1fc3RyZWFtX3N0b3BfcmVhbHRpbWVf YXVkaW8oc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCkKPiArewo+ICsJZW51bSBzdHJl YW1fbWVzc2FnZV9raW5kIGtpbmQ7Cj4gKwllbnVtIHN0cmVhbV9tZXNzYWdlX3R5cGUgdHlwZTsK PiArCWVudW0gc3RyZWFtX2Vycm9yIGVycjsKPiArCXNpemVfdCBsZW47Cj4gKwo+ICsJaWd0X2Rl YnVnKCJTdG9wcGluZyByZWFsLXRpbWUgYXVkaW8gY2FwdHVyZVxuIik7Cj4gKwo+ICsJaWYgKCFj aGFtZWxpdW1fc3RyZWFtX3dyaXRlX3JlcXVlc3QoY2xpZW50LAo+ICsJCQkJCSAgICBTVFJFQU1f TUVTU0FHRV9TVE9QX0RVTVBfQVVESU8sCj4gKwkJCQkJICAgIE5VTEwsIDApKQo+ICsJCXJldHVy biBmYWxzZTsKPiArCj4gKwl3aGlsZSAodHJ1ZSkgewo+ICsJCWlmICghY2hhbWVsaXVtX3N0cmVh bV9yZWFkX2hlYWRlcihjbGllbnQsICZraW5kLCAmdHlwZSwKPiArCQkJCQkJICAmZXJyLCAmbGVu KSkKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCQlpZiAoa2luZCA9PSBTVFJFQU1fTUVTU0FH RV9SRVNQT05TRSkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCWlmICghcmVhZF9hbmRfZGlzY2FyZChj bGllbnQtPmZkLCBsZW4pKQo+ICsJCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJaWYgKHR5 cGUgIT0gU1RSRUFNX01FU1NBR0VfU1RPUF9EVU1QX0FVRElPKSB7Cj4gKwkJaWd0X3dhcm4oIlVu ZXhwZWN0ZWQgcmVzcG9uc2UgdHlwZSAlZFxuIiwgdHlwZSk7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ ICsJfQo+ICsJaWYgKGVyciAhPSBTVFJFQU1fRVJST1JfTk9ORSkgewo+ICsJCWlndF93YXJuKCJS ZWNlaXZlZCBlcnJvcjogJXMgKCVkKVxuIiwKPiArCQkJIHN0cmVhbV9lcnJvcl9zdHIoZXJyKSwg ZXJyKTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwlpZiAobGVuICE9IDApIHsKPiArCQlp Z3Rfd2FybigiRXhwZWN0ZWQgYW4gZW1wdHkgcmVzcG9uc2UsIGdvdCAlenUgYnl0ZXNcbiIsIGxl bik7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4g Kwo+ICsvKioKPiArICogY2hhbWVsaXVtX3N0cmVhbV9hdWRpb19mb3JtYXQ6Cj4gKyAqCj4gKyAq IEdldHMgdGhlIGZvcm1hdCB1c2VkIGZvciBhdWRpbyBwYWdlcy4KPiArICoKPiArICogRGF0YSB3 aWxsIGFsd2F5cyBiZSBjYXB0dXJlZCBpbiByYXcgcGFnZXMgb2YgUzMyX0xFIGVsZW1lbnRzLiBU aGlzIGZ1bmN0aW9uCj4gKyAqIGV4cG9zZXMgdGhlIHNhbXBsaW5nIHJhdGUgYW5kIHRoZSBudW1i ZXIgb2YgY2hhbm5lbHMuCj4gKyAqLwo+ICt2b2lkIGNoYW1lbGl1bV9zdHJlYW1fYXVkaW9fZm9y bWF0KHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpzdHJlYW0sCj4gKwkJCQkgICBpbnQgKnJhdGUs IGludCAqY2hhbm5lbHMpCj4gK3sKPiArCS8qIFRPRE86IHRoZSBDaGFtZWxpdW0gc3RyZWFtaW5n IHNlcnZlciBkb2Vzbid0IGV4cG9zZSB0aG9zZSB5ZXQuCj4gKwkgKiBKdXN0IGhhcmRjb2RlIHRo ZSB2YWx1ZXMgZm9yIG5vdy4gKi8KPiArCSpyYXRlID0gNDgwMDA7Cj4gKwkqY2hhbm5lbHMgPSA4 Owo+ICt9Cj4gKwo+ICsvKioKPiArICogY2hhbWVsaXVtX3N0cmVhbV9pbml0Ogo+ICsgKgo+ICsg KiBDb25uZWN0cyB0byB0aGUgQ2hhbWVsaXVtIHN0cmVhbWluZyBzZXJ2ZXIuCj4gKyAqLwo+ICtz dHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqY2hhbWVsaXVtX3N0cmVhbV9pbml0KHZvaWQpCj4gK3sK PiArCXN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQ7Cj4gKwo+ICsJY2xpZW50ID0gY2Fs bG9jKDEsIHNpemVvZigqY2xpZW50KSk7Cj4gKwo+ICsJaWYgKCFjaGFtZWxpdW1fc3RyZWFtX3Jl YWRfY29uZmlnKGNsaWVudCkpCj4gKwkJZ290byBlcnJvcl9jbGllbnQ7Cj4gKwlpZiAoIWNoYW1l bGl1bV9zdHJlYW1fY29ubmVjdChjbGllbnQpKQo+ICsJCWdvdG8gZXJyb3JfY2xpZW50Owo+ICsJ aWYgKCFjaGFtZWxpdW1fc3RyZWFtX2NoZWNrX3ZlcnNpb24oY2xpZW50KSkKPiArCQlnb3RvIGVy cm9yX2ZkOwo+ICsKPiArCXJldHVybiBjbGllbnQ7Cj4gKwo+ICtlcnJvcl9mZDoKPiArCWNsb3Nl KGNsaWVudC0+ZmQpOwo+ICtlcnJvcl9jbGllbnQ6Cj4gKwlmcmVlKGNsaWVudCk7Cj4gKwlyZXR1 cm4gTlVMTDsKPiArfQo+ICsKPiArdm9pZCBjaGFtZWxpdW1fc3RyZWFtX2RlaW5pdChzdHJ1Y3Qg Y2hhbWVsaXVtX3N0cmVhbSAqY2xpZW50KQo+ICt7Cj4gKwlpZiAoY2xvc2UoY2xpZW50LT5mZCkg IT0gMCkKPiArCQlpZ3Rfd2FybigiY2xvc2UgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8p KTsKPiArCWZyZWUoY2xpZW50KTsKPiArfQo+IGRpZmYgLS1naXQgYS9saWIvaWd0X2NoYW1lbGl1 bV9zdHJlYW0uaCBiL2xpYi9pZ3RfY2hhbWVsaXVtX3N0cmVhbS5oCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQKPiBpbmRleCAwMDAwMDAwMC4uZGU0ZTk5MzEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIv bGliL2lndF9jaGFtZWxpdW1fc3RyZWFtLmgKPiBAQCAtMCwwICsxLDUyIEBACj4gKy8qCj4gKyAq IENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiAr ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdh cmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5j bHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICog U29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hU IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICog TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09G VFdBUkUuCj4gKyAqCj4gKyAqIEF1dGhvcnM6IFNpbW9uIFNlciA8c2ltb24uc2VyQGludGVsLmNv bT4KPiArICovCj4gKwo+ICsjaWZuZGVmIElHVF9DSEFNRUxJVU1fU1RSRUFNX0gKPiArI2RlZmlu ZSBJR1RfQ0hBTUVMSVVNX1NUUkVBTV9ICj4gKwo+ICsjaW5jbHVkZSAiY29uZmlnLmgiCj4gKwo+ ICtlbnVtIGNoYW1lbGl1bV9zdHJlYW1fcmVhbHRpbWVfbW9kZSB7Cj4gKwlDSEFNRUxJVU1fU1RS RUFNX1JFQUxUSU1FX05PTkUgPSAwLAo+ICsJLyogc3RvcCBkdW1waW5nIHdoZW4gb3ZlcmZsb3cg Ki8KPiArCUNIQU1FTElVTV9TVFJFQU1fUkVBTFRJTUVfU1RPUF9XSEVOX09WRVJGTE9XID0gMSwK PiArCS8qIGRyb3AgZGF0YSBvbiBvdmVyZmxvdyAqLwo+ICsJQ0hBTUVMSVVNX1NUUkVBTV9SRUFM VElNRV9CRVNUX0VGRk9SVCA9IDIsCj4gK307Cj4gKwo+ICtzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVh bTsKPiArCj4gK3N0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjaGFtZWxpdW1fc3RyZWFtX2luaXQo dm9pZCk7Cj4gK3ZvaWQgY2hhbWVsaXVtX3N0cmVhbV9kZWluaXQoc3RydWN0IGNoYW1lbGl1bV9z dHJlYW0gKmNsaWVudCk7Cj4gK2Jvb2wgY2hhbWVsaXVtX3N0cmVhbV9kdW1wX3JlYWx0aW1lX2F1 ZGlvKHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQsCj4gKwkJCQkJICBlbnVtIGNoYW1l bGl1bV9zdHJlYW1fcmVhbHRpbWVfbW9kZSBtb2RlKTsKPiArdm9pZCBjaGFtZWxpdW1fc3RyZWFt X2F1ZGlvX2Zvcm1hdChzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqc3RyZWFtLAo+ICsJCQkJICAg aW50ICpyYXRlLCBpbnQgKmNoYW5uZWxzKTsKPiArYm9vbCBjaGFtZWxpdW1fc3RyZWFtX3JlY2Vp dmVfcmVhbHRpbWVfYXVkaW8oc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCwKPiArCQkJ CQkgICAgIHNpemVfdCAqcGFnZV9jb3VudCwKPiArCQkJCQkgICAgIGludDMyX3QgKipidWYsIHNp emVfdCAqYnVmX2xlbik7Cj4gK2Jvb2wgY2hhbWVsaXVtX3N0cmVhbV9zdG9wX3JlYWx0aW1lX2F1 ZGlvKHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQpOwo+ICsKPiArI2VuZGlmCj4gZGlm ZiAtLWdpdCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5idWlsZAo+IGluZGV4IGE4NDYy OTMzLi5lZWFkMGFmYiAxMDA2NDQKPiAtLS0gYS9saWIvbWVzb24uYnVpbGQKPiArKysgYi9saWIv bWVzb24uYnVpbGQKPiBAQCAtOTIsNyArOTIsNyBAQCBpZiB2YWxncmluZC5mb3VuZCgpCj4gIGVu ZGlmCj4gIAo+ICBpZiBnc2wuZm91bmQoKQo+IC0JbGliX2RlcHMgKz0gWyBnc2wgXQo+ICsJbGli X2RlcHMgKz0gZ3NsCj4gIAlsaWJfc291cmNlcyArPSBbICdpZ3RfZnJhbWUuYycsICdpZ3RfYXVk aW8uYycgXQo+ICBlbmRpZgo+ICAKPiBAQCAtMTAxLDkgKzEwMSwxMCBAQCBpZiBhbHNhLmZvdW5k KCkKPiAgCWxpYl9zb3VyY2VzICs9ICdpZ3RfYWxzYS5jJwo+ICBlbmRpZgo+ICAKPiAtaWYgY2hh bWVsaXVtLmZvdW5kKCkKPiAraWYgY2hhbWVsaXVtX2ZvdW5kCj4gIAlsaWJfZGVwcyArPSBjaGFt ZWxpdW0KPiAgCWxpYl9zb3VyY2VzICs9ICdpZ3RfY2hhbWVsaXVtLmMnCj4gKwlsaWJfc291cmNl cyArPSAnaWd0X2NoYW1lbGl1bV9zdHJlYW0uYycKPiAgZW5kaWYKPiAgCj4gIHNyY2RpciA9IGpv aW5fcGF0aHMobWVzb24uc291cmNlX3Jvb3QoKSwgJ3Rlc3RzJykKPiBkaWZmIC0tZ2l0IGEvbWVz b24uYnVpbGQgYi9tZXNvbi5idWlsZAo+IGluZGV4IDU1NzQwMGE1Li5iZTZkZmY5ZCAxMDA2NDQK PiAtLS0gYS9tZXNvbi5idWlsZAo+ICsrKyBiL21lc29uLmJ1aWxkCj4gQEAgLTY0LDggKzY0LDYg QEAgX2J1aWxkX292ZXJsYXkgPSBmYWxzZQo+ICBfb3ZlcmxheV9yZXF1aXJlZCA9IGZhbHNlCj4g IF9idWlsZF9tYW4gPSBmYWxzZQo+ICBfbWFuX3JlcXVpcmVkID0gZmFsc2UKPiAtX2J1aWxkX2F1 ZGlvID0gZmFsc2UKPiAtX2F1ZGlvX3JlcXVpcmVkID0gZmFsc2UKPiAgX2J1aWxkX2NoYW1lbGl1 bSA9IGZhbHNlCj4gIF9jaGFtZWxpdW1fcmVxdWlyZWQgPSBmYWxzZQo+ICBfYnVpbGRfZG9jcyA9 IGZhbHNlCj4gQEAgLTc5LDcgKzc3LDYgQEAgYnVpbGRfb3ZlcmxheSA9IGdldF9vcHRpb24oJ2J1 aWxkX292ZXJsYXknKQo+ICBvdmVybGF5X2JhY2tlbmRzID0gZ2V0X29wdGlvbignb3ZlcmxheV9i YWNrZW5kcycpCj4gIGJ1aWxkX21hbiA9IGdldF9vcHRpb24oJ2J1aWxkX21hbicpCj4gIHdpdGhf dmFsZ3JpbmQgPSBnZXRfb3B0aW9uKCd3aXRoX3ZhbGdyaW5kJykKPiAtYnVpbGRfYXVkaW8gPSBn ZXRfb3B0aW9uKCdidWlsZF9hdWRpbycpCj4gIGJ1aWxkX2NoYW1lbGl1bSA9IGdldF9vcHRpb24o J2J1aWxkX2NoYW1lbGl1bScpCj4gIGJ1aWxkX2RvY3MgPSBnZXRfb3B0aW9uKCdidWlsZF9kb2Nz JykKPiAgYnVpbGRfdGVzdHMgPSBnZXRfb3B0aW9uKCdidWlsZF90ZXN0cycpCj4gQEAgLTkxLDgg Kzg4LDYgQEAgX2J1aWxkX292ZXJsYXkgPSBidWlsZF9vdmVybGF5ICE9ICdmYWxzZScKPiAgX292 ZXJsYXlfcmVxdWlyZWQgPSBidWlsZF9vdmVybGF5ID09ICd0cnVlJwo+ICBfYnVpbGRfbWFuID0g YnVpbGRfbWFuICE9ICdmYWxzZScKPiAgX21hbl9yZXF1aXJlZCA9IGJ1aWxkX21hbiA9PSAndHJ1 ZScKPiAtX2J1aWxkX2F1ZGlvID0gYnVpbGRfYXVkaW8gIT0gJ2ZhbHNlJwo+IC1fYXVkaW9fcmVx dWlyZWQgPSBidWlsZF9hdWRpbyA9PSAndHJ1ZScKPiAgX2J1aWxkX2NoYW1lbGl1bSA9IGJ1aWxk X2NoYW1lbGl1bSAhPSAnZmFsc2UnCj4gIF9jaGFtZWxpdW1fcmVxdWlyZWQgPSBidWlsZF9jaGFt ZWxpdW0gPT0gJ3RydWUnCj4gIF9idWlsZF9kb2NzID0gYnVpbGRfZG9jcyAhPSAnZmFsc2UnCj4g QEAgLTE2NiwyNiArMTYxLDYgQEAgY2Fpcm8gPSBkZXBlbmRlbmN5KCdjYWlybycsIHZlcnNpb24g OiAnPjEuMTIuMCcsIHJlcXVpcmVkIDogdHJ1ZSkKPiAgbGlidWRldiA9IGRlcGVuZGVuY3koJ2xp YnVkZXYnLCByZXF1aXJlZCA6IHRydWUpCj4gIGdsaWIgPSBkZXBlbmRlbmN5KCdnbGliLTIuMCcs IHJlcXVpcmVkIDogdHJ1ZSkKPiAgCj4gLWdzbCA9IG51bGxfZGVwCj4gLWFsc2EgPSBudWxsX2Rl cAo+IC1pZiBfYnVpbGRfYXVkaW8gb3IgX2J1aWxkX2NoYW1lbGl1bQo+IC0JZ3NsID0gZGVwZW5k ZW5jeSgnZ3NsJywgcmVxdWlyZWQgOiBfYXVkaW9fcmVxdWlyZWQgb3IgX2NoYW1lbGl1bV9yZXF1 aXJlZCkKPiAtZW5kaWYKPiAtaWYgX2J1aWxkX2F1ZGlvCj4gLQlhbHNhID0gZGVwZW5kZW5jeSgn YWxzYScsIHJlcXVpcmVkIDogX2F1ZGlvX3JlcXVpcmVkKQo+IC1lbmRpZgo+IC0KPiAtYXVkaW9p bmZvID0gJ05vJwo+IC1pZiBfYnVpbGRfYXVkaW8gYW5kIGFsc2EuZm91bmQoKSBhbmQgZ3NsLmZv dW5kKCkKPiAtCWF1ZGlvaW5mbyA9ICdZZXMnCj4gLWVsc2UKPiAtCWlmIF9hdWRpb19yZXF1aXJl ZAo+IC0JCWVycm9yKCdDYW5ub3QgYnVpbGQgYXVkaW8gdGVzdCBkdWUgdG8gbWlzc2luZyBkZXBl bmRlbmNpZXMnKQo+IC0JZW5kaWYKPiAtCV9idWlsZF9hdWRpbyA9IGZhbHNlCj4gLWVuZGlmCj4g LWJ1aWxkX2luZm8gKz0gJ0J1aWxkIGF1ZGlvIHRlc3Q6ICcgKyBhdWRpb2luZm8KPiAtCj4gIHht bHJwYyA9IGRlcGVuZGVuY3koJ3htbHJwYycsIHJlcXVpcmVkIDogZmFsc2UpCj4gIHhtbHJwY191 dGlsID0gZGVwZW5kZW5jeSgneG1scnBjX3V0aWwnLCByZXF1aXJlZCA6IGZhbHNlKQo+ICB4bWxy cGNfY2xpZW50ID0gZGVwZW5kZW5jeSgneG1scnBjX2NsaWVudCcsIHJlcXVpcmVkIDogZmFsc2Up Cj4gQEAgLTE5NywyMSArMTcyLDMyIEBAIGlmIG5vdCB4bWxycGMuZm91bmQoKSBhbmQgeG1scnBj X2NtZC5mb3VuZCgpCj4gIAo+ICAJaWYgbGlic19jbWQucmV0dXJuY29kZSgpID09IDAgYW5kIGNm bGFnc19jbWQucmV0dXJuY29kZSgpID09IDAKPiAgCQl4bWxycGMgPSBkZWNsYXJlX2RlcGVuZGVu Y3koY29tcGlsZV9hcmdzOiBjZmxhZ3NfY21kLnN0ZG91dCgpLnN0cmlwKCkuc3BsaXQoKSwKPiAt CQkJCQkgICBsaW5rX2FyZ3MgOiBsaWJzX2NtZC5zdGRvdXQoKS5zdHJpcCgpLnNwbGl0KCkpCj4g KwkJCQkJICAgIGxpbmtfYXJncyA6IGxpYnNfY21kLnN0ZG91dCgpLnN0cmlwKCkuc3BsaXQoKSkK PiAgCQl4bWxycGNfdXRpbCA9IGRlY2xhcmVfZGVwZW5kZW5jeSgpCj4gIAkJeG1scnBjX2NsaWVu dCA9IGRlY2xhcmVfZGVwZW5kZW5jeSgpCj4gIAllbmRpZgo+ICBlbmRpZgo+ICAKPiArZ3NsID0g bnVsbF9kZXAKPiArYWxzYSA9IG51bGxfZGVwCj4gIGNoYW1lbGl1bSA9IG51bGxfZGVwCj4gK2No YW1lbGl1bV9mb3VuZCA9IGZhbHNlICMgVE9ETzogdXNlIGEgZGlzYWJsZXIgb2JqZWN0IGluc3Rl YWQKPiAgY2hhbWVsaXVtaW5mbyA9ICdObycKPiAtaWYgX2J1aWxkX2NoYW1lbGl1bSBhbmQgZ3Ns LmZvdW5kKCkgYW5kIHhtbHJwYy5mb3VuZCgpIGFuZCB4bWxycGNfdXRpbC5mb3VuZCgpIGFuZCB4 bWxycGNfY2xpZW50LmZvdW5kKCkKPiAtCWNoYW1lbGl1bSA9IGRlY2xhcmVfZGVwZW5kZW5jeShk ZXBlbmRlbmNpZXMgOiBbIHhtbHJwYywKPiAtCQkJCQkJCXhtbHJwY191dGlsLCB4bWxycGNfY2xp ZW50XSkKPiAtCWNvbmZpZy5zZXQoJ0hBVkVfQ0hBTUVMSVVNJywgMSkKPiAtCWNoYW1lbGl1bWlu Zm8gPSAnWWVzJwo+IC1lbGlmIF9jaGFtZWxpdW1fcmVxdWlyZWQKPiAtCWVycm9yKCdDYW5ub3Qg YnVpbGQgY2hhbWVsaXVtIHRlc3QgZHVlIHRvIG1pc3NpbmcgZGVwZW5kZW5jaWVzJykKPiAraWYg X2J1aWxkX2NoYW1lbGl1bQo+ICsJZ3NsID0gZGVwZW5kZW5jeSgnZ3NsJywgcmVxdWlyZWQgOiBf Y2hhbWVsaXVtX3JlcXVpcmVkKQo+ICsJYWxzYSA9IGRlcGVuZGVuY3koJ2Fsc2EnLCByZXF1aXJl ZCA6IF9jaGFtZWxpdW1fcmVxdWlyZWQpCj4gKwljaGFtZWxpdW0gPSBkZWNsYXJlX2RlcGVuZGVu Y3koZGVwZW5kZW5jaWVzIDogWwo+ICsJCXhtbHJwYywKPiArCQl4bWxycGNfdXRpbCwKPiArCQl4 bWxycGNfY2xpZW50LAo+ICsJCWdzbCwKPiArCQlhbHNhLAo+ICsJXSwgcmVxdWlyZWQgOiBfY2hh bWVsaXVtX3JlcXVpcmVkKQo+ICsJaWYgeG1scnBjLmZvdW5kKCkgYW5kIHhtbHJwY191dGlsLmZv dW5kKCkgYW5kIHhtbHJwY19jbGllbnQuZm91bmQoKSBhbmQgZ3NsLmZvdW5kKCkgYW5kIGFsc2Eu Zm91bmQoKQo+ICsJCWNvbmZpZy5zZXQoJ0hBVkVfQ0hBTUVMSVVNJywgMSkKPiArCQljaGFtZWxp dW1pbmZvID0gJ1llcycKPiArCQljaGFtZWxpdW1fZm91bmQgPSB0cnVlCj4gKwllbmRpZgo+ICBl bmRpZgo+ICBidWlsZF9pbmZvICs9ICdCdWlsZCBDaGFtZWxpdW0gdGVzdDogJyArIGNoYW1lbGl1 bWluZm8KPiAgCj4gZGlmZiAtLWdpdCBhL21lc29uX29wdGlvbnMudHh0IGIvbWVzb25fb3B0aW9u cy50eHQKPiBpbmRleCAwY2QzYjM1MC4uODg4ZWZlNTYgMTAwNjQ0Cj4gLS0tIGEvbWVzb25fb3B0 aW9ucy50eHQKPiArKysgYi9tZXNvbl9vcHRpb25zLnR4dAo+IEBAIC0xMCwxMiArMTAsNiBAQCBv cHRpb24oJ292ZXJsYXlfYmFja2VuZHMnLAo+ICAgICAgICAgY2hvaWNlcyA6IFsgJ2F1dG8nLCAn eCcsICd4dicgXSwKPiAgICAgICAgIGRlc2NyaXB0aW9uIDogJ092ZXJsYXkgYmFja2VuZHMgdG8g ZW5hYmxlJykKPiAgCj4gLW9wdGlvbignYnVpbGRfYXVkaW8nLAo+IC0gICAgICAgdHlwZSA6ICdj b21ibycsCj4gLSAgICAgICB2YWx1ZSA6ICdhdXRvJywKPiAtICAgICAgIGNob2ljZXMgOiBbJ2F1 dG8nLCAndHJ1ZScsICdmYWxzZSddLAo+IC0gICAgICAgZGVzY3JpcHRpb24gOiAnQnVpbGQgYXVk aW8gdGVzdCcpCj4gLQo+ICBvcHRpb24oJ2J1aWxkX2NoYW1lbGl1bScsCj4gICAgICAgICB0eXBl IDogJ2NvbWJvJywKPiAgICAgICAgIHZhbHVlIDogJ2F1dG8nLAo+IGRpZmYgLS1naXQgYS90ZXN0 cy9hdWRpby5jIGIvdGVzdHMvYXVkaW8uYwo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDU2MDg3NmEzLi4wMDAwMDAwMAo+IC0tLSBhL3Rlc3RzL2F1ZGlvLmMKPiArKysgL2Rldi9u dWxsCj4gQEAgLTEsMTkzICswLDAgQEAKPiAtLyoKPiAtICogQ29weXJpZ2h0IMKpIDIwMTcgSW50 ZWwgQ29ycG9yYXRpb24KPiAtICoKPiAtICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiAtICogY29weSBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwKPiAtICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+IC0gKiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiAt ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlCj4gLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gLSAqCj4gLSAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl IG5leHQKPiAtICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+IC0gKiBTb2Z0d2FyZS4KPiAtICoKPiAtICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKPiAtICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gLSAqIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT SEFMTAo+IC0gKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+IC0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g QU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+IC0gKiBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTCj4gLSAqIElOIFRIRSBTT0ZUV0FSRS4KPiAtICoKPiAtICogQXV0 aG9yczoKPiAtICogIFBhdWwgS29jaWFsa293c2tpIDxwYXVsLmtvY2lhbGtvd3NraUBsaW51eC5p bnRlbC5jb20+Cj4gLSAqLwo+IC0KPiAtI2luY2x1ZGUgImNvbmZpZy5oIgo+IC0jaW5jbHVkZSAi aWd0LmgiCj4gLQo+IC0jZGVmaW5lIFBMQVlCQUNLX0NIQU5ORUxTCTIKPiAtI2RlZmluZSBQTEFZ QkFDS19GUkFNRVMJCTEwMjQKPiAtCj4gLSNkZWZpbmUgQ0FQVFVSRV9TQU1QTEVfUkFURQk0ODAw MAo+IC0jZGVmaW5lIENBUFRVUkVfQ0hBTk5FTFMJMgo+IC0jZGVmaW5lIENBUFRVUkVfREVWSUNF X05BTUUJImRlZmF1bHQiCj4gLSNkZWZpbmUgQ0FQVFVSRV9GUkFNRVMJCTIwNDgKPiAtCj4gLSNk ZWZpbmUgUlVOX1RJTUVPVVQJCTIwMDAKPiAtCj4gLXN0cnVjdCB0ZXN0X2RhdGEgewo+IC0Jc3Ry dWN0IGFsc2EgKmFsc2E7Cj4gLQlzdHJ1Y3QgYXVkaW9fc2lnbmFsICpzaWduYWw7Cj4gLQo+IC0J aW50IHN0cmVhazsKPiAtfTsKPiAtCj4gLXN0YXRpYyBpbnQgc2FtcGxpbmdfcmF0ZXNbXSA9IHsK PiAtCTMyMDAwLAo+IC0JNDQxMDAsCj4gLQk0ODAwMCwKPiAtCTg4MjAwLAo+IC0JOTYwMDAsCj4g LQkxNzY0MDAsCj4gLQkxOTIwMDAsCj4gLX07Cj4gLQo+IC1zdGF0aWMgaW50IHNhbXBsaW5nX3Jh dGVzX2NvdW50ID0gc2l6ZW9mKHNhbXBsaW5nX3JhdGVzKSAvIHNpemVvZihpbnQpOwo+IC0KPiAt c3RhdGljIGludCB0ZXN0X2ZyZXF1ZW5jaWVzW10gPSB7Cj4gLQkzMDAsCj4gLQk2MDAsCj4gLQkx MjAwLAo+IC0JODAwMDAsCj4gLQkxMDAwMCwKPiAtfTsKPiAtCj4gLXN0YXRpYyBpbnQgdGVzdF9m cmVxdWVuY2llc19jb3VudCA9IHNpemVvZih0ZXN0X2ZyZXF1ZW5jaWVzKSAvIHNpemVvZihpbnQp Owo+IC0KPiAtc3RhdGljIGludCBvdXRwdXRfY2FsbGJhY2sodm9pZCAqZGF0YSwgc2hvcnQgKmJ1 ZmZlciwgaW50IGZyYW1lcykKPiAtewo+IC0Jc3RydWN0IHRlc3RfZGF0YSAqdGVzdF9kYXRhID0g KHN0cnVjdCB0ZXN0X2RhdGEgKikgZGF0YTsKPiAtCj4gLQlhdWRpb19zaWduYWxfZmlsbCh0ZXN0 X2RhdGEtPnNpZ25hbCwgYnVmZmVyLCBmcmFtZXMpOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4g LQo+IC1zdGF0aWMgaW50IGlucHV0X2NhbGxiYWNrKHZvaWQgKmRhdGEsIHNob3J0ICpidWZmZXIs IGludCBmcmFtZXMpCj4gLXsKPiAtCXN0cnVjdCB0ZXN0X2RhdGEgKnRlc3RfZGF0YSA9IChzdHJ1 Y3QgdGVzdF9kYXRhICopIGRhdGE7Cj4gLQlib29sIGRldGVjdDsKPiAtCj4gLQlkZXRlY3QgPSBh dWRpb19zaWduYWxfZGV0ZWN0KHRlc3RfZGF0YS0+c2lnbmFsLCBDQVBUVVJFX0NIQU5ORUxTLAo+ IC0JCQkJICAgICBDQVBUVVJFX1NBTVBMRV9SQVRFLCBidWZmZXIsIGZyYW1lcyk7Cj4gLQlpZiAo ZGV0ZWN0KQo+IC0JCXRlc3RfZGF0YS0+c3RyZWFrKys7Cj4gLQllbHNlCj4gLQkJdGVzdF9kYXRh LT5zdHJlYWsgPSAwOwo+IC0KPiAtCS8qIEEgc3RyZWFrIG9mIDMgZ2l2ZXMgY29uZmlkZW5jZSB0 aGF0IHRoZSBzaWduYWwgaXMgZ29vZC4gKi8KPiAtCWlmICh0ZXN0X2RhdGEtPnN0cmVhayA9PSAz KQo+IC0JCXJldHVybiAxOwo+IC0KPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9p ZCB0ZXN0X2ludGVncml0eShjb25zdCBjaGFyICpkZXZpY2VfbmFtZSkKPiAtewo+IC0Jc3RydWN0 IHRlc3RfZGF0YSBkYXRhOwo+IC0JaW50IHNhbXBsaW5nX3JhdGU7Cj4gLQlib29sIHJ1biA9IGZh bHNlOwo+IC0JYm9vbCB0ZXN0Owo+IC0JaW50IGksIGo7Cj4gLQlpbnQgcmV0Owo+IC0KPiAtCWRh dGEuYWxzYSA9IGFsc2FfaW5pdCgpOwo+IC0JaWd0X2Fzc2VydChkYXRhLmFsc2EpOwo+IC0KPiAt CXJldCA9IGFsc2Ffb3Blbl9pbnB1dChkYXRhLmFsc2EsIENBUFRVUkVfREVWSUNFX05BTUUpOwo+ IC0JaWd0X2Fzc2VydChyZXQgPj0gMCk7Cj4gLQo+IC0JYWxzYV9jb25maWd1cmVfaW5wdXQoZGF0 YS5hbHNhLCBDQVBUVVJFX0NIQU5ORUxTLAo+IC0JCQkgICAgIENBUFRVUkVfU0FNUExFX1JBVEUp Owo+IC0KPiAtCWFsc2FfcmVnaXN0ZXJfaW5wdXRfY2FsbGJhY2soZGF0YS5hbHNhLCBpbnB1dF9j YWxsYmFjaywgJmRhdGEsCj4gLQkJCQkgICAgIENBUFRVUkVfRlJBTUVTKTsKPiAtCj4gLQlmb3Ig KGkgPSAwOyBpIDwgc2FtcGxpbmdfcmF0ZXNfY291bnQ7IGkrKykgewo+IC0JCXJldCA9IGFsc2Ff b3Blbl9vdXRwdXQoZGF0YS5hbHNhLCBkZXZpY2VfbmFtZSk7Cj4gLQkJaWd0X2Fzc2VydChyZXQg Pj0gMCk7Cj4gLQo+IC0JCXNhbXBsaW5nX3JhdGUgPSBzYW1wbGluZ19yYXRlc1tpXTsKPiAtCj4g LQkJdGVzdCA9IGFsc2FfdGVzdF9vdXRwdXRfY29uZmlndXJhdGlvbihkYXRhLmFsc2EsCj4gLQkJ CQkJCSAgICAgIFBMQVlCQUNLX0NIQU5ORUxTLAo+IC0JCQkJCQkgICAgICBzYW1wbGluZ19yYXRl KTsKPiAtCQlpZiAoIXRlc3QpIHsKPiAtCQkJYWxzYV9jbG9zZV9vdXRwdXQoZGF0YS5hbHNhKTsK PiAtCQkJY29udGludWU7Cj4gLQkJfQo+IC0KPiAtCQlpZ3RfZGVidWcoIlRlc3Rpbmcgd2l0aCBz YW1wbGluZyByYXRlICVkXG4iLCBzYW1wbGluZ19yYXRlKTsKPiAtCj4gLQkJYWxzYV9jb25maWd1 cmVfb3V0cHV0KGRhdGEuYWxzYSwgUExBWUJBQ0tfQ0hBTk5FTFMsCj4gLQkJCQkgICAgICAgc2Ft cGxpbmdfcmF0ZSk7Cj4gLQo+IC0JCWRhdGEuc2lnbmFsID0gYXVkaW9fc2lnbmFsX2luaXQoUExB WUJBQ0tfQ0hBTk5FTFMsCj4gLQkJCQkJCXNhbXBsaW5nX3JhdGUpOwo+IC0JCWlndF9hc3NlcnQo ZGF0YS5zaWduYWwpOwo+IC0KPiAtCQlmb3IgKGogPSAwOyBqIDwgdGVzdF9mcmVxdWVuY2llc19j b3VudDsgaisrKQo+IC0JCQlhdWRpb19zaWduYWxfYWRkX2ZyZXF1ZW5jeShkYXRhLnNpZ25hbCwK PiAtCQkJCQkJICAgdGVzdF9mcmVxdWVuY2llc1tqXSk7Cj4gLQo+IC0JCWF1ZGlvX3NpZ25hbF9z eW50aGVzaXplKGRhdGEuc2lnbmFsKTsKPiAtCj4gLQkJYWxzYV9yZWdpc3Rlcl9vdXRwdXRfY2Fs bGJhY2soZGF0YS5hbHNhLCBvdXRwdXRfY2FsbGJhY2ssCj4gLQkJCQkJICAgICAgJmRhdGEsIFBM QVlCQUNLX0ZSQU1FUyk7Cj4gLQo+IC0JCWRhdGEuc3RyZWFrID0gMDsKPiAtCj4gLQkJcmV0ID0g YWxzYV9ydW4oZGF0YS5hbHNhLCBSVU5fVElNRU9VVCk7Cj4gLQkJaWd0X2Fzc2VydChyZXQgPiAw KTsKPiAtCj4gLQkJYXVkaW9fc2lnbmFsX2NsZWFuKGRhdGEuc2lnbmFsKTsKPiAtCQlmcmVlKGRh dGEuc2lnbmFsKTsKPiAtCj4gLQkJYWxzYV9jbG9zZV9vdXRwdXQoZGF0YS5hbHNhKTsKPiAtCj4g LQkJcnVuID0gdHJ1ZTsKPiAtCX0KPiAtCj4gLQkvKiBNYWtlIHN1cmUgd2UgdGVzdGVkIGF0IGxl YXN0IG9uZSBmcmVxdWVuY3kgKi8KPiAtCWlndF9hc3NlcnQocnVuKTsKPiAtCj4gLQlhbHNhX2Ns b3NlX2lucHV0KGRhdGEuYWxzYSk7Cj4gLQlmcmVlKGRhdGEuYWxzYSk7Cj4gLX0KPiAtCj4gLXN0 YXRpYyB2b2lkIHRlc3Rfc3VzcGVuZF9yZXN1bWVfaW50ZWdyaXR5KGNvbnN0IGNoYXIgKmRldmlj ZV9uYW1lLAo+IC0JCQkJCSAgZW51bSBpZ3Rfc3VzcGVuZF9zdGF0ZSBzdGF0ZSwKPiAtCQkJCQkg IGVudW0gaWd0X3N1c3BlbmRfdGVzdCB0ZXN0KQo+IC17Cj4gLQl0ZXN0X2ludGVncml0eShkZXZp Y2VfbmFtZSk7Cj4gLQo+IC0JaWd0X3N5c3RlbV9zdXNwZW5kX2F1dG9yZXN1bWUoc3RhdGUsIHRl c3QpOwo+IC0KPiAtCXRlc3RfaW50ZWdyaXR5KGRldmljZV9uYW1lKTsKPiAtfQo+IC0KPiAtaWd0 X21haW4KPiAtewo+IC0JaWd0X3N1YnRlc3QoImhkbWktaW50ZWdyaXR5IikKPiAtCQl0ZXN0X2lu dGVncml0eSgiSERNSSIpOwo+IC0KPiAtCWlndF9zdWJ0ZXN0KCJoZG1pLWludGVncml0eS1hZnRl ci1zdXNwZW5kIikKPiAtCQl0ZXN0X3N1c3BlbmRfcmVzdW1lX2ludGVncml0eSgiSERNSSIsIFNV U1BFTkRfU1RBVEVfTUVNLAo+IC0JCQkJCSAgICAgIFNVU1BFTkRfVEVTVF9OT05FKTsKPiAtCj4g LQlpZ3Rfc3VidGVzdCgiaGRtaS1pbnRlZ3JpdHktYWZ0ZXItaGliZXJuYXRlIikKPiAtCQl0ZXN0 X3N1c3BlbmRfcmVzdW1lX2ludGVncml0eSgiSERNSSIsIFNVU1BFTkRfU1RBVEVfRElTSywKPiAt CQkJCQkgICAgICBTVVNQRU5EX1RFU1RfREVWSUNFUyk7Cj4gLX0KPiBkaWZmIC0tZ2l0IGEvdGVz dHMva21zX2NoYW1lbGl1bS5jIGIvdGVzdHMva21zX2NoYW1lbGl1bS5jCj4gaW5kZXggMmRjMTA0 OWQuLjI5NzRmZjY5IDEwMDY0NAo+IC0tLSBhL3Rlc3RzL2ttc19jaGFtZWxpdW0uYwo+ICsrKyBi L3Rlc3RzL2ttc19jaGFtZWxpdW0uYwo+IEBAIC00MTMsNyArNDEzLDcgQEAgdGVzdF9zdXNwZW5k X3Jlc3VtZV9lZGlkX2NoYW5nZShkYXRhX3QgKmRhdGEsIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAq cG9ydCwKPiAgCj4gIHN0YXRpYyBpZ3Rfb3V0cHV0X3QgKgo+ICBwcmVwYXJlX291dHB1dChkYXRh X3QgKmRhdGEsCj4gLQkgICAgICAgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0KQo+ICsJICAg ICAgIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCwgYm9vbCBzZXRfZWRpZCkKPiAgewo+ICAJ aWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Owo+ICAJaWd0X291dHB1dF90 ICpvdXRwdXQ7Cj4gQEAgLTQyOCw3ICs0MjgsOCBAQCBwcmVwYXJlX291dHB1dChkYXRhX3QgKmRh dGEsCj4gIAkvKiBUaGUgY2hhbWVsaXVtJ3MgZGVmYXVsdCBFRElEIGhhcyBhIGxvdCBvZiByZXNv bHV0aW9ucywgd2F5IG1vcmUgdGhlbgo+ICAJICogd2UgbmVlZCB0byB0ZXN0Cj4gIAkgKi8KPiAt CWNoYW1lbGl1bV9wb3J0X3NldF9lZGlkKGRhdGEtPmNoYW1lbGl1bSwgcG9ydCwgZGF0YS0+ZWRp ZF9pZCk7Cj4gKwlpZiAoc2V0X2VkaWQpCj4gKwkJY2hhbWVsaXVtX3BvcnRfc2V0X2VkaWQoZGF0 YS0+Y2hhbWVsaXVtLCBwb3J0LCBkYXRhLT5lZGlkX2lkKTsKPiAgCj4gIAljaGFtZWxpdW1fcGx1 ZyhkYXRhLT5jaGFtZWxpdW0sIHBvcnQpOwo+ICAJd2FpdF9mb3JfY29ubmVjdG9yKGRhdGEsIHBv cnQsIERSTV9NT0RFX0NPTk5FQ1RFRCk7Cj4gQEAgLTYxMyw3ICs2MTQsNyBAQCBzdGF0aWMgdm9p ZCB0ZXN0X2Rpc3BsYXlfb25lX21vZGUoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgY2hhbWVsaXVtX3Bv cnQgKnBvcnQsCj4gIAo+ICAJcmVzZXRfc3RhdGUoZGF0YSwgcG9ydCk7Cj4gIAo+IC0Jb3V0cHV0 ID0gcHJlcGFyZV9vdXRwdXQoZGF0YSwgcG9ydCk7Cj4gKwlvdXRwdXQgPSBwcmVwYXJlX291dHB1 dChkYXRhLCBwb3J0LCB0cnVlKTsKPiAgCWNvbm5lY3RvciA9IGNoYW1lbGl1bV9wb3J0X2dldF9j b25uZWN0b3IoZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LCBmYWxzZSk7Cj4gIAlwcmltYXJ5ID0gaWd0 X291dHB1dF9nZXRfcGxhbmVfdHlwZShvdXRwdXQsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOwo+ ICAJaWd0X2Fzc2VydChwcmltYXJ5KTsKPiBAQCAtNjQ0LDcgKzY0NSw3IEBAIHN0YXRpYyB2b2lk IHRlc3RfZGlzcGxheV9hbGxfbW9kZXMoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgY2hhbWVsaXVtX3Bv cnQgKnBvcnQsCj4gIAo+ICAJcmVzZXRfc3RhdGUoZGF0YSwgcG9ydCk7Cj4gIAo+IC0Jb3V0cHV0 ID0gcHJlcGFyZV9vdXRwdXQoZGF0YSwgcG9ydCk7Cj4gKwlvdXRwdXQgPSBwcmVwYXJlX291dHB1 dChkYXRhLCBwb3J0LCB0cnVlKTsKPiAgCWNvbm5lY3RvciA9IGNoYW1lbGl1bV9wb3J0X2dldF9j b25uZWN0b3IoZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LCBmYWxzZSk7Cj4gIAlwcmltYXJ5ID0gaWd0 X291dHB1dF9nZXRfcGxhbmVfdHlwZShvdXRwdXQsIERSTV9QTEFORV9UWVBFX1BSSU1BUlkpOwo+ ICAJaWd0X2Fzc2VydChwcmltYXJ5KTsKPiBAQCAtNjc5LDcgKzY4MCw3IEBAIHRlc3RfZGlzcGxh eV9mcmFtZV9kdW1wKGRhdGFfdCAqZGF0YSwgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0KQo+ ICAKPiAgCXJlc2V0X3N0YXRlKGRhdGEsIHBvcnQpOwo+ICAKPiAtCW91dHB1dCA9IHByZXBhcmVf b3V0cHV0KGRhdGEsIHBvcnQpOwo+ICsJb3V0cHV0ID0gcHJlcGFyZV9vdXRwdXQoZGF0YSwgcG9y dCwgdHJ1ZSk7Cj4gIAljb25uZWN0b3IgPSBjaGFtZWxpdW1fcG9ydF9nZXRfY29ubmVjdG9yKGRh dGEtPmNoYW1lbGl1bSwgcG9ydCwgZmFsc2UpOwo+ICAJcHJpbWFyeSA9IGlndF9vdXRwdXRfZ2V0 X3BsYW5lX3R5cGUob3V0cHV0LCBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKPiAgCWlndF9hc3Nl cnQocHJpbWFyeSk7Cj4gQEAgLTcxMCw2ICs3MTEsMjY2IEBAIHRlc3RfZGlzcGxheV9mcmFtZV9k dW1wKGRhdGFfdCAqZGF0YSwgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0KQo+ICAJZHJtTW9k ZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsKPiAgfQo+ICAKPiArCj4gKy8qIFBsYXliYWNrIHBh cmFtZXRlcnMgY29udHJvbCB0aGUgYXVkaW8gc2lnbmFsIHdlIHN5bnRoZXNpemUgYW5kIHNlbmQg Ki8KPiArI2RlZmluZSBQTEFZQkFDS19DSEFOTkVMUyAyCj4gKyNkZWZpbmUgUExBWUJBQ0tfU0FN UExFUyAxMDI0Cj4gKwo+ICsvKiBDYXB0dXJlIHBhcmVtZXRlcnMgY29udHJvbCB0aGUgYXVkaW8g c2lnbmFsIHdlIHJlY2VpdmUgKi8KPiArI2RlZmluZSBDQVBUVVJFX1NBTVBMRVMgMjA0OAo+ICsK PiArI2RlZmluZSBBVURJT19EVVJBVElPTiAyMDAwIC8qIG1zICovCj4gKy8qIEEgc3RyZWFrIG9m IDMgZ2l2ZXMgY29uZmlkZW5jZSB0aGF0IHRoZSBzaWduYWwgaXMgZ29vZC4gKi8KPiArI2RlZmlu ZSBNSU5fU1RSRUFLIDMKPiArCj4gKy8qIFRPRE86IENoYW1lbGl1bSBvbmx5IHN1cHBvcnRzIDQ4 S0h6IGZvciBub3cgKi8KPiArc3RhdGljIGludCBzYW1wbGluZ19yYXRlc1tdID0gewo+ICsvKgkz MjAwMCwgKi8KPiArLyoJNDQxMDAsICovCj4gKwk0ODAwMCwKPiArLyoJODgyMDAsICovCj4gKy8q CTk2MDAwLCAqLwo+ICsvKgkxNzY0MDAsICovCj4gKy8qCTE5MjAwMCwgKi8KPiArfTsKPiArCj4g K3N0YXRpYyBpbnQgc2FtcGxpbmdfcmF0ZXNfY291bnQgPSBzaXplb2Yoc2FtcGxpbmdfcmF0ZXMp IC8gc2l6ZW9mKGludCk7Cj4gKwo+ICtzdGF0aWMgaW50IHRlc3RfZnJlcXVlbmNpZXNbXSA9IHsK PiArCTMwMCwKPiArCTYwMCwKPiArCTEyMDAsCj4gKwk4MDAwMCwKPiArCTEwMDAwLAo+ICt9Owo+ ICsKPiArc3RhdGljIGludCB0ZXN0X2ZyZXF1ZW5jaWVzX2NvdW50ID0gc2l6ZW9mKHRlc3RfZnJl cXVlbmNpZXMpIC8gc2l6ZW9mKGludCk7Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK291dHB1dF9jYWxs YmFjayh2b2lkICpkYXRhLCBzaG9ydCAqYnVmZmVyLCBpbnQgZnJhbWVzKQo+ICt7Cj4gKwlzdHJ1 Y3QgYXVkaW9fc2lnbmFsICpzaWduYWwgPSAoc3RydWN0IGF1ZGlvX3NpZ25hbCAqKSBkYXRhOwo+ ICsKPiArCWF1ZGlvX3NpZ25hbF9maWxsKHNpZ25hbCwgYnVmZmVyLCBmcmFtZXMpOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbAo+ICtkb190ZXN0X2Rpc3BsYXlfYXVk aW8oZGF0YV90ICpkYXRhLCBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQsCj4gKwkJICAgICAg c3RydWN0IGFsc2EgKmFsc2EsIGludCBwbGF5YmFja19jaGFubmVscywKPiArCQkgICAgICBpbnQg cGxheWJhY2tfcmF0ZSkKPiArewo+ICsJaW50IHJldCwgY2FwdHVyZV9yYXRlLCBjYXB0dXJlX2No YW5uZWxzLCBtc2VjOwo+ICsJc3RydWN0IGNoYW1lbGl1bV9hdWRpb19maWxlICphdWRpb19maWxl Owo+ICsJc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKnN0cmVhbTsKPiArCWVudW0gY2hhbWVsaXVt X3N0cmVhbV9yZWFsdGltZV9tb2RlIHN0cmVhbV9tb2RlOwo+ICsJc3RydWN0IGF1ZGlvX3NpZ25h bCAqc2lnbmFsOwo+ICsJaW50MzJfdCAqcmVjdiwgKmJ1ZjsKPiArCWRvdWJsZSAqY2hhbm5lbDsK PiArCXNpemVfdCBpLCBzdHJlYWssIHBhZ2VfY291bnQ7Cj4gKwlzaXplX3QgcmVjdl9sZW4sIGJ1 Zl9sZW4sIGJ1Zl9jYXAsIGJ1Zl9zaXplLCBjaGFubmVsX2xlbjsKPiArCWJvb2wgb2s7Cj4gKwlj aGFyIGR1bXBfc3VmZml4WzY0XTsKPiArCWNoYXIgKmR1bXBfcGF0aCA9IE5VTEw7Cj4gKwlpbnQg ZHVtcF9mZCA9IC0xOwo+ICsKPiArCWlmICghYWxzYV90ZXN0X291dHB1dF9jb25maWd1cmF0aW9u KGFsc2EsIHBsYXliYWNrX2NoYW5uZWxzLAo+ICsJCQkJCSAgICBwbGF5YmFja19yYXRlKSkKPiAr CQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJaWd0X2RlYnVnKCJUZXN0aW5nIHdpdGggcGxheWJhY2sg c2FtcGxpbmcgcmF0ZSAlZFxuIiwgcGxheWJhY2tfcmF0ZSk7Cj4gKwlhbHNhX2NvbmZpZ3VyZV9v dXRwdXQoYWxzYSwgcGxheWJhY2tfY2hhbm5lbHMsIHBsYXliYWNrX3JhdGUpOwo+ICsKPiArCWNo YW1lbGl1bV9zdGFydF9jYXB0dXJpbmdfYXVkaW8oZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LCBmYWxz ZSk7Cj4gKwo+ICsJc3RyZWFtID0gY2hhbWVsaXVtX3N0cmVhbV9pbml0KCk7Cj4gKwlpZ3RfYXNz ZXJ0KHN0cmVhbSk7Cj4gKwo+ICsJc3RyZWFtX21vZGUgPSBDSEFNRUxJVU1fU1RSRUFNX1JFQUxU SU1FX1NUT1BfV0hFTl9PVkVSRkxPVzsKPiArCW9rID0gY2hhbWVsaXVtX3N0cmVhbV9kdW1wX3Jl YWx0aW1lX2F1ZGlvKHN0cmVhbSwgc3RyZWFtX21vZGUpOwo+ICsJaWd0X2Fzc2VydChvayk7Cj4g Kwo+ICsJY2hhbWVsaXVtX3N0cmVhbV9hdWRpb19mb3JtYXQoc3RyZWFtLCAmY2FwdHVyZV9yYXRl LCAmY2FwdHVyZV9jaGFubmVscyk7Cj4gKwo+ICsJaWYgKGlndF9mcmFtZV9kdW1wX2lzX2VuYWJs ZWQoKSkgewo+ICsJCXNucHJpbnRmKGR1bXBfc3VmZml4LCBzaXplb2YoZHVtcF9zdWZmaXgpLCAi Y2FwdHVyZS0lZGNoLSVkIiwKPiArCQkJIHBsYXliYWNrX2NoYW5uZWxzLCBwbGF5YmFja19yYXRl KTsKPiArCj4gKwkJZHVtcF9mZCA9IGF1ZGlvX2NyZWF0ZV93YXZfZmlsZV9zMzJfbGUoZHVtcF9z dWZmaXgsCj4gKwkJCQkJCSAgICAgICBjYXB0dXJlX3JhdGUsCj4gKwkJCQkJCSAgICAgICBjYXB0 dXJlX2NoYW5uZWxzLAo+ICsJCQkJCQkgICAgICAgJmR1bXBfcGF0aCk7Cj4gKwkJaWd0X2Fzc2Vy dChkdW1wX2ZkID49IDApOwo+ICsJfQo+ICsKPiArCXNpZ25hbCA9IGF1ZGlvX3NpZ25hbF9pbml0 KHBsYXliYWNrX2NoYW5uZWxzLCBwbGF5YmFja19yYXRlKTsKPiArCWlndF9hc3NlcnQoc2lnbmFs KTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgdGVzdF9mcmVxdWVuY2llc19jb3VudDsgaSsrKQo+ ICsJCWF1ZGlvX3NpZ25hbF9hZGRfZnJlcXVlbmN5KHNpZ25hbCwgdGVzdF9mcmVxdWVuY2llc1tp XSk7Cj4gKwlhdWRpb19zaWduYWxfc3ludGhlc2l6ZShzaWduYWwpOwo+ICsKPiArCWFsc2FfcmVn aXN0ZXJfb3V0cHV0X2NhbGxiYWNrKGFsc2EsIG91dHB1dF9jYWxsYmFjaywgc2lnbmFsLAo+ICsJ CQkJICAgICAgUExBWUJBQ0tfU0FNUExFUyk7Cj4gKwo+ICsJLyogVE9ETzogZGV0ZWN0IHNpZ25h bCBpbiByZWFsLXRpbWUgKi8KPiArCXJldCA9IGFsc2FfcnVuKGFsc2EsIEFVRElPX0RVUkFUSU9O KTsKPiArCWlndF9hc3NlcnQocmV0ID09IDApOwo+ICsKPiArCWFsc2FfY2xvc2Vfb3V0cHV0KGFs c2EpOwo+ICsKPiArCS8qIE5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTI4LCBiZWNhdXNlIHRo YXQncyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMKPiArCSAqIHdlIGdldCBwZXIgY2hhbm5lbCBlYWNo IHRpbWUgd2UgcmVjZWl2ZSBhbiBhdWRpbyBwYWdlIGZyb20gdGhlCj4gKwkgKiBDaGFtZWxpdW0g ZGV2aWNlLiAqLwo+ICsJY2hhbm5lbF9sZW4gPSBDQVBUVVJFX1NBTVBMRVM7Cj4gKwljaGFubmVs ID0gbWFsbG9jKHNpemVvZihkb3VibGUpICogY2hhbm5lbF9sZW4pOwo+ICsKPiArCWJ1Zl9jYXAg PSBjYXB0dXJlX2NoYW5uZWxzICogY2hhbm5lbF9sZW47Cj4gKwlidWYgPSBtYWxsb2Moc2l6ZW9m KGludDMyX3QpICogYnVmX2NhcCk7Cj4gKwlidWZfbGVuID0gMDsKPiArCj4gKwlyZWN2ID0gTlVM TDsKPiArCXJlY3ZfbGVuID0gMDsKPiArCj4gKwlzdHJlYWsgPSAwOwo+ICsJbXNlYyA9IDA7Cj4g KwlpID0gMDsKPiArCXdoaWxlIChzdHJlYWsgPCBNSU5fU1RSRUFLICYmIG1zZWMgPCBBVURJT19E VVJBVElPTikgewo+ICsJCW9rID0gY2hhbWVsaXVtX3N0cmVhbV9yZWNlaXZlX3JlYWx0aW1lX2F1 ZGlvKHN0cmVhbSwKPiArCQkJCQkJCSAgICAgJnBhZ2VfY291bnQsCj4gKwkJCQkJCQkgICAgICZy ZWN2LCAmcmVjdl9sZW4pOwo+ICsJCWlndF9hc3NlcnQob2spOwo+ICsKPiArCQltZW1jcHkoJmJ1 ZltidWZfbGVuXSwgcmVjdiwgcmVjdl9sZW4gKiBzaXplb2YoaW50MzJfdCkpOwo+ICsJCWJ1Zl9s ZW4gKz0gcmVjdl9sZW47Cj4gKwo+ICsJCWlmIChidWZfbGVuIDwgYnVmX2NhcCkKPiArCQkJY29u dGludWU7Cj4gKwkJaWd0X2Fzc2VydChidWZfbGVuID09IGJ1Zl9jYXApOwo+ICsKPiArCQlpZiAo ZHVtcF9mZCA+PSAwKSB7Cj4gKwkJCWJ1Zl9zaXplID0gYnVmX2xlbiAqIHNpemVvZihpbnQzMl90 KTsKPiArCQkJaWd0X2Fzc2VydCh3cml0ZShkdW1wX2ZkLCBidWYsIGJ1Zl9zaXplKSA9PSBidWZf c2l6ZSk7Cj4gKwkJfQo+ICsKPiArCQkvKiBUT0RPOiBjaGVjayBvdGhlciBjaGFubmVscyB0b28s IG5vdCBqdXN0IHRoZSBmaXJzdCBvbmUgKi8KPiArCQlhdWRpb19leHRyYWN0X2NoYW5uZWxfczMy X2xlKGNoYW5uZWwsIGNoYW5uZWxfbGVuLCBidWYsIGJ1Zl9sZW4sCj4gKwkJCQkJICAgICBjYXB0 dXJlX2NoYW5uZWxzLCAwKTsKPiArCj4gKwkJbXNlYyA9IGkgKiBjaGFubmVsX2xlbiAvIChkb3Vi bGUpIGNhcHR1cmVfcmF0ZSAqIDEwMDA7Cj4gKwkJaWd0X2RlYnVnKCJEZXRlY3RpbmcgYXVkaW8g c2lnbmFsLCB0PSVkIG1zZWNcbiIsIG1zZWMpOwo+ICsKPiArCQlpZiAoYXVkaW9fc2lnbmFsX2Rl dGVjdChzaWduYWwsIGNhcHR1cmVfcmF0ZSwgY2hhbm5lbCwKPiArCQkJCQljaGFubmVsX2xlbikp Cj4gKwkJCXN0cmVhaysrOwo+ICsJCWVsc2UKPiArCQkJc3RyZWFrID0gMDsKPiArCj4gKwkJYnVm X2xlbiA9IDA7Cj4gKwkJaSsrOwo+ICsJfQo+ICsKPiArCWlmIChkdW1wX2ZkID49IDApIHsKPiAr CQljbG9zZShkdW1wX2ZkKTsKPiArCQlpZiAoc3RyZWFrID09IE1JTl9TVFJFQUspIHsKPiArCQkJ LyogVGVzdCBzdWNjZWVkZWQsIG5vIG5lZWQgdG8ga2VlcCB0aGUgY2FwdHVyZWQgZGF0YSAqLwo+ ICsJCQl1bmxpbmsoZHVtcF9wYXRoKTsKPiArCQl9IGVsc2UKPiArCQkJaWd0X2RlYnVnKCJTYXZl ZCBjYXB0dXJlZCBhdWRpbyBkYXRhIHRvICVzXG4iLCBkdW1wX3BhdGgpOwo+ICsJCWZyZWUoZHVt cF9wYXRoKTsKPiArCX0KPiArCj4gKwlmcmVlKHJlY3YpOwo+ICsJZnJlZShidWYpOwo+ICsJZnJl ZShjaGFubmVsKTsKPiArCj4gKwlvayA9IGNoYW1lbGl1bV9zdHJlYW1fc3RvcF9yZWFsdGltZV9h dWRpbyhzdHJlYW0pOwo+ICsJaWd0X2Fzc2VydChvayk7Cj4gKwo+ICsJYXVkaW9fZmlsZSA9IGNo YW1lbGl1bV9zdG9wX2NhcHR1cmluZ19hdWRpbyhkYXRhLT5jaGFtZWxpdW0sCj4gKwkJCQkJCSAg ICBwb3J0KTsKPiArCWlmIChhdWRpb19maWxlKSB7Cj4gKwkJaWd0X2RlYnVnKCJBdWRpbyBmaWxl IHNhdmVkIG9uIHRoZSBDaGFtZWxpdW0gaW4gJXNcbiIsCj4gKwkJCSAgYXVkaW9fZmlsZS0+cGF0 aCk7Cj4gKwkJY2hhbWVsaXVtX2Rlc3Ryb3lfYXVkaW9fZmlsZShhdWRpb19maWxlKTsKPiArCX0K Ckkgd291bGQgc3VnZ2VzdCB0byBvbmx5IGR1bXAgdGhpcyBmaWxlIG9uIGZhaWx1cmUsIG5vdCB3 aGVuIGhhdmluZyBhCnN1Y2Nlc3MuCgo+ICsKPiArCWF1ZGlvX3NpZ25hbF9jbGVhbihzaWduYWwp Owo+ICsJZnJlZShzaWduYWwpOwo+ICsKPiArCWNoYW1lbGl1bV9zdHJlYW1fZGVpbml0KHN0cmVh bSk7Cj4gKwo+ICsJaWd0X2Fzc2VydChzdHJlYWsgPT0gTUlOX1NUUkVBSyk7Cj4gKwlyZXR1cm4g dHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArdGVzdF9kaXNwbGF5X2F1ZGlvKGRhdGFf dCAqZGF0YSwgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0LAo+ICsJCSAgIGNvbnN0IGNoYXIg KmF1ZGlvX2RldmljZSkKPiArewo+ICsJYm9vbCBydW4gPSBmYWxzZTsKPiArCXN0cnVjdCBhbHNh ICphbHNhOwo+ICsJaW50IHJldDsKPiArCWlndF9vdXRwdXRfdCAqb3V0cHV0Owo+ICsJaWd0X3Bs YW5lX3QgKnByaW1hcnk7Cj4gKwlzdHJ1Y3QgaWd0X2ZiIGZiOwo+ICsJZHJtTW9kZU1vZGVJbmZv ICptb2RlOwo+ICsJZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yOwo+ICsJaW50IGZiX2lkLCBp Owo+ICsKPiArCWlndF9yZXF1aXJlKGFsc2FfaGFzX2V4Y2x1c2l2ZV9hY2Nlc3MoKSk7Cj4gKwo+ ICsJYWxzYSA9IGFsc2FfaW5pdCgpOwo+ICsJaWd0X2Fzc2VydChhbHNhKTsKPiArCj4gKwlyZXNl dF9zdGF0ZShkYXRhLCBwb3J0KTsKPiArCj4gKwkvKiBVc2UgdGhlIGRlZmF1bHQgQ2hhbWVsaXVt IEVESUQgZm9yIHRoaXMgdGVzdCwgYXMgdGhlIGJhc2UgSUdUIEVESUQKPiArCSAqIGRvZXNuJ3Qg YWR2ZXJ0aXNlIGF1ZGlvIHN1cHBvcnQgKHNlZSBkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8gaW4K PiArCSAqIHRoZSBrZXJuZWwgdHJlZSkuICovCj4gKwlvdXRwdXQgPSBwcmVwYXJlX291dHB1dChk YXRhLCBwb3J0LCBmYWxzZSk7Cj4gKwljb25uZWN0b3IgPSBjaGFtZWxpdW1fcG9ydF9nZXRfY29u bmVjdG9yKGRhdGEtPmNoYW1lbGl1bSwgcG9ydCwgZmFsc2UpOwo+ICsJcHJpbWFyeSA9IGlndF9v dXRwdXRfZ2V0X3BsYW5lX3R5cGUob3V0cHV0LCBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKPiAr CWlndF9hc3NlcnQocHJpbWFyeSk7Cj4gKwo+ICsJaWd0X2Fzc2VydChjb25uZWN0b3ItPmNvdW50 X21vZGVzID4gMCk7Cj4gKwltb2RlID0gJmNvbm5lY3Rvci0+bW9kZXNbMF07Cj4gKwo+ICsJZmJf aWQgPSBpZ3RfY3JlYXRlX2NvbG9yX3BhdHRlcm5fZmIoZGF0YS0+ZHJtX2ZkLAo+ICsJCQkJCSAg ICBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4gKwkJCQkJICAgIERSTV9GT1JNQVRf WFJHQjg4ODgsCj4gKwkJCQkJICAgIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gKwkJCQkJ ICAgIDAsIDAsIDAsICZmYik7Cj4gKwlpZ3RfYXNzZXJ0KGZiX2lkID4gMCk7Cj4gKwo+ICsJLyog RW5hYmxlIHRoZSBvdXRwdXQgYmVjYXVzZSB0aGUgcmVjZWl2ZXIgd29uJ3QgdHJ5IHRvIHJlY2Vp dmUgYXVkaW8gaWYKPiArCSAqIGl0IGRvZXNuJ3QgcmVjZWl2ZSB2aWRlby4gKi8KTWF5YmUgbW92 ZSB0aGUgYWJvdmUgY29tbWVudCB0byBhYm92ZSBpZ3RfYXNzZXJ0KGNvbm5lY3Rvci0+Y291bnRf bW9kZXMKPiAwKTsgPwo+ICsJZW5hYmxlX291dHB1dChkYXRhLCBwb3J0LCBvdXRwdXQsIG1vZGUs ICZmYik7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IHNhbXBsaW5nX3JhdGVzX2NvdW50OyBpKysp IHsKPiArCQlyZXQgPSBhbHNhX29wZW5fb3V0cHV0KGFsc2EsIGF1ZGlvX2RldmljZSk7Cj4gKwkJ aWd0X2Fzc2VydChyZXQgPj0gMCk7Cj4gKwo+ICsJCS8qIFRPRE86IHBsYXliYWNrIG9uIGFsbCA4 IGF2YWlsYWJsZSBjaGFubmVscyAqLwo+ICsJCXJ1biB8PSBkb190ZXN0X2Rpc3BsYXlfYXVkaW8o ZGF0YSwgcG9ydCwgYWxzYSwKPiArCQkJCQkgICAgIFBMQVlCQUNLX0NIQU5ORUxTLAo+ICsJCQkJ CSAgICAgc2FtcGxpbmdfcmF0ZXNbaV0pOwo+ICsKPiArCQlhbHNhX2Nsb3NlX291dHB1dChhbHNh KTsKPiArCX0KPiArCj4gKwkvKiBNYWtlIHN1cmUgd2UgdGVzdGVkIGF0IGxlYXN0IG9uZSBmcmVx dWVuY3kuICovCj4gKwlpZ3RfYXNzZXJ0KHJ1bik7Cj4gKwo+ICsJaWd0X3JlbW92ZV9mYihkYXRh LT5kcm1fZmQsICZmYik7Cj4gKwo+ICsJZHJtTW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsK PiArCj4gKwlmcmVlKGFsc2EpOwo+ICt9Cj4gKwo+ICsKPiAgc3RhdGljIHZvaWQgc2VsZWN0X3Rp bGVkX21vZGlmaWVyKGlndF9wbGFuZV90ICpwbGFuZSwgdWludDMyX3Qgd2lkdGgsCj4gIAkJCQkg IHVpbnQzMl90IGhlaWdodCwgdWludDMyX3QgZm9ybWF0LAo+ICAJCQkJICB1aW50NjRfdCAqbW9k aWZpZXIpCj4gQEAgLTEwMzcsNyArMTI5OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfZGlzcGxheV9w bGFuZXNfcmFuZG9tKGRhdGFfdCAqZGF0YSwKPiAgCXJlc2V0X3N0YXRlKGRhdGEsIHBvcnQpOwo+ ICAKPiAgCS8qIEZpbmQgdGhlIGNvbm5lY3RvciBhbmQgcGlwZS4gKi8KPiAtCW91dHB1dCA9IHBy ZXBhcmVfb3V0cHV0KGRhdGEsIHBvcnQpOwo+ICsJb3V0cHV0ID0gcHJlcGFyZV9vdXRwdXQoZGF0 YSwgcG9ydCwgdHJ1ZSk7Cj4gIAo+ICAJbW9kZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0 KTsKPiAgCj4gQEAgLTEzMDgsNiArMTU2OSw5IEBAIGlndF9tYWluCj4gIAo+ICAJCWNvbm5lY3Rv cl9zdWJ0ZXN0KCJkcC1mcmFtZS1kdW1wIiwgRGlzcGxheVBvcnQpCj4gIAkJCXRlc3RfZGlzcGxh eV9mcmFtZV9kdW1wKCZkYXRhLCBwb3J0KTsKPiArCj4gKwkJY29ubmVjdG9yX3N1YnRlc3QoImRw LWF1ZGlvIiwgRGlzcGxheVBvcnQpCj4gKwkJCXRlc3RfZGlzcGxheV9hdWRpbygmZGF0YSwgcG9y dCwgIkhETUkiKTsKPiAgCX0KPiAgCj4gIAlpZ3Rfc3VidGVzdF9ncm91cCB7Cj4gZGlmZiAtLWdp dCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQKPiBpbmRleCA1MTY3YTZj Yy4uNWQzZWVkODIgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvbWVzb24uYnVpbGQKPiArKysgYi90ZXN0 cy9tZXNvbi5idWlsZAo+IEBAIC0yMzgsMjAgKzIzOCwxMyBAQCBpZiBsaWJkcm1fbm91dmVhdS5m b3VuZCgpCj4gIAl0ZXN0X2RlcHMgKz0gbGliZHJtX25vdXZlYXUKPiAgZW5kaWYKPiAgCj4gLWlm IF9idWlsZF9jaGFtZWxpdW0gYW5kIGNoYW1lbGl1bS5mb3VuZCgpCj4gK2lmIGNoYW1lbGl1bV9m b3VuZAo+ICAJdGVzdF9wcm9ncyArPSBbCj4gIAkJJ2ttc19jaGFtZWxpdW0nLAo+ICAJXQo+ICAJ dGVzdF9kZXBzICs9IGNoYW1lbGl1bQo+ICBlbmRpZgo+ICAKPiAtaWYgX2J1aWxkX2F1ZGlvIGFu ZCBhbHNhLmZvdW5kKCkgYW5kIGdzbC5mb3VuZCgpCj4gLQl0ZXN0X3Byb2dzICs9IFsKPiAtCQkn YXVkaW8nLAo+IC0JXQo+IC0JdGVzdF9kZXBzICs9IGFsc2EKPiAtZW5kaWYKPiAtCj4gIHRlc3Rf ZXhlY3V0YWJsZXMgPSBbXQo+ICB0ZXN0X2xpc3QgPSBbXQo+ICAKPiAKCldlbGwuLi4gdGhhdCB3 YXMgYSBtb3V0aGZ1bCEgRm9yIHRoZSBuZXh0IHBhdGNoZXMsIHBsZWFzZSBzcGxpdCBzdHVmZgpt b3JlIGFnZ3Jlc3NpdmVseSwgZXZlbiB3aGVuIGEgcGF0Y2ggd291bGQgb25seSBiZSBpbnRyb2R1 Y2luZyBkZWFkIGNvZGUuCgpXaXRoIHRoZXNlIGNoYW5nZWQ6CgpSZXZpZXdlZC1ieTogTWFydGlu IFBlcmVzIDxtYXJ0aW4ucGVyZXNAbGludXguaW50ZWwuY29tPgoKTWFydGluCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0 CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==