From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: [PATCH v4 05/44] x86emul: support basic AVX512 moves Date: Tue, 25 Sep 2018 07:28:49 -0600 Message-ID: <5BAA381102000078001EB9EC@prv1-mh.provo.novell.com> References: <5B6BF83602000078001DC548@prv1-mh.provo.novell.com> <5BAA34B502000078001EB9B6@prv1-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1g4nOf-0004kU-5c for xen-devel@lists.xenproject.org; Tue, 25 Sep 2018 13:29:01 +0000 In-Reply-To: <5BAA34B502000078001EB9B6@prv1-mh.provo.novell.com> Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel Cc: George Dunlap , Andrew Cooper , Wei Liu List-Id: xen-devel@lists.xenproject.org Tm90ZTogU0RNIFZvbCAyIHJldiAwNjcgaXMgbm90IHJlYWxseSBjb25zaXN0ZW50IGFib3V0IEVW RVguTCdMIGZvciBMSUcKICAgICAgaW5zbnMgLSB0aGUgb25seSBwbGFjZSB3aGVyZSB0aGlzIGlz IG1hZGUgZXhwbGljaXQgaXMgYSB0YWJsZSBpbgogICAgICB0aGUgc2VjdGlvbiB0aXRsZWQgIlZl Y3RvciBMZW5ndGggT3J0aG9nb25hbGl0eSI6IFdoaWxlIHRoZXkKICAgICAgdG9sZXJhdGUgMCwg MSwgYW5kIDIsIGEgdmFsdWUgb2YgMyB1bmlmb3JtbHkgbGVhZHMgdG8gI1VELgoKU2lnbmVkLW9m Zi1ieTogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgotLS0KdjQ6IEludHJvZHVjZSBk OHNfZHE2NCB0byBkZWFsIHdpdGggMzItYml0IG1vZGUgVk1PVkQgd2l0aCBFVkVYLlcgc2V0Lgog ICAgQWRqdXN0IGEgY29tbWVudC4KdjM6IFJlc3RyaWN0IGstcmVnIHJlYWRpbmcgdG8gaW5zbnMg d2l0aCBtZW1vcnkgb3BlcmFuZC4gU2hyaW5rIHNjb3BlIG9mCiAgICAiZGlzcDhzY2FsZSIuCnYy OiBNb3ZlICJmdWxsIiBpbnRvIG1vcmUgbmFycm93IHNjb3BlLgoKLS0tIGEvdG9vbHMvdGVzdHMv eDg2X2VtdWxhdG9yL3Rlc3RfeDg2X2VtdWxhdG9yLmMKKysrIGIvdG9vbHMvdGVzdHMveDg2X2Vt dWxhdG9yL3Rlc3RfeDg2X2VtdWxhdG9yLmMKQEAgLTE5ODUsNiArMTk4NSw1MyBAQCBpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgZWxzZQogICAgICAgICBwcmludGYoInNraXBw ZWRcbiIpOwogCisgICAgcHJpbnRmKCIlLTQwcyIsICJUZXN0aW5nIHtldmV4fSB2bW92cSAleG1t MSwzMiglZWR4KS4uLiIpOworICAgIGlmICggc3RhY2tfZXhlYyAmJiBjcHVfaGFzX2F2eDUxMmYg KQorICAgIHsKKyAgICAgICAgZGVjbF9pbnNuKGV2ZXhfdm1vdnFfdG9fbWVtKTsKKworICAgICAg ICBhc20gdm9sYXRpbGUgKCAicGNtcGd0YiAlJXhtbTEsICUleG1tMVxuIgorICAgICAgICAgICAg ICAgICAgICAgICBwdXRfaW5zbihldmV4X3Ztb3ZxX3RvX21lbSwgIiV7ZXZleCV9IHZtb3ZxICUl eG1tMSwgMzIoJTApIikKKyAgICAgICAgICAgICAgICAgICAgICAgOjogImQiIChOVUxMKSApOwor CisgICAgICAgIG1lbXNldChyZXMsIDB4ZGIsIDY0KTsKKyAgICAgICAgc2V0X2luc24oZXZleF92 bW92cV90b19tZW0pOworICAgICAgICByZWdzLmVjeCA9IDA7CisgICAgICAgIHJlZ3MuZWR4ID0g KHVuc2lnbmVkIGxvbmcpcmVzOworICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmZW11 bG9wcyk7CisgICAgICAgIGlmICggcmMgIT0gWDg2RU1VTF9PS0FZIHx8ICFjaGVja19laXAoZXZl eF92bW92cV90b19tZW0pIHx8CisgICAgICAgICAgICAgKigodWludDY0X3QgKilyZXMgKyA0KSB8 fAorICAgICAgICAgICAgIG1lbWNtcChyZXMsIHJlcyArIDEwLCAyNCkgfHwKKyAgICAgICAgICAg ICBtZW1jbXAocmVzLCByZXMgKyA2LCA4KSApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAg ICAgIHByaW50Zigib2theVxuIik7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcHJpbnRmKCJz a2lwcGVkXG4iKTsKKworICAgIHByaW50ZigiJS00MHMiLCAiVGVzdGluZyB7ZXZleH0gdm1vdnEg MzIoJWVkeCksJXhtbTAuLi4iKTsKKyAgICBpZiAoIHN0YWNrX2V4ZWMgJiYgY3B1X2hhc19hdng1 MTJmICkKKyAgICB7CisgICAgICAgIGRlY2xfaW5zbihldmV4X3Ztb3ZxX2Zyb21fbWVtKTsKKwor ICAgICAgICBhc20gdm9sYXRpbGUgKCAicGNtcGVxYiAlJXhtbTAsICUleG1tMFxuIgorICAgICAg ICAgICAgICAgICAgICAgICBwdXRfaW5zbihldmV4X3Ztb3ZxX2Zyb21fbWVtLCAiJXtldmV4JX0g dm1vdnEgMzIoJTApLCAlJXhtbTAiKQorICAgICAgICAgICAgICAgICAgICAgICA6OiAiZCIgKE5V TEwpICk7CisKKyAgICAgICAgc2V0X2luc24oZXZleF92bW92cV9mcm9tX21lbSk7CisgICAgICAg IHJjID0geDg2X2VtdWxhdGUoJmN0eHQsICZlbXVsb3BzKTsKKyAgICAgICAgaWYgKCByYyAhPSBY ODZFTVVMX09LQVkgfHwgIWNoZWNrX2VpcChldmV4X3Ztb3ZxX2Zyb21fbWVtKSApCisgICAgICAg ICAgICBnb3RvIGZhaWw7CisgICAgICAgIGFzbSAoICJ2bW92cSAlMSwgJSV4bW0xXG5cdCIKKyAg ICAgICAgICAgICAgInZwY21wZXFxICUlem1tMCwgJSV6bW0xLCAlJWswXG4iCisgICAgICAgICAg ICAgICJrbW92dyAlJWswLCAlMCIgOiAiPXIiIChyYykgOiAibSIgKHJlc1s4XSkgKTsKKyAgICAg ICAgaWYgKCByYyAhPSAweGZmICkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgcHJp bnRmKCJva2F5XG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBwcmludGYoInNraXBwZWRc biIpOworCiAgICAgcHJpbnRmKCIlLTQwcyIsICJUZXN0aW5nIG1vdmRxdSAleG1tMiwoJWVjeCku Li4iKTsKICAgICBpZiAoIHN0YWNrX2V4ZWMgJiYgY3B1X2hhc19zc2UyICkKICAgICB7CkBAIC0y MDg1LDYgKzIxMzIsMTE4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICBl bHNlCiAgICAgICAgIHByaW50Zigic2tpcHBlZFxuIik7CiAKKyAgICBwcmludGYoIiUtNDBzIiwg IlRlc3Rpbmcgdm1vdmRxdTMyICV6bW0yLCglZWN4KXslazF9Li4uIik7CisgICAgaWYgKCBzdGFj a19leGVjICYmIGNwdV9oYXNfYXZ4NTEyZiApCisgICAgeworICAgICAgICBkZWNsX2luc24odm1v dmRxdTMyX3RvX21lbSk7CisKKyAgICAgICAgbWVtc2V0KHJlcywgMHg1NSwgMTI4KTsKKworICAg ICAgICBhc20gdm9sYXRpbGUgKCAidnBjbXBlcWQgJSV5bW0yLCAlJXltbTIsICUleW1tMlxuXHQi CisgICAgICAgICAgICAgICAgICAgICAgICJrbW92dyAlMSwlJWsxXG4iCisgICAgICAgICAgICAg ICAgICAgICAgIHB1dF9pbnNuKHZtb3ZkcXUzMl90b19tZW0sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJ2bW92ZHF1MzIgJSV6bW0yLCAoJTApJXslJWsxJX0iKQorICAgICAgICAg ICAgICAgICAgICAgICA6OiAiYyIgKE5VTEwpLCAicm0iIChyZXNbMF0pICk7CisgICAgICAgIHNl dF9pbnNuKHZtb3ZkcXUzMl90b19tZW0pOworCisgICAgICAgIHJlZ3MuZWN4ID0gKHVuc2lnbmVk IGxvbmcpcmVzOworICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmZW11bG9wcyk7Cisg ICAgICAgIGlmICggKHJjICE9IFg4NkVNVUxfT0tBWSkgfHwgbWVtY21wKHJlcyArIDE2LCByZXMg KyAyNCwgMzIpIHx8CisgICAgICAgICAgICAgIWNoZWNrX2VpcCh2bW92ZHF1MzJfdG9fbWVtKSAp CisgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgcmVzWzE2XSA9IH4wOyByZXNbMThd ID0gfjA7IHJlc1syMF0gPSB+MDsgcmVzWzIyXSA9IH4wOworICAgICAgICByZXNbMjRdID0gIDA7 IHJlc1syNl0gPSAgMDsgcmVzWzI4XSA9ICAwOyByZXNbMzBdID0gIDA7CisgICAgICAgIGlmICgg bWVtY21wKHJlcywgcmVzICsgMTYsIDY0KSApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAg ICAgICAgcHJpbnRmKCJva2F5XG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBwcmludGYo InNraXBwZWRcbiIpOworCisgICAgcHJpbnRmKCIlLTQwcyIsICJUZXN0aW5nIHZtb3ZkcXUzMiA2 NCglZWR4KSwlem1tMnslazJ9Li4uIik7CisgICAgaWYgKCBzdGFja19leGVjICYmIGNwdV9oYXNf YXZ4NTEyZiApCisgICAgeworICAgICAgICBkZWNsX2luc24odm1vdmRxdTMyX2Zyb21fbWVtKTsK KworICAgICAgICBhc20gdm9sYXRpbGUgKCAia25vdHcgJSVrMSwgJSVrMlxuIgorICAgICAgICAg ICAgICAgICAgICAgICBwdXRfaW5zbih2bW92ZHF1MzJfZnJvbV9tZW0sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJ2bW92ZHF1MzIgNjQoJTApLCAlJXptbTIleyUlazIlfSIpCisg ICAgICAgICAgICAgICAgICAgICAgIDo6ICJkIiAoTlVMTCkgKTsKKworICAgICAgICBzZXRfaW5z bih2bW92ZHF1MzJfZnJvbV9tZW0pOworICAgICAgICByZWdzLmVjeCA9IDA7CisgICAgICAgIHJl Z3MuZWR4ID0gKHVuc2lnbmVkIGxvbmcpcmVzOworICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZj dHh0LCAmZW11bG9wcyk7CisgICAgICAgIGlmICggcmMgIT0gWDg2RU1VTF9PS0FZIHx8ICFjaGVj a19laXAodm1vdmRxdTMyX2Zyb21fbWVtKSApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAg ICAgIGFzbSAoICJ2cGNtcGVxZCAlMSwgJSV6bW0yLCAlJWswXG5cdCIKKyAgICAgICAgICAgICAg Imttb3Z3ICUlazAsICUwIiA6ICI9ciIgKHJjKSA6ICJtIiAocmVzWzBdKSApOworICAgICAgICBp ZiAoIHJjICE9IDB4ZmZmZiApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIHByaW50 Zigib2theVxuIik7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcHJpbnRmKCJza2lwcGVkXG4i KTsKKworICAgIHByaW50ZigiJS00MHMiLCAiVGVzdGluZyB2bW92ZHF1MTYgJXptbTMsKCVlY3gp eyVrMX0uLi4iKTsKKyAgICBpZiAoIHN0YWNrX2V4ZWMgJiYgY3B1X2hhc19hdng1MTJidyApCisg ICAgeworICAgICAgICBkZWNsX2luc24odm1vdmRxdTE2X3RvX21lbSk7CisKKyAgICAgICAgbWVt c2V0KHJlcywgMHg1NSwgMTI4KTsKKworICAgICAgICBhc20gdm9sYXRpbGUgKCAidnBjbXBlcXcg JSV5bW0zLCAlJXltbTMsICUleW1tM1xuXHQiCisgICAgICAgICAgICAgICAgICAgICAgICJrbW92 ZCAlMSwlJWsxXG4iCisgICAgICAgICAgICAgICAgICAgICAgIHB1dF9pbnNuKHZtb3ZkcXUxNl90 b19tZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2bW92ZHF1MTYgJSV6bW0z LCAoJTApJXslJWsxJX0iKQorICAgICAgICAgICAgICAgICAgICAgICA6OiAiYyIgKE5VTEwpLCAi cm0iIChyZXNbMF0pICk7CisgICAgICAgIHNldF9pbnNuKHZtb3ZkcXUxNl90b19tZW0pOworCisg ICAgICAgIHJlZ3MuZWN4ID0gKHVuc2lnbmVkIGxvbmcpcmVzOworICAgICAgICByYyA9IHg4Nl9l bXVsYXRlKCZjdHh0LCAmZW11bG9wcyk7CisgICAgICAgIGlmICggKHJjICE9IFg4NkVNVUxfT0tB WSkgfHwgbWVtY21wKHJlcyArIDE2LCByZXMgKyAyNCwgMzIpIHx8CisgICAgICAgICAgICAgIWNo ZWNrX2VpcCh2bW92ZHF1MTZfdG9fbWVtKSApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAg ICAgICAgZm9yICggaSA9IDE2OyBpIDwgMjQ7ICsraSApCisgICAgICAgICAgICByZXNbaV0gfD0g MHgwMDAwZmZmZjsKKyAgICAgICAgZm9yICggOyBpIDwgMzI7ICsraSApCisgICAgICAgICAgICBy ZXNbaV0gJj0gMHhmZmZmMDAwMDsKKyAgICAgICAgaWYgKCBtZW1jbXAocmVzLCByZXMgKyAxNiwg NjQpICkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICBwcmludGYoIm9rYXlcbiIp OworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHByaW50Zigic2tpcHBlZFxuIik7CisKKyAgICBw cmludGYoIiUtNDBzIiwgIlRlc3Rpbmcgdm1vdmRxdTE2IDY0KCVlZHgpLCV6bW0zeyVrMn0uLi4i KTsKKyAgICBpZiAoIHN0YWNrX2V4ZWMgJiYgY3B1X2hhc19hdng1MTJidyApCisgICAgeworICAg ICAgICBkZWNsX2luc24odm1vdmRxdTE2X2Zyb21fbWVtKTsKKworICAgICAgICBhc20gdm9sYXRp bGUgKCAia25vdGQgJSVrMSwgJSVrMlxuIgorICAgICAgICAgICAgICAgICAgICAgICBwdXRfaW5z bih2bW92ZHF1MTZfZnJvbV9tZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2 bW92ZHF1MTYgNjQoJTApLCAlJXptbTMleyUlazIlfSIpCisgICAgICAgICAgICAgICAgICAgICAg IDo6ICJkIiAoTlVMTCkgKTsKKworICAgICAgICBzZXRfaW5zbih2bW92ZHF1MTZfZnJvbV9tZW0p OworICAgICAgICByZWdzLmVjeCA9IDA7CisgICAgICAgIHJlZ3MuZWR4ID0gKHVuc2lnbmVkIGxv bmcpcmVzOworICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmZW11bG9wcyk7CisgICAg ICAgIGlmICggcmMgIT0gWDg2RU1VTF9PS0FZIHx8ICFjaGVja19laXAodm1vdmRxdTE2X2Zyb21f bWVtKSApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIGFzbSAoICJ2cGNtcGVxdyAl MSwgJSV6bW0zLCAlJWswXG5cdCIKKyAgICAgICAgICAgICAgImttb3ZkICUlazAsICUwIiA6ICI9 ciIgKHJjKSA6ICJtIiAocmVzWzBdKSApOworICAgICAgICBpZiAoIHJjICE9IDB4ZmZmZmZmZmYg KQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICBwcmludGYoIm9rYXlcbiIpOworICAg IH0KKyAgICBlbHNlCisgICAgICAgIHByaW50Zigic2tpcHBlZFxuIik7CisKICAgICBwcmludGYo IiUtNDBzIiwgIlRlc3RpbmcgbW92c2QgJXhtbTUsKCVlY3gpLi4uIik7CiAgICAgbWVtc2V0KHJl cywgMHg3NywgNjQpOwogICAgIG1lbXNldChyZXMgKyAxMCwgMHg2NiwgOCk7CkBAIC0yMTg2LDYg KzIzNDUsNzEgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgIGVsc2UKICAg ICAgICAgcHJpbnRmKCJza2lwcGVkXG4iKTsKIAorICAgIHByaW50ZigiJS00MHMiLCAiVGVzdGlu ZyB2bW92c2QgJXhtbTUsMTYoJWVjeCl7JWszfS4uLiIpOworICAgIG1lbXNldChyZXMsIDB4ODgs IDEyOCk7CisgICAgbWVtc2V0KHJlcyArIDIwLCAweDc3LCA4KTsKKyAgICBpZiAoIHN0YWNrX2V4 ZWMgJiYgY3B1X2hhc19hdng1MTJmICkKKyAgICB7CisgICAgICAgIGRlY2xfaW5zbih2bW92c2Rf bWFza2VkX3RvX21lbSk7CisKKyAgICAgICAgYXNtIHZvbGF0aWxlICggInZicm9hZGNhc3RzZCAl MCwgJSV5bW01XG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgImt4b3J3ICUlazMsICUlazMs ICUlazNcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgcHV0X2luc24odm1vdnNkX21hc2tlZF90 b19tZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2bW92c2QgJSV4bW01LCAx NiglMSkleyUlazMlfSIpCisgICAgICAgICAgICAgICAgICAgICAgIDo6ICJtIiAocmVzWzIwXSks ICJjIiAoTlVMTCkgKTsKKworICAgICAgICBzZXRfaW5zbih2bW92c2RfbWFza2VkX3RvX21lbSk7 CisgICAgICAgIHJlZ3MuZWN4ID0gMDsKKyAgICAgICAgcmVncy5lZHggPSAwOworICAgICAgICBy YyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmZW11bG9wcyk7CisgICAgICAgIGlmICggKHJjICE9IFg4 NkVNVUxfT0tBWSkgfHwgIWNoZWNrX2VpcCh2bW92c2RfbWFza2VkX3RvX21lbSkgKQorICAgICAg ICAgICAgZ290byBmYWlsOworCisgICAgICAgIGFzbSB2b2xhdGlsZSAoICJrbW92dyAlMCwgJSVr M1xuIiA6OiAibSIgKHJlc1syMF0pICk7CisKKyAgICAgICAgc2V0X2luc24odm1vdnNkX21hc2tl ZF90b19tZW0pOworICAgICAgICByZWdzLmVjeCA9ICh1bnNpZ25lZCBsb25nKXJlczsKKyAgICAg ICAgcmMgPSB4ODZfZW11bGF0ZSgmY3R4dCwgJmVtdWxvcHMpOworICAgICAgICBpZiAoIChyYyAh PSBYODZFTVVMX09LQVkpIHx8ICFjaGVja19laXAodm1vdnNkX21hc2tlZF90b19tZW0pIHx8Cisg ICAgICAgICAgICAgbWVtY21wKHJlcywgcmVzICsgMTYsIDY0KSApCisgICAgICAgICAgICBnb3Rv IGZhaWw7CisKKyAgICAgICAgcHJpbnRmKCJva2F5XG4iKTsKKyAgICB9CisgICAgZWxzZQorICAg IHsKKyAgICAgICAgcHJpbnRmKCJza2lwcGVkXG4iKTsKKyAgICAgICAgbWVtc2V0KHJlcyArIDQs IDB4NzcsIDgpOworICAgIH0KKworICAgIHByaW50ZigiJS00MHMiLCAiVGVzdGluZyB2bW92YXBz ICglZWR4KSwlem1tN3slazN9e3p9Li4uIik7CisgICAgaWYgKCBzdGFja19leGVjICYmIGNwdV9o YXNfYXZ4NTEyZiApCisgICAgeworICAgICAgICBkZWNsX2luc24odm1vdmFwc19tYXNrZWRfZnJv bV9tZW0pOworCisgICAgICAgIGFzbSB2b2xhdGlsZSAoICJ2cGNtcGVxZCAlJXhtbTcsICUleG1t NywgJSV4bW03XG5cdCIKKyAgICAgICAgICAgICAgICAgICAgICAgInZicm9hZGNhc3RzcyAlJXht bTcsICUlem1tN1xuIgorICAgICAgICAgICAgICAgICAgICAgICBwdXRfaW5zbih2bW92YXBzX21h c2tlZF9mcm9tX21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZtb3ZhcHMg KCUwKSwgJSV6bW03JXslJWszJX0le3olfSIpCisgICAgICAgICAgICAgICAgICAgICAgIDo6ICJk IiAoTlVMTCkgKTsKKworICAgICAgICBzZXRfaW5zbih2bW92YXBzX21hc2tlZF9mcm9tX21lbSk7 CisgICAgICAgIHJlZ3MuZWR4ID0gKHVuc2lnbmVkIGxvbmcpcmVzOworICAgICAgICByYyA9IHg4 Nl9lbXVsYXRlKCZjdHh0LCAmZW11bG9wcyk7CisgICAgICAgIGlmICggcmMgIT0gWDg2RU1VTF9P S0FZIHx8ICFjaGVja19laXAodm1vdmFwc19tYXNrZWRfZnJvbV9tZW0pICkKKyAgICAgICAgICAg IGdvdG8gZmFpbDsKKyAgICAgICAgYXNtICggInZjbXBlcXBzICUxLCAlJXptbTcsICUlazBcblx0 IgorICAgICAgICAgICAgICAidnhvcnBzICUleG1tMCwgJSV4bW0wLCAlJXhtbTBcblx0IgorICAg ICAgICAgICAgICAidmNtcGVxcHMgJSV6bW0wLCAlJXptbTcsICUlazFcblx0IgorICAgICAgICAg ICAgICAia3hvcncgJSVrMSwgJSVrMCwgJSVrMFxuXHQiCisgICAgICAgICAgICAgICJrbW92dyAl JWswLCAlMCIgOiAiPXIiIChyYykgOiAibSIgKHJlc1sxNl0pICk7CisgICAgICAgIGlmICggcmMg IT0gMHhmZmZmICkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgcHJpbnRmKCJva2F5 XG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBwcmludGYoInNraXBwZWRcbiIpOworCiAg ICAgcHJpbnRmKCIlLTQwcyIsICJUZXN0aW5nIG1vdmQgJW1tMywzMiglZWN4KS4uLiIpOwogICAg IGlmICggc3RhY2tfZXhlYyAmJiBjcHVfaGFzX21teCApCiAgICAgewpAQCAtMjM0MSw2ICsyNTY1 LDU1IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICBlbHNlCiAgICAgICAg IHByaW50Zigic2tpcHBlZFxuIik7CiAKKyAgICBwcmludGYoIiUtNDBzIiwgIlRlc3Rpbmcge2V2 ZXh9IHZtb3ZkICV4bW0zLDMyKCVlY3gpLi4uIik7CisgICAgaWYgKCBzdGFja19leGVjICYmIGNw dV9oYXNfYXZ4NTEyZiApCisgICAgeworICAgICAgICBkZWNsX2luc24oZXZleF92bW92ZF90b19t ZW0pOworCisgICAgICAgIGFzbSB2b2xhdGlsZSAoICJwY21wZXFiICUleG1tMywgJSV4bW0zXG4i CisgICAgICAgICAgICAgICAgICAgICAgIHB1dF9pbnNuKGV2ZXhfdm1vdmRfdG9fbWVtLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXtldmV4JX0gdm1vdmQgJSV4bW0zLCAzMigl MCkiKQorICAgICAgICAgICAgICAgICAgICAgICA6OiAiYyIgKE5VTEwpICk7CisKKyAgICAgICAg bWVtc2V0KHJlcywgMHhiZCwgNjQpOworICAgICAgICBzZXRfaW5zbihldmV4X3Ztb3ZkX3RvX21l bSk7CisgICAgICAgIHJlZ3MuZWN4ID0gKHVuc2lnbmVkIGxvbmcpcmVzOworICAgICAgICByZWdz LmVkeCA9IDA7CisgICAgICAgIHJjID0geDg2X2VtdWxhdGUoJmN0eHQsICZlbXVsb3BzKTsKKyAg ICAgICAgaWYgKCByYyAhPSBYODZFTVVMX09LQVkgfHwgIWNoZWNrX2VpcChldmV4X3Ztb3ZkX3Rv X21lbSkgfHwKKyAgICAgICAgICAgICByZXNbOF0gKyAxIHx8CisgICAgICAgICAgICAgbWVtY21w KHJlcywgcmVzICsgOSwgMjgpIHx8CisgICAgICAgICAgICAgbWVtY21wKHJlcywgcmVzICsgNiwg OCkgKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICBwcmludGYoIm9rYXlcbiIpOwor ICAgIH0KKyAgICBlbHNlCisgICAgICAgIHByaW50Zigic2tpcHBlZFxuIik7CisKKyAgICBwcmlu dGYoIiUtNDBzIiwgIlRlc3Rpbmcge2V2ZXh9IHZtb3ZkIDMyKCVlY3gpLCV4bW00Li4uIik7Cisg ICAgaWYgKCBzdGFja19leGVjICYmIGNwdV9oYXNfYXZ4NTEyZiApCisgICAgeworICAgICAgICBk ZWNsX2luc24oZXZleF92bW92ZF9mcm9tX21lbSk7CisKKyAgICAgICAgYXNtIHZvbGF0aWxlICgg InBjbXBlcWIgJSV4bW00LCAlJXhtbTRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgcHV0X2lu c24oZXZleF92bW92ZF9mcm9tX21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IiV7ZXZleCV9IHZtb3ZkIDMyKCUwKSwgJSV4bW00IikKKyAgICAgICAgICAgICAgICAgICAgICAg OjogImMiIChOVUxMKSApOworCisgICAgICAgIHNldF9pbnNuKGV2ZXhfdm1vdmRfZnJvbV9tZW0p OworICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZjdHh0LCAmZW11bG9wcyk7CisgICAgICAgIGlm ICggcmMgIT0gWDg2RU1VTF9PS0FZIHx8ICFjaGVja19laXAoZXZleF92bW92ZF9mcm9tX21lbSkg KQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICBhc20gKCAidm1vdmQgJTEsICUleG1t MFxuXHQiCisgICAgICAgICAgICAgICJ2cGNtcGVxZCAlJXptbTQsICUlem1tMCwgJSVrMFxuXHQi CisgICAgICAgICAgICAgICJrbW92dyAlJWswLCAlMCIgOiAiPXIiIChyYykgOiAibSIgKHJlc1s4 XSkgKTsKKyAgICAgICAgaWYgKCByYyAhPSAweGZmZmYgKQorICAgICAgICAgICAgZ290byBmYWls OworICAgICAgICBwcmludGYoIm9rYXlcbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHBy aW50Zigic2tpcHBlZFxuIik7CisKICAgICBwcmludGYoIiUtNDBzIiwgIlRlc3RpbmcgbW92ZCAl bW0zLCVlYnguLi4iKTsKICAgICBpZiAoIHN0YWNrX2V4ZWMgJiYgY3B1X2hhc19tbXggKQogICAg IHsKQEAgLTI1MDcsNiArMjc4MCw1NyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CiAgICAgZWxzZQogICAgICAgICBwcmludGYoInNraXBwZWRcbiIpOwogCisgICAgcHJpbnRmKCIl LTQwcyIsICJUZXN0aW5nIHtldmV4fSB2bW92ZCAleG1tMiwlZWJ4Li4uIik7CisgICAgaWYgKCBz dGFja19leGVjICYmIGNwdV9oYXNfYXZ4NTEyZiApCisgICAgeworICAgICAgICBkZWNsX2luc24o ZXZleF92bW92ZF90b19yZWcpOworCisgICAgICAgIC8qIFNlZSBjb21tZW50IG5leHQgdG8gbW92 ZCBhYm92ZS4gKi8KKyAgICAgICAgYXNtIHZvbGF0aWxlICggInBjbXBlcWIgJSV4bW0yLCAlJXht bTJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgcHV0X2luc24oZXZleF92bW92ZF90b19yZWcs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIle2V2ZXglfSB2bW92ZCAlJXhtbTIs ICUlZWJ4IikKKyAgICAgICAgICAgICAgICAgICAgICAgOjogKTsKKworICAgICAgICBzZXRfaW5z bihldmV4X3Ztb3ZkX3RvX3JlZyk7CisjaWZkZWYgX194ODZfNjRfXworICAgICAgICByZWdzLnJi eCA9IDB4YmRiZGJkYmRiZGJkYmRiZFVMOworI2Vsc2UKKyAgICAgICAgcmVncy5lYnggPSAweGJk YmRiZGJkVUw7CisjZW5kaWYKKyAgICAgICAgcmMgPSB4ODZfZW11bGF0ZSgmY3R4dCwgJmVtdWxv cHMpOworICAgICAgICBpZiAoIChyYyAhPSBYODZFTVVMX09LQVkpIHx8ICFjaGVja19laXAoZXZl eF92bW92ZF90b19yZWcpIHx8CisgICAgICAgICAgICAgcmVncy5lYnggIT0gMHhmZmZmZmZmZiAp CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIHByaW50Zigib2theVxuIik7CisgICAg fQorICAgIGVsc2UKKyAgICAgICAgcHJpbnRmKCJza2lwcGVkXG4iKTsKKworICAgIHByaW50Zigi JS00MHMiLCAiVGVzdGluZyB7ZXZleH0gdm1vdmQgJWVieCwleG1tMS4uLiIpOworICAgIGlmICgg c3RhY2tfZXhlYyAmJiBjcHVfaGFzX2F2eDUxMmYgKQorICAgIHsKKyAgICAgICAgZGVjbF9pbnNu KGV2ZXhfdm1vdmRfZnJvbV9yZWcpOworCisgICAgICAgIC8qIFNlZSBjb21tZW50IG5leHQgdG8g bW92ZCBhYm92ZS4gKi8KKyAgICAgICAgYXNtIHZvbGF0aWxlICggInBjbXBndGIgJSV4bW0xLCAl JXhtbTFcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgcHV0X2luc24oZXZleF92bW92ZF9mcm9t X3JlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiV7ZXZleCV9IHZtb3ZkICUl ZWJ4LCAlJXhtbTEiKQorICAgICAgICAgICAgICAgICAgICAgICA6OiApOworCisgICAgICAgIHNl dF9pbnNuKGV2ZXhfdm1vdmRfZnJvbV9yZWcpOworICAgICAgICByYyA9IHg4Nl9lbXVsYXRlKCZj dHh0LCAmZW11bG9wcyk7CisgICAgICAgIGlmICggKHJjICE9IFg4NkVNVUxfT0tBWSkgfHwgIWNo ZWNrX2VpcChldmV4X3Ztb3ZkX2Zyb21fcmVnKSApCisgICAgICAgICAgICBnb3RvIGZhaWw7Cisg ICAgICAgIGFzbSAoICJ2bW92ZCAlMSwgJSV4bW0wXG5cdCIKKyAgICAgICAgICAgICAgInZwY21w ZXFkICUlem1tMSwgJSV6bW0wLCAlJWswXG5cdCIKKyAgICAgICAgICAgICAgImttb3Z3ICUlazAs ICUwIiA6ICI9ciIgKHJjKSA6ICJtIiAocmVzWzhdKSApOworICAgICAgICBpZiAoIHJjICE9IDB4 ZmZmZiApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIHByaW50Zigib2theVxuIik7 CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcHJpbnRmKCJza2lwcGVkXG4iKTsKKwogI2lmZGVm IF9feDg2XzY0X18KICAgICBwcmludGYoIiUtNDBzIiwgIlRlc3RpbmcgbW92cSAlbW0zLDMyKCVl Y3gpLi4uIik7CiAgICAgaWYgKCBzdGFja19leGVjICYmIGNwdV9oYXNfbW14ICkKQEAgLTI1ODQs NiArMjkwOCwzNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICAgZWxzZQog ICAgICAgICBwcmludGYoInNraXBwZWRcbiIpOwogCisgICAgcHJpbnRmKCIlLTQwcyIsICJUZXN0 aW5nIHtldmV4fSB2bW92cSAleG1tMTEsMzIoJWVjeCkuLi4iKTsKKyAgICBpZiAoIHN0YWNrX2V4 ZWMgJiYgY3B1X2hhc19hdng1MTJmICkKKyAgICB7CisgICAgICAgIGRlY2xfaW5zbihldmV4X3Zt b3ZxX3RvX21lbTIpOworCisgICAgICAgIGFzbSB2b2xhdGlsZSAoICJwY21wZXFiICUleG1tMTEs ICUleG1tMTFcbiIKKyNpZiAwIC8qIFRoaXMgbWF5IG5vdCB3b3JrLCBhcyB0aGUgYXNzZW1ibGVy IG1pZ2h0IHBpY2sgb3Bjb2RlIEQ2LiAqLworICAgICAgICAgICAgICAgICAgICAgICBwdXRfaW5z bihldmV4X3Ztb3ZxX3RvX21lbTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7 ZXZleH0gdm1vdnEgJSV4bW0xMSwgMzIoJTApIikKKyNlbHNlCisgICAgICAgICAgICAgICAgICAg ICAgIHB1dF9pbnNuKGV2ZXhfdm1vdnFfdG9fbWVtMiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIi5ieXRlIDB4NjIsIDB4ZjEsIDB4ZmQsIDB4MDgsIDB4N2UsIDB4NDksIDB4MDQi KQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgIDo6ICJjIiAoTlVMTCkgKTsKKworICAg ICAgICBtZW1zZXQocmVzLCAweGJkLCA2NCk7CisgICAgICAgIHNldF9pbnNuKGV2ZXhfdm1vdnFf dG9fbWVtMik7CisgICAgICAgIHJlZ3MuZWN4ID0gKHVuc2lnbmVkIGxvbmcpcmVzOworICAgICAg ICByZWdzLmVkeCA9IDA7CisgICAgICAgIHJjID0geDg2X2VtdWxhdGUoJmN0eHQsICZlbXVsb3Bz KTsKKyAgICAgICAgaWYgKCByYyAhPSBYODZFTVVMX09LQVkgfHwgIWNoZWNrX2VpcChldmV4X3Zt b3ZxX3RvX21lbTIpIHx8CisgICAgICAgICAgICAgKigobG9uZyAqKXJlcyArIDQpICsgMSB8fAor ICAgICAgICAgICAgIG1lbWNtcChyZXMsIHJlcyArIDEwLCAyNCkgfHwKKyAgICAgICAgICAgICBt ZW1jbXAocmVzLCByZXMgKyA2LCA4KSApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAg IHByaW50Zigib2theVxuIik7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcHJpbnRmKCJza2lw cGVkXG4iKTsKKwogICAgIHByaW50ZigiJS00MHMiLCAiVGVzdGluZyBtb3ZxICVtbTMsJXJieC4u LiIpOwogICAgIGlmICggc3RhY2tfZXhlYyAmJiBjcHVfaGFzX21teCApCiAgICAgewpAQCAtMjY0 Myw2ICsyOTk3LDI4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICB9CiAg ICAgZWxzZQogICAgICAgICBwcmludGYoInNraXBwZWRcbiIpOworCisgICAgcHJpbnRmKCIlLTQw cyIsICJUZXN0aW5nIHZtb3ZxICV4bW0yMiwlcmJ4Li4uIik7CisgICAgaWYgKCBzdGFja19leGVj ICYmIGNwdV9oYXNfYXZ4NTEyZiApCisgICAgeworICAgICAgICBkZWNsX2luc24oZXZleF92bW92 cV90b19yZWcpOworCisgICAgICAgIC8qIFNlZSBjb21tZW50IG5leHQgdG8gbW92ZCBhYm92ZS4g Ki8KKyAgICAgICAgYXNtIHZvbGF0aWxlICggInBjbXBlcXEgJSV4bW0yLCAlJXhtbTJcblx0Igor ICAgICAgICAgICAgICAgICAgICAgICAidm1vdnEgJSV4bW0yLCAlJXhtbTIyXG4iCisgICAgICAg ICAgICAgICAgICAgICAgIHB1dF9pbnNuKGV2ZXhfdm1vdnFfdG9fcmVnLCAidm1vdnEgJSV4bW0y MiwgJSVyYngiKQorICAgICAgICAgICAgICAgICAgICAgICA6OiApOworCisgICAgICAgIHNldF9p bnNuKGV2ZXhfdm1vdnFfdG9fcmVnKTsKKyAgICAgICAgcmVncy5yYnggPSAweGJkYmRiZGJkYmRi ZGJkYmRVTDsKKyAgICAgICAgcmMgPSB4ODZfZW11bGF0ZSgmY3R4dCwgJmVtdWxvcHMpOworICAg ICAgICBpZiAoIHJjICE9IFg4NkVNVUxfT0tBWSB8fCAhY2hlY2tfZWlwKGV2ZXhfdm1vdnFfdG9f cmVnKSB8fAorICAgICAgICAgICAgIHJlZ3MucmJ4ICsgMSApCisgICAgICAgICAgICBnb3RvIGZh aWw7CisgICAgICAgIHByaW50Zigib2theVxuIik7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAg cHJpbnRmKCJza2lwcGVkXG4iKTsKICNlbmRpZgogCiAgICAgcHJpbnRmKCIlLTQwcyIsICJUZXN0 aW5nIG1hc2ttb3ZxICVtbTQsJW1tNC4uLiIpOwpAQCAtMjgxMiw2ICszMTg4LDMyIEBAIGludCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAg ICAgcHJpbnRmKCJva2F5XG4iKTsKICAgICB9CisgICAgZWxzZQorICAgICAgICBwcmludGYoInNr aXBwZWRcbiIpOworCisgICAgcHJpbnRmKCIlLTQwcyIsICJUZXN0aW5nIHZtb3ZudGRxYSA2NCgl ZWN4KSwlem1tNC4uLiIpOworICAgIGlmICggc3RhY2tfZXhlYyAmJiBjcHVfaGFzX2F2eDUxMmYg KQorICAgIHsKKyAgICAgICAgZGVjbF9pbnNuKGV2ZXhfdm1vdm50ZHFhKTsKKworICAgICAgICBh c20gdm9sYXRpbGUgKCAidnB4b3IgJSV4bW00LCAlJXhtbTQsICUleG1tNFxuIgorICAgICAgICAg ICAgICAgICAgICAgICBwdXRfaW5zbihldmV4X3Ztb3ZudGRxYSwgInZtb3ZudGRxYSA2NCglMCks ICUlem1tNCIpCisgICAgICAgICAgICAgICAgICAgICAgIDo6ICJjIiAoTlVMTCkgKTsKKworICAg ICAgICBzZXRfaW5zbihldmV4X3Ztb3ZudGRxYSk7CisgICAgICAgIG1lbXNldChyZXMsIDB4NTUs IDE5Mik7CisgICAgICAgIG1lbXNldChyZXMgKyAxNiwgMHhmZiwgNjQpOworICAgICAgICByZWdz LmVjeCA9ICh1bnNpZ25lZCBsb25nKXJlczsKKyAgICAgICAgcmMgPSB4ODZfZW11bGF0ZSgmY3R4 dCwgJmVtdWxvcHMpOworICAgICAgICBpZiAoIHJjICE9IFg4NkVNVUxfT0tBWSB8fCAhY2hlY2tf ZWlwKGV2ZXhfdm1vdm50ZHFhKSApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIGFz bSAoICJ2cGJyb2FkY2FzdGQgJTEsICUlem1tMlxuXHQiCisgICAgICAgICAgICAgICJ2cGNtcGVx ZCAlJXptbTQsICUlem1tMiwgJSVrMFxuXHQiCisgICAgICAgICAgICAgICJrbW92dyAlJWswLCAl MCIgOiAiPXIiIChyYykgOiAiMCIgKH4wKSApOworICAgICAgICBpZiAoIHJjICE9IDB4ZmZmZiAp CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIHByaW50Zigib2theVxuIik7CisgICAg fQogICAgIGVsc2UKICAgICAgICAgcHJpbnRmKCJza2lwcGVkXG4iKTsKIAotLS0gYS90b29scy90 ZXN0cy94ODZfZW11bGF0b3IveDg2LWVtdWxhdGUuYworKysgYi90b29scy90ZXN0cy94ODZfZW11 bGF0b3IveDg2LWVtdWxhdGUuYwpAQCAtMjEwLDYgKzIxMCw3IEBAIGludCBlbXVsX3Rlc3RfZ2V0 X2ZwdSgKICAgICAgICAgaWYgKCBjcHVfaGFzX2F2eCApCiAgICAgICAgICAgICBicmVhazsKICAg ICBjYXNlIFg4NkVNVUxfRlBVX29wbWFzazoKKyAgICBjYXNlIFg4NkVNVUxfRlBVX3ptbToKICAg ICAgICAgaWYgKCBjcHVfaGFzX2F2eDUxMmYgKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgZGVm YXVsdDoKLS0tIGEvdG9vbHMvdGVzdHMveDg2X2VtdWxhdG9yL3g4Ni1lbXVsYXRlLmgKKysrIGIv dG9vbHMvdGVzdHMveDg2X2VtdWxhdG9yL3g4Ni1lbXVsYXRlLmgKQEAgLTI2Niw2ICsyNjYsMTYg QEAgc3RhdGljIGlubGluZSB1aW50NjRfdCB4Z2V0YnYodWludDMyX3QgeAogICAgIChyZXMuYiAm ICgxVSA8PCAzMCkpICE9IDA7IFwKIH0pCiAKKyNkZWZpbmUgY3B1X2hhc19hdng1MTJ2bCAoeyBc CisgICAgc3RydWN0IGNwdWlkX2xlYWYgcmVzOyBcCisgICAgZW11bF90ZXN0X2NwdWlkKDEsIDAs ICZyZXMsIE5VTEwpOyBcCisgICAgaWYgKCAhKHJlcy5jICYgKDFVIDw8IDI3KSkgfHwgKCh4Z2V0 YnYoMCkgJiAweGU2KSAhPSAweGU2KSApIFwKKyAgICAgICAgcmVzLmIgPSAwOyBcCisgICAgZWxz ZSBcCisgICAgICAgIGVtdWxfdGVzdF9jcHVpZCg3LCAwLCAmcmVzLCBOVUxMKTsgXAorICAgIChy ZXMuYiAmICgxVSA8PCAzMSkpICE9IDA7IFwKK30pCisKIGludCBlbXVsX3Rlc3RfY3B1aWQoCiAg ICAgdWludDMyX3QgbGVhZiwKICAgICB1aW50MzJfdCBzdWJsZWFmLAotLS0gYS94ZW4vYXJjaC94 ODYveDg2X2VtdWxhdGUveDg2X2VtdWxhdGUuYworKysgYi94ZW4vYXJjaC94ODYveDg2X2VtdWxh dGUveDg2X2VtdWxhdGUuYwpAQCAtMjQzLDkgKzI0MywyNyBAQCBlbnVtIHNpbWRfb3BzaXplIHsK IH07CiB0eXBlZGVmIHVpbnQ4X3Qgc2ltZF9vcHNpemVfdDsKIAorZW51bSBkaXNwOHNjYWxlIHsK KyAgICAvKiBWYWx1ZXMgMCAuLi4gNCBhcmUgZXhwbGljaXQgc2l6ZXMuICovCisgICAgZDhzX2J3 ID0gNSwKKyAgICBkOHNfZHEsCisgICAgLyogRVZFWC5XIGlnbm9yZWQgb3V0c2lkZSBvZiA2NC1i aXQgbW9kZSAqLworICAgIGQ4c19kcTY0LAorICAgIC8qCisgICAgICogQWxsIGZ1cnRoZXIgdmFs dWVzIG11c3Qgc3RyaWN0bHkgYmUgbGFzdCBhbmQgaW4gdGhlIG9yZGVyCisgICAgICogZ2l2ZW4g c28gdGhhdCBhcml0aG1ldGljIG9uIHRoZSB2YWx1ZXMgd29ya3MuCisgICAgICovCisgICAgZDhz X3ZsLAorICAgIGQ4c192bF9ieV8yLAorICAgIGQ4c192bF9ieV80LAorICAgIGQ4c192bF9ieV84 LAorfTsKK3R5cGVkZWYgdWludDhfdCBkaXNwOHNjYWxlX3Q7CisKIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgdHdvYnl0ZV90YWJsZSB7CiAgICAgb3Bjb2RlX2Rlc2NfdCBkZXNjOwotICAgIHNpbWRfb3Bz aXplX3Qgc2l6ZTsKKyAgICBzaW1kX29wc2l6ZV90IHNpemU6NDsKKyAgICBkaXNwOHNjYWxlX3Qg ZDhzOjQ7CiB9IHR3b2J5dGVfdGFibGVbMjU2XSA9IHsKICAgICBbMHgwMF0gPSB7IE1vZFJNIH0s CiAgICAgWzB4MDFdID0geyBJbXBsaWNpdE9wc3xNb2RSTSB9LApAQCAtMjYwLDggKzI3OCw4IEBA IHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHdvYnl0ZV90YWJsZSB7CiAgICAgWzB4MGRdID0geyBJbXBs aWNpdE9wc3xNb2RSTSB9LAogICAgIFsweDBlXSA9IHsgSW1wbGljaXRPcHMgfSwKICAgICBbMHgw Zl0gPSB7IE1vZFJNfFNyY0ltbUJ5dGUgfSwKLSAgICBbMHgxMF0gPSB7IERzdEltcGxpY2l0fFNy Y01lbXxNb2RSTXxNb3YsIHNpbWRfYW55X2ZwIH0sCi0gICAgWzB4MTFdID0geyBEc3RNZW18U3Jj SW1wbGljaXR8TW9kUk18TW92LCBzaW1kX2FueV9mcCB9LAorICAgIFsweDEwXSA9IHsgRHN0SW1w bGljaXR8U3JjTWVtfE1vZFJNfE1vdiwgc2ltZF9hbnlfZnAsIGQ4c192bCB9LAorICAgIFsweDEx XSA9IHsgRHN0TWVtfFNyY0ltcGxpY2l0fE1vZFJNfE1vdiwgc2ltZF9hbnlfZnAsIGQ4c192bCB9 LAogICAgIFsweDEyXSA9IHsgRHN0SW1wbGljaXR8U3JjTWVtfE1vZFJNfE1vdiwgc2ltZF9vdGhl ciB9LAogICAgIFsweDEzXSA9IHsgRHN0TWVtfFNyY0ltcGxpY2l0fE1vZFJNfE1vdiwgc2ltZF9v dGhlciB9LAogICAgIFsweDE0IC4uLiAweDE1XSA9IHsgRHN0SW1wbGljaXR8U3JjTWVtfE1vZFJN LCBzaW1kX3BhY2tlZF9mcCB9LApAQCAtMjcwLDEwICsyODgsMTAgQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCB0d29ieXRlX3RhYmxlIHsKICAgICBbMHgxOCAuLi4gMHgxZl0gPSB7IEltcGxpY2l0T3Bz fE1vZFJNIH0sCiAgICAgWzB4MjAgLi4uIDB4MjFdID0geyBEc3RNZW18U3JjSW1wbGljaXR8TW9k Uk0gfSwKICAgICBbMHgyMiAuLi4gMHgyM10gPSB7IERzdEltcGxpY2l0fFNyY01lbXxNb2RSTSB9 LAotICAgIFsweDI4XSA9IHsgRHN0SW1wbGljaXR8U3JjTWVtfE1vZFJNfE1vdiwgc2ltZF9wYWNr ZWRfZnAgfSwKLSAgICBbMHgyOV0gPSB7IERzdE1lbXxTcmNJbXBsaWNpdHxNb2RSTXxNb3YsIHNp bWRfcGFja2VkX2ZwIH0sCisgICAgWzB4MjhdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9kUk18 TW92LCBzaW1kX3BhY2tlZF9mcCwgZDhzX3ZsIH0sCisgICAgWzB4MjldID0geyBEc3RNZW18U3Jj SW1wbGljaXR8TW9kUk18TW92LCBzaW1kX3BhY2tlZF9mcCwgZDhzX3ZsIH0sCiAgICAgWzB4MmFd ID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9kUk18TW92LCBzaW1kX290aGVyIH0sCi0gICAgWzB4 MmJdID0geyBEc3RNZW18U3JjSW1wbGljaXR8TW9kUk18TW92LCBzaW1kX2FueV9mcCB9LAorICAg IFsweDJiXSA9IHsgRHN0TWVtfFNyY0ltcGxpY2l0fE1vZFJNfE1vdiwgc2ltZF9hbnlfZnAsIGQ4 c192bCB9LAogICAgIFsweDJjIC4uLiAweDJkXSA9IHsgRHN0SW1wbGljaXR8U3JjTWVtfE1vZFJN fE1vdiwgc2ltZF9vdGhlciB9LAogICAgIFsweDJlIC4uLiAweDJmXSA9IHsgSW1wbGljaXRPcHN8 TW9kUk18VHdvT3AgfSwKICAgICBbMHgzMCAuLi4gMHgzNV0gPSB7IEltcGxpY2l0T3BzIH0sCkBA IC0yOTIsOCArMzEwLDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB0d29ieXRlX3RhYmxlIHsKICAg ICBbMHg2MyAuLi4gMHg2N10gPSB7IERzdEltcGxpY2l0fFNyY01lbXxNb2RSTSwgc2ltZF9wYWNr ZWRfaW50IH0sCiAgICAgWzB4NjggLi4uIDB4NmFdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9k Uk0sIHNpbWRfb3RoZXIgfSwKICAgICBbMHg2YiAuLi4gMHg2ZF0gPSB7IERzdEltcGxpY2l0fFNy Y01lbXxNb2RSTSwgc2ltZF9wYWNrZWRfaW50IH0sCi0gICAgWzB4NmVdID0geyBEc3RJbXBsaWNp dHxTcmNNZW18TW9kUk18TW92IH0sCi0gICAgWzB4NmZdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18 TW9kUk18TW92LCBzaW1kX3BhY2tlZF9pbnQgfSwKKyAgICBbMHg2ZV0gPSB7IERzdEltcGxpY2l0 fFNyY01lbXxNb2RSTXxNb3YsIHNpbWRfbm9uZSwgZDhzX2RxNjQgfSwKKyAgICBbMHg2Zl0gPSB7 IERzdEltcGxpY2l0fFNyY01lbXxNb2RSTXxNb3YsIHNpbWRfcGFja2VkX2ludCwgZDhzX3ZsIH0s CiAgICAgWzB4NzBdID0geyBTcmNJbW1CeXRlfE1vZFJNfFR3b09wLCBzaW1kX290aGVyIH0sCiAg ICAgWzB4NzEgLi4uIDB4NzNdID0geyBEc3RJbXBsaWNpdHxTcmNJbW1CeXRlfE1vZFJNIH0sCiAg ICAgWzB4NzQgLi4uIDB4NzZdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9kUk0sIHNpbWRfcGFj a2VkX2ludCB9LApAQCAtMzAxLDggKzMxOSw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHdvYnl0 ZV90YWJsZSB7CiAgICAgWzB4NzhdID0geyBJbXBsaWNpdE9wc3xNb2RSTSB9LAogICAgIFsweDc5 XSA9IHsgRHN0UmVnfFNyY01lbXxNb2RSTSwgc2ltZF9wYWNrZWRfaW50IH0sCiAgICAgWzB4N2Mg Li4uIDB4N2RdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9kUk0sIHNpbWRfb3RoZXIgfSwKLSAg ICBbMHg3ZV0gPSB7IERzdE1lbXxTcmNJbXBsaWNpdHxNb2RSTXxNb3YgfSwKLSAgICBbMHg3Zl0g PSB7IERzdE1lbXxTcmNJbXBsaWNpdHxNb2RSTXxNb3YsIHNpbWRfcGFja2VkX2ludCB9LAorICAg IFsweDdlXSA9IHsgRHN0TWVtfFNyY0ltcGxpY2l0fE1vZFJNfE1vdiwgc2ltZF9ub25lLCBkOHNf ZHE2NCB9LAorICAgIFsweDdmXSA9IHsgRHN0TWVtfFNyY0ltcGxpY2l0fE1vZFJNfE1vdiwgc2lt ZF9wYWNrZWRfaW50LCBkOHNfdmwgfSwKICAgICBbMHg4MCAuLi4gMHg4Zl0gPSB7IERzdEltcGxp Y2l0fFNyY0ltbSB9LAogICAgIFsweDkwIC4uLiAweDlmXSA9IHsgQnl0ZU9wfERzdE1lbXxTcmNO b25lfE1vZFJNfE1vdiB9LAogICAgIFsweGEwIC4uLiAweGExXSA9IHsgSW1wbGljaXRPcHN8TW92 IH0sCkBAIC0zNDQsMTQgKzM2MiwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHR3b2J5dGVfdGFi bGUgewogICAgIFsweGQwXSA9IHsgRHN0SW1wbGljaXR8U3JjTWVtfE1vZFJNLCBzaW1kX290aGVy IH0sCiAgICAgWzB4ZDEgLi4uIDB4ZDNdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9kUk0sIHNp bWRfb3RoZXIgfSwKICAgICBbMHhkNCAuLi4gMHhkNV0gPSB7IERzdEltcGxpY2l0fFNyY01lbXxN b2RSTSwgc2ltZF9wYWNrZWRfaW50IH0sCi0gICAgWzB4ZDZdID0geyBEc3RNZW18U3JjSW1wbGlj aXR8TW9kUk18TW92LCBzaW1kX290aGVyIH0sCisgICAgWzB4ZDZdID0geyBEc3RNZW18U3JjSW1w bGljaXR8TW9kUk18TW92LCBzaW1kX290aGVyLCAzIH0sCiAgICAgWzB4ZDddID0geyBEc3RSZWd8 U3JjSW1wbGljaXR8TW9kUk18TW92IH0sCiAgICAgWzB4ZDggLi4uIDB4ZGZdID0geyBEc3RJbXBs aWNpdHxTcmNNZW18TW9kUk0sIHNpbWRfcGFja2VkX2ludCB9LAogICAgIFsweGUwXSA9IHsgRHN0 SW1wbGljaXR8U3JjTWVtfE1vZFJNLCBzaW1kX3BhY2tlZF9pbnQgfSwKICAgICBbMHhlMSAuLi4g MHhlMl0gPSB7IERzdEltcGxpY2l0fFNyY01lbXxNb2RSTSwgc2ltZF9vdGhlciB9LAogICAgIFsw eGUzIC4uLiAweGU1XSA9IHsgRHN0SW1wbGljaXR8U3JjTWVtfE1vZFJNLCBzaW1kX3BhY2tlZF9p bnQgfSwKICAgICBbMHhlNl0gPSB7IERzdEltcGxpY2l0fFNyY01lbXxNb2RSTXxNb3YsIHNpbWRf b3RoZXIgfSwKLSAgICBbMHhlN10gPSB7IERzdE1lbXxTcmNJbXBsaWNpdHxNb2RSTXxNb3YsIHNp bWRfcGFja2VkX2ludCB9LAorICAgIFsweGU3XSA9IHsgRHN0TWVtfFNyY0ltcGxpY2l0fE1vZFJN fE1vdiwgc2ltZF9wYWNrZWRfaW50LCBkOHNfdmwgfSwKICAgICBbMHhlOCAuLi4gMHhlZl0gPSB7 IERzdEltcGxpY2l0fFNyY01lbXxNb2RSTSwgc2ltZF9wYWNrZWRfaW50IH0sCiAgICAgWzB4ZjBd ID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9kUk18TW92LCBzaW1kX290aGVyIH0sCiAgICAgWzB4 ZjEgLi4uIDB4ZjNdID0geyBEc3RJbXBsaWNpdHxTcmNNZW18TW9kUk0sIHNpbWRfb3RoZXIgfSwK QEAgLTQwNiw2ICs0MjQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV4dDBmMzhfdGFibGUgewog ICAgIHVpbnQ4X3QgdG9fbWVtOjE7CiAgICAgdWludDhfdCB0d29fb3A6MTsKICAgICB1aW50OF90 IHZzaWI6MTsKKyAgICBkaXNwOHNjYWxlX3QgZDhzOjQ7CiB9IGV4dDBmMzhfdGFibGVbMjU2XSA9 IHsKICAgICBbMHgwMCAuLi4gMHgwYl0gPSB7IC5zaW1kX3NpemUgPSBzaW1kX3BhY2tlZF9pbnQg fSwKICAgICBbMHgwYyAuLi4gMHgwZl0gPSB7IC5zaW1kX3NpemUgPSBzaW1kX3BhY2tlZF9mcCB9 LApAQCAtNDE4LDcgKzQzNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXh0MGYzOF90YWJsZSB7 CiAgICAgWzB4MWMgLi4uIDB4MWVdID0geyAuc2ltZF9zaXplID0gc2ltZF9wYWNrZWRfaW50LCAu dHdvX29wID0gMSB9LAogICAgIFsweDIwIC4uLiAweDI1XSA9IHsgLnNpbWRfc2l6ZSA9IHNpbWRf b3RoZXIsIC50d29fb3AgPSAxIH0sCiAgICAgWzB4MjggLi4uIDB4MjldID0geyAuc2ltZF9zaXpl ID0gc2ltZF9wYWNrZWRfaW50IH0sCi0gICAgWzB4MmFdID0geyAuc2ltZF9zaXplID0gc2ltZF9w YWNrZWRfaW50LCAudHdvX29wID0gMSB9LAorICAgIFsweDJhXSA9IHsgLnNpbWRfc2l6ZSA9IHNp bWRfcGFja2VkX2ludCwgLnR3b19vcCA9IDEsIC5kOHMgPSBkOHNfdmwgfSwKICAgICBbMHgyYl0g PSB7IC5zaW1kX3NpemUgPSBzaW1kX3BhY2tlZF9pbnQgfSwKICAgICBbMHgyYyAuLi4gMHgyZF0g PSB7IC5zaW1kX3NpemUgPSBzaW1kX290aGVyIH0sCiAgICAgWzB4MmUgLi4uIDB4MmZdID0geyAu c2ltZF9zaXplID0gc2ltZF9vdGhlciwgLnRvX21lbSA9IDEgfSwKQEAgLTY1Niw2ICs2NzUsMjIg QEAgdW5pb24gZXZleCB7CiAgICAgfTsKIH07CiAKKyNkZWZpbmUgRVZFWF9QRlhfQllURVMgNAor I2RlZmluZSBpbml0X2V2ZXgoc3R1YikgKHsgXAorICAgIHVpbnQ4X3QgKmJ1Zl8gPSBnZXRfc3R1 YihzdHViKTsgXAorICAgIGJ1Zl9bMF0gPSAweDYyOyBcCisgICAgYnVmXyArIEVWRVhfUEZYX0JZ VEVTOyBcCit9KQorCisjZGVmaW5lIGNvcHlfRVZFWChwdHIsIGV2ZXgpICh7IFwKKyAgICBpZiAo ICFtb2RlXzY0Yml0KCkgKSBcCisgICAgICAgIChldmV4KS5yZWcgfD0gODsgXAorICAgIChwdHIp WzEgLSBFVkVYX1BGWF9CWVRFU10gPSAoZXZleCkucmF3WzBdOyBcCisgICAgKHB0cilbMiAtIEVW RVhfUEZYX0JZVEVTXSA9IChldmV4KS5yYXdbMV07IFwKKyAgICAocHRyKVszIC0gRVZFWF9QRlhf QllURVNdID0gKGV2ZXgpLnJhd1syXTsgXAorICAgIGNvbnRhaW5lcl9vZigocHRyKSArIDEgLSBF VkVYX1BGWF9CWVRFUywgdHlwZW9mKGV2ZXgpLCByYXdbMF0pOyBcCit9KQorCiAjZGVmaW5lIHJl cF9wcmVmaXgoKSAgICh2ZXgucGZ4ID49IHZleF9mMykKICNkZWZpbmUgcmVwZV9wcmVmaXgoKSAg KHZleC5wZnggPT0gdmV4X2YzKQogI2RlZmluZSByZXBuZV9wcmVmaXgoKSAodmV4LnBmeCA9PSB2 ZXhfZjIpCkBAIC03NjgsNiArODAzLDcgQEAgdHlwZWRlZiB1bmlvbiB7CiAgICAgdWludDY0X3Qg bW14OwogICAgIHVpbnQ2NF90IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDE2KSkpIHhtbVsyXTsK ICAgICB1aW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgzMikpKSB5bW1bNF07CisgICAg dWludDY0X3QgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoNjQpKSkgem1tWzhdOwogfSBtbXZhbF90 OwogCiAvKgpAQCAtMTE4Myw2ICsxMjE5LDExIEBAIHN0YXRpYyBpbnQgX2dldF9mcHUoCiAKICAg ICBzd2l0Y2ggKCB0eXBlICkKICAgICB7CisgICAgY2FzZSBYODZFTVVMX0ZQVV96bW06CisgICAg ICAgIGlmICggISh4Y3IwICYgWDg2X1hDUjBfWk1NKSB8fCAhKHhjcjAgJiBYODZfWENSMF9ISV9a TU0pIHx8CisgICAgICAgICAgICAgISh4Y3IwICYgWDg2X1hDUjBfT1BNQVNLKSApCisgICAgICAg ICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CisgICAgICAgIC8qIGZhbGwgdGhyb3Vn aCAqLwogICAgIGNhc2UgWDg2RU1VTF9GUFVfeW1tOgogICAgICAgICBpZiAoICEoeGNyMCAmIFg4 Nl9YQ1IwX1NTRSkgfHwgISh4Y3IwICYgWDg2X1hDUjBfWU1NKSApCiAgICAgICAgICAgICByZXR1 cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CkBAIC0xNzc3LDYgKzE4MTgsNyBAQCBzdGF0aWMgYm9v bCB2Y3B1X2hhcygKICNkZWZpbmUgdmNwdV9oYXNfY2x3YigpICAgICAgICB2Y3B1X2hhcyggICAg ICAgICA3LCBFQlgsIDI0LCBjdHh0LCBvcHMpCiAjZGVmaW5lIHZjcHVfaGFzX3NoYSgpICAgICAg ICAgdmNwdV9oYXMoICAgICAgICAgNywgRUJYLCAyOSwgY3R4dCwgb3BzKQogI2RlZmluZSB2Y3B1 X2hhc19hdng1MTJidygpICAgIHZjcHVfaGFzKCAgICAgICAgIDcsIEVCWCwgMzAsIGN0eHQsIG9w cykKKyNkZWZpbmUgdmNwdV9oYXNfYXZ4NTEydmwoKSAgICB2Y3B1X2hhcyggICAgICAgICA3LCBF QlgsIDMxLCBjdHh0LCBvcHMpCiAjZGVmaW5lIHZjcHVfaGFzX3JkcGlkKCkgICAgICAgdmNwdV9o YXMoICAgICAgICAgNywgRUNYLCAyMiwgY3R4dCwgb3BzKQogI2RlZmluZSB2Y3B1X2hhc19jbHpl cm8oKSAgICAgIHZjcHVfaGFzKDB4ODAwMDAwMDgsIEVCWCwgIDAsIGN0eHQsIG9wcykKIApAQCAt MjE1MCw2ICsyMTkyLDY1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nICpkZWNvZGVfdmV4X2dwcigK ICAgICByZXR1cm4gZGVjb2RlX2dwcihyZWdzLCB+dmV4X3JlZyAmIChtb2RlXzY0Yml0KCkgPyAw eGYgOiA3KSk7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVjb2RlX2Rpc3A4c2NhbGUoZW51 bSBkaXNwOHNjYWxlIHNjYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxhdGVfc3RhdGUgKnN0YXRlKQoreworICAgIHN3aXRjaCAo IHNjYWxlICkKKyAgICB7CisgICAgY2FzZSBkOHNfYnc6CisgICAgICAgIHJldHVybiBzdGF0ZS0+ ZXZleC53OworCisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKCBzY2FsZSA8IGQ4c192bCApCisg ICAgICAgICAgICByZXR1cm4gc2NhbGU7CisgICAgICAgIGlmICggc3RhdGUtPmV2ZXguYnIgKQor ICAgICAgICB7CisgICAgY2FzZSBkOHNfZHE6CisgICAgICAgICAgICByZXR1cm4gMiArIHN0YXRl LT5ldmV4Lnc7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIGQ4c19kcTY0 OgorICAgICAgICByZXR1cm4gMiArIChzdGF0ZS0+b3BfYnl0ZXMgPT0gOCk7CisgICAgfQorCisg ICAgc3dpdGNoICggc3RhdGUtPnNpbWRfc2l6ZSApCisgICAgeworICAgIGNhc2Ugc2ltZF9hbnlf ZnA6CisgICAgY2FzZSBzaW1kX3NpbmdsZV9mcDoKKyAgICAgICAgaWYgKCAhKHN0YXRlLT5ldmV4 LnBmeCAmIFZFWF9QUkVGSVhfU0NBTEFSX01BU0spICkKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIHNpbWRfc2NhbGFyX29wYzoKKyAgICBj YXNlIHNpbWRfc2NhbGFyX3ZleHc6CisgICAgICAgIHJldHVybiAyICsgc3RhdGUtPmV2ZXgudzsK KworICAgIGNhc2Ugc2ltZF8xMjg6CisgICAgICAgIC8qIFRoZXNlIHNob3VsZCBoYXZlIGFuIGV4 cGxpY2l0IHNpemUgc3BlY2lmaWVkLiAqLworICAgICAgICBBU1NFUlRfVU5SRUFDSEFCTEUoKTsK KyAgICAgICAgcmV0dXJuIDQ7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9 CisKKyAgICByZXR1cm4gNCArIHN0YXRlLT5ldmV4LmxyIC0gKHNjYWxlIC0gZDhzX3ZsKTsKK30K KworI2RlZmluZSBhdng1MTJfdmxlbl9jaGVjayhsaWcpIGRvIHsgXAorICAgIHN3aXRjaCAoIGV2 ZXgubHIgKSBcCisgICAgeyBcCisgICAgZGVmYXVsdDogXAorICAgICAgICBnZW5lcmF0ZV9leGNl cHRpb24oRVhDX1VEKTsgXAorICAgIGNhc2UgMjogXAorICAgICAgICBicmVhazsgXAorICAgIGNh c2UgMDogY2FzZSAxOiBcCisgICAgICAgIGlmICghKGxpZykpIFwKKyAgICAgICAgICAgIGhvc3Rf YW5kX3ZjcHVfbXVzdF9oYXZlKGF2eDUxMnZsKTsgXAorICAgICAgICBicmVhazsgXAorICAgIH0g XAorfSB3aGlsZSAoIGZhbHNlICkKKwogc3RhdGljIGJvb2wgaXNfYWxpZ25lZChlbnVtIHg4Nl9z ZWdtZW50IHNlZywgdW5zaWduZWQgbG9uZyBvZmZzLAogICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgc2l6ZSwgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCiAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcykKQEAgLTIz OTksNiArMjUwMCw3IEBAIHg4Nl9kZWNvZGVfdHdvYnl0ZSgKICAgICAgICAgaWYgKCB2ZXgucGZ4 ID09IHZleF9mMyApIC8qIG1vdnEgeG1tL202NCx4bW0gKi8KICAgICAgICAgewogICAgIGNhc2Ug WDg2RU1VTF9PUENfVkVYX0YzKDAsIDB4N2UpOiAvKiB2bW92cSB4bW0vbTY0LHhtbSAqLworICAg IGNhc2UgWDg2RU1VTF9PUENfRVZFWF9GMygwLCAweDdlKTogLyogdm1vdnEgeG1tL202NCx4bW0g Ki8KICAgICAgICAgICAgIHN0YXRlLT5kZXNjID0gRHN0SW1wbGljaXQgfCBTcmNNZW0gfCBUd29P cDsKICAgICAgICAgICAgIHN0YXRlLT5zaW1kX3NpemUgPSBzaW1kX290aGVyOwogICAgICAgICAg ICAgLyogQXZvaWQgdGhlIHN0YXRlLT5kZXNjIGNsb2JiZXJpbmcgb2YgVHdvT3AgYmVsb3cuICov CkBAIC0yNDY5LDcgKzI1NzEsNyBAQCB4ODZfZGVjb2RlX3R3b2J5dGUoCiAgICAgfQogCiAgICAg LyoKLSAgICAgKiBTY2FsYXIgZm9ybXMgb2YgbW9zdCBWRVgtZW5jb2RlZCBUd29PcCBpbnN0cnVj dGlvbnMgaGF2ZQorICAgICAqIFNjYWxhciBmb3JtcyBvZiBtb3N0IFZFWC0vRVZFWC1lbmNvZGVk IFR3b09wIGluc3RydWN0aW9ucyBoYXZlCiAgICAgICogdGhyZWUgb3BlcmFuZHMuICBUaG9zZSB3 aGljaCBkbyByZWFsbHkgaGF2ZSB0d28gb3BlcmFuZHMKICAgICAgKiBzaG91bGQgaGF2ZSBleGl0 ZWQgZWFybGllci4KICAgICAgKi8KQEAgLTI4MzQsNiArMjkzNiw4IEBAIHg4Nl9kZWNvZGUoCiAK ICAgICBpZiAoIGQgJiBNb2RSTSApCiAgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgZGlzcDhz Y2FsZSA9IDA7CisKICAgICAgICAgZCAmPSB+TW9kUk07CiAjdW5kZWYgTW9kUk0gLyogT25seSBp dHMgYWxpYXNlcyBhcmUgdmFsaWQgdG8gdXNlIGZyb20gaGVyZSBvbi4gKi8KICAgICAgICAgbW9k cm1fcmVnID0gKChyZXhfcHJlZml4ICYgNCkgPDwgMSkgfCAoKG1vZHJtICYgMHgzOCkgPj4gMyk7 CkBAIC0yODc2LDYgKzI5ODAsOSBAQCB4ODZfZGVjb2RlKAogICAgICAgICAgICAgYnJlYWs7CiAK ICAgICAgICAgY2FzZSBleHRfMGY6CisgICAgICAgICAgICBpZiAoIGV2ZXhfZW5jb2RlZCgpICkK KyAgICAgICAgICAgICAgICBkaXNwOHNjYWxlID0gZGVjb2RlX2Rpc3A4c2NhbGUodHdvYnl0ZV90 YWJsZVtiXS5kOHMsIHN0YXRlKTsKKwogICAgICAgICAgICAgc3dpdGNoICggYiApCiAgICAgICAg ICAgICB7CiAgICAgICAgICAgICBjYXNlIDB4MjA6IC8qIG1vdiBjcixyZWcgKi8KQEAgLTI4ODks NiArMjk5NiwxMSBAQCB4ODZfZGVjb2RlKAogICAgICAgICAgICAgICAgICAqLwogICAgICAgICAg ICAgICAgIG1vZHJtX21vZCA9IDM7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg ICAgIGNhc2UgMHg3ZTogLyogdm1vdnEgeG1tL202NCx4bW0gbmVlZHMgc3BlY2lhbCBjYXNpbmcg Ki8KKyAgICAgICAgICAgICAgICBpZiAoIGRpc3A4c2NhbGUgPT0gMiAmJiBldmV4LnBmeCA9PSB2 ZXhfZjMgKQorICAgICAgICAgICAgICAgICAgICBkaXNwOHNjYWxlID0gMzsKKyAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0yOTAw LDYgKzMwMTIsOCBAQCB4ODZfZGVjb2RlKAogICAgICAgICAgICAgaWYgKCBleHQwZjM4X3RhYmxl W2JdLnZzaWIgKQogICAgICAgICAgICAgICAgIGQgfD0gdlNJQjsKICAgICAgICAgICAgIHN0YXRl LT5zaW1kX3NpemUgPSBleHQwZjM4X3RhYmxlW2JdLnNpbWRfc2l6ZTsKKyAgICAgICAgICAgIGlm ICggZXZleF9lbmNvZGVkKCkgKQorICAgICAgICAgICAgICAgIGRpc3A4c2NhbGUgPSBkZWNvZGVf ZGlzcDhzY2FsZShleHQwZjM4X3RhYmxlW2JdLmQ4cywgc3RhdGUpOwogICAgICAgICAgICAgYnJl YWs7CiAKICAgICAgICAgY2FzZSBleHRfOGYwOToKQEAgLTI5NjgsNyArMzA4Miw3IEBAIHg4Nl9k ZWNvZGUoCiAgICAgICAgICAgICAgICAgICAgIGVhLm1lbS5vZmYgPSBpbnNuX2ZldGNoX3R5cGUo aW50MTZfdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIDE6Ci0g ICAgICAgICAgICAgICAgZWEubWVtLm9mZiArPSBpbnNuX2ZldGNoX3R5cGUoaW50OF90KTsKKyAg ICAgICAgICAgICAgICBlYS5tZW0ub2ZmICs9IGluc25fZmV0Y2hfdHlwZShpbnQ4X3QpIDw8IGRp c3A4c2NhbGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIDI6CiAg ICAgICAgICAgICAgICAgZWEubWVtLm9mZiArPSBpbnNuX2ZldGNoX3R5cGUoaW50MTZfdCk7CkBA IC0zMDI3LDcgKzMxNDEsNyBAQCB4ODZfZGVjb2RlKAogICAgICAgICAgICAgICAgIHBjX3JlbCA9 IG1vZGVfNjRiaXQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug MToKLSAgICAgICAgICAgICAgICBlYS5tZW0ub2ZmICs9IGluc25fZmV0Y2hfdHlwZShpbnQ4X3Qp OworICAgICAgICAgICAgICAgIGVhLm1lbS5vZmYgKz0gaW5zbl9mZXRjaF90eXBlKGludDhfdCkg PDwgZGlzcDhzY2FsZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug MjoKICAgICAgICAgICAgICAgICBlYS5tZW0ub2ZmICs9IGluc25fZmV0Y2hfdHlwZShpbnQzMl90 KTsKQEAgLTMyMjgsMTAgKzMzNDIsMTEgQEAgeDg2X2VtdWxhdGUoCiAgICAgc3RydWN0IHg4Nl9l bXVsYXRlX3N0YXRlIHN0YXRlOwogICAgIGludCByYzsKICAgICB1aW50OF90IGIsIGQsICpvcGMg PSBOVUxMOwotICAgIHVuc2lnbmVkIGludCBmaXJzdF9ieXRlID0gMCwgaW5zbl9ieXRlcyA9IDA7 CisgICAgdW5zaWduZWQgaW50IGZpcnN0X2J5dGUgPSAwLCBlbGVtX2J5dGVzLCBpbnNuX2J5dGVz ID0gMDsKKyAgICB1aW50NjRfdCBvcF9tYXNrID0gfjBVTEw7CiAgICAgYm9vbCBzaW5nbGVzdGVw ID0gKF9yZWdzLmVmbGFncyAmIFg4Nl9FRkxBR1NfVEYpICYmCiAJICAgICFpc19icmFuY2hfc3Rl cChjdHh0LCBvcHMpOwotICAgIGJvb2wgc2ZlbmNlID0gZmFsc2U7CisgICAgYm9vbCBzZmVuY2Ug PSBmYWxzZSwgZmF1bHRfc3VwcHJlc3Npb24gPSBmYWxzZTsKICAgICBzdHJ1Y3Qgb3BlcmFuZCBz cmMgPSB7IC5yZWcgPSBQVFJfUE9JU09OIH07CiAgICAgc3RydWN0IG9wZXJhbmQgZHN0ID0geyAu cmVnID0gUFRSX1BPSVNPTiB9OwogICAgIHVuc2lnbmVkIGxvbmcgY3I0OwpAQCAtMzI3Miw2ICsz Mzg3LDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgYiA9IGN0eHQtPm9wY29kZTsKICAgICBkID0gc3Rh dGUuZGVzYzsKICNkZWZpbmUgc3RhdGUgKCZzdGF0ZSkKKyAgICBlbGVtX2J5dGVzID0gNCA8PCBl dmV4Lnc7CiAKICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoc3RhdGUtPm5vdF82NGJpdCAmJiBt b2RlXzY0Yml0KCksIEVYQ19VRCk7CiAKQEAgLTMzNDYsNiArMzQ2MiwyOCBAQCB4ODZfZW11bGF0 ZSgKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgLyogV2l0aCBhIG1lbW9yeSBvcGVyYW5k LCBmZXRjaCB0aGUgbWFzayByZWdpc3RlciBpbiB1c2UgKGlmIGFueSkuICovCisgICAgaWYgKCBl YS50eXBlID09IE9QX01FTSAmJiBldmV4Lm9wbXNrICkKKyAgICB7CisgICAgICAgIHVpbnQ4X3Qg KnN0YiA9IGdldF9zdHViKHN0dWIpOworCisgICAgICAgIC8qIEtNT1Z7VyxRfSAlazxuPiwgKCVy YXgpICovCisgICAgICAgIHN0YlswXSA9IDB4YzQ7CisgICAgICAgIHN0YlsxXSA9IDB4ZTE7Cisg ICAgICAgIHN0YlsyXSA9IGNwdV9oYXNfYXZ4NTEyYncgPyAweGY4IDogMHg3ODsKKyAgICAgICAg c3RiWzNdID0gMHg5MTsKKyAgICAgICAgc3RiWzRdID0gZXZleC5vcG1zayA8PCAzOworICAgICAg ICBpbnNuX2J5dGVzID0gNTsKKyAgICAgICAgc3RiWzVdID0gMHhjMzsKKworICAgICAgICBpbnZv a2Vfc3R1YigiIiwgIiIsICIrbSIgKG9wX21hc2spIDogImEiICgmb3BfbWFzaykpOworCisgICAg ICAgIGluc25fYnl0ZXMgPSAwOworICAgICAgICBwdXRfc3R1YihzdHViKTsKKworICAgICAgICBm YXVsdF9zdXBwcmVzc2lvbiA9IHRydWU7CisgICAgfQorCiAgICAgLyogRGVjb2RlIChidXQgZG9u J3QgZmV0Y2gpIHRoZSBkZXN0aW5hdGlvbiBvcGVyYW5kOiByZWdpc3RlciBvciBtZW1vcnkuICov CiAgICAgc3dpdGNoICggZCAmIERzdE1hc2sgKQogICAgIHsKQEAgLTU3MDgsNiArNTg0Niw0MSBA QCB4ODZfZW11bGF0ZSgKICAgICAgICAgaW5zbl9ieXRlcyA9IFBGWF9CWVRFUyArIDI7CiAgICAg ICAgIGJyZWFrOwogCisgICAgQ0FTRV9TSU1EX1BBQ0tFRF9GUChfRVZFWCwgMHgwZiwgMHgyYik6 IC8qIHZtb3ZudHB7cyxkfSBbeHl6XW1tLG1lbSAqLworICAgICAgICBnZW5lcmF0ZV9leGNlcHRp b25faWYoZWEudHlwZSAhPSBPUF9NRU0gfHwgZXZleC5vcG1zaywgRVhDX1VEKTsKKyAgICAgICAg c2ZlbmNlID0gdHJ1ZTsKKyAgICAgICAgZmF1bHRfc3VwcHJlc3Npb24gPSBmYWxzZTsKKyAgICAg ICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgQ0FTRV9TSU1EX1BBQ0tFRF9GUChfRVZFWCwgMHgw ZiwgMHgxMCk6IC8qIHZtb3Z1cHtzLGR9IFt4eXpdbW0vbWVtLFt4eXpdbW17a30gKi8KKyAgICBD QVNFX1NJTURfU0NBTEFSX0ZQKF9FVkVYLCAweDBmLCAweDEwKTogLyogdm1vdnN7cyxkfSBtZW0s eG1te2t9ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHZtb3Zze3MsZH0geG1tLHhtbSx4bW17a30gKi8KKyAgICBDQVNFX1NJTURfUEFDS0VEX0ZQKF9F VkVYLCAweDBmLCAweDExKTogLyogdm1vdnVwe3MsZH0gW3h5el1tbSxbeHl6XW1tL21lbXtrfSAq LworICAgIENBU0VfU0lNRF9TQ0FMQVJfRlAoX0VWRVgsIDB4MGYsIDB4MTEpOiAvKiB2bW92c3tz LGR9IHhtbSxtZW17a30gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLyogdm1vdnN7cyxkfSB4bW0seG1tLHhtbXtrfSAqLworICAgIENBU0VfU0lNRF9QQUNL RURfRlAoX0VWRVgsIDB4MGYsIDB4MjgpOiAvKiB2bW92YXB7cyxkfSBbeHl6XW1tL21lbSxbeHl6 XW1te2t9ICovCisgICAgQ0FTRV9TSU1EX1BBQ0tFRF9GUChfRVZFWCwgMHgwZiwgMHgyOSk6IC8q IHZtb3ZhcHtzLGR9IFt4eXpdbW0sW3h5el1tbS9tZW17a30gKi8KKyAgICAgICAgLyogdm1vdnN7 cyxkfSB0by9mcm9tIG1lbW9yeSBoYXZlIG9ubHkgdHdvIG9wZXJhbmRzLiAqLworICAgICAgICBp ZiAoIChiICYgfjEpID09IDB4MTAgJiYgZWEudHlwZSA9PSBPUF9NRU0gKQorICAgICAgICAgICAg ZCB8PSBUd29PcDsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGV2ZXguYnIsIEVYQ19V RCk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihldmV4LncgIT0gKGV2ZXgucGZ4ICYg VkVYX1BSRUZJWF9ET1VCTEVfTUFTSyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF WENfVUQpOworICAgICAgICBob3N0X2FuZF92Y3B1X211c3RfaGF2ZShhdng1MTJmKTsKKyAgICAg ICAgYXZ4NTEyX3ZsZW5fY2hlY2soZXZleC5wZnggJiBWRVhfUFJFRklYX1NDQUxBUl9NQVNLKTsK KyAgICBzaW1kX3ptbToKKyAgICAgICAgZ2V0X2ZwdShYODZFTVVMX0ZQVV96bW0pOworICAgICAg ICBvcGMgPSBpbml0X2V2ZXgoc3R1Yik7CisgICAgICAgIG9wY1swXSA9IGI7CisgICAgICAgIG9w Y1sxXSA9IG1vZHJtOworICAgICAgICBpZiAoIGVhLnR5cGUgPT0gT1BfTUVNICkKKyAgICAgICAg eworICAgICAgICAgICAgLyogY29udmVydCBtZW1vcnkgb3BlcmFuZCB0byAoJXJBWCkgKi8KKyAg ICAgICAgICAgIGV2ZXguYiA9IDE7CisgICAgICAgICAgICBvcGNbMV0gJj0gMHgzODsKKyAgICAg ICAgfQorICAgICAgICBpbnNuX2J5dGVzID0gRVZFWF9QRlhfQllURVMgKyAyOworICAgICAgICBi cmVhazsKKwogICAgIGNhc2UgWDg2RU1VTF9PUENfNjYoMHgwZiwgMHgxMik6ICAgICAgIC8qIG1v dmxwZCBtNjQseG1tICovCiAgICAgY2FzZSBYODZFTVVMX09QQ19WRVhfNjYoMHgwZiwgMHgxMik6 ICAgLyogdm1vdmxwZCBtNjQseG1tLHhtbSAqLwogICAgIENBU0VfU0lNRF9QQUNLRURfRlAoLCAw eDBmLCAweDEzKTogICAgIC8qIG1vdmxwe3MsZH0geG1tLG02NCAqLwpAQCAtNjM0OCw2ICs2NTIx LDQxIEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICBBU1NFUlQoIXN0YXRlLT5zaW1kX3NpemUpOwog ICAgICAgICBicmVhazsKIAorICAgIGNhc2UgWDg2RU1VTF9PUENfRVZFWF82NigweDBmLCAweDZl KTogLyogdm1vdntkLHF9IHIvbSx4bW0gKi8KKyAgICBjYXNlIFg4NkVNVUxfT1BDX0VWRVhfNjYo MHgwZiwgMHg3ZSk6IC8qIHZtb3Z7ZCxxfSB4bW0sci9tICovCisgICAgICAgIGdlbmVyYXRlX2V4 Y2VwdGlvbl9pZigoZXZleC5sciB8fCBldmV4Lm9wbXNrIHx8IGV2ZXguYnIgfHwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBldmV4LnJlZyAhPSAweGYgfHwgIWV2ZXguUlgpLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhDX1VEKTsKKyAgICAgICAgaG9zdF9hbmRfdmNw dV9tdXN0X2hhdmUoYXZ4NTEyZik7CisgICAgICAgIGdldF9mcHUoWDg2RU1VTF9GUFVfem1tKTsK KworICAgICAgICBvcGMgPSBpbml0X2V2ZXgoc3R1Yik7CisgICAgICAgIG9wY1swXSA9IGI7Cisg ICAgICAgIC8qIENvbnZlcnQgbWVtb3J5L0dQUiBvcGVyYW5kIHRvICglckFYKS4gKi8KKyAgICAg ICAgZXZleC5iID0gMTsKKyAgICAgICAgaWYgKCAhbW9kZV82NGJpdCgpICkKKyAgICAgICAgICAg IGV2ZXgudyA9IDA7CisgICAgICAgIG9wY1sxXSA9IG1vZHJtICYgMHgzODsKKyAgICAgICAgaW5z bl9ieXRlcyA9IEVWRVhfUEZYX0JZVEVTICsgMjsKKyAgICAgICAgb3BjWzJdID0gMHhjMzsKKwor ICAgICAgICBjb3B5X0VWRVgob3BjLCBldmV4KTsKKyAgICAgICAgaW52b2tlX3N0dWIoIiIsICIi LCAiK20iIChzcmMudmFsKSA6ICJhIiAoJnNyYy52YWwpKTsKKyAgICAgICAgZHN0LnZhbCA9IHNy Yy52YWw7CisKKyAgICAgICAgcHV0X3N0dWIoc3R1Yik7CisgICAgICAgIEFTU0VSVCghc3RhdGUt PnNpbWRfc2l6ZSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBYODZFTVVMX09QQ19FVkVY X0YzKDB4MGYsIDB4N2UpOiAvKiB2bW92cSB4bW0vbTY0LHhtbSAqLworICAgIGNhc2UgWDg2RU1V TF9PUENfRVZFWF82NigweDBmLCAweGQ2KTogLyogdm1vdnEgeG1tLHhtbS9tNjQgKi8KKyAgICAg ICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGV2ZXgubHIgfHwgIWV2ZXgudyB8fCBldmV4Lm9wbXNr IHx8IGV2ZXguYnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWENfVUQpOworICAg ICAgICBob3N0X2FuZF92Y3B1X211c3RfaGF2ZShhdng1MTJmKTsKKyAgICAgICAgZCB8PSBUd29P cDsKKyAgICAgICAgb3BfYnl0ZXMgPSA4OworICAgICAgICBnb3RvIHNpbWRfem1tOworCiAgICAg Y2FzZSBYODZFTVVMX09QQ182NigweDBmLCAweGU3KTogICAgIC8qIG1vdm50ZHEgeG1tLG0xMjgg Ki8KICAgICBjYXNlIFg4NkVNVUxfT1BDX1ZFWF82NigweDBmLCAweGU3KTogLyogdm1vdm50ZHEg e3gseX1tbSxtZW0gKi8KICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGVhLnR5cGUgIT0g T1BfTUVNLCBFWENfVUQpOwpAQCAtNjM2OCw2ICs2NTc2LDMwIEBAIHg4Nl9lbXVsYXRlKAogICAg ICAgICAgICAgZ290byBzaW1kXzBmX2F2eDsKICAgICAgICAgZ290byBzaW1kXzBmX3NzZTI7CiAK KyAgICBjYXNlIFg4NkVNVUxfT1BDX0VWRVhfNjYoMHgwZiwgMHhlNyk6IC8qIHZtb3ZudGRxIFt4 eXpdbW0sbWVtICovCisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihlYS50eXBlICE9IE9Q X01FTSB8fCBldmV4Lm9wbXNrIHx8IGV2ZXgudywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEVYQ19VRCk7CisgICAgICAgIHNmZW5jZSA9IHRydWU7CisgICAgICAgIGZhdWx0X3N1cHBy ZXNzaW9uID0gZmFsc2U7CisgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgWDg2 RU1VTF9PUENfRVZFWF82NigweDBmLCAweDZmKTogLyogdm1vdmRxYXszMiw2NH0gW3h5el1tbS9t ZW0sW3h5el1tbXtrfSAqLworICAgIGNhc2UgWDg2RU1VTF9PUENfRVZFWF9GMygweDBmLCAweDZm KTogLyogdm1vdmRxdXszMiw2NH0gW3h5el1tbS9tZW0sW3h5el1tbXtrfSAqLworICAgIGNhc2Ug WDg2RU1VTF9PUENfRVZFWF82NigweDBmLCAweDdmKTogLyogdm1vdmRxYXszMiw2NH0gW3h5el1t bSxbeHl6XW1tL21lbXtrfSAqLworICAgIGNhc2UgWDg2RU1VTF9PUENfRVZFWF9GMygweDBmLCAw eDdmKTogLyogdm1vdmRxdXszMiw2NH0gW3h5el1tbSxbeHl6XW1tL21lbXtrfSAqLworICAgIHZt b3ZkcWE6CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihldmV4LmJyLCBFWENfVUQpOwor ICAgICAgICBob3N0X2FuZF92Y3B1X211c3RfaGF2ZShhdng1MTJmKTsKKyAgICAgICAgYXZ4NTEy X3ZsZW5fY2hlY2soZmFsc2UpOworICAgICAgICBkIHw9IFR3b09wOworICAgICAgICBvcF9ieXRl cyA9IDE2IDw8IGV2ZXgubHI7CisgICAgICAgIGdvdG8gc2ltZF96bW07CisKKyAgICBjYXNlIFg4 NkVNVUxfT1BDX0VWRVhfRjIoMHgwZiwgMHg2Zik6IC8qIHZtb3ZkcXV7OCwxNn0gW3h5el1tbS9t ZW0sW3h5el1tbXtrfSAqLworICAgIGNhc2UgWDg2RU1VTF9PUENfRVZFWF9GMigweDBmLCAweDdm KTogLyogdm1vdmRxdXs4LDE2fSBbeHl6XW1tLFt4eXpdbW0vbWVte2t9ICovCisgICAgICAgIGhv c3RfYW5kX3ZjcHVfbXVzdF9oYXZlKGF2eDUxMmJ3KTsKKyAgICAgICAgZWxlbV9ieXRlcyA9IDEg PDwgZXZleC53OworICAgICAgICBnb3RvIHZtb3ZkcWE7CisKICAgICBjYXNlIFg4NkVNVUxfT1BD X1ZFWF82NigweDBmLCAweGQ2KTogLyogdm1vdnEgeG1tLHhtbS9tNjQgKi8KICAgICAgICAgZ2Vu ZXJhdGVfZXhjZXB0aW9uX2lmKHZleC5sLCBFWENfVUQpOwogICAgICAgICBkIHw9IFR3b09wOwpA QCAtNzczNCw2ICs3OTY2LDE1IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICB9CiAgICAgICAgIGdv dG8gbW92ZHFhOwogCisgICAgY2FzZSBYODZFTVVMX09QQ19FVkVYXzY2KDB4MGYzOCwgMHgyYSk6 IC8qIHZtb3ZudGRxYSBtZW0sW3h5el1tbSAqLworICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25f aWYoZWEudHlwZSAhPSBPUF9NRU0gfHwgZXZleC5vcG1zayB8fCBldmV4LncsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBFWENfVUQpOworICAgICAgICAvKiBJZ25vcmUgdGhlIG5vbi10 ZW1wb3JhbCBoaW50IGZvciBub3csIHVzaW5nIHZtb3ZkcWEzMiBpbnN0ZWFkLiAqLworICAgICAg ICBhc20gdm9sYXRpbGUgKCAibWZlbmNlIiA6OjogIm1lbW9yeSIgKTsKKyAgICAgICAgYiA9IDB4 NmY7CisgICAgICAgIGV2ZXgub3BjeCA9IHZleF8wZjsKKyAgICAgICAgZ290byB2bW92ZHFhOwor CiAgICAgY2FzZSBYODZFTVVMX09QQ19WRVhfNjYoMHgwZjM4LCAweDJjKTogLyogdm1hc2ttb3Zw cyBtZW0se3gseX1tbSx7eCx5fW1tICovCiAgICAgY2FzZSBYODZFTVVMX09QQ19WRVhfNjYoMHgw ZjM4LCAweDJkKTogLyogdm1hc2ttb3ZwZCBtZW0se3gseX1tbSx7eCx5fW1tICovCiAgICAgY2Fz ZSBYODZFTVVMX09QQ19WRVhfNjYoMHgwZjM4LCAweDJlKTogLyogdm1hc2ttb3ZwcyB7eCx5fW1t LHt4LHl9bW0sbWVtICovCkBAIC04Nzg3LDE3ICs5MDI4LDI3IEBAIHg4Nl9lbXVsYXRlKAogICAg IGVsc2UgaWYgKCBzdGF0ZS0+c2ltZF9zaXplICkKICAgICB7CiAgICAgICAgIGdlbmVyYXRlX2V4 Y2VwdGlvbl9pZighb3BfYnl0ZXMsIEVYQ19VRCk7Ci0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlv bl9pZih2ZXgub3BjeCAmJiAoZCAmIFR3b09wKSAmJiB2ZXgucmVnICE9IDB4ZiwKKyAgICAgICAg Z2VuZXJhdGVfZXhjZXB0aW9uX2lmKCh2ZXgub3BjeCAmJiAoZCAmIFR3b09wKSAmJgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICh2ZXgucmVnICE9IDB4ZiB8fCAoZXZleF9lbmNvZGVk KCkgJiYgIWV2ZXguUlgpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWENfVUQp OwogCiAgICAgICAgIGlmICggIW9wYyApCiAgICAgICAgICAgICBCVUcoKTsKLSAgICAgICAgb3Bj W2luc25fYnl0ZXMgLSBQRlhfQllURVNdID0gMHhjMzsKLSAgICAgICAgY29weV9SRVhfVkVYKG9w YywgcmV4X3ByZWZpeCwgdmV4KTsKKyAgICAgICAgaWYgKCBldmV4X2VuY29kZWQoKSApCisgICAg ICAgIHsKKyAgICAgICAgICAgIG9wY1tpbnNuX2J5dGVzIC0gRVZFWF9QRlhfQllURVNdID0gMHhj MzsKKyAgICAgICAgICAgIGNvcHlfRVZFWChvcGMsIGV2ZXgpOworICAgICAgICB9CisgICAgICAg IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgb3BjW2luc25fYnl0ZXMgLSBQRlhfQllURVNd ID0gMHhjMzsKKyAgICAgICAgICAgIGNvcHlfUkVYX1ZFWChvcGMsIHJleF9wcmVmaXgsIHZleCk7 CisgICAgICAgIH0KIAogICAgICAgICBpZiAoIGVhLnR5cGUgPT0gT1BfTUVNICkKICAgICAgICAg ewogICAgICAgICAgICAgdWludDMyX3QgbXhjc3IgPSAwOworICAgICAgICAgICAgdWludDY0X3Qg ZnVsbCA9IDA7CiAKICAgICAgICAgICAgIGlmICggb3BfYnl0ZXMgPCAxNiB8fAogICAgICAgICAg ICAgICAgICAodmV4Lm9wY3gKQEAgLTg4MTksNiArOTA3MCw0NCBAQCB4ODZfZW11bGF0ZSgKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaXNfYWxpZ25lZChlYS5tZW0uc2VnLCBl YS5tZW0ub2ZmLCBvcF9ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjdHh0LCBvcHMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEVYQ19HUCwgMCk7CisKKyAgICAgICAgICAgIGlmICggZXZleC5iciApCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgQVNTRVJUKChkICYgRHN0TWFzaykgIT0gRHN0TWVtKTsKKyAgICAg ICAgICAgICAgICBvcF9ieXRlcyA9IGVsZW1fYnl0ZXM7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBpZiAoIGV2ZXgub3Btc2sgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFT U0VSVCghKG9wX2J5dGVzICUgZWxlbV9ieXRlcykpOworICAgICAgICAgICAgICAgIGZ1bGwgPSB+ MFVMTCA+PiAoNjQgLSBvcF9ieXRlcyAvIGVsZW1fYnl0ZXMpOworICAgICAgICAgICAgICAgIG9w X21hc2sgJj0gZnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggZmF1bHRfc3Vw cHJlc3Npb24gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICggIW9wX21hc2sg KQorICAgICAgICAgICAgICAgICAgICBnb3RvIHNpbWRfbm9fbWVtOworICAgICAgICAgICAgICAg IGlmICggIWV2ZXguYnIgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg Zmlyc3RfYnl0ZSA9IF9fYnVpbHRpbl9jdHpsbChvcF9tYXNrKTsKKyAgICAgICAgICAgICAgICAg ICAgb3BfbWFzayA+Pj0gZmlyc3RfYnl0ZTsKKyAgICAgICAgICAgICAgICAgICAgZnVsbCA+Pj0g Zmlyc3RfYnl0ZTsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RfYnl0ZSAqPSBlbGVtX2J5dGVz OworICAgICAgICAgICAgICAgICAgICBvcF9ieXRlcyA9ICg2NCAtIF9fYnVpbHRpbl9jbHpsbChv cF9tYXNrKSkgKiBlbGVtX2J5dGVzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBJbmRlcGVuZGVudCBvZiBmYXVsdCBzdXBw cmVzc2lvbiB3ZSBtYXkgbmVlZCB0byByZWFkIChwYXJ0cyBvZikKKyAgICAgICAgICAgICAqIHRo ZSBtZW1vcnkgb3BlcmFuZCBmb3IgdGhlIHB1cnBvc2Ugb2YgbWVyZ2luZyB3aXRob3V0IHNwbGl0 dGluZworICAgICAgICAgICAgICogdGhlIHdyaXRlIGJlbG93IGludG8gbXVsdGlwbGUgb25lcy4g Tm90ZSB0aGF0IHRoZSBFVkVYLlogY2hlY2sKKyAgICAgICAgICAgICAqIGhlcmUgaXNuJ3Qgc3Ry aWN0bHkgbmVlZGVkLCBkdWUgdG8gdGhlcmUgbm90IGN1cnJlbnRseSBiZWluZworICAgICAgICAg ICAgICogYW55IGluc3RydWN0aW9ucyBhbGxvd2luZyB6ZXJvaW5nLW1lcmdpbmcgb24gbWVtb3J5 IHdyaXRlcyAoYW5kCisgICAgICAgICAgICAgKiB3ZSByYWlzZSAjVUQgZHVyaW5nIERzdE1lbSBw cm9jZXNzaW5nIGZhciBhYm92ZSBpbiB0aGlzIGNhc2UpLAorICAgICAgICAgICAgICogeWV0IGNv bmNlcHR1YWxseSB0aGUgcmVhZCBpcyB0aGVuIHVubmVjZXNzYXJ5LgorICAgICAgICAgICAgICov CisgICAgICAgICAgICBpZiAoIGV2ZXgub3Btc2sgJiYgIWV2ZXgueiAmJiAoZCAmIERzdE1hc2sp ID09IERzdE1lbSAmJgorICAgICAgICAgICAgICAgICBvcF9tYXNrICE9IGZ1bGwgKQorICAgICAg ICAgICAgICAgIGQgPSAoZCAmIH5TcmNNYXNrKSB8IFNyY01lbTsKKwogICAgICAgICAgICAgc3dp dGNoICggZCAmIFNyY01hc2sgKQogICAgICAgICAgICAgewogICAgICAgICAgICAgY2FzZSBTcmNN ZW06CkBAIC04ODY1LDcgKzkxNTQsMTAgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgICAgICB9CiAg ICAgICAgIH0KICAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIHNpbWRfbm9fbWVtOgog ICAgICAgICAgICAgZHN0LnR5cGUgPSBPUF9OT05FOworICAgICAgICB9CiAKICAgICAgICAgLyog eyx2fW1hc2ttb3Z7cSxkcXV9LCBhcyBhbiBleGNlcHRpb24sIHVzZXMgckRJLiAqLwogICAgICAg ICBpZiAoIGxpa2VseSgoY3R4dC0+b3Bjb2RlICYgfihYODZFTVVMX09QQ19QRlhfTUFTSyB8Ci0t LSBhL3hlbi9hcmNoL3g4Ni94ODZfZW11bGF0ZS94ODZfZW11bGF0ZS5oCisrKyBiL3hlbi9hcmNo L3g4Ni94ODZfZW11bGF0ZS94ODZfZW11bGF0ZS5oCkBAIC0xNzEsNiArMTcxLDcgQEAgZW51bSB4 ODZfZW11bGF0ZV9mcHVfdHlwZSB7CiAgICAgWDg2RU1VTF9GUFVfeG1tLCAvKiBTU0UgaW5zdHJ1 Y3Rpb24gc2V0ICgleG1tMC0leG1tNy8xNSkgKi8KICAgICBYODZFTVVMX0ZQVV95bW0sIC8qIEFW WC9YT1AgaW5zdHJ1Y3Rpb24gc2V0ICgleW1tMC0leW1tNy8xNSkgKi8KICAgICBYODZFTVVMX0ZQ VV9vcG1hc2ssIC8qIEFWWDUxMiBvcG1hc2sgaW5zdHJ1Y3Rpb24gc2V0ICglazAtJWs3KSAqLwor ICAgIFg4NkVNVUxfRlBVX3ptbSwgLyogQVZYNTEyIGluc3RydWN0aW9uIHNldCAoJXptbTAtJXpt bTcvMzEpICovCiAgICAgLyogVGhpcyBzZW50aW5lbCB3aWxsIG5ldmVyIGJlIHBhc3NlZCB0byAt PmdldF9mcHUoKS4gKi8KICAgICBYODZFTVVMX0ZQVV9ub25lCiB9OwotLS0gYS94ZW4vaW5jbHVk ZS9hc20teDg2L2NwdWZlYXR1cmUuaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L2NwdWZlYXR1 cmUuaApAQCAtMTA1LDYgKzEwNSw3IEBACiAjZGVmaW5lIGNwdV9oYXNfc21hcCAgICAgICAgICAg IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9TTUFQKQogI2RlZmluZSBjcHVfaGFzX3NoYSAgICAg ICAgICAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU0hBKQogI2RlZmluZSBjcHVfaGFzX2F2 eDUxMmJ3ICAgICAgICBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVZYNTEyQlcpCisjZGVmaW5l IGNwdV9oYXNfYXZ4NTEydmwgICAgICAgIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BVlg1MTJW TCkKIAogLyogQ1BVSUQgbGV2ZWwgMHg4MDAwMDAwNy5lZHggKi8KICNkZWZpbmUgY3B1X2hhc19p dHNjICAgICAgICAgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0lUU0MpCgoKCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGlu ZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnBy b2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs