From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH 03/10] x86/cpuid: Handle leaf 0x1 in guest_cpuid() Date: Mon, 20 Feb 2017 11:00:27 +0000 Message-ID: <1487588434-4359-4-git-send-email-andrew.cooper3@citrix.com> References: <1487588434-4359-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1487588434-4359-1-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper , Boris Ostrovsky , Jan Beulich List-Id: xen-devel@lists.xenproject.org VGhlIGZlYXR1cmVzIHdvcmRzLCBlY3ggYW5kIGVkeCwgYXJlIGFscmVhZHkgYXVkaXRlZCBhcyBw YXJ0IG9mIHRoZSBmZWF0dXJlc2V0CmxvZ2ljLiAgVGhlIGV4aXN0aW5nIGxlYWYgMHg4MDAwMDAw MSBkeW5hbWljIGxvZ2ljIGhhcyBpdHMgU1lTQ0FMTCBhZGp1c3RtZW50CnNwbGl0IG91dCwgYXMg dGhlIHJlc3Qgb2YgdGhlIGFkanVzdG1lbnRzIGFyZSBjb21tb24gd2l0aCBsZWFmIDB4MS4gIFRo ZQpleGlzdGluZyBsZWFmIDB4MSBmZWF0dXJlIGFkanVzdG1lbnRzIGZyb20ge3B2LGh2bX1fY3B1 aWQoKSBhcmUgbW92ZWQKd2hvbGVzYWxlIGludG8gZ3Vlc3RfY3B1aWQoKSwgYWx0aG91Z2ggZGVk dXBlZCBhZ2FpbnN0IHRoZSBjb21tb24gYWRqdXN0bWVudHMuCgpUaGUgZWF4IHdvcmQgaXMgZmFt aWx5L21vZGVsL3N0ZXBwaW5nIGluZm9ybWF0aW9uLCBhbmQgaXMgZmluZSB0byB1c2UgYXMKcHJv dmlkZWQgYnkgdGhlIHRvb2xzdGFjaywgYWx0aG91Z2ggd2l0aCByZXNlcnZlZCBiaXRzIGNsZWFy ZWQuCgpUaGUgZWJ4IHdvcmQgaXMgbW9yZSBwcm9ibGVtYXRpYy4gIFRoZSBsb3cgOCBiaXRzIGFy ZSB0aGUgYnJhbmQgSUQgYW5kIHNhZmUgdG8KcGFzcyBzdHJhaWdodCB0aHJvdWdoLiAgVGhlIG5l eHQgOCBiaXRzIGFyZSB0aGUgQ0xGTFVTSCBsaW5lIHNpemUuICBUaGlzIHZhbHVlCmlzIGZvcndh cmRlZCBzdHJhaWdodCBmcm9tIGhhcmR3YXJlLCBhcyBub3RoaW5nIGdvb2QgY2FuIHBvc3NpYmx5 IGNvbWUgb2YKcHJvdmlkaW5nIGFuIGFsdGVybmF0aXZlIHZhbHVlIHRvIHRoZSBndWVzdC4KClRo ZSBuZXh0IDggYml0cyBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50IGJldHdlZW4gSW50ZWwgYW5kIEFN RCwgYnV0IGFyZSBib3RoCnNvbWUgcHJvcGVydHkgb2YgdGhlIG51bWJlciBvZiBsb2dpY2FsIGNv cmVzIGluIHRoZSBjdXJyZW50IHBoeXNpY2FsIHBhY2thZ2UuCkZvciBub3csIHRoZSB0b29sc3Rh Y2sgdmFsdWUgaXMgdXNlZCB1bmNoYW5nZWQgdW50aWwgYmV0dGVyIHRvcG9sb2d5IHN1cHBvcnQK aXMgYXZhaWxhYmxlLgoKVGhlIGZpbmFsIDggYml0cyBhcmUgdGhlIGluaXRpYWwgbGVnYWN5IEFQ SUMgSUQuICBGb3IgSFZNIGd1ZXN0cywgdGhpcyB3YXMKb3ZlcnJpZGRlbiB0byB2Y3B1X2lkICog Mi4gIFRoZSBzYW1lIGxvZ2ljIGlzIG5vdyBhcHBsaWVkIHRvIFBWIGd1ZXN0cywgc28KZ3Vlc3Rz IGRvbid0IG9ic2VydmUgYSBjb25zdGFudCBudW1iZXIgb24gYWxsIHZjcHVzIHZpYSB0aGVpciBl bXVsYXRlZCBvcgpmYXVsdGVkIHZpZXcuCgpTaWduZWQtb2ZmLWJ5OiBBbmRyZXcgQ29vcGVyIDxh bmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgotLS0KQ0M6IEphbiBCZXVsaWNoIDxKQmV1bGljaEBz dXNlLmNvbT4KQ0M6IEJvcmlzIE9zdHJvdnNreSA8Ym9yaXMub3N0cm92c2t5QG9yYWNsZS5jb20+ CgpCb3JpczogVGhpcyBjb25mbGljdHMgdGV4dHVhbGx5IGJ1dCBub3QgZnVuY3Rpb25hbGx5IHdp dGggeW91ciB2UE1VCmFkanVzdG1lbnRzLiAgV2hpY2hldmVyIHdheSByb3VuZCB3ZSBlbmQgdXAg bmVlZGluZyB0byByZWJhc2Ugc2hvdWxkIGJlIGVhc3kuCi0tLQogeGVuL2FyY2gveDg2L2NwdWlk LmMgICAgICAgIHwgMzUxICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiB4ZW4vaW5jbHVkZS9hc20teDg2L2NwdWlkLmggfCAgIDYgKy0KIDIgZmlsZXMgY2hhbmdl ZCwgMTU4IGluc2VydGlvbnMoKyksIDE5OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS94ZW4v YXJjaC94ODYvY3B1aWQuYyBiL3hlbi9hcmNoL3g4Ni9jcHVpZC5jCmluZGV4IGUwYTM4N2UuLjNl Y2I3OTQgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9jcHVpZC5jCisrKyBiL3hlbi9hcmNoL3g4 Ni9jcHVpZC5jCkBAIC0xNzYsNiArMTc2LDkgQEAgc3RhdGljIHZvaWQgcmVjYWxjdWxhdGVfbWlz YyhzdHJ1Y3QgY3B1aWRfcG9saWN5ICpwKQogICAgIHN3aXRjaCAoIHAtPng4Nl92ZW5kb3IgKQog ICAgIHsKICAgICBjYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisgICAgICAgIHAtPmJhc2ljLnJhd19m bXMgJj0gMHgwZmZmM2ZmZjsKKyAgICAgICAgcC0+YmFzaWMuYXBpY19pZCA9IDA7IC8qIER5bmFt aWMuICovCisKICAgICAgICAgcC0+YmFzaWMubDJfbnJfcXVlcmllcyA9IDE7IC8qIEZpeGVkIHRv IDEgcXVlcnkuICovCiAgICAgICAgIHAtPmJhc2ljLnJhd1sweDNdID0gRU1QVFlfTEVBRjsgLyog UFNOIC0gYWx3YXlzIGhpZGRlbi4gKi8KICAgICAgICAgcC0+YmFzaWMucmF3WzB4OV0gPSBFTVBU WV9MRUFGOyAvKiBEQ0EgLSBhbHdheXMgaGlkZGVuLiAqLwpAQCAtMTk0LDYgKzE5Nyw5IEBAIHN0 YXRpYyB2b2lkIHJlY2FsY3VsYXRlX21pc2Moc3RydWN0IGNwdWlkX3BvbGljeSAqcCkKICAgICAg ICAgYnJlYWs7CiAKICAgICBjYXNlIFg4Nl9WRU5ET1JfQU1EOgorICAgICAgICBwLT5iYXNpYy5y YXdfZm1zICY9IDB4MGZmZjBmZmY7CisgICAgICAgIHAtPmJhc2ljLmFwaWNfaWQgPSAwOyAvKiBE eW5hbWljLiAqLworCiAgICAgICAgIHplcm9fbGVhdmVzKHAtPmJhc2ljLnJhdywgMHgyLCAweDMp OwogICAgICAgICBwLT5iYXNpYy5yYXdbMHg5XSA9IEVNUFRZX0xFQUY7CiAKQEAgLTUwMiw2ICs1 MDgsOSBAQCB2b2lkIHJlY2FsY3VsYXRlX2NwdWlkX3BvbGljeShzdHJ1Y3QgZG9tYWluICpkKQog CiAgICAgY3B1aWRfZmVhdHVyZXNldF90b19wb2xpY3koZnMsIHApOwogCisgICAgLyogUGFzcyBo b3N0IGNhY2hlbGluZSBzaXplIHRocm91Z2ggdG8gZ3Vlc3RzLiAqLworICAgIHAtPmJhc2ljLmNs Zmx1c2hfc2l6ZSA9IG1heC0+YmFzaWMuY2xmbHVzaF9zaXplOworCiAgICAgcC0+ZXh0ZC5tYXhw aHlzYWRkciA9IG1pbihwLT5leHRkLm1heHBoeXNhZGRyLCBtYXgtPmV4dGQubWF4cGh5c2FkZHIp OwogICAgIHAtPmV4dGQubWF4cGh5c2FkZHIgPSBtaW5fdCh1aW50OF90LCBwLT5leHRkLm1heHBo eXNhZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5hcmNoLnBhZ2luZy5n Zm5fYml0cyArIFBBR0VfU0hJRlQpOwpAQCAtNTc0LDcgKzU4Myw2IEBAIHN0YXRpYyB2b2lkIHB2 X2NwdWlkKHVpbnQzMl90IGxlYWYsIHVpbnQzMl90IHN1YmxlYWYsIHN0cnVjdCBjcHVpZF9sZWFm ICpyZXMpCiB7CiAgICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50OwogICAgIHN0cnVjdCBk b21haW4gKmN1cnJkID0gY3Vyci0+ZG9tYWluOwotICAgIGNvbnN0IHN0cnVjdCBjcHVpZF9wb2xp Y3kgKnAgPSBjdXJyZC0+YXJjaC5jcHVpZDsKIAogICAgIGlmICggIWlzX2NvbnRyb2xfZG9tYWlu KGN1cnJkKSAmJiAhaXNfaGFyZHdhcmVfZG9tYWluKGN1cnJkKSApCiAgICAgICAgIGRvbWFpbl9j cHVpZChjdXJyZCwgbGVhZiwgc3VibGVhZiwgcmVzKTsKQEAgLTU4MywxNDcgKzU5MSw2IEBAIHN0 YXRpYyB2b2lkIHB2X2NwdWlkKHVpbnQzMl90IGxlYWYsIHVpbnQzMl90IHN1YmxlYWYsIHN0cnVj dCBjcHVpZF9sZWFmICpyZXMpCiAKICAgICBzd2l0Y2ggKCBsZWFmICkKICAgICB7Ci0gICAgY2Fz ZSAweDAwMDAwMDAxOgotICAgICAgICByZXMtPmMgPSBwLT5iYXNpYy5fMWM7Ci0gICAgICAgIHJl cy0+ZCA9IHAtPmJhc2ljLl8xZDsKLQotICAgICAgICBpZiAoICFpc19wdmhfZG9tYWluKGN1cnJk KSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBjcHVfdXNlcl9yZWdzICpy ZWdzID0gZ3Vlc3RfY3B1X3VzZXJfcmVncygpOwotCi0gICAgICAgICAgICAvKgotICAgICAgICAg ICAgICogRGVsZXRlIHRoZSBQVkggY29uZGl0aW9uIHdoZW4gSFZNTGl0ZSBmb3JtYWxseSByZXBs YWNlcyBQVkgsCi0gICAgICAgICAgICAgKiBhbmQgSFZNIGd1ZXN0cyBubyBsb25nZXIgZW50ZXIg YSBQViBjb2RlcGF0aC4KLSAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAvKgotICAgICAg ICAgICAgICogISEhIE9TWFNBVkUgaGFuZGxpbmcgZm9yIFBWIGd1ZXN0cyBpcyBub24tYXJjaGl0 ZWN0dXJhbCAhISEKLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgKiBBcmNoaXRlY3R1cmFs bHksIHRoZSBjb3JyZWN0IGNvZGUgaGVyZSBpcyBzaW1wbHk6Ci0gICAgICAgICAgICAgKgotICAg ICAgICAgICAgICogICBpZiAoIGN1cnItPmFyY2gucHZfdmNwdS5jdHJscmVnWzRdICYgWDg2X0NS NF9PU1hTQVZFICkKLSAgICAgICAgICAgICAqICAgICAgIGMgfD0gY3B1ZmVhdF9tYXNrKFg4Nl9G RUFUVVJFX09TWFNBVkUpOwotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIEhvd2V2ZXIg YmVjYXVzZSBvZiBidWdzIGluIFhlbiAoYmVmb3JlIGMvcyBiZDE5MDgwYiwgTm92IDIwMTAsCi0g ICAgICAgICAgICAgKiB0aGUgWFNBVkUgY3B1aWQgZmxhZyBsZWFrZWQgaW50byBndWVzdHMgZGVz cGl0ZSB0aGUgZmVhdHVyZSBub3QKLSAgICAgICAgICAgICAqIGJlaW5nIGF2YWlsYWJsZSBmb3Ig dXNlKSwgYnVnZ3kgd29ya2Fyb3VuZHMgd2hlcmUgaW50cm9kdWNlZCB0bwotICAgICAgICAgICAg ICogTGludXggKGMvcyA5NDdjY2Y5YywgYWxzbyBOb3YgMjAxMCkgd2hpY2ggcmVsaWVkIG9uIHRo ZSBmYWN0Ci0gICAgICAgICAgICAgKiB0aGF0IFhlbiBhbHNvIGluY29ycmVjdGx5IGxlYWtlZCBP U1hTQVZFIGludG8gdGhlIGd1ZXN0LgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIEZ1 cnRoZXJtb3JlLCBwcm92aWRpbmcgYXJjaGl0ZWN0dXJhbCBPU1hTQVZFIGJlaGF2aW91ciB0byBh Ci0gICAgICAgICAgICAgKiBtYW55IExpbnV4IFBWIGd1ZXN0cyB0cmlnZ2VyZWQgYSBmdXJ0aGVy IGtlcm5lbCBidWcgd2hlbiB0aGUKLSAgICAgICAgICAgICAqIGZwdSBjb2RlIG9ic2VydmVzIHRo YXQgWFNBVkVPUFQgaXMgYXZhaWxhYmxlLCBhc3N1bWVzIHRoYXQKLSAgICAgICAgICAgICAqIHhz YXZlIHN0YXRlIGhhZCBiZWVuIHNldCB1cCBmb3IgdGhlIHRhc2ssIGFuZCBmb2xsb3dzIGEgd2ls ZAotICAgICAgICAgICAgICogcG9pbnRlci4KLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAg KiBPbGRlciBMaW51eCBQVk9QUyBrZXJuZWxzIGhvd2V2ZXIgZG8gcmVxdWlyZSBhcmNoaXRlY3R1 cmFsCi0gICAgICAgICAgICAgKiBiZWhhdmlvdXIuICBUaGV5IG9ic2VydmUgWGVuJ3MgbGVha2Vk IE9TWFNBVkUgYW5kIGFzc3VtZSB0aGV5Ci0gICAgICAgICAgICAgKiBjYW4gYWxyZWFkeSB1c2Ug WFNFVEJWLCBkeWluZyB3aXRoIGEgI1VEIGJlY2F1c2UgdGhlIHNoYWRvd2VkCi0gICAgICAgICAg ICAgKiBDUjQuT1NYU0FWRSBpcyBjbGVhci4gIFRoaXMgYmVoYXZpb3VyIGhhcyBiZWVuIGFkanVz dGVkIGluIGFsbAotICAgICAgICAgICAgICogb2JzZXJ2ZWQgY2FzZXMgdmlhIHN0YWJsZSBiYWNr cG9ydHMgb2YgdGhlIGFib3ZlIGNoYW5nZXNldC4KLSAgICAgICAgICAgICAqCi0gICAgICAgICAg ICAgKiBUaGVyZWZvcmUsIHRoZSBsZWFraW5nIG9mIFhlbidzIE9TWFNBVkUgc2V0dGluZyBoYXMg YmVjb21lIGEKLSAgICAgICAgICAgICAqIGRlZmFjdG8gcGFydCBvZiB0aGUgUFYgQUJJIGFuZCBj YW4ndCByZWFzb25hYmx5IGJlIGNvcnJlY3RlZC4KLSAgICAgICAgICAgICAqIEl0IGNhbiBob3dl dmVyIGJlIHJlc3RyaWN0ZWQgdG8gb25seSB0aGUgZW5saWdodGVuZWQgQ1BVSUQKLSAgICAgICAg ICAgICAqIHZpZXcsIGFzIHNlZW4gYnkgdGhlIGd1ZXN0IGtlcm5lbC4KLSAgICAgICAgICAgICAq Ci0gICAgICAgICAgICAgKiBUaGUgZm9sbG93aW5nIHNpdHVhdGlvbnMgYW5kIGxvZ2ljIG5vdyBh cHBsaWVzOgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIC0gSGFyZHdhcmUgd2l0aG91 dCBDUFVJRCBmYXVsdGluZyBzdXBwb3J0IGFuZCBuYXRpdmUgQ1BVSUQ6Ci0gICAgICAgICAgICAg KiAgICBUaGVyZSBpcyBub3RoaW5nIFhlbiBjYW4gZG8gaGVyZS4gIFRoZSBob3N0cyBYU0FWRSBm bGFnIHdpbGwKLSAgICAgICAgICAgICAqICAgIGxlYWsgdGhyb3VnaCBhbmQgWGVuJ3MgT1NYU0FW RSBjaG9pY2Ugd2lsbCBsZWFrIHRocm91Z2guCi0gICAgICAgICAgICAgKgotICAgICAgICAgICAg ICogICAgSW4gdGhlIGNhc2UgdGhhdCB0aGUgZ3Vlc3Qga2VybmVsIGhhcyBub3Qgc2V0IHVwIE9T WFNBVkUsIG9ubHkKLSAgICAgICAgICAgICAqICAgIFNTRSB3aWxsIGJlIHNldCBpbiB4Y3IwLCBh bmQgZ3Vlc3QgdXNlcnNwYWNlIGNhbid0IGRvIHRvbyBtdWNoCi0gICAgICAgICAgICAgKiAgICBk YW1hZ2UgaXRzZWxmLgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIC0gRW5saWdodGVu ZWQgQ1BVSUQgb3IgQ1BVSUQgZmF1bHRpbmcgYXZhaWxhYmxlOgotICAgICAgICAgICAgICogICAg WGVuIGNhbiBmdWxseSBjb250cm9sIHdoYXQgaXMgc2VlbiBoZXJlLiAgR3Vlc3Qga2VybmVscyBu ZWVkCi0gICAgICAgICAgICAgKiAgICB0byBzZWUgdGhlIGxlYWtlZCBPU1hTQVZFIHZpYSB0aGUg ZW5saWdodGVuZWQgcGF0aCwgYnV0Ci0gICAgICAgICAgICAgKiAgICBndWVzdCB1c2Vyc3BhY2Ug YW5kIHRoZSBuYXRpdmUgaXMgZ2l2ZW4gYXJjaGl0ZWN0dXJhbAotICAgICAgICAgICAgICogICAg YmVoYXZpb3VyLgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqICAgIEVtdWxhdGVkIHZz IEZhdWx0ZWQgQ1BVSUQgaXMgZGlzdGluZ3Vpc2VkIGJhc2VkIG9uIHdoZXRoZXIgYQotICAgICAg ICAgICAgICogICAgI1VEIG9yICNHUCBpcyBjdXJyZW50bHkgYmVpbmcgc2VydmljZWQuCi0gICAg ICAgICAgICAgKi8KLSAgICAgICAgICAgIC8qIE9TWFNBVkUgY2xlYXIgaW4gcG9saWN5LiAgRmFz dC1mb3J3YXJkIENSNCBiYWNrIGluLiAqLwotICAgICAgICAgICAgaWYgKCAoY3Vyci0+YXJjaC5w dl92Y3B1LmN0cmxyZWdbNF0gJiBYODZfQ1I0X09TWFNBVkUpIHx8Ci0gICAgICAgICAgICAgICAg IChyZWdzLT5lbnRyeV92ZWN0b3IgPT0gVFJBUF9pbnZhbGlkX29wICYmCi0gICAgICAgICAgICAg ICAgICBndWVzdF9rZXJuZWxfbW9kZShjdXJyLCByZWdzKSAmJgotICAgICAgICAgICAgICAgICAg KHJlYWRfY3I0KCkgJiBYODZfQ1I0X09TWFNBVkUpKSApCi0gICAgICAgICAgICAgICAgcmVzLT5j IHw9IGNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9PU1hTQVZFKTsKLQotICAgICAgICAgICAgLyoK LSAgICAgICAgICAgICAqIEF0IHRoZSB0aW1lIG9mIHdyaXRpbmcsIGEgUFYgZG9tYWluIGlzIHRo ZSBvbmx5IHZpYWJsZSBvcHRpb24KLSAgICAgICAgICAgICAqIGZvciBEb20wLiAgU2V2ZXJhbCBp bnRlcmFjdGlvbnMgYmV0d2VlbiBkb20wIGFuZCBYZW4gZm9yIHJlYWwKLSAgICAgICAgICAgICAq IGhhcmR3YXJlIHNldHVwIGhhdmUgdW5mb3J0dW5hdGVseSBiZWVuIGltcGxlbWVudGVkIGJhc2Vk IG9uCi0gICAgICAgICAgICAgKiBzdGF0ZSB3aGljaCBpbmNvcnJlY3RseSBsZWFrZWQgaW50byBk b20wLgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqIFRoZXNlIGxlYWtzIGFyZSByZXRh aW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGJ1dAotICAgICAgICAgICAgICogcmVz dHJpY3RlZCB0byB0aGUgaGFyZHdhcmUgZG9tYWlucyBrZXJuZWwgb25seS4KLSAgICAgICAgICAg ICAqLwotICAgICAgICAgICAgaWYgKCBpc19oYXJkd2FyZV9kb21haW4oY3VycmQpICYmIGd1ZXN0 X2tlcm5lbF9tb2RlKGN1cnIsIHJlZ3MpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg ICAvKgotICAgICAgICAgICAgICAgICAqIE1UUlIgdXNlZCB0byB1bmNvbmRpdGlvbmFsbHkgbGVh ayBpbnRvIFBWIGd1ZXN0cy4gIFRoZXkKLSAgICAgICAgICAgICAgICAgKiBjYW5ub3QgTVRSUiBp bmZyYXN0cnVjdHVyZSBhdCBhbGwsIGFuZCBzaG91bGRuJ3QgYmUgYWJsZSB0bwotICAgICAgICAg ICAgICAgICAqIHNlZSB0aGUgZmVhdHVyZS4KLSAgICAgICAgICAgICAgICAgKgotICAgICAgICAg ICAgICAgICAqIE1vZGVybiBQVk9QUyBMaW51eCBzZWxmLWNsb2JiZXJzIHRoZSBNVFJSIGZlYXR1 cmUsIHRvIGF2b2lkCi0gICAgICAgICAgICAgICAgICogdHJ5aW5nIHRvIHVzZSB0aGUgYXNzb2Np YXRlZCBNU1JzLiAgWGVub2xpbnV4LWJhc2VkIFBWIGRvbTAncwotICAgICAgICAgICAgICAgICAq IGhvd2V2ZXIgdXNlIHRoZSBNVFJSIGZlYXR1cmUgYXMgYW4gaW5kaWNhdGlvbiBvZiB0aGUgcHJl c2VuY2UKLSAgICAgICAgICAgICAgICAgKiBvZiB0aGUgWEVOUEZfe2FkZCxkZWwscmVhZH1fbWVt dHlwZSBoeXBlcmNhbGxzLgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGlm ICggY3B1X2hhc19tdHJyICkKLSAgICAgICAgICAgICAgICAgICAgcmVzLT5kIHw9IGNwdWZlYXRf bWFzayhYODZfRkVBVFVSRV9NVFJSKTsKLQotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAg ICAgICAgICogTU9OSVRPUiBuZXZlciBsZWFrZWQgaW50byBQViBndWVzdHMsIGFzIFBWIGd1ZXN0 cyBjYW5ub3QKLSAgICAgICAgICAgICAgICAgKiB1c2UgdGhlIE1PTklUT1IvTVdBSVQgaW5zdHJ1 Y3Rpb25zLiAgQXMgc3VjaCwgdGhleSByZXF1aXJlCi0gICAgICAgICAgICAgICAgICogdGhlIGZl YXR1cmUgdG8gbm90IGJlaW5nIHByZXNlbnQgaW4gZW11bGF0ZWQgQ1BVSUQuCi0gICAgICAgICAg ICAgICAgICoKLSAgICAgICAgICAgICAgICAgKiBNb2Rlcm4gUFZPUFMgTGludXggdHJ5IHRvIGJl IGN1bm5pbmcgYW5kIHVzZSBuYXRpdmUgQ1BVSUQKLSAgICAgICAgICAgICAgICAgKiB0byBzZWUg aWYgdGhlIGhhcmR3YXJlIGFjdHVhbGx5IHN1cHBvcnRzIE1PTklUT1IsIGFuZCBieQotICAgICAg ICAgICAgICAgICAqIGV4dGVuc2lvbiwgZGVlcCBDIHN0YXRlcy4KLSAgICAgICAgICAgICAgICAg KgotICAgICAgICAgICAgICAgICAqIElmIHRoZSBmZWF0dXJlIGlzIHNlZW4sIGRlZXAtQyBzdGF0 ZSBpbmZvcm1hdGlvbiBpcwotICAgICAgICAgICAgICAgICAqIG9idGFpbmVkIGZyb20gdGhlIERT RFQgYW5kIGhhbmRlZCBiYWNrIHRvIFhlbiB2aWEgdGhlCi0gICAgICAgICAgICAgICAgICogWEVO UEZfc2V0X3Byb2Nlc3Nvcl9wbWluZm8gaHlwZXJjYWxsLgotICAgICAgICAgICAgICAgICAqCi0g ICAgICAgICAgICAgICAgICogVGhpcyBtZWNoYW5pc20gaXMgaW5jb21wYXRpYmxlIHdpdGggYW4g SFZNLWJhc2VkIGhhcmR3YXJlCi0gICAgICAgICAgICAgICAgICogZG9tYWluLCBhbmQgYWxzbyB3 aXRoIENQVUlEIEZhdWx0aW5nLgotICAgICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICAg ICogTHVja2lseSwgWGVuIGNhbiBiZSBqdXN0IGFzICdjdW5uaW5nJywgYW5kIGRpc3Rpbmd1aXNo IGFuCi0gICAgICAgICAgICAgICAgICogZW11bGF0ZWQgQ1BVSUQgZnJvbSBhIGZhdWx0ZWQgQ1BV SUQgYnkgd2hldGhlciBhICNVRCBvciAjR1AKLSAgICAgICAgICAgICAgICAgKiBmYXVsdCBpcyBj dXJyZW50bHkgYmVpbmcgc2VydmljZWQuICBZdWNrLi4uCi0gICAgICAgICAgICAgICAgICovCi0g ICAgICAgICAgICAgICAgaWYgKCBjcHVfaGFzX21vbml0b3IgJiYgcmVncy0+ZW50cnlfdmVjdG9y ID09IFRSQVBfZ3BfZmF1bHQgKQotICAgICAgICAgICAgICAgICAgICByZXMtPmMgfD0gY3B1ZmVh dF9tYXNrKFg4Nl9GRUFUVVJFX01PTklUT1IpOwotCi0gICAgICAgICAgICAgICAgLyoKLSAgICAg ICAgICAgICAgICAgKiBXaGlsZSBNT05JVE9SIG5ldmVyIGxlYWtlZCBpbnRvIFBWIGd1ZXN0cywg RUlTVCBhbHdheXMgdXNlZAotICAgICAgICAgICAgICAgICAqIHRvLgotICAgICAgICAgICAgICAg ICAqCi0gICAgICAgICAgICAgICAgICogTW9kZXJuIFBWT1BTIHdpbGwgb25seSBwYXJzZSBQIHN0 YXRlIGluZm9ybWF0aW9uIGZyb20gdGhlCi0gICAgICAgICAgICAgICAgICogRFNEVCBhbmQgcmV0 dXJuIGl0IHRvIFhlbiBpZiBFSVNUIGlzIHNlZW4gaW4gdGhlIGVtdWxhdGVkCi0gICAgICAgICAg ICAgICAgICogQ1BVSUQgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAg ICAgICAgICAgaWYgKCBjcHVfaGFzX2Vpc3QgKQotICAgICAgICAgICAgICAgICAgICByZXMtPmMg fD0gY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX0VJU1QpOwotICAgICAgICAgICAgfQotICAgICAg ICB9Ci0KLSAgICAgICAgaWYgKCB2cG11X2VuYWJsZWQoY3VycikgJiYKLSAgICAgICAgICAgICB2 cG11X2lzX3NldCh2Y3B1X3ZwbXUoY3VyciksIFZQTVVfQ1BVX0hBU19EUykgKQotICAgICAgICB7 Ci0gICAgICAgICAgICByZXMtPmQgfD0gY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX0RTKTsKLSAg ICAgICAgICAgIGlmICggY3B1X2hhcygmY3VycmVudF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfRFRF UzY0KSApCi0gICAgICAgICAgICAgICAgcmVzLT5jIHw9IGNwdWZlYXRfbWFzayhYODZfRkVBVFVS RV9EVEVTNjQpOwotICAgICAgICAgICAgaWYgKCBjcHVfaGFzKCZjdXJyZW50X2NwdV9kYXRhLCBY ODZfRkVBVFVSRV9EU0NQTCkgKQotICAgICAgICAgICAgICAgIHJlcy0+YyB8PSBjcHVmZWF0X21h c2soWDg2X0ZFQVRVUkVfRFNDUEwpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCiAgICAg Y2FzZSAweDAwMDAwMDBhOiAvKiBBcmNoaXRlY3R1cmFsIFBlcmZvcm1hbmNlIE1vbml0b3IgRmVh dHVyZXMgKEludGVsKSAqLwogICAgICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAh PSBYODZfVkVORE9SX0lOVEVMIHx8CiAgICAgICAgICAgICAgIXZwbXVfZW5hYmxlZChjdXJyKSAp CkBAIC03NDAsOCArNjA3LDcgQEAgc3RhdGljIHZvaWQgcHZfY3B1aWQodWludDMyX3QgbGVhZiwg dWludDMyX3Qgc3VibGVhZiwgc3RydWN0IGNwdWlkX2xlYWYgKnJlcykKICAgICAgICAgKnJlcyA9 IEVNUFRZX0xFQUY7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSAweDA6Ci0gICAgY2FzZSAw eDIgLi4uIDB4MzoKKyAgICBjYXNlIDB4MCAuLi4gMHgzOgogICAgIGNhc2UgMHg3IC4uLiAweDk6 CiAgICAgY2FzZSAweGMgLi4uIFhTVEFURV9DUFVJRDoKICAgICBjYXNlIDB4ODAwMDAwMDAgLi4u IDB4ZmZmZmZmZmY6CkBAIC03NTQsNTcgKzYyMCwxMSBAQCBzdGF0aWMgdm9pZCBodm1fY3B1aWQo dWludDMyX3QgbGVhZiwgdWludDMyX3Qgc3VibGVhZiwgc3RydWN0IGNwdWlkX2xlYWYgKnJlcykK IHsKICAgICBzdHJ1Y3QgdmNwdSAqdiA9IGN1cnJlbnQ7CiAgICAgc3RydWN0IGRvbWFpbiAqZCA9 IHYtPmRvbWFpbjsKLSAgICBjb25zdCBzdHJ1Y3QgY3B1aWRfcG9saWN5ICpwID0gZC0+YXJjaC5j cHVpZDsKIAogICAgIGRvbWFpbl9jcHVpZChkLCBsZWFmLCBzdWJsZWFmLCByZXMpOwogCiAgICAg c3dpdGNoICggbGVhZiApCiAgICAgewotICAgIGNhc2UgMHgxOgotICAgICAgICAvKiBGaXggdXAg VkxBUElDIGRldGFpbHMuICovCi0gICAgICAgIHJlcy0+YiAmPSAweDAwRkZGRkZGdTsKLSAgICAg ICAgcmVzLT5iIHw9ICh2LT52Y3B1X2lkICogMikgPDwgMjQ7Ci0KLSAgICAgICAgcmVzLT5jID0g cC0+YmFzaWMuXzFjOwotICAgICAgICByZXMtPmQgPSBwLT5iYXNpYy5fMWQ7Ci0KLSAgICAgICAg LyogQVBJQyBleHBvc2VkIHRvIGd1ZXN0cywgYnV0IEZhc3QtZm9yd2FyZCBNU1JfQVBJQ19CQVNF LkVOIGJhY2sgaW4uICovCi0gICAgICAgIGlmICggdmxhcGljX2h3X2Rpc2FibGVkKHZjcHVfdmxh cGljKHYpKSApCi0gICAgICAgICAgICByZXMtPmQgJj0gfmNwdWZlYXRfYml0KFg4Nl9GRUFUVVJF X0FQSUMpOwotCi0gICAgICAgIC8qIE9TWFNBVkUgY2xlYXIgaW4gcG9saWN5LiAgRmFzdC1mb3J3 YXJkIENSNCBiYWNrIGluLiAqLwotICAgICAgICBpZiAoIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3Rf Y3JbNF0gJiBYODZfQ1I0X09TWFNBVkUgKQotICAgICAgICAgICAgcmVzLT5jIHw9IGNwdWZlYXRf bWFzayhYODZfRkVBVFVSRV9PU1hTQVZFKTsKLQotICAgICAgICAvKgotICAgICAgICAgKiBQU0Uz NiBpcyBub3Qgc3VwcG9ydGVkIGluIHNoYWRvdyBtb2RlLiAgVGhpcyBiaXQgc2hvdWxkIGJlCi0g ICAgICAgICAqIHVuaWxhdGVyYWxseSBjbGVhcmVkLgotICAgICAgICAgKgotICAgICAgICAgKiBI b3dldmVyLCBhbiB1bnNwZWNpZmllZCB2ZXJzaW9uIG9mIEh5cGVyLVYgZnJvbSAyMDExIHJlZnVz ZXMKLSAgICAgICAgICogdG8gc3RhcnQgYXMgdGhlICJjcHUgZG9lcyBub3QgcHJvdmlkZSByZXF1 aXJlZCBodyBmZWF0dXJlcyIgaWYKLSAgICAgICAgICogaXQgY2FuJ3Qgc2VlIFBTRTM2LgotICAg ICAgICAgKgotICAgICAgICAgKiBBcyBhIHdvcmthcm91bmQsIGxlYWsgdGhlIHRvb2xzdGFjay1w cm92aWRlZCBQU0UzNiB2YWx1ZSBpbnRvIGEKLSAgICAgICAgICogc2hhZG93IGd1ZXN0IGlmIHRo ZSBndWVzdCBpcyBhbHJlYWR5IHVzaW5nIFBBRSBwYWdpbmcgKGFuZCB3b24ndAotICAgICAgICAg KiBjYXJlIGFib3V0IHJldmVydGluZyBiYWNrIHRvIFBTRSBwYWdpbmcpLiAgT3RoZXJ3aXNlLCBr bm9ibGUgaXQsIHNvCi0gICAgICAgICAqIGEgMzJiaXQgZ3Vlc3QgZG9lc24ndCBnZXQgdGhlIGlt cHJlc3Npb24gdGhhdCBpdCBjb3VsZCB0cnkgdG8gdXNlCi0gICAgICAgICAqIFBTRTM2IHBhZ2lu Zy4KLSAgICAgICAgICovCi0gICAgICAgIGlmICggIWhhcF9lbmFibGVkKGQpICYmICFodm1fcGFl X2VuYWJsZWQodikgKQotICAgICAgICAgICAgcmVzLT5kICY9IH5jcHVmZWF0X21hc2soWDg2X0ZF QVRVUkVfUFNFMzYpOwotCi0gICAgICAgIGlmICggdnBtdV9lbmFibGVkKHYpICYmCi0gICAgICAg ICAgICAgdnBtdV9pc19zZXQodmNwdV92cG11KHYpLCBWUE1VX0NQVV9IQVNfRFMpICkKLSAgICAg ICAgewotICAgICAgICAgICAgcmVzLT5kIHw9IGNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9EUyk7 Ci0gICAgICAgICAgICBpZiAoIGNwdV9oYXMoJmN1cnJlbnRfY3B1X2RhdGEsIFg4Nl9GRUFUVVJF X0RURVM2NCkgKQotICAgICAgICAgICAgICAgIHJlcy0+YyB8PSBjcHVmZWF0X21hc2soWDg2X0ZF QVRVUkVfRFRFUzY0KTsKLSAgICAgICAgICAgIGlmICggY3B1X2hhcygmY3VycmVudF9jcHVfZGF0 YSwgWDg2X0ZFQVRVUkVfRFNDUEwpICkKLSAgICAgICAgICAgICAgICByZXMtPmMgfD0gY3B1ZmVh dF9tYXNrKFg4Nl9GRUFUVVJFX0RTQ1BMKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJyZWFrOwot CiAgICAgY2FzZSAweGI6CiAgICAgICAgIC8qIEZpeCB0aGUgeDJBUElDIGlkZW50aWZpZXIuICov CiAgICAgICAgIHJlcy0+ZCA9IHYtPnZjcHVfaWQgKiAyOwpAQCAtODIyLDggKzY0Miw3IEBAIHN0 YXRpYyB2b2lkIGh2bV9jcHVpZCh1aW50MzJfdCBsZWFmLCB1aW50MzJfdCBzdWJsZWFmLCBzdHJ1 Y3QgY3B1aWRfbGVhZiAqcmVzKQogICAgICAgICAgICAgcmVzLT5hID0gKHJlcy0+YSAmIH4weGZm KSB8IDM7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSAweDA6Ci0gICAgY2FzZSAweDIgLi4u IDB4MzoKKyAgICBjYXNlIDB4MCAuLi4gMHgzOgogICAgIGNhc2UgMHg3IC4uLiAweDk6CiAgICAg Y2FzZSAweGMgLi4uIFhTVEFURV9DUFVJRDoKICAgICBjYXNlIDB4ODAwMDAwMDAgLi4uIDB4ZmZm ZmZmZmY6CkBAIC04NzYsOCArNjk1LDcgQEAgdm9pZCBndWVzdF9jcHVpZChjb25zdCBzdHJ1Y3Qg dmNwdSAqdiwgdWludDMyX3QgbGVhZiwKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGdv dG8gbGVnYWN5OwogCi0gICAgICAgIGNhc2UgMHgwOgotICAgICAgICBjYXNlIDB4MiAuLi4gMHgz OgorICAgICAgICBjYXNlIDB4MCAuLi4gMHgzOgogICAgICAgICBjYXNlIDB4OCAuLi4gMHg5Ogog ICAgICAgICBjYXNlIDB4YzoKICAgICAgICAgICAgICpyZXMgPSBwLT5iYXNpYy5yYXdbbGVhZl07 CkBAIC05MjgsNiArNzQ2LDE0MSBAQCB2b2lkIGd1ZXN0X2NwdWlkKGNvbnN0IHN0cnVjdCB2Y3B1 ICp2LCB1aW50MzJfdCBsZWFmLAogICAgICAqLwogICAgIHN3aXRjaCAoIGxlYWYgKQogICAgIHsK KyAgICAgICAgY29uc3Qgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3M7CisKKyAgICBjYXNlIDB4 MToKKyAgICAgICAgLyogVE9ETzogUmV3b3JrIHRvcG9sb2d5IGxvZ2ljLiAqLworICAgICAgICBy ZXMtPmIgJj0gMHgwMGZmZmZmZnU7CisgICAgICAgIHJlcy0+YiB8PSAodi0+dmNwdV9pZCAqIDIp IDw8IDI0OworCisgICAgICAgIC8qIFRPRE86IFJld29yayB2UE1VIGNvbnRyb2wgaW4gdGVybXMg b2YgdG9vbHN0YWNrIGNob2ljZXMuICovCisgICAgICAgIGlmICggdnBtdV9lbmFibGVkKHYpICYm CisgICAgICAgICAgICAgdnBtdV9pc19zZXQodmNwdV92cG11KHYpLCBWUE1VX0NQVV9IQVNfRFMp ICkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzLT5kIHw9IGNwdWZlYXRfbWFzayhYODZfRkVB VFVSRV9EUyk7CisgICAgICAgICAgICBpZiAoIGNwdV9oYXMoJmN1cnJlbnRfY3B1X2RhdGEsIFg4 Nl9GRUFUVVJFX0RURVM2NCkgKQorICAgICAgICAgICAgICAgIHJlcy0+YyB8PSBjcHVmZWF0X21h c2soWDg2X0ZFQVRVUkVfRFRFUzY0KTsKKyAgICAgICAgICAgIGlmICggY3B1X2hhcygmY3VycmVu dF9jcHVfZGF0YSwgWDg2X0ZFQVRVUkVfRFNDUEwpICkKKyAgICAgICAgICAgICAgICByZXMtPmMg fD0gY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX0RTQ1BMKTsKKyAgICAgICAgfQorCisgICAgICAg IGlmICggaGFzX2h2bV9jb250YWluZXJfZG9tYWluKGQpICkKKyAgICAgICAgeworICAgICAgICAg ICAgLyogT1NYU0FWRSBjbGVhciBpbiBwb2xpY3kuICBGYXN0LWZvcndhcmQgQ1I0IGJhY2sgaW4u ICovCisgICAgICAgICAgICBpZiAoIHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfY3JbNF0gJiBYODZf Q1I0X09TWFNBVkUgKQorICAgICAgICAgICAgICAgIHJlcy0+YyB8PSBjcHVmZWF0X21hc2soWDg2 X0ZFQVRVUkVfT1NYU0FWRSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAvKiBQViBkb21haW4g Ki8KKyAgICAgICAgeworICAgICAgICAgICAgcmVncyA9IGd1ZXN0X2NwdV91c2VyX3JlZ3MoKTsK KworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqICEhISBPU1hTQVZFIGhhbmRsaW5nIGZv ciBQViBndWVzdHMgaXMgbm9uLWFyY2hpdGVjdHVyYWwgISEhCisgICAgICAgICAgICAgKgorICAg ICAgICAgICAgICogQXJjaGl0ZWN0dXJhbGx5LCB0aGUgY29ycmVjdCBjb2RlIGhlcmUgaXMgc2lt cGx5OgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqICAgaWYgKCB2LT5hcmNoLnB2X3Zj cHUuY3RybHJlZ1s0XSAmIFg4Nl9DUjRfT1NYU0FWRSApCisgICAgICAgICAgICAgKiAgICAgICBj IHw9IGNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9PU1hTQVZFKTsKKyAgICAgICAgICAgICAqCisg ICAgICAgICAgICAgKiBIb3dldmVyIGJlY2F1c2Ugb2YgYnVncyBpbiBYZW4gKGJlZm9yZSBjL3Mg YmQxOTA4MGIsIE5vdiAyMDEwLAorICAgICAgICAgICAgICogdGhlIFhTQVZFIGNwdWlkIGZsYWcg bGVha2VkIGludG8gZ3Vlc3RzIGRlc3BpdGUgdGhlIGZlYXR1cmUgbm90CisgICAgICAgICAgICAg KiBiZWluZyBhdmFpbGFibGUgZm9yIHVzZSksIGJ1Z2d5IHdvcmthcm91bmRzIHdoZXJlIGludHJv ZHVjZWQgdG8KKyAgICAgICAgICAgICAqIExpbnV4IChjL3MgOTQ3Y2NmOWMsIGFsc28gTm92IDIw MTApIHdoaWNoIHJlbGllZCBvbiB0aGUgZmFjdAorICAgICAgICAgICAgICogdGhhdCBYZW4gYWxz byBpbmNvcnJlY3RseSBsZWFrZWQgT1NYU0FWRSBpbnRvIHRoZSBndWVzdC4KKyAgICAgICAgICAg ICAqCisgICAgICAgICAgICAgKiBGdXJ0aGVybW9yZSwgcHJvdmlkaW5nIGFyY2hpdGVjdHVyYWwg T1NYU0FWRSBiZWhhdmlvdXIgdG8gYQorICAgICAgICAgICAgICogbWFueSBMaW51eCBQViBndWVz dHMgdHJpZ2dlcmVkIGEgZnVydGhlciBrZXJuZWwgYnVnIHdoZW4gdGhlCisgICAgICAgICAgICAg KiBmcHUgY29kZSBvYnNlcnZlcyB0aGF0IFhTQVZFT1BUIGlzIGF2YWlsYWJsZSwgYXNzdW1lcyB0 aGF0CisgICAgICAgICAgICAgKiB4c2F2ZSBzdGF0ZSBoYWQgYmVlbiBzZXQgdXAgZm9yIHRoZSB0 YXNrLCBhbmQgZm9sbG93cyBhIHdpbGQKKyAgICAgICAgICAgICAqIHBvaW50ZXIuCisgICAgICAg ICAgICAgKgorICAgICAgICAgICAgICogT2xkZXIgTGludXggUFZPUFMga2VybmVscyBob3dldmVy IGRvIHJlcXVpcmUgYXJjaGl0ZWN0dXJhbAorICAgICAgICAgICAgICogYmVoYXZpb3VyLiAgVGhl eSBvYnNlcnZlIFhlbidzIGxlYWtlZCBPU1hTQVZFIGFuZCBhc3N1bWUgdGhleQorICAgICAgICAg ICAgICogY2FuIGFscmVhZHkgdXNlIFhTRVRCViwgZHlpbmcgd2l0aCBhICNVRCBiZWNhdXNlIHRo ZSBzaGFkb3dlZAorICAgICAgICAgICAgICogQ1I0Lk9TWFNBVkUgaXMgY2xlYXIuICBUaGlzIGJl aGF2aW91ciBoYXMgYmVlbiBhZGp1c3RlZCBpbiBhbGwKKyAgICAgICAgICAgICAqIG9ic2VydmVk IGNhc2VzIHZpYSBzdGFibGUgYmFja3BvcnRzIG9mIHRoZSBhYm92ZSBjaGFuZ2VzZXQuCisgICAg ICAgICAgICAgKgorICAgICAgICAgICAgICogVGhlcmVmb3JlLCB0aGUgbGVha2luZyBvZiBYZW4n cyBPU1hTQVZFIHNldHRpbmcgaGFzIGJlY29tZSBhCisgICAgICAgICAgICAgKiBkZWZhY3RvIHBh cnQgb2YgdGhlIFBWIEFCSSBhbmQgY2FuJ3QgcmVhc29uYWJseSBiZSBjb3JyZWN0ZWQuCisgICAg ICAgICAgICAgKiBJdCBjYW4gaG93ZXZlciBiZSByZXN0cmljdGVkIHRvIG9ubHkgdGhlIGVubGln aHRlbmVkIENQVUlECisgICAgICAgICAgICAgKiB2aWV3LCBhcyBzZWVuIGJ5IHRoZSBndWVzdCBr ZXJuZWwuCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogVGhlIGZvbGxvd2luZyBzaXR1 YXRpb25zIGFuZCBsb2dpYyBub3cgYXBwbGllczoKKyAgICAgICAgICAgICAqCisgICAgICAgICAg ICAgKiAtIEhhcmR3YXJlIHdpdGhvdXQgQ1BVSUQgZmF1bHRpbmcgc3VwcG9ydCBhbmQgbmF0aXZl IENQVUlEOgorICAgICAgICAgICAgICogICAgVGhlcmUgaXMgbm90aGluZyBYZW4gY2FuIGRvIGhl cmUuICBUaGUgaG9zdHMgWFNBVkUgZmxhZyB3aWxsCisgICAgICAgICAgICAgKiAgICBsZWFrIHRo cm91Z2ggYW5kIFhlbidzIE9TWFNBVkUgY2hvaWNlIHdpbGwgbGVhayB0aHJvdWdoLgorICAgICAg ICAgICAgICoKKyAgICAgICAgICAgICAqICAgIEluIHRoZSBjYXNlIHRoYXQgdGhlIGd1ZXN0IGtl cm5lbCBoYXMgbm90IHNldCB1cCBPU1hTQVZFLCBvbmx5CisgICAgICAgICAgICAgKiAgICBTU0Ug d2lsbCBiZSBzZXQgaW4geGNyMCwgYW5kIGd1ZXN0IHVzZXJzcGFjZSBjYW4ndCBkbyB0b28gbXVj aAorICAgICAgICAgICAgICogICAgZGFtYWdlIGl0c2VsZi4KKyAgICAgICAgICAgICAqCisgICAg ICAgICAgICAgKiAtIEVubGlnaHRlbmVkIENQVUlEIG9yIENQVUlEIGZhdWx0aW5nIGF2YWlsYWJs ZToKKyAgICAgICAgICAgICAqICAgIFhlbiBjYW4gZnVsbHkgY29udHJvbCB3aGF0IGlzIHNlZW4g aGVyZS4gIEd1ZXN0IGtlcm5lbHMgbmVlZAorICAgICAgICAgICAgICogICAgdG8gc2VlIHRoZSBs ZWFrZWQgT1NYU0FWRSB2aWEgdGhlIGVubGlnaHRlbmVkIHBhdGgsIGJ1dAorICAgICAgICAgICAg ICogICAgZ3Vlc3QgdXNlcnNwYWNlIGFuZCB0aGUgbmF0aXZlIGlzIGdpdmVuIGFyY2hpdGVjdHVy YWwKKyAgICAgICAgICAgICAqICAgIGJlaGF2aW91ci4KKyAgICAgICAgICAgICAqCisgICAgICAg ICAgICAgKiAgICBFbXVsYXRlZCB2cyBGYXVsdGVkIENQVUlEIGlzIGRpc3Rpbmd1aXNlZCBiYXNl ZCBvbiB3aGV0aGVyIGEKKyAgICAgICAgICAgICAqICAgICNVRCBvciAjR1AgaXMgY3VycmVudGx5 IGJlaW5nIHNlcnZpY2VkLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICAvKiBPU1hTQVZF IGNsZWFyIGluIHBvbGljeS4gIEZhc3QtZm9yd2FyZCBDUjQgYmFjayBpbi4gKi8KKyAgICAgICAg ICAgIGlmICggKHYtPmFyY2gucHZfdmNwdS5jdHJscmVnWzRdICYgWDg2X0NSNF9PU1hTQVZFKSB8 fAorICAgICAgICAgICAgICAgICAocmVncy0+ZW50cnlfdmVjdG9yID09IFRSQVBfaW52YWxpZF9v cCAmJgorICAgICAgICAgICAgICAgICAgZ3Vlc3Rfa2VybmVsX21vZGUodiwgcmVncykgJiYKKyAg ICAgICAgICAgICAgICAgIChyZWFkX2NyNCgpICYgWDg2X0NSNF9PU1hTQVZFKSkgKQorICAgICAg ICAgICAgICAgIHJlcy0+YyB8PSBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfT1NYU0FWRSk7CisK KyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBBdCB0aGUgdGltZSBvZiB3cml0aW5nLCBh IFBWIGRvbWFpbiBpcyB0aGUgb25seSB2aWFibGUgb3B0aW9uCisgICAgICAgICAgICAgKiBmb3Ig RG9tMC4gIFNldmVyYWwgaW50ZXJhY3Rpb25zIGJldHdlZW4gZG9tMCBhbmQgWGVuIGZvciByZWFs CisgICAgICAgICAgICAgKiBoYXJkd2FyZSBzZXR1cCBoYXZlIHVuZm9ydHVuYXRlbHkgYmVlbiBp bXBsZW1lbnRlZCBiYXNlZCBvbgorICAgICAgICAgICAgICogc3RhdGUgd2hpY2ggaW5jb3JyZWN0 bHkgbGVha2VkIGludG8gZG9tMC4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBUaGVz ZSBsZWFrcyBhcmUgcmV0YWluZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBidXQKKyAg ICAgICAgICAgICAqIHJlc3RyaWN0ZWQgdG8gdGhlIGhhcmR3YXJlIGRvbWFpbnMga2VybmVsIG9u bHkuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICggaXNfaGFyZHdhcmVfZG9tYWlu KGQpICYmIGd1ZXN0X2tlcm5lbF9tb2RlKHYsIHJlZ3MpICkKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIE1PTklUT1IgbmV2ZXIgbGVha2VkIGlu dG8gUFYgZ3Vlc3RzLCBhcyBQViBndWVzdHMgY2Fubm90CisgICAgICAgICAgICAgICAgICogdXNl IHRoZSBNT05JVE9SL01XQUlUIGluc3RydWN0aW9ucy4gIEFzIHN1Y2gsIHRoZXkgcmVxdWlyZQor ICAgICAgICAgICAgICAgICAqIHRoZSBmZWF0dXJlIHRvIG5vdCBiZWluZyBwcmVzZW50IGluIGVt dWxhdGVkIENQVUlELgorICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICogTW9k ZXJuIFBWT1BTIExpbnV4IHRyeSB0byBiZSBjdW5uaW5nIGFuZCB1c2UgbmF0aXZlIENQVUlECisg ICAgICAgICAgICAgICAgICogdG8gc2VlIGlmIHRoZSBoYXJkd2FyZSBhY3R1YWxseSBzdXBwb3J0 cyBNT05JVE9SLCBhbmQgYnkKKyAgICAgICAgICAgICAgICAgKiBleHRlbnNpb24sIGRlZXAgQyBz dGF0ZXMuCisgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgKiBJZiB0aGUgZmVh dHVyZSBpcyBzZWVuLCBkZWVwLUMgc3RhdGUgaW5mb3JtYXRpb24gaXMKKyAgICAgICAgICAgICAg ICAgKiBvYnRhaW5lZCBmcm9tIHRoZSBEU0RUIGFuZCBoYW5kZWQgYmFjayB0byBYZW4gdmlhIHRo ZQorICAgICAgICAgICAgICAgICAqIFhFTlBGX3NldF9wcm9jZXNzb3JfcG1pbmZvIGh5cGVyY2Fs bC4KKyAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAqIFRoaXMgbWVjaGFuaXNt IGlzIGluY29tcGF0aWJsZSB3aXRoIGFuIEhWTS1iYXNlZCBoYXJkd2FyZQorICAgICAgICAgICAg ICAgICAqIGRvbWFpbiwgYW5kIGFsc28gd2l0aCBDUFVJRCBGYXVsdGluZy4KKyAgICAgICAgICAg ICAgICAgKgorICAgICAgICAgICAgICAgICAqIEx1Y2tpbHksIFhlbiBjYW4gYmUganVzdCBhcyAn Y3VubmluZycsIGFuZCBkaXN0aW5ndWlzaCBhbgorICAgICAgICAgICAgICAgICAqIGVtdWxhdGVk IENQVUlEIGZyb20gYSBmYXVsdGVkIENQVUlEIGJ5IHdoZXRoZXIgYSAjVUQgb3IgI0dQCisgICAg ICAgICAgICAgICAgICogZmF1bHQgaXMgY3VycmVudGx5IGJlaW5nIHNlcnZpY2VkLiAgWXVjay4u LgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmICggY3B1X2hhc19tb25p dG9yICYmIHJlZ3MtPmVudHJ5X3ZlY3RvciA9PSBUUkFQX2dwX2ZhdWx0ICkKKyAgICAgICAgICAg ICAgICAgICAgcmVzLT5jIHw9IGNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9NT05JVE9SKTsKKwor ICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogV2hpbGUgTU9OSVRPUiBuZXZl ciBsZWFrZWQgaW50byBQViBndWVzdHMsIEVJU1QgYWx3YXlzIHVzZWQKKyAgICAgICAgICAgICAg ICAgKiB0by4KKyAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAqIE1vZGVybiBQ Vk9QUyBMaW51eCB3aWxsIG9ubHkgcGFyc2UgUCBzdGF0ZSBpbmZvcm1hdGlvbiBmcm9tCisgICAg ICAgICAgICAgICAgICogdGhlIERTRFQgYW5kIHJldHVybiBpdCB0byBYZW4gaWYgRUlTVCBpcyBz ZWVuIGluIHRoZQorICAgICAgICAgICAgICAgICAqIGVtdWxhdGVkIENQVUlEIGluZm9ybWF0aW9u LgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmICggY3B1X2hhc19laXN0 ICkKKyAgICAgICAgICAgICAgICAgICAgcmVzLT5jIHw9IGNwdWZlYXRfbWFzayhYODZfRkVBVFVS RV9FSVNUKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIEFkanVzdG1l bnRzIGNvbW1vbiB3aXRoIGxlYWYgMHg4MDAwMDAwMS4gKi8KKyAgICAgICAgZ290byBjb21tb25f ZHluYW1pY19hZGp1c3RtZW50czsKKwogICAgIGNhc2UgMHg3OgogICAgICAgICBzd2l0Y2ggKCBz dWJsZWFmICkKICAgICAgICAgewpAQCAtOTY3LDYgKzkyMCwxMiBAQCB2b2lkIGd1ZXN0X2NwdWlk KGNvbnN0IHN0cnVjdCB2Y3B1ICp2LCB1aW50MzJfdCBsZWFmLAogICAgICAgICBicmVhazsKIAog ICAgIGNhc2UgMHg4MDAwMDAwMToKKyAgICAgICAgLyogU1lTQ0FMTCBpcyBoaWRkZW4gb3V0c2lk ZSBvZiBsb25nIG1vZGUgb24gSW50ZWwuICovCisgICAgICAgIGlmICggcC0+eDg2X3ZlbmRvciA9 PSBYODZfVkVORE9SX0lOVEVMICYmCisgICAgICAgICAgICAgaGFzX2h2bV9jb250YWluZXJfZG9t YWluKGQpICYmICFodm1fbG9uZ19tb2RlX2VuYWJsZWQodikgKQorICAgICAgICAgICAgcmVzLT5k ICY9IH5jcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfU1lTQ0FMTCk7CisKKyAgICBjb21tb25fZHlu YW1pY19hZGp1c3RtZW50czogLyogQWRqdXN0bWVudHMgY29tbW9uIHdpdGggbGVhZiAxLiAqLwog ICAgICAgICBpZiAoIGhhc19odm1fY29udGFpbmVyX2RvbWFpbihkKSApCiAgICAgICAgIHsKICAg ICAgICAgICAgIC8qIEZhc3QtZm9yd2FyZCBNU1JfQVBJQ19CQVNFLkVOLiAqLwpAQCAtOTg5LDEw ICs5NDgsNiBAQCB2b2lkIGd1ZXN0X2NwdWlkKGNvbnN0IHN0cnVjdCB2Y3B1ICp2LCB1aW50MzJf dCBsZWFmLAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpZiAoICFoYXBfZW5hYmxlZChk KSAmJiAhaHZtX3BhZV9lbmFibGVkKHYpICkKICAgICAgICAgICAgICAgICByZXMtPmQgJj0gfmNw dWZlYXRfbWFzayhYODZfRkVBVFVSRV9QU0UzNik7Ci0KLSAgICAgICAgICAgIC8qIFNZU0NBTEwg aXMgaGlkZGVuIG91dHNpZGUgb2YgbG9uZyBtb2RlIG9uIEludGVsLiAqLwotICAgICAgICAgICAg aWYgKCBwLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgJiYgIWh2bV9sb25nX21vZGVf ZW5hYmxlZCh2KSApCi0gICAgICAgICAgICAgICAgcmVzLT5kICY9IH5jcHVmZWF0X21hc2soWDg2 X0ZFQVRVUkVfU1lTQ0FMTCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSAvKiBQViBkb21haW4g Ki8KICAgICAgICAgewpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9jcHVpZC5oIGIv eGVuL2luY2x1ZGUvYXNtLXg4Ni9jcHVpZC5oCmluZGV4IGJjM2ZjN2MuLjZkMTk5MGIgMTAwNjQ0 Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvY3B1aWQuaAorKysgYi94ZW4vaW5jbHVkZS9hc20t eDg2L2NwdWlkLmgKQEAgLTEwNiw3ICsxMDYsMTEgQEAgc3RydWN0IGNwdWlkX3BvbGljeQogICAg ICAgICAgICAgdWludDMyX3QgbWF4X2xlYWYsIHZlbmRvcl9lYngsIHZlbmRvcl9lY3gsIHZlbmRv cl9lZHg7CiAKICAgICAgICAgICAgIC8qIExlYWYgMHgxIC0gRmFtaWx5L21vZGVsL3N0ZXBwaW5n IGFuZCBmZWF0dXJlcy4gKi8KLSAgICAgICAgICAgIHVpbnQzMl90IHJhd19mbXMsIC8qIGIgKi86 MzI7CisgICAgICAgICAgICB1aW50MzJfdCByYXdfZm1zOworICAgICAgICAgICAgdWludDhfdCA6 OCwgICAgICAgLyogQnJhbmQgSUQuICovCisgICAgICAgICAgICAgICAgY2xmbHVzaF9zaXplLCAv KiBOdW1iZXIgb2YgOC1ieXRlIGJsb2NrcyBwZXIgY2FjaGUgbGluZS4gKi8KKyAgICAgICAgICAg ICAgICBscHBwLCAgICAgICAgIC8qIExvZ2ljYWwgcHJvY2Vzc29ycyBwZXIgcGFja2FnZS4gKi8K KyAgICAgICAgICAgICAgICBhcGljX2lkOyAgICAgIC8qIEluaXRpYWwgQVBJQyBJRC4gKi8KICAg ICAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgICB1aW50MzJfdCBfMWM7CiAgICAgICAg ICAgICAgICAgc3RydWN0IHsgREVDTF9CSVRGSUVMRCgxYyk7IH07Ci0tIAoyLjEuNAoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWls aW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hl bi1kZXZlbAo=