From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chao Gao Subject: Re: [PATCH v4 16/28] x86/vvtd: Add queued invalidation (QI) support Date: Fri, 23 Feb 2018 12:38:00 +0800 Message-ID: <20180223043759.GA162485@skl-4s-chao.sh.intel.com> References: <1510899755-40237-1-git-send-email-chao.gao@intel.com> <1510899755-40237-17-git-send-email-chao.gao@intel.com> <20180212143610.6gess2ckeoxjpts6@MacBook-Pro-de-Roger.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20180212143610.6gess2ckeoxjpts6@MacBook-Pro-de-Roger.local> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Roger Pau =?iso-8859-1?Q?Monn=E9?= Cc: Kevin Tian , Stefano Stabellini , Wei Liu , George Dunlap , Ian Jackson , Tim Deegan , xen-devel@lists.xen.org, Jan Beulich , Andrew Cooper List-Id: xen-devel@lists.xenproject.org T24gTW9uLCBGZWIgMTIsIDIwMTggYXQgMDI6MzY6MTBQTSArMDAwMCwgUm9nZXIgUGF1IE1vbm7D qSB3cm90ZToKPk9uIEZyaSwgTm92IDE3LCAyMDE3IGF0IDAyOjIyOjIzUE0gKzA4MDAsIENoYW8g R2FvIHdyb3RlOgo+PiBRdWV1ZWQgSW52YWxpZGF0aW9uIEludGVyZmFjZSBpcyBhbiBleHBhbmRl ZCBpbnZhbGlkYXRpb24gaW50ZXJmYWNlIHdpdGgKPj4gZXh0ZW5kZWQgY2FwYWJpbGl0aWVzLiBI YXJkd2FyZSBpbXBsZW1lbnRhdGlvbnMgcmVwb3J0IHN1cHBvcnQgZm9yIHF1ZXVlZAo+PiBpbnZh bGlkYXRpb24gaW50ZXJmYWNlIHRocm91Z2ggdGhlIEV4dGVuZGVkIENhcGFiaWxpdHkgUmVnaXN0 ZXIuIFRoZSBxdWV1ZWQKPj4gaW52YWxpZGF0aW9uIGludGVyZmFjZSB1c2VzIGFuIEludmFsaWRh dGlvbiBRdWV1ZSAoSVEpLCB3aGljaCBpcyBhIGNpcmN1bGFyCj4+IGJ1ZmZlciBpbiBzeXN0ZW0g bWVtb3J5LiBTb2Z0d2FyZSBzdWJtaXRzIGNvbW1hbmRzIGJ5IHdyaXRpbmcgSW52YWxpZGF0aW9u Cj4+IERlc2NyaXB0b3JzIHRvIHRoZSBJUS4KPj4gCj4+IEluIHRoaXMgcGF0Y2gsIGEgbmV3IGZ1 bmN0aW9uIHZpb21tdV9wcm9jZXNzX2lxKCkgaXMgdXNlZCBmb3IgZW11bGF0aW5nIGhvdwo+PiBo YXJkd2FyZSBoYW5kbGVzIGludmFsaWRhdGlvbiByZXF1ZXN0cyB0aHJvdWdoIFFJLgo+Cj5Zb3Ug c2hvdWxkIG1lbnRpb24gdGhhdCBRSSBpcyBtYW5kYXRvcnkgaW4gb3JkZXIgdG8gc3VwcG9ydCBp bnRlcnJ1cHQKPnJlbWFwcGluZy4KCldpbGwgZG8uCgo+Cj5JIHdhcyBhYm91dCB0byBhc2sgd2hl dGhlciBRSSBjb3VsZCBiZSBkZWZlcnJlZCB0byBhIGxhdGVyIHN0YWdlLCBidXQKPkFGQUlDVCB0 aGlzIGlzIG5vdCBhbiBvcHRpb24uCj4KPj4gU2lnbmVkLW9mZi1ieTogQ2hhbyBHYW8gPGNoYW8u Z2FvQGludGVsLmNvbT4KPj4gU2lnbmVkLW9mZi1ieTogTGFuIFRpYW55dSA8dGlhbnl1LmxhbkBp bnRlbC5jb20+Cj4+IAo+PiAtLS0KPj4gdjQ6Cj4+ICAtIEludHJvZHVjZSBhIGxvY2sgdG8gcHJv dGVjdCBpbnZhbGlkYXRpb24gcmVsYXRlZCByZWdpc3RlcnMuCj4+IC0tLQo+PiAgeGVuL2RyaXZl cnMvcGFzc3Rocm91Z2gvdnRkL2lvbW11LmggfCAgMjQgKysrLQo+PiAgeGVuL2RyaXZlcnMvcGFz c3Rocm91Z2gvdnRkL3Z2dGQuYyAgfCAyNzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKystCj4+ICAyIGZpbGVzIGNoYW5nZWQsIDI5MyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9u cygtKQo+PiAKPj4gZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9pb21t dS5oIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL2lvbW11LmgKPj4gaW5kZXggYjcxZGFi OC4uZGU5MTg4YiAxMDA2NDQKPj4gLS0tIGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL2lv bW11LmgKPj4gKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL2lvbW11LmgKPj4gQEAg LTQ3LDcgKzQ3LDEyIEBACj4+ICAjZGVmaW5lIERNQVJfSVFIX1JFRyAgICAgICAgICAgIDB4ODAg LyogaW52YWxpZGF0aW9uIHF1ZXVlIGhlYWQgKi8KPj4gICNkZWZpbmUgRE1BUl9JUVRfUkVHICAg ICAgICAgICAgMHg4OCAvKiBpbnZhbGlkYXRpb24gcXVldWUgdGFpbCAqLwo+PiAgI2RlZmluZSBE TUFSX0lRQV9SRUcgICAgICAgICAgICAweDkwIC8qIGludmFsaWRhdGlvbiBxdWV1ZSBhZGRyICov Cj4+ICsjZGVmaW5lIERNQVJfSVFVQV9SRUcgICAgICAgICAgIDB4OTQgLyogaW52YWxpZGF0aW9u IHF1ZXVlIHVwcGVyIGFkZHIgKi8KPj4gKyNkZWZpbmUgRE1BUl9JQ1NfUkVHICAgICAgICAgICAg MHg5YyAvKiBpbnZhbGlkYXRpb24gY29tcGxldGlvbiBzdGF0dXMgKi8KPj4gICNkZWZpbmUgRE1B Ul9JRUNUTF9SRUcgICAgICAgICAgMHhhMCAvKiBpbnZhbGlkYXRpb24gZXZlbnQgY29udHJvbCBy ZWdpc3RlciAqLwo+PiArI2RlZmluZSBETUFSX0lFREFUQV9SRUcgICAgICAgICAweGE0IC8qIGlu dmFsaWRhdGlvbiBldmVudCBkYXRhIHJlZ2lzdGVyICovCj4+ICsjZGVmaW5lIERNQVJfSUVBRERS X1JFRyAgICAgICAgIDB4YTggLyogaW52YWxpZGF0aW9uIGV2ZW50IGFkZHJlc3MgcmVnaXN0ZXIg Ki8KPj4gKyNkZWZpbmUgRE1BUl9JRVVBRERSX1JFRyAgICAgICAgMHhhYyAvKiB1cHBlciBhZGRy ZXNzIHJlZ2lzdGVyICovCj4+ICAjZGVmaW5lIERNQVJfSVJUQV9SRUcgICAgICAgICAgIDB4Yjgg LyogYmFzZSBhZGRyZXNzIG9mIGludHIgcmVtYXAgdGFibGUgKi8KPj4gICNkZWZpbmUgRE1BUl9J UlRVQV9SRUcgICAgICAgICAgMHhiYyAvKiB1cHBlciBhZGRyZXNzIG9mIGludHIgcmVtYXAgdGFi bGUgKi8KPj4gIAo+PiBAQCAtMTc1LDYgKzE4MCwyMSBAQAo+PiAgI2RlZmluZSBETUFfSVJUQV9T KHZhbCkgICAgICAgICAodmFsICYgMHhmKQo+PiAgI2RlZmluZSBETUFfSVJUQV9TSVpFKHZhbCkg ICAgICAoMVVMIDw8IChETUFfSVJUQV9TKHZhbCkgKyAxKSkKPj4gIAo+PiArLyogSVFBX1JFRyAq Lwo+PiArI2RlZmluZSBETUFfSVFBX0FERFIodmFsKSAgICAgICAodmFsICYgfjB4ZmZmVUxMKQo+ PiArI2RlZmluZSBETUFfSVFBX1FTKHZhbCkgICAgICAgICAodmFsICYgMHg3KQo+PiArI2RlZmlu ZSBETUFfSVFBX1JTVkQgICAgICAgICAgICAweGZmOFVMTAo+PiArCj4+ICsvKiBJRUNUTF9SRUcg Ki8KPj4gKyNkZWZpbmUgRE1BX0lFQ1RMX0lNX1NISUZUIDMxCj4+ICsjZGVmaW5lIERNQV9JRUNU TF9JTSAgICAgICAgICAgICgxVSA8PCBETUFfSUVDVExfSU1fU0hJRlQpCj4+ICsjZGVmaW5lIERN QV9JRUNUTF9JUF9TSElGVCAzMAo+PiArI2RlZmluZSBETUFfSUVDVExfSVAgICAgICAgICAgICAo MVUgPDwgRE1BX0lFQ1RMX0lQX1NISUZUKQo+PiArCj4+ICsvKiBJQ1NfUkVHICovCj4+ICsjZGVm aW5lIERNQV9JQ1NfSVdDX1NISUZUICAgICAgIDAKPj4gKyNkZWZpbmUgRE1BX0lDU19JV0MgICAg ICAgICAgICAgKDFVIDw8IERNQV9JQ1NfSVdDX1NISUZUKQo+PiArCj4+ICAvKiBQTUVOX1JFRyAq Lwo+PiAgI2RlZmluZSBETUFfUE1FTl9FUE0gICAgKCgodTMyKTEpIDw8IDMxKQo+PiAgI2RlZmlu ZSBETUFfUE1FTl9QUlMgICAgKCgodTMyKTEpIDw8IDApCj4+IEBAIC0yMDUsMTMgKzIyNSwxNCBA QAo+PiAgLyogRlNUU19SRUcgKi8KPj4gICNkZWZpbmUgRE1BX0ZTVFNfUEZPX1NISUZUICAwCj4+ ICAjZGVmaW5lIERNQV9GU1RTX1BQRl9TSElGVCAgMQo+PiArI2RlZmluZSBETUFfRlNUU19JUUVf U0hJRlQgIDQKPj4gICNkZWZpbmUgRE1BX0ZTVFNfUFJPX1NISUZUICA3Cj4+ICAKPj4gICNkZWZp bmUgRE1BX0ZTVFNfUEZPICAgICAgICAoKHVpbnQzMl90KTEgPDwgRE1BX0ZTVFNfUEZPX1NISUZU KQo+PiAgI2RlZmluZSBETUFfRlNUU19QUEYgICAgICAgICgodWludDMyX3QpMSA8PCBETUFfRlNU U19QUEZfU0hJRlQpCj4+ICAjZGVmaW5lIERNQV9GU1RTX0FGTyAgICAgICAgKCh1aW50MzJfdCkx IDw8IDIpCj4+ICAjZGVmaW5lIERNQV9GU1RTX0FQRiAgICAgICAgKCh1aW50MzJfdCkxIDw8IDMp Cj4+IC0jZGVmaW5lIERNQV9GU1RTX0lRRSAgICAgICAgKCh1aW50MzJfdCkxIDw8IDQpCj4+ICsj ZGVmaW5lIERNQV9GU1RTX0lRRSAgICAgICAgKCh1aW50MzJfdCkxIDw8IERNQV9GU1RTX0lRRV9T SElGVCkKPj4gICNkZWZpbmUgRE1BX0ZTVFNfSUNFICAgICAgICAoKHVpbnQzMl90KTEgPDwgNSkK Pj4gICNkZWZpbmUgRE1BX0ZTVFNfSVRFICAgICAgICAoKHVpbnQzMl90KTEgPDwgNikKPj4gICNk ZWZpbmUgRE1BX0ZTVFNfUFJPICAgICAgICAoKHVpbnQzMl90KTEgPDwgRE1BX0ZTVFNfUFJPX1NI SUZUKQo+PiBAQCAtNTU1LDYgKzU3Niw3IEBAIHN0cnVjdCBxaW52YWxfZW50cnkgewo+PiAgCj4+ ICAvKiBRdWV1ZSBpbnZhbGlkYXRpb24gaGVhZC90YWlsIHNoaWZ0ICovCj4+ICAjZGVmaW5lIFFJ TlZBTF9JTkRFWF9TSElGVCA0Cj4+ICsjZGVmaW5lIFFJTlZBTF9JTkRFWF9NQVNLICAweDdmZmYw VUxMCj4+ICAKPj4gICNkZWZpbmUgcWludmFsX3ByZXNlbnQodikgKCh2KS5sbyAmIDEpCj4+ICAj ZGVmaW5lIHFpbnZhbF9mYXVsdF9kaXNhYmxlKHYpICgoKHYpLmxvID4+IDEpICYgMSkKPj4gZGlm ZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC92dnRkLmMgYi94ZW4vZHJpdmVy cy9wYXNzdGhyb3VnaC92dGQvdnZ0ZC5jCj4+IGluZGV4IGEyZmE2NGEuLjgxMTcwZWMgMTAwNjQ0 Cj4+IC0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC92dnRkLmMKPj4gKysrIGIveGVu L2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL3Z2dGQuYwo+PiBAQCAtMjcsNiArMjcsNyBAQAo+PiAg I2luY2x1ZGUgPGFzbS9ldmVudC5oPgo+PiAgI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+Cj4+ICAj aW5jbHVkZSA8YXNtL2h2bS9kb21haW4uaD4KPj4gKyNpbmNsdWRlIDxhc20vaHZtL3N1cHBvcnQu aD4KPj4gICNpbmNsdWRlIDxhc20vcDJtLmg+Cj4+ICAKPj4gICNpbmNsdWRlICJpb21tdS5oIgo+ PiBAQCAtNjgsNiArNjksOSBAQCBzdHJ1Y3QgdnZ0ZCB7Cj4+ICAKPj4gICAgICBzdHJ1Y3QgaHZt X2h3X3Z2dGQgaHc7Cj4+ICAgICAgdm9pZCAqaXJ0X2Jhc2U7Cj4+ICsgICAgdm9pZCAqaW52X3F1 ZXVlX2Jhc2U7Cj4KPldoeSBub3QgZGVjbGFyZSB0aGlzIGFzOgo+Cj5zdHJ1Y3QgcWludmFsX2Vu dHJ5ICoKCndpbGwgZG8uCgo+Cj4+ICsgICAgLyogVGhpcyBsb2NrIHByb3RlY3RzIGludmFsaWRh dGlvbiByZWxhdGVkIHJlZ2lzdGVycyAqLwo+PiArICAgIHNwaW5sb2NrX3QgaWVfbG9jazsKPgo+ QXMgbm90ZWQgaW4gYW5vdGhlciBwYXRjaCwgSSB0aGluayB0aGUgZmlyc3QgYXBwcm9hY2ggc2hv dWxkIGJlIHRvIHVzZQo+YSBzaW5nbGUgbG9jayB0aGF0IHNlcmlhbGl6ZXMgYWNjZXNzIHRvIHRo ZSB3aG9sZSB2SU9NTVUgcmVnaXN0ZXIKPnNwYWNlLiBMYXRlciB3ZSBjYW4gc2VlIGFib3V0IG1v cmUgZmluZSBncmFpbmVkIGxvY2tpbmcuCgpTZWVtcyB5b3UgbWVhbiBhIGNvYXJzLWdyYWluZWQg bG9jayBzaG91bGQgYmUgdGFrZW4gYXQgdGhlIGJlZ2lubmluZyBvZiBvcGVyYXRpb25zCndoaWNo IHJlYWQgYW5kIHdyaXRlIHZJT01NVSByZWdpc3RlcnMuIEl0IGlzIHN1cHBvc2VkIHRvIGJlIGVh c3kgdG8gYWRkIHN1Y2ggbG9jay4KCj4KPj4gIH07Cj4+ICAKPj4gIC8qIFNldHRpbmcgdmlvbW11 X3ZlcmJvc2UgZW5hYmxlcyBkZWJ1Z2dpbmcgbWVzc2FnZXMgb2YgdklPTU1VICovCj4+IEBAIC0y ODQsNiArMjg4LDEyIEBAIHN0YXRpYyB2b2lkIHZ2dGRfbm90aWZ5X2ZhdWx0KGNvbnN0IHN0cnVj dCB2dnRkICp2dnRkKQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2dGRfZ2V0X3Jl Zyh2dnRkLCBETUFSX0ZFREFUQV9SRUcpKTsKPj4gIH0KPj4gIAo+PiArc3RhdGljIHZvaWQgdnZ0 ZF9ub3RpZnlfaW52X2NvbXBsZXRpb24oY29uc3Qgc3RydWN0IHZ2dGQgKnZ2dGQpCj4+ICt7Cj4+ ICsgICAgdnZ0ZF9nZW5lcmF0ZV9pbnRlcnJ1cHQodnZ0ZCwgdnZ0ZF9nZXRfcmVnX3F1YWQodnZ0 ZCwgRE1BUl9JRUFERFJfUkVHKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dnRk X2dldF9yZWcodnZ0ZCwgRE1BUl9JRURBVEFfUkVHKSk7Cj4+ICt9Cj4+ICsKPj4gIC8qIENvbXB1 dGluZyB0aGUgSVJURSBpbmRleCBmb3IgYSBnaXZlbiBpbnRlcnJ1cHQgcmVxdWVzdC4gV2hlbiBz dWNjZXNzLCByZXR1cm4KPj4gICAqIDAgYW5kIHNldCBpbmRleCB0byByZWZlcmVuY2UgdGhlIGNv cnJlc3BvbmRpbmcgSVJURS4gT3RoZXJ3aXNlLCByZXR1cm4gPCAwLAo+PiAgICogaS5lLiAtMSB3 aGVuIHRoZSBpcnEgcmVxdWVzdCBpc24ndCBhbiByZW1hcHBpbmcgZm9ybWF0Lgo+PiBAQCAtNDc4 LDYgKzQ4OCwxODkgQEAgc3RhdGljIGludCB2dnRkX3JlY29yZF9mYXVsdChzdHJ1Y3QgdnZ0ZCAq dnZ0ZCwKPj4gICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwo+PiAgfQo+PiAgCj4+ICsvKgo+PiAr ICogUHJvY2VzcyBhbiBpbnZhbGlkYXRpb24gZGVzY3JpcHRvci4gQ3VycmVudGx5LCBvbmx5IHR3 byB0eXBlcyBkZXNjcmlwdG9ycywKPj4gKyAqIEludGVycnVwdCBFbnRyeSBDYWNoZSBJbnZhbGlk YXRpb24gRGVzY3JpdG9yIGFuZCBJbnZhbGlkYXRpb24gV2FpdAo+PiArICogRGVzY3JpcHRvciBh cmUgaGFuZGxlZC4KPj4gKyAqIEB2dnRkOiB0aGUgdmlydHVhbCB2dGQgaW5zdGFuY2UKPj4gKyAq IEBpOiB0aGUgaW5kZXggb2YgdGhlIGludmFsaWRhdGlvbiBkZXNjcmlwdG9yIHRvIGJlIHByb2Nl c3NlZAo+PiArICoKPj4gKyAqIElmIHN1Y2Nlc3MgcmV0dXJuIDAsIG9yIHJldHVybiBub24temVy byB3aGVuIGZhaWx1cmUuCj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgcHJvY2Vzc19pcWUoc3RydWN0 IHZ2dGQgKnZ2dGQsIHVpbnQzMl90IGkpCj4+ICt7Cj4+ICsgICAgc3RydWN0IHFpbnZhbF9lbnRy eSBxaW52YWw7Cj4+ICsgICAgaW50IHJldCA9IDA7Cj4+ICsKPj4gKyAgICBpZiAoICF2dnRkLT5p bnZfcXVldWVfYmFzZSApCj4+ICsgICAgewo+PiArICAgICAgICBnZHByaW50ayhYRU5MT0dfRVJS LCAiSW52YWxpZGF0aW9uIHF1ZXVlIGJhc2UgaXNuJ3Qgc2V0XG4iKTsKPj4gKyAgICAgICAgcmV0 dXJuIC0xOwo+Cj5JZiB5b3UganVzdCByZXR1cm4gLTEgb3IgMCBwbGVhc2UgdXNlIGJvb2wgaW5z dGVhZC4gT3IgcmV0dXJuIHByb3Blcgo+ZXJyb3IgY29kZXMuCgpXaWxsIHJldHVybiBtZWFuaW5n ZnVsIGVycm9yIGNvZGVzLgoKPgo+PiArICAgIH0KPj4gKyAgICBxaW52YWwgPSAoKHN0cnVjdCBx aW52YWxfZW50cnkgKil2dnRkLT5pbnZfcXVldWVfYmFzZSlbaV07Cj4KPlNlZSBteSBjb21tZW50 IGFib3ZlIHJlZ2FyZGluZyBob3cgaW52X3F1ZXVlX2Jhc2UgaXMgZGVjbGFyZWQsIEknbSBub3QK PnN1cmUgd2h5IHRoZSBjb3B5IGlzIG5lZWRlZCBoZXJlLgoKRG9uJ3QgbmVlZCBjb3B5IGhlcmUu IFdpbGwgZml4LgoKPgo+PiArCj4+ICsgICAgc3dpdGNoICggcWludmFsLnEuaW52X3dhaXRfZHNj LmxvLnR5cGUgKQo+PiArICAgIHsKPj4gKyAgICBjYXNlIFRZUEVfSU5WQUxfV0FJVDoKPj4gKyAg ICAgICAgaWYgKCBxaW52YWwucS5pbnZfd2FpdF9kc2MubG8uc3cgKQo+PiArICAgICAgICB7Cj4+ ICsgICAgICAgICAgICB1aW50MzJfdCBkYXRhID0gcWludmFsLnEuaW52X3dhaXRfZHNjLmxvLnNk YXRhOwo+PiArICAgICAgICAgICAgdWludDY0X3QgYWRkciA9IHFpbnZhbC5xLmludl93YWl0X2Rz Yy5oaS5zYWRkciA8PCAyOwo+PiArCj4+ICsgICAgICAgICAgICByZXQgPSBodm1fY29weV90b19n dWVzdF9waHlzKGFkZHIsICZkYXRhLCBzaXplb2YoZGF0YSksIGN1cnJlbnQpOwo+PiArICAgICAg ICAgICAgaWYgKCByZXQgKQo+PiArICAgICAgICAgICAgICAgIHZ2dGRfaW5mbygiRmFpbGVkIHRv IHdyaXRlIHN0YXR1cyBhZGRyZXNzXG4iKTsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAgICAg IC8qCj4+ICsgICAgICAgICAqIFRoZSBmb2xsb3dpbmcgY29kZSBnZW5lcmF0ZXMgYW4gaW52YWxp ZGF0aW9uIGNvbXBsZXRpb24gZXZlbnQKPj4gKyAgICAgICAgICogaW5kaWNhdGluZyB0aGUgaW52 YWxpZGF0aW9uIHdhaXQgZGVzY3JpcHRvciBjb21wbGV0aW9uLiBOb3RlIHRoYXQKPj4gKyAgICAg ICAgICogdGhlIGZvbGxvd2luZyBjb2RlIGZyYWdtZW50IGlzIG5vdCB0ZXN0ZWQgcHJvcGVybHku Cj4+ICsgICAgICAgICAqLwo+PiArICAgICAgICBpZiAoIHFpbnZhbC5xLmludl93YWl0X2RzYy5s by5pZmxhZyApCj4+ICsgICAgICAgIHsKPj4gKyAgICAgICAgICAgIGlmICggIXZ2dGRfdGVzdF9h bmRfc2V0X2JpdCh2dnRkLCBETUFSX0lDU19SRUcsIERNQV9JQ1NfSVdDX1NISUZUKSApCj4+ICsg ICAgICAgICAgICB7Cj4+ICsgICAgICAgICAgICAgICAgdnZ0ZF9zZXRfYml0KHZ2dGQsIERNQVJf SUVDVExfUkVHLCBETUFfSUVDVExfSVBfU0hJRlQpOwo+PiArICAgICAgICAgICAgICAgIGlmICgg IXZ2dGRfdGVzdF9iaXQodnZ0ZCwgRE1BUl9JRUNUTF9SRUcsIERNQV9JRUNUTF9JTV9TSElGVCkg KQo+PiArICAgICAgICAgICAgICAgIHsKPj4gKyAgICAgICAgICAgICAgICAgICAgdnZ0ZF9ub3Rp ZnlfaW52X2NvbXBsZXRpb24odnZ0ZCk7Cj4+ICsgICAgICAgICAgICAgICAgICAgIHZ2dGRfY2xl YXJfYml0KHZ2dGQsIERNQVJfSUVDVExfUkVHLCBETUFfSUVDVExfSVBfU0hJRlQpOwo+PiArICAg ICAgICAgICAgICAgIH0KPj4gKyAgICAgICAgICAgIH0KPj4gKyAgICAgICAgfQo+PiArICAgICAg ICBicmVhazsKPj4gKwo+PiArICAgIGNhc2UgVFlQRV9JTlZBTF9JRUM6Cj4+ICsgICAgICAgIC8q IE5vIGNhY2hlIGlzIHByZXNlcnZlZCBpbiB2dnRkLCBub3RoaW5nIGlzIG5lZWRlZCB0byBiZSBm bHVzaGVkICovCj4+ICsgICAgICAgIGJyZWFrOwo+PiArCj4+ICsgICAgZGVmYXVsdDoKPj4gKyAg ICAgICAgdnZ0ZF9kZWJ1ZygiZCVkOiBJbnZhbGlkYXRpb24gdHlwZSAoJXgpIGlzbid0IHN1cHBv cnRlZFxuIiwKPj4gKyAgICAgICAgICAgICAgICAgICB2dnRkLT5kb21haW4tPmRvbWFpbl9pZCwg cWludmFsLnEuaW52X3dhaXRfZHNjLmxvLnR5cGUpOwo+PiArICAgICAgICByZXR1cm4gLTE7Cj4+ ICsgICAgfQo+PiArCj4+ICsgICAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArLyoKPj4gKyAq IEludmFsaWRhdGUgYWxsIHRoZSBkZXNjcmlwdG9ycyBpbiBJbnZhbGlkYXRpb24gUXVldWUuCj4+ ICsgKi8KPj4gK3N0YXRpYyB2b2lkIHZ2dGRfcHJvY2Vzc19pcShzdHJ1Y3QgdnZ0ZCAqdnZ0ZCkK Pj4gK3sKPj4gKyAgICB1aW50MzJfdCBtYXhfZW50cnksIGksIGlxaCwgaXF0Owo+PiArICAgIGlu dCBlcnIgPSAwOwo+PiArCj4+ICsgICAgLyogVHJ5bG9jayBhdm9pZHMgbW9yZSB0aGFuIDEgY2Fs bGVyIGRlYWxpbmcgd2l0aCBpbnZhbGlkYXRpb24gcmVxdWVzdHMgKi8KPj4gKyAgICBpZiAoICFz cGluX3RyeWxvY2soJnZ2dGQtPmllX2xvY2spICkKPgo+VWgsIGlzIHRoaXMgY29ycmVjdD8gWW91 IGFyZSByZXR1cm5pbmcgd2l0aG91dCB0aGUgcXVldWUgYmVpbmcKPmludmFsaWRhdGVkIEFGQUlD VC4KClFJIGlzIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uIFNvZnR3YXJlIGNhbiBxdWV1ZSBh IHNwZWNpYWwKaW52YWxpZGF0aW9uIHJlcXVlc3QgdG8gaW52YWxpZGF0aW9uIHF1ZXVlIHRvIGdl dCBhIG5vdGlmaWNhdGlvbiBmcm9tCmhhcmR3YXJlIHdoZW4gYWxsIHJlcXVlc3RzIGJlZm9yZSB0 aGF0IHNwY2lhbCByZXF1ZXN0IGFyZSBmaW5pc2hlZC4KUmV0dXJpbmcgd2l0aG91dCBpbnZhbGlk YXRpbmcgcXVldWUgaXMgYWNjZXB0YWJsZS4gUmVhbCBpbnZhbGlkYXRpb24gaXMKZGVmZXJyZWQg dG8gYSBzdWl0YWJsZSB0aW1lIHdoZW4gbm8gaW50ZXJydXB0IGlzIHByb2Nlc3NpbmcsIG5vIG9u ZQppcyBkb2luZyBpbnZhbGlkYXRpb24gYW5kIGd1ZXN0IGlzbid0IHdyaXRpbmcgUUkgcmVsYXRl ZCByZWdpc3RlcnMuCgpBbnl3YXksIGlmIHdlIHVzZSBhIGNvYXJzLWdyYWluZWQgbG9jaywgJ2ll X2xvY2snIHdpbGwgYmUgcmVtb3ZlZCBhbmQgdGhlbgppbnZhbGlkYXRpb24gd2lsbCBiZSBkb25l IHN5bmNocm9ub3VzbHkgYmVjYXVzZSB0aGVyZSB3aWxsIGJlIG5vIGluLWZsaWdodApyZXF1ZXN0 cy4KCj4KPj4gKyAgICAgICAgcmV0dXJuOwo+PiArCj4+ICsgICAgaXFoID0gTUFTS19FWFRSKHZ2 dGRfZ2V0X3JlZ19xdWFkKHZ2dGQsIERNQVJfSVFIX1JFRyksIFFJTlZBTF9JTkRFWF9NQVNLKTsK Pj4gKyAgICBpcXQgPSBNQVNLX0VYVFIodnZ0ZF9nZXRfcmVnX3F1YWQodnZ0ZCwgRE1BUl9JUVRf UkVHKSwgUUlOVkFMX0lOREVYX01BU0spOwo+PiArICAgIC8qCj4+ICsgICAgICogTm8gbmV3IGRl c2NyaXB0b3IgaXMgZmV0Y2hlZCBmcm9tIHRoZSBJbnZhbGlkYXRpb24gUXVldWUgdW50aWwKPj4g KyAgICAgKiBzb2Z0d2FyZSBjbGVhcnMgdGhlIElRRSBmaWVsZCBpbiB0aGUgRmF1bHQgU3RhdHVz IFJlZ2lzdGVyCj4+ICsgICAgICovCj4+ICsgICAgaWYgKCB2dnRkX3Rlc3RfYml0KHZ2dGQsIERN QVJfRlNUU19SRUcsIERNQV9GU1RTX0lRRV9TSElGVCkgKQo+PiArICAgIHsKPj4gKyAgICAgICAg c3Bpbl91bmxvY2soJnZ2dGQtPmllX2xvY2spOwo+PiArICAgICAgICByZXR1cm47Cj4+ICsgICAg fQo+PiArCj4+ICsgICAgbWF4X2VudHJ5ID0gMSA8PCAoUUlOVkFMX0VOVFJZX09SREVSICsKPj4g KyAgICAgICAgICAgICAgICAgICAgICBETUFfSVFBX1FTKHZ2dGRfZ2V0X3JlZ19xdWFkKHZ2dGQs IERNQVJfSVFBX1JFRykpKTsKPj4gKwo+PiArICAgIEFTU0VSVChpcXQgPCBtYXhfZW50cnkpOwo+ Cj5JcyBpdCBwb3NzaWJsZSBmb3IgdGhlIHVzZXIgdG8gd3JpdGUgYSB2YWxpZCB2YWx1ZSB0byBE TUFSX0lRVF9SRUcgYW5kCj50aGVuIGNoYW5nZSBETUFSX0lRQV9SRUcgaW4gb3JkZXIgdG8gbWFr ZSB0aGUgYWJvdmUgQVNTRVJUIHRyaWdnZXI/CgpOby4gSXQgaXNuJ3QuCgo+Cj4+ICsgICAgaWYg KCBpcWggPT0gaXF0ICkKPj4gKyAgICB7Cj4+ICsgICAgICAgIHNwaW5fdW5sb2NrKCZ2dnRkLT5p ZV9sb2NrKTsKPj4gKyAgICAgICAgcmV0dXJuOwo+PiArICAgIH0KPj4gKwo+PiArICAgIGZvciAo IGkgPSBpcWg7IGkgIT0gaXF0OyBpID0gKGkgKyAxKSAlIG1heF9lbnRyeSApCj4+ICsgICAgewo+ PiArICAgICAgICBlcnIgPSBwcm9jZXNzX2lxZSh2dnRkLCBpKTsKPj4gKyAgICAgICAgaWYgKCBl cnIgKQo+PiArICAgICAgICAgICAgYnJlYWs7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgLyoKPj4g KyAgICAgKiBzZXQgSVFIIGJlZm9yZSBjaGVja2luZyBlcnJvciwgYmVjYXVzZSBJUUggc2hvdWxk IHJlZmVyZW5jZQo+PiArICAgICAqIHRoZSBkZXNyaXB0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBl cnJvciB3aGVuIGFuIGVycm9yIGlzIHNlZW4KPj4gKyAgICAgKiBieSBndWVzdAo+PiArICAgICAq Lwo+PiArICAgIHZ2dGRfc2V0X3JlZ19xdWFkKHZ2dGQsIERNQVJfSVFIX1JFRywgaSA8PCBRSU5W QUxfSU5ERVhfU0hJRlQpOwo+PiArCj4+ICsgICAgc3Bpbl91bmxvY2soJnZ2dGQtPmllX2xvY2sp Owo+PiArICAgIGlmICggZXJyICkKPj4gKyAgICB7Cj4+ICsgICAgICAgIHNwaW5fbG9jaygmdnZ0 ZC0+ZmVfbG9jayk7Cj4+ICsgICAgICAgIHZ2dGRfcmVwb3J0X25vbl9yZWNvdmVyYWJsZV9mYXVs dCh2dnRkLCBETUFfRlNUU19JUUVfU0hJRlQpOwo+PiArICAgICAgICBzcGluX3VubG9jaygmdnZ0 ZC0+ZmVfbG9jayk7Cj4+ICsgICAgfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCB2dnRkX3dy aXRlX2lxdChzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwgdWludDMyX3QgdmFsKQo+PiArewo+PiArICAgIHVp bnQzMl90IG1heF9lbnRyeTsKPj4gKwo+PiArICAgIGlmICggdmFsICYgflFJTlZBTF9JTkRFWF9N QVNLICkKPj4gKyAgICB7Cj4+ICsgICAgICAgIHZ2dGRfaW5mbygiYXR0ZW1wdHMgdG8gc2V0IHJl c2VydmVkIGJpdHMgaW4gSVFUXG4iKTsKPj4gKyAgICAgICAgcmV0dXJuOwo+PiArICAgIH0KPj4g Kwo+PiArICAgIG1heF9lbnRyeSA9IDFVIDw8IChRSU5WQUxfRU5UUllfT1JERVIgKwo+PiArICAg ICAgICAgICAgICAgICAgICAgICBETUFfSVFBX1FTKHZ2dGRfZ2V0X3JlZ19xdWFkKHZ2dGQsIERN QVJfSVFBX1JFRykpKTsKPj4gKyAgICBpZiAoIE1BU0tfRVhUUih2YWwsIFFJTlZBTF9JTkRFWF9N QVNLKSA+PSBtYXhfZW50cnkgKQo+PiArICAgIHsKPj4gKyAgICAgICAgdnZ0ZF9pbmZvKCJJUVQ6 IFZhbHVlICV4IGV4Y2VlZGVkIHN1cHBvcnRlZCBtYXggaW5kZXguIiwgdmFsKTsKPj4gKyAgICAg ICAgcmV0dXJuOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHZ2dGRfc2V0X3JlZyh2dnRkLCBETUFS X0lRVF9SRUcsIHZhbCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHZ2dGRfd3JpdGVfaXFh KHN0cnVjdCB2dnRkICp2dnRkLCB1aW50MzJfdCB2YWwsIGJvb2wgaGlnaCkKPj4gK3sKPj4gKyAg ICB1aW50NjRfdCBjYXAgPSB2dnRkX2dldF9yZWdfcXVhZCh2dnRkLCBETUFSX0NBUF9SRUcpOwo+ PiArICAgIHVpbnQ2NF90IG9sZCA9IHZ2dGRfZ2V0X3JlZ19xdWFkKHZ2dGQsIERNQVJfSVFBX1JF Ryk7Cj4+ICsgICAgdWludDY0X3QgbmV3Owo+PiArCj4+ICsgICAgaWYgKCBoaWdoICkKPj4gKyAg ICAgICAgbmV3ID0gKCh1aW50NjRfdCl2YWwgPDwgMzIpIHwgKG9sZCAmIDB4ZmZmZmZmZmYpOwo+ PiArICAgIGVsc2UKPj4gKyAgICAgICAgbmV3ID0gKChvbGQgPj4gMzIpIDw8IDMyKSB8IHZhbDsK Pgo+WW91IGNhbiBhbHNvIHVzZSBvbGQgJiB+MHhmZmZmZmZmZlVMCj4KPj4gKwo+PiArICAgIGlm ICggbmV3ICYgKH4oKDFVTEwgPDwgY2FwX21nYXcoY2FwKSkgLSAxKSB8IERNQV9JUUFfUlNWRCkg KQo+PiArICAgIHsKPj4gKyAgICAgICAgdnZ0ZF9pbmZvKCJBdHRlbXB0IHRvIHNldCByZXNlcnZl ZCBiaXRzIGluIElRQVxuIik7Cj4+ICsgICAgICAgIHJldHVybjsKPj4gKyAgICB9Cj4+ICsKPj4g KyAgICB2dnRkX3NldF9yZWdfcXVhZCh2dnRkLCBETUFSX0lRQV9SRUcsIG5ldyk7Cj4+ICsgICAg aWYgKCBoaWdoICYmICF2dnRkLT5pbnZfcXVldWVfYmFzZSApCj4+ICsgICAgICAgIHZ2dGQtPmlu dl9xdWV1ZV9iYXNlID0gbWFwX2d1ZXN0X3BhZ2VzKHZ2dGQtPmRvbWFpbiwKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEZOX0RPV04oRE1BX0lRQV9B RERSKG5ldykpLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAxIDw8IERNQV9JUUFfUVMobmV3KSk7Cj4KPkRvbid0IHlvdSBuZWVkIHRvIHBpY2sgYSBy ZWZlcmVuY2UgdG8gdGhpcyBwYWdlKHMpPwoKTWFwcGluZyBndWVzdCBwYWdlcyBhbHJlYWR5IGdl dCBhIHJlZmVyZW5jZSwgbmVlZG4ndCBnZXQgYSByZWZlcmVuY2UKYWdhaW4uCgo+Cj4+ICsgICAg ZWxzZSBpZiAoICFoaWdoICYmIHZ2dGQtPmludl9xdWV1ZV9iYXNlICkKPgo+SSdtIG5vdCBzdXJl IEkgZm9sbG93IHRoZSBsb2dpYyB3aXRoIGhpZ2ggaGVyZS4KClNvZnR3YXJlIGNhbiBhY2Nlc3Mg NjQtYml0IGFzIGVpdGhlciBhbGlnbmVkIHF1YWR3b3JkcyBvciBhbGlnbmVkCmRvdWJsZXdvcmRz LiBIZXJlIHdlIHNldCB1cCBtYXBwaW5nIHdoZW4gd3JpdHRpbmcgdG8gdGhlIHVwcGVyCmRvdWJs ZS13b3JkIGFuZCBkZXN0cm95IG1hcHBpbmcgd2hlbiB3cml0dGluZyB0byB0aGUgbG93ZXIgZG91 Ymxld29yZC4KCj4KPj4gKyAgICB7Cj4+ICsgICAgICAgIHVubWFwX2d1ZXN0X3BhZ2VzKHZ2dGQt Pmludl9xdWV1ZV9iYXNlLCAxIDw8IERNQV9JUUFfUVMob2xkKSk7Cj4+ICsgICAgICAgIHZ2dGQt Pmludl9xdWV1ZV9iYXNlID0gTlVMTDsKPj4gKyAgICB9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2 b2lkIHZ2dGRfd3JpdGVfaWNzKHN0cnVjdCB2dnRkICp2dnRkLCB1aW50MzJfdCB2YWwpCj4+ICt7 Cj4+ICsgICAgaWYgKCB2YWwgJiBETUFfSUNTX0lXQyApCj4+ICsgICAgewo+PiArICAgICAgICB2 dnRkX2NsZWFyX2JpdCh2dnRkLCBETUFSX0lDU19SRUcsIERNQV9JQ1NfSVdDX1NISUZUKTsKPj4g KyAgICAgICAgLyogV2hlbiBJV0MgZmllbGQgaXMgY2xlYXJlZCwgdGhlIElQIGZpZWxkIG5lZWRz IHRvIGJlIGNsZWFyZWQgKi8KPj4gKyAgICAgICAgdnZ0ZF9jbGVhcl9iaXQodnZ0ZCwgRE1BUl9J RUNUTF9SRUcsIERNQV9JRUNUTF9JUF9TSElGVCk7Cj4+ICsgICAgfQo+PiArfQo+PiArCj4+ICBz dGF0aWMgaW50IHZ2dGRfd3JpdGVfZnJjZDMoc3RydWN0IHZ2dGQgKnZ2dGQsIHVpbnQzMl90IHZh bCkKPj4gIHsKPj4gICAgICAvKiBXcml0aW5nIGEgMSBtZWFucyBjbGVhciBmYXVsdCAqLwo+PiBA QCAtNDg5LDYgKzY4MiwyMCBAQCBzdGF0aWMgaW50IHZ2dGRfd3JpdGVfZnJjZDMoc3RydWN0IHZ2 dGQgKnZ2dGQsIHVpbnQzMl90IHZhbCkKPj4gICAgICByZXR1cm4gWDg2RU1VTF9PS0FZOwo+PiAg fQo+PiAgCj4+ICtzdGF0aWMgdm9pZCB2dnRkX3dyaXRlX2llY3RsKHN0cnVjdCB2dnRkICp2dnRk LCB1aW50MzJfdCB2YWwpCj4+ICt7Cj4+ICsgICAgLyogT25seSBETUFfSUVDVExfSU0gYml0IGlz IHdyaXRhYmxlLiBHZW5lcmF0ZSBwZW5kaW5nIGV2ZW50IHdoZW4gdW5tYXNrICovCj4+ICsgICAg aWYgKCAhKHZhbCAmIERNQV9JRUNUTF9JTSkgKQo+PiArICAgIHsKPj4gKyAgICAgICAgLyogQ2xl YXIgSU0gYW5kIGNsZWFyIElQICovCj4+ICsgICAgICAgIHZ2dGRfY2xlYXJfYml0KHZ2dGQsIERN QVJfSUVDVExfUkVHLCBETUFfSUVDVExfSU1fU0hJRlQpOwo+PiArICAgICAgICBpZiAoIHZ2dGRf dGVzdF9hbmRfY2xlYXJfYml0KHZ2dGQsIERNQVJfSUVDVExfUkVHLCBETUFfSUVDVExfSVBfU0hJ RlQpICkKPj4gKyAgICAgICAgICAgIHZ2dGRfbm90aWZ5X2ludl9jb21wbGV0aW9uKHZ2dGQpOwo+ PiArICAgIH0KPj4gKyAgICBlbHNlCj4+ICsgICAgICAgIHZ2dGRfc2V0X2JpdCh2dnRkLCBETUFS X0lFQ1RMX1JFRywgRE1BX0lFQ1RMX0lNX1NISUZUKTsKPj4gK30KPj4gKwo+PiAgc3RhdGljIHZv aWQgdnZ0ZF93cml0ZV9mZWN0bChzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwgdWludDMyX3QgdmFsKQo+PiAg ewo+PiAgICAgIC8qCj4+IEBAIC02ODEsNiArODg4LDQ4IEBAIHN0YXRpYyB2b2lkIHZ2dGRfd3Jp dGVfZmF1bHRfcmVncyhzdHJ1Y3QgdnZ0ZCAqdnZ0ZCwgdW5zaWduZWQgbG9uZyB2YWwsCj4+ICAg ICAgc3Bpbl91bmxvY2soJnZ2dGQtPmZlX2xvY2spOwo+PiAgfQo+PiAgCj4+ICtzdGF0aWMgdm9p ZCB2dnRkX3dyaXRlX2ludmFsaWRhdGlvbl9yZWdzKHN0cnVjdCB2dnRkICp2dnRkLCB1bnNpZ25l ZCBsb25nIHZhbCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGxlbikKPj4gK3sKPj4gKyAgICBzcGlu X2xvY2soJnZ2dGQtPmllX2xvY2spOwo+PiArICAgIGZvciAoIDsgbGVuIDsgbGVuIC09IDQsIG9m ZnNldCArPSA0LCB2YWwgPSB2YWwgPj4gMzIpCj4KPlNhbWUgY29tbWVudCBhcyBpbiB0aGUgcHJl dmlvdXMgcGF0Y2gsIEkgZG9uJ3QgcmVhbGx5IGxpa2UgdGhlIGZvcgo+bG9vcCwgYnV0IEkgZ3Vl c3MgNjRiaXQgYWNjZXNzIG11c3QgYmUgYWxsb3dlZCB0byB0aGVzZSBncnVwIG9mCj5yZWdpc3Rl cnM/CgpZZXMuIEl0IGlzIGFsbG93ZWQuIEJ1dCBWVC1kIFNQRUMgaW1wbGllcyB0aGF0IGhhcmR3 YXJlIG1heSBkaXNhc3NlbWJsZQo2NGJpdCB3cml0ZSB0byB0d28gMzJiaXQgd3JpdGUuCgo+Cj4+ ICsgICAgewo+PiArICAgICAgICBzd2l0Y2ggKCBvZmZzZXQgKQo+PiArICAgICAgICB7Cj4+ICsg ICAgICAgIGNhc2UgRE1BUl9JRUNUTF9SRUc6Cj4+ICsgICAgICAgICAgICB2dnRkX3dyaXRlX2ll Y3RsKHZ2dGQsIHZhbCk7Cj4+ICsgICAgICAgICAgICBicmVhazsKPj4gKwo+PiArICAgICAgICBj YXNlIERNQVJfSUNTX1JFRzoKPj4gKyAgICAgICAgICAgIHZ2dGRfd3JpdGVfaWNzKHZ2dGQsIHZh bCk7Cj4+ICsgICAgICAgICAgICBicmVhazsKPj4gKwo+PiArICAgICAgICBjYXNlIERNQVJfSVFU X1JFRzoKPj4gKyAgICAgICAgICAgIHZ2dGRfd3JpdGVfaXF0KHZ2dGQsIHZhbCk7Cj4+ICsgICAg ICAgICAgICBicmVhazsKPj4gKwo+PiArICAgICAgICBjYXNlIERNQVJfSVFBX1JFRzoKPj4gKyAg ICAgICAgICAgIHZ2dGRfd3JpdGVfaXFhKHZ2dGQsIHZhbCwgMCk7Cj4+ICsgICAgICAgICAgICBi cmVhazsKPj4gKwo+PiArICAgICAgICBjYXNlIERNQVJfSVFVQV9SRUc6Cj4+ICsgICAgICAgICAg ICB2dnRkX3dyaXRlX2lxYSh2dnRkLCB2YWwsIDEpOwo+PiArICAgICAgICAgICAgYnJlYWs7Cj4+ ICsKPj4gKyAgICAgICAgY2FzZSBETUFSX0lFREFUQV9SRUc6Cj4+ICsgICAgICAgIGNhc2UgRE1B Ul9JRUFERFJfUkVHOgo+PiArICAgICAgICBjYXNlIERNQVJfSUVVQUREUl9SRUc6Cj4+ICsgICAg ICAgICAgICB2dnRkX3NldF9yZWcodnZ0ZCwgb2Zmc2V0LCB2YWwpOwo+PiArICAgICAgICAgICAg YnJlYWs7Cj4+ICsKPj4gKyAgICAgICAgZGVmYXVsdDoKPj4gKyAgICAgICAgICAgIGJyZWFrOwo+ PiArICAgICAgICB9Cj4+ICsgICAgfQo+PiArICAgIHNwaW5fdW5sb2NrKCZ2dnRkLT5pZV9sb2Nr KTsKPj4gKwo+PiArfQo+PiArCj4+ICBzdGF0aWMgaW50IHZ2dGRfd3JpdGUoc3RydWN0IHZjcHUg KnYsIHVuc2lnbmVkIGxvbmcgYWRkciwKPj4gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgbGVuLCB1bnNpZ25lZCBsb25nIHZhbCkKPj4gIHsKPj4gQEAgLTcxOSw2ICs5NjgsMTcg QEAgc3RhdGljIGludCB2dnRkX3dyaXRlKHN0cnVjdCB2Y3B1ICp2LCB1bnNpZ25lZCBsb25nIGFk ZHIsCj4+ICAgICAgICAgIHZ2dGRfd3JpdGVfZmF1bHRfcmVncyh2dnRkLCB2YWwsIG9mZnNldCwg bGVuKTsKPj4gICAgICAgICAgYnJlYWs7Cj4+ICAKPj4gKyAgICBjYXNlIERNQVJfSUVDVExfUkVH Ogo+PiArICAgIGNhc2UgRE1BUl9JQ1NfUkVHOgo+PiArICAgIGNhc2UgRE1BUl9JUVRfUkVHOgo+ PiArICAgIGNhc2UgRE1BUl9JUUFfUkVHOgo+PiArICAgIGNhc2UgRE1BUl9JUVVBX1JFRzoKPj4g KyAgICBjYXNlIERNQVJfSUVEQVRBX1JFRzoKPj4gKyAgICBjYXNlIERNQVJfSUVBRERSX1JFRzoK Pj4gKyAgICBjYXNlIERNQVJfSUVVQUREUl9SRUc6Cj4+ICsgICAgICAgIHZ2dGRfd3JpdGVfaW52 YWxpZGF0aW9uX3JlZ3ModnZ0ZCwgdmFsLCBvZmZzZXQsIGxlbik7Cj4+ICsgICAgICAgIGJyZWFr Owo+PiArCj4+ICAgICAgZGVmYXVsdDoKPj4gICAgICAgICAgaWYgKCAob2Zmc2V0ID09IChmYXVs dF9vZmZzZXQgKyBETUFfRlJDRDJfT0ZGU0VUKSkgfHwKPj4gICAgICAgICAgICAgICAob2Zmc2V0 ID09IChmYXVsdF9vZmZzZXQgKyBETUFfRlJDRDNfT0ZGU0VUKSkgKQo+PiBAQCAtODQwLDcgKzEx MDAsOCBAQCBzdGF0aWMgaW50IHZ2dGRfaGFuZGxlX2lycV9yZXF1ZXN0KGNvbnN0IHN0cnVjdCBk b21haW4gKmQsCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICBpcnRlLnJlbWFwLnRtKTsKPj4g IAo+PiAgIG91dDoKPj4gLSAgICBhdG9taWNfZGVjKCZ2dnRkLT5pbmZsaWdodF9pbnRyKTsKPj4g KyAgICBpZiAoICFhdG9taWNfZGVjX2FuZF90ZXN0KCZ2dnRkLT5pbmZsaWdodF9pbnRyKSApCj4+ ICsgICAgICAgIHZ2dGRfcHJvY2Vzc19pcSh2dnRkKTsKPj4gICAgICByZXR1cm4gcmV0Owo+PiAg fQo+PiAgCj4+IEBAIC05MTEsNiArMTE3Miw3IEBAIHN0YXRpYyBpbnQgdnZ0ZF9jcmVhdGUoc3Ry dWN0IGRvbWFpbiAqZCwgc3RydWN0IHZpb21tdSAqdmlvbW11KQo+PiAgICAgIHZ2dGQtPmRvbWFp biA9IGQ7Cj4+ICAgICAgcmVnaXN0ZXJfbW1pb19oYW5kbGVyKGQsICZ2dnRkX21taW9fb3BzKTsK Pj4gICAgICBzcGluX2xvY2tfaW5pdCgmdnZ0ZC0+ZmVfbG9jayk7Cj4+ICsgICAgc3Bpbl9sb2Nr X2luaXQoJnZ2dGQtPmllX2xvY2spOwo+PiAgCj4+ICAgICAgdmlvbW11LT5wcml2ID0gdnZ0ZDsK Pj4gIAo+PiBAQCAtOTMwLDYgKzExOTIsMTMgQEAgc3RhdGljIGludCB2dnRkX2Rlc3Ryb3koc3Ry dWN0IHZpb21tdSAqdmlvbW11KQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVvZihzdHJ1Y3QgaXJlbWFwX2VudHJ5KSkpOwo+PiAgICAgICAgICAgICAgdnZ0ZC0+ aXJ0X2Jhc2UgPSBOVUxMOwo+PiAgICAgICAgICB9Cj4+ICsgICAgICAgIGlmICggdnZ0ZC0+aW52 X3F1ZXVlX2Jhc2UgKQo+PiArICAgICAgICB7Cj4+ICsgICAgICAgICAgICB1aW50NjRfdCBvbGQg PSB2dnRkX2dldF9yZWdfcXVhZCh2dnRkLCBETUFSX0lRQV9SRUcpOwo+PiArCj4+ICsgICAgICAg ICAgICB1bm1hcF9ndWVzdF9wYWdlcyh2dnRkLT5pbnZfcXVldWVfYmFzZSwgMSA8PCBETUFfSVFB X1FTKG9sZCkpOwo+Cj5Eb24ndCB5b3UgYWxzbyBuZWVkIHRvIHVubWFwIHRoaXMgcGFnZShzKSB3 aGVuIFFJRSBpcyBkaXNhYmxlZD8KCldpbGwgZG8uCgpUaGFua3MKQ2hhbwoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlz dApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0 Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==