From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH v4 11/31] libxc: remove dead HVM building code Date: Fri, 7 Aug 2015 12:17:48 +0200 Message-ID: <1438942688-7610-12-git-send-email-roger.pau@citrix.com> References: <1438942688-7610-1-git-send-email-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1ZNf9b-0000sU-Mg for xen-devel@lists.xenproject.org; Fri, 07 Aug 2015 10:45:36 +0000 In-Reply-To: <1438942688-7610-1-git-send-email-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: Wei Liu , Stefano Stabellini , Ian Jackson , Ian Campbell , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org UmVtb3ZlIHhjX2h2bV9idWlsZF94ODYuYyBhbmQgeGNfaHZtX2J1aWxkX2FybS5jIHNpbmNlIHhj X2h2bV9idWlsZCBpcyBub3QKbG9uZ2VyIHVzZWQgaW4gb3JkZXIgdG8gY3JlYXRlIEhWTSBndWVz dHMuCgpTaWduZWQtb2ZmLWJ5OiBSb2dlciBQYXUgTW9ubsOpIDxyb2dlci5wYXVAY2l0cml4LmNv bT4KQ2M6IElhbiBKYWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgpDYzogU3RlZmFu byBTdGFiZWxsaW5pIDxzdGVmYW5vLnN0YWJlbGxpbmlAZXUuY2l0cml4LmNvbT4KQ2M6IElhbiBD YW1wYmVsbCA8aWFuLmNhbXBiZWxsQGNpdHJpeC5jb20+CkNjOiBXZWkgTGl1IDx3ZWkubGl1MkBj aXRyaXguY29tPgotLS0KIHRvb2xzL2xpYnhjL01ha2VmaWxlICAgICAgICAgICAgICB8ICAgMiAt CiB0b29scy9saWJ4Yy9pbmNsdWRlL3hlbmd1ZXN0LmggICAgfCAgNDQgLS0tCiB0b29scy9saWJ4 Yy94Y19odm1fYnVpbGRfYXJtLmMgICAgfCAgNDggLS0tCiB0b29scy9saWJ4Yy94Y19odm1fYnVp bGRfeDg2LmMgICAgfCA4MDYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K IHRvb2xzL2xpYnhjL3hnX3ByaXZhdGUuYyAgICAgICAgICB8ICAgOSAtCiB0b29scy9weXRob24v eGVuL2xvd2xldmVsL3hjL3hjLmMgfCAgODEgLS0tLQogNiBmaWxlcyBjaGFuZ2VkLCA5OTAgZGVs ZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgdG9vbHMvbGlieGMveGNfaHZtX2J1aWxkX2Fy bS5jCiBkZWxldGUgbW9kZSAxMDA2NDQgdG9vbHMvbGlieGMveGNfaHZtX2J1aWxkX3g4Ni5jCgpk aWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMvTWFrZWZpbGUgYi90b29scy9saWJ4Yy9NYWtlZmlsZQpp bmRleCBiNDUzODBjLi5lZmZmYjhkIDEwMDY0NAotLS0gYS90b29scy9saWJ4Yy9NYWtlZmlsZQor KysgYi90b29scy9saWJ4Yy9NYWtlZmlsZQpAQCAtOTEsOSArOTEsNyBAQCBHVUVTVF9TUkNTLXkg ICAgICAgICAgICAgICAgICs9IHhjX2RvbV9jb21wYXRfbGludXguYwogCiBHVUVTVF9TUkNTLSQo Q09ORklHX1g4NikgICAgICs9IHhjX2RvbV94ODYuYwogR1VFU1RfU1JDUy0kKENPTkZJR19YODYp ICAgICArPSB4Y19jcHVpZF94ODYuYwotR1VFU1RfU1JDUy0kKENPTkZJR19YODYpICAgICArPSB4 Y19odm1fYnVpbGRfeDg2LmMKIEdVRVNUX1NSQ1MtJChDT05GSUdfQVJNKSAgICAgKz0geGNfZG9t X2FybS5jCi1HVUVTVF9TUkNTLSQoQ09ORklHX0FSTSkgICAgICs9IHhjX2h2bV9idWlsZF9hcm0u YwogCiBpZmVxICgkKENPTkZJR19MSUJYQ19NSU5JT1MpLHkpCiBHVUVTVF9TUkNTLXkgICAgICAg ICAgICAgICAgICs9IHhjX2RvbV9kZWNvbXByZXNzX3Vuc2FmZS5jCmRpZmYgLS1naXQgYS90b29s cy9saWJ4Yy9pbmNsdWRlL3hlbmd1ZXN0LmggYi90b29scy9saWJ4Yy9pbmNsdWRlL3hlbmd1ZXN0 LmgKaW5kZXggMWExYTE4NS4uZWM2N2ZiZCAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGMvaW5jbHVk ZS94ZW5ndWVzdC5oCisrKyBiL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGVuZ3Vlc3QuaApAQCAtMjA1 LDUwICsyMDUsNiBAQCBzdHJ1Y3QgeGNfaHZtX2Zpcm13YXJlX21vZHVsZSB7CiAgICAgdWludDY0 X3QgIGd1ZXN0X2FkZHJfb3V0OwogfTsKIAotc3RydWN0IHhjX2h2bV9idWlsZF9hcmdzIHsKLSAg ICB1aW50NjRfdCBtZW1fc2l6ZTsgICAgICAgICAgIC8qIE1lbW9yeSBzaXplIGluIGJ5dGVzLiAq LwotICAgIHVpbnQ2NF90IG1lbV90YXJnZXQ7ICAgICAgICAgLyogTWVtb3J5IHRhcmdldCBpbiBi eXRlcy4gKi8KLSAgICB1aW50NjRfdCBtbWlvX3NpemU7ICAgICAgICAgIC8qIFNpemUgb2YgdGhl IE1NSU8gaG9sZSBpbiBieXRlcy4gKi8KLSAgICBjb25zdCBjaGFyICppbWFnZV9maWxlX25hbWU7 IC8qIEZpbGUgbmFtZSBvZiB0aGUgaW1hZ2UgdG8gbG9hZC4gKi8KLQotICAgIC8qIEV4dHJhIEFD UEkgdGFibGVzIHBhc3NlZCB0byBIVk1MT0FERVIgKi8KLSAgICBzdHJ1Y3QgeGNfaHZtX2Zpcm13 YXJlX21vZHVsZSBhY3BpX21vZHVsZTsKLQotICAgIC8qIEV4dHJhIFNNQklPUyBzdHJ1Y3R1cmVz IHBhc3NlZCB0byBIVk1MT0FERVIgKi8KLSAgICBzdHJ1Y3QgeGNfaHZtX2Zpcm13YXJlX21vZHVs ZSBzbWJpb3NfbW9kdWxlOwotICAgIC8qIFdoZXRoZXIgdG8gdXNlIGNsYWltIGh5cGVyY2FsbCAo MSAtIGVuYWJsZSwgMCAtIGRpc2FibGUpLiAqLwotICAgIGludCBjbGFpbV9lbmFibGVkOwotCi0g ICAgLyogdk5VTUEgaW5mb3JtYXRpb24qLwotICAgIHhlbl92bWVtcmFuZ2VfdCAqdm1lbXJhbmdl czsKLSAgICB1bnNpZ25lZCBpbnQgbnJfdm1lbXJhbmdlczsKLSAgICB1bnNpZ25lZCBpbnQgKnZu b2RlX3RvX3Bub2RlOwotICAgIHVuc2lnbmVkIGludCBucl92bm9kZXM7Ci0KLSAgICAvKiBPdXQg cGFyYW1ldGVycyAgKi8KLSAgICB1aW50NjRfdCBsb3dtZW1fZW5kOwotICAgIHVpbnQ2NF90IGhp Z2htZW1fZW5kOwotICAgIHVpbnQ2NF90IG1taW9fc3RhcnQ7Ci19OwotCi0vKioKLSAqIEJ1aWxk IGEgSFZNIGRvbWFpbi4KLSAqIEBwYXJtIHhjaCAgICAgIGxpYnhjIGNvbnRleHQgaGFuZGxlLgot ICogQHBhcm0gZG9taWQgICAgZG9tYWluIElEIGZvciB0aGUgbmV3IGRvbWFpbi4KLSAqIEBwYXJt IGh2bV9hcmdzIHBhcmFtZXRlcnMgZm9yIHRoZSBuZXcgZG9tYWluLgotICoKLSAqIFRoZSBtZW1v cnkgc2l6ZSBhbmQgaW1hZ2UgZmlsZSBwYXJhbWV0ZXJzIGFyZSByZXF1aXJlZCwgdGhlIHJlc3QK LSAqIGFyZSBvcHRpb25hbC4KLSAqLwotaW50IHhjX2h2bV9idWlsZCh4Y19pbnRlcmZhY2UgKnhj aCwgdWludDMyX3QgZG9taWQsCi0gICAgICAgICAgICAgICAgIHN0cnVjdCB4Y19odm1fYnVpbGRf YXJncyAqaHZtX2FyZ3MpOwotCi1pbnQgeGNfaHZtX2J1aWxkX3RhcmdldF9tZW0oeGNfaW50ZXJm YWNlICp4Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9taWQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1lbXNpemUsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICppbWFnZV9uYW1lKTsKLQogLyoKICAqIFNldHMgKmxvY2tmZCB0byAtMS4KICAqIEhh cyBkZWFsbG9jYXRlZCBldmVyeXRoaW5nIGV2ZW4gb24gZXJyb3IuCmRpZmYgLS1naXQgYS90b29s cy9saWJ4Yy94Y19odm1fYnVpbGRfYXJtLmMgYi90b29scy9saWJ4Yy94Y19odm1fYnVpbGRfYXJt LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0ZjdjNDUuLjAwMDAwMDAKLS0tIGEv dG9vbHMvbGlieGMveGNfaHZtX2J1aWxkX2FybS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAs MCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKLSAqIHZlcnNpb24g Mi4xIG9mIHRoZSBMaWNlbnNlLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V Ci0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IElmIG5vdCwg c2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAqCi0gKiBDb3B5cmlnaHQgKGMp IDIwMTEsIENpdHJpeCBTeXN0ZW1zCi0gKi8KLQotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5j bHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDx4ZW5jdHJsLmg+Ci0jaW5jbHVkZSA8eGVuZ3Vlc3Qu aD4KLQotaW50IHhjX2h2bV9idWlsZCh4Y19pbnRlcmZhY2UgKnhjaCwgdWludDMyX3QgZG9taWQs Ci0gICAgICAgICAgICAgICAgIHN0cnVjdCB4Y19odm1fYnVpbGRfYXJncyAqaHZtX2FyZ3MpCi17 Ci0gICAgZXJybm8gPSBFTk9TWVM7Ci0gICAgcmV0dXJuIC0xOwotfQotCi1pbnQgeGNfaHZtX2J1 aWxkX3RhcmdldF9tZW0oeGNfaW50ZXJmYWNlICp4Y2gsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50MzJfdCBkb21pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtZW1z aXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRhcmdldCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmltYWdlX25hbWUpCi17Ci0gICAgZXJybm8gPSBF Tk9TWVM7Ci0gICAgcmV0dXJuIC0xOwotfQotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICog bW9kZTogQwotICogYy1maWxlLXN0eWxlOiAiQlNEIgotICogYy1iYXNpYy1vZmZzZXQ6IDQKLSAq IHRhYi13aWR0aDogNAotICogaW5kZW50LXRhYnMtbW9kZTogbmlsCi0gKiBFbmQ6Ci0gKi8KZGlm ZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL3hjX2h2bV9idWlsZF94ODYuYyBiL3Rvb2xzL2xpYnhjL3hj X2h2bV9idWlsZF94ODYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY3OTY4Ni4u MDAwMDAwMAotLS0gYS90b29scy9saWJ4Yy94Y19odm1fYnVpbGRfeDg2LmMKKysrIC9kZXYvbnVs bApAQCAtMSw4MDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogeGNfaHZtX2J1 aWxkLmMKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOwotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2Uu Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgotICovCi0KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxp bnR0eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2lu Y2x1ZGUgPHpsaWIuaD4KLQotI2luY2x1ZGUgInhnX3ByaXZhdGUuaCIKLSNpbmNsdWRlICJ4Y19w cml2YXRlLmgiCi0KLSNpbmNsdWRlIDx4ZW4vZm9yZWlnbi94ODZfMzIuaD4KLSNpbmNsdWRlIDx4 ZW4vZm9yZWlnbi94ODZfNjQuaD4KLSNpbmNsdWRlIDx4ZW4vaHZtL2h2bV9pbmZvX3RhYmxlLmg+ Ci0jaW5jbHVkZSA8eGVuL2h2bS9wYXJhbXMuaD4KLSNpbmNsdWRlIDx4ZW4vaHZtL2U4MjAuaD4K LQotI2luY2x1ZGUgPHhlbi9saWJlbGYvbGliZWxmLmg+Ci0KLSNkZWZpbmUgU1VQRVJQQUdFXzJN Ql9TSElGVCAgIDkKLSNkZWZpbmUgU1VQRVJQQUdFXzJNQl9OUl9QRk5TICgxVUwgPDwgU1VQRVJQ QUdFXzJNQl9TSElGVCkKLSNkZWZpbmUgU1VQRVJQQUdFXzFHQl9TSElGVCAgIDE4Ci0jZGVmaW5l IFNVUEVSUEFHRV8xR0JfTlJfUEZOUyAoMVVMIDw8IFNVUEVSUEFHRV8xR0JfU0hJRlQpCi0KLSNk ZWZpbmUgU1BFQ0lBTFBBR0VfUEFHSU5HICAgMAotI2RlZmluZSBTUEVDSUFMUEFHRV9BQ0NFU1Mg ICAxCi0jZGVmaW5lIFNQRUNJQUxQQUdFX1NIQVJJTkcgIDIKLSNkZWZpbmUgU1BFQ0lBTFBBR0Vf QlVGSU9SRVEgMwotI2RlZmluZSBTUEVDSUFMUEFHRV9YRU5TVE9SRSA0Ci0jZGVmaW5lIFNQRUNJ QUxQQUdFX0lPUkVRICAgIDUKLSNkZWZpbmUgU1BFQ0lBTFBBR0VfSURFTlRfUFQgNgotI2RlZmlu ZSBTUEVDSUFMUEFHRV9DT05TT0xFICA3Ci0jZGVmaW5lIE5SX1NQRUNJQUxfUEFHRVMgICAgIDgK LSNkZWZpbmUgc3BlY2lhbF9wZm4oeCkgKDB4ZmYwMDB1IC0gTlJfU1BFQ0lBTF9QQUdFUyArICh4 KSkKLQotI2RlZmluZSBOUl9JT1JFUV9TRVJWRVJfUEFHRVMgOAotI2RlZmluZSBpb3JlcV9zZXJ2 ZXJfcGZuKHgpIChzcGVjaWFsX3BmbigwKSAtIE5SX0lPUkVRX1NFUlZFUl9QQUdFUyArICh4KSkK LQotI2RlZmluZSBWR0FfSE9MRV9TSVpFICgweDIwKQotCi1zdGF0aWMgaW50IG1vZHVsZXNfaW5p dChzdHJ1Y3QgeGNfaHZtX2J1aWxkX2FyZ3MgKmFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAg ICB1aW50NjRfdCB2ZW5kLCBzdHJ1Y3QgZWxmX2JpbmFyeSAqZWxmLAotICAgICAgICAgICAgICAg ICAgICAgICAgdWludDY0X3QgKm1zdGFydF9vdXQsIHVpbnQ2NF90ICptZW5kX291dCkKLXsKLSNk ZWZpbmUgTU9EVUxFX0FMSUdOIDFVTCA8PCA3Ci0jZGVmaW5lIE1CX0FMSUdOICAgICAxVUwgPDwg MjAKLSNkZWZpbmUgTUtBTElHTih4LCBhKSAoKCh1aW50NjRfdCkoeCkgKyAoYSkgLSAxKSAmIH4o dWludDY0X3QpKChhKSAtIDEpKQotICAgIHVpbnQ2NF90IHRvdGFsX2xlbiA9IDAsIG9mZnNldDEg PSAwOwotCi0gICAgaWYgKCAoYXJncy0+YWNwaV9tb2R1bGUubGVuZ3RoID09IDApJiYoYXJncy0+ c21iaW9zX21vZHVsZS5sZW5ndGggPT0gMCkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8q IEZpbmQgdGhlIHRvdGFsIGxlbmd0aCBmb3IgdGhlIGZpcm13YXJlIG1vZHVsZXMgd2l0aCBhIHJl YXNvbmFibGUgbGFyZ2UKLSAgICAgKiBhbGlnbm1lbnQgc2l6ZSB0byBhbGlnbiBlYWNoIHRoZSBt b2R1bGVzLgotICAgICAqLwotICAgIHRvdGFsX2xlbiA9IE1LQUxJR04oYXJncy0+YWNwaV9tb2R1 bGUubGVuZ3RoLCBNT0RVTEVfQUxJR04pOwotICAgIG9mZnNldDEgPSB0b3RhbF9sZW47Ci0gICAg dG90YWxfbGVuICs9IE1LQUxJR04oYXJncy0+c21iaW9zX21vZHVsZS5sZW5ndGgsIE1PRFVMRV9B TElHTik7Ci0KLSAgICAvKiBXYW50IHRvIHBsYWNlIHRoZSBtb2R1bGVzIDFNYitjaGFuZ2UgYmVo aW5kIHRoZSBsb2FkZXIgaW1hZ2UuICovCi0gICAgKm1zdGFydF9vdXQgPSBNS0FMSUdOKGVsZi0+ cGVuZCwgTUJfQUxJR04pICsgKE1CX0FMSUdOKTsKLSAgICAqbWVuZF9vdXQgPSAqbXN0YXJ0X291 dCArIHRvdGFsX2xlbjsKLQotICAgIGlmICggKm1lbmRfb3V0ID4gdmVuZCApICAgIAotICAgICAg ICByZXR1cm4gLTE7Ci0KLSAgICBpZiAoIGFyZ3MtPmFjcGlfbW9kdWxlLmxlbmd0aCAhPSAwICkK LSAgICAgICAgYXJncy0+YWNwaV9tb2R1bGUuZ3Vlc3RfYWRkcl9vdXQgPSAqbXN0YXJ0X291dDsK LSAgICBpZiAoIGFyZ3MtPnNtYmlvc19tb2R1bGUubGVuZ3RoICE9IDAgKQotICAgICAgICBhcmdz LT5zbWJpb3NfbW9kdWxlLmd1ZXN0X2FkZHJfb3V0ID0gKm1zdGFydF9vdXQgKyBvZmZzZXQxOwot Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1aWxkX2h2bV9pbmZvKHZvaWQgKmh2 bV9pbmZvX3BhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGNfaHZtX2J1 aWxkX2FyZ3MgKmFyZ3MpCi17Ci0gICAgc3RydWN0IGh2bV9pbmZvX3RhYmxlICpodm1faW5mbyA9 IChzdHJ1Y3QgaHZtX2luZm9fdGFibGUgKikKLSAgICAgICAgKCgodW5zaWduZWQgY2hhciAqKWh2 bV9pbmZvX3BhZ2UpICsgSFZNX0lORk9fT0ZGU0VUKTsKLSAgICB1aW50OF90IHN1bTsKLSAgICBp bnQgaTsKLQotICAgIG1lbXNldChodm1faW5mb19wYWdlLCAwLCBQQUdFX1NJWkUpOwotCi0gICAg LyogRmlsbCBpbiB0aGUgaGVhZGVyLiAqLwotICAgIG1lbWNweShodm1faW5mby0+c2lnbmF0dXJl LCAiSFZNIElORk8iLCBzaXplb2YoaHZtX2luZm8tPnNpZ25hdHVyZSkpOwotICAgIGh2bV9pbmZv LT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGh2bV9pbmZvX3RhYmxlKTsKLQotICAgIC8qIFNlbnNp YmxlIGRlZmF1bHRzOiB0aGVzZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgY2FsbGVyLiAqLwot ICAgIGh2bV9pbmZvLT5hcGljX21vZGUgPSAxOwotICAgIGh2bV9pbmZvLT5ucl92Y3B1cyA9IDE7 Ci0gICAgbWVtc2V0KGh2bV9pbmZvLT52Y3B1X29ubGluZSwgMHhmZiwgc2l6ZW9mKGh2bV9pbmZv LT52Y3B1X29ubGluZSkpOwotCi0gICAgLyogTWVtb3J5IHBhcmFtZXRlcnMuICovCi0gICAgaHZt X2luZm8tPmxvd19tZW1fcGdlbmQgPSBhcmdzLT5sb3dtZW1fZW5kID4+IFBBR0VfU0hJRlQ7Ci0g ICAgaHZtX2luZm8tPmhpZ2hfbWVtX3BnZW5kID0gYXJncy0+aGlnaG1lbV9lbmQgPj4gUEFHRV9T SElGVDsKLSAgICBodm1faW5mby0+cmVzZXJ2ZWRfbWVtX3Bnc3RhcnQgPSBpb3JlcV9zZXJ2ZXJf cGZuKDApOwotCi0gICAgLyogRmluaXNoIHdpdGggdGhlIGNoZWNrc3VtLiAqLwotICAgIGZvciAo IGkgPSAwLCBzdW0gPSAwOyBpIDwgaHZtX2luZm8tPmxlbmd0aDsgaSsrICkKLSAgICAgICAgc3Vt ICs9ICgodWludDhfdCAqKWh2bV9pbmZvKVtpXTsKLSAgICBodm1faW5mby0+Y2hlY2tzdW0gPSAt c3VtOwotfQotCi1zdGF0aWMgaW50IGxvYWRlbGZpbWFnZSh4Y19pbnRlcmZhY2UgKnhjaCwgc3Ry dWN0IGVsZl9iaW5hcnkgKmVsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRv bSwgdW5zaWduZWQgbG9uZyAqcGFycmF5KQotewotICAgIHByaXZjbWRfbW1hcF9lbnRyeV90ICpl bnRyaWVzID0gTlVMTDsKLSAgICB1bnNpZ25lZCBsb25nIHBmbl9zdGFydCA9IGVsZi0+cHN0YXJ0 ID4+IFBBR0VfU0hJRlQ7Ci0gICAgdW5zaWduZWQgbG9uZyBwZm5fZW5kID0gKGVsZi0+cGVuZCAr IFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7Ci0gICAgc2l6ZV90IHBhZ2VzID0gcGZuX2Vu ZCAtIHBmbl9zdGFydDsKLSAgICBpbnQgaSwgcmMgPSAtMTsKLQotICAgIC8qIE1hcCBhZGRyZXNz IHNwYWNlIGZvciBpbml0aWFsIGVsZiBpbWFnZS4gKi8KLSAgICBlbnRyaWVzID0gY2FsbG9jKHBh Z2VzLCBzaXplb2YocHJpdmNtZF9tbWFwX2VudHJ5X3QpKTsKLSAgICBpZiAoIGVudHJpZXMgPT0g TlVMTCApCi0gICAgICAgIGdvdG8gZXJyOwotCi0gICAgZm9yICggaSA9IDA7IGkgPCBwYWdlczsg aSsrICkKLSAgICAgICAgZW50cmllc1tpXS5tZm4gPSBwYXJyYXlbKGVsZi0+cHN0YXJ0ID4+IFBB R0VfU0hJRlQpICsgaV07Ci0KLSAgICBlbGYtPmRlc3RfYmFzZSA9IHhjX21hcF9mb3JlaWduX3Jh bmdlcygKLSAgICAgICAgeGNoLCBkb20sIHBhZ2VzIDw8IFBBR0VfU0hJRlQsIFBST1RfUkVBRCB8 IFBST1RfV1JJVEUsIDEgPDwgUEFHRV9TSElGVCwKLSAgICAgICAgZW50cmllcywgcGFnZXMpOwot ICAgIGlmICggZWxmLT5kZXN0X2Jhc2UgPT0gTlVMTCApCi0gICAgICAgIGdvdG8gZXJyOwotICAg IGVsZi0+ZGVzdF9zaXplID0gcGFnZXMgKiBQQUdFX1NJWkU7Ci0KLSAgICBFTEZfQURWQU5DRV9E RVNUKGVsZiwgZWxmLT5wc3RhcnQgJiAoUEFHRV9TSVpFIC0gMSkpOwotCi0gICAgLyogTG9hZCB0 aGUgaW5pdGlhbCBlbGYgaW1hZ2UuICovCi0gICAgcmMgPSBlbGZfbG9hZF9iaW5hcnkoZWxmKTsK LSAgICBpZiAoIHJjIDwgMCApCi0gICAgICAgIFBFUlJPUigiRmFpbGVkIHRvIGxvYWQgZWxmIGJp bmFyeVxuIik7Ci0KLSAgICBtdW5tYXAoZWxmLT5kZXN0X2Jhc2UsIHBhZ2VzIDw8IFBBR0VfU0hJ RlQpOwotICAgIGVsZi0+ZGVzdF9iYXNlID0gTlVMTDsKLSAgICBlbGYtPmRlc3Rfc2l6ZSA9IDA7 Ci0KLSBlcnI6Ci0gICAgZnJlZShlbnRyaWVzKTsKLQotICAgIHJldHVybiByYzsKLX0KLQotc3Rh dGljIGludCBsb2FkbW9kdWxlcyh4Y19pbnRlcmZhY2UgKnhjaCwKLSAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHhjX2h2bV9idWlsZF9hcmdzICphcmdzLAotICAgICAgICAgICAgICAgICAg ICAgICB1aW50NjRfdCBtc3RhcnQsIHVpbnQ2NF90IG1lbmQsCi0gICAgICAgICAgICAgICAgICAg ICAgIHVpbnQzMl90IGRvbSwgdW5zaWduZWQgbG9uZyAqcGFycmF5KQotewotICAgIHByaXZjbWRf bW1hcF9lbnRyeV90ICplbnRyaWVzID0gTlVMTDsKLSAgICB1bnNpZ25lZCBsb25nIHBmbl9zdGFy dDsKLSAgICB1bnNpZ25lZCBsb25nIHBmbl9lbmQ7Ci0gICAgc2l6ZV90IHBhZ2VzOwotICAgIHVp bnQzMl90IGk7Ci0gICAgdWludDhfdCAqZGVzdDsKLSAgICBpbnQgcmMgPSAtMTsKLQotICAgIGlm ICggKG1zdGFydCA9PSAwKXx8KG1lbmQgPT0gMCkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAg IHBmbl9zdGFydCA9ICh1bnNpZ25lZCBsb25nKShtc3RhcnQgPj4gUEFHRV9TSElGVCk7Ci0gICAg cGZuX2VuZCA9ICh1bnNpZ25lZCBsb25nKSgobWVuZCArIFBBR0VfU0laRSAtIDEpID4+IFBBR0Vf U0hJRlQpOwotICAgIHBhZ2VzID0gcGZuX2VuZCAtIHBmbl9zdGFydDsKLQotICAgIC8qIE1hcCBh ZGRyZXNzIHNwYWNlIGZvciBtb2R1bGUgbGlzdC4gKi8KLSAgICBlbnRyaWVzID0gY2FsbG9jKHBh Z2VzLCBzaXplb2YocHJpdmNtZF9tbWFwX2VudHJ5X3QpKTsKLSAgICBpZiAoIGVudHJpZXMgPT0g TlVMTCApCi0gICAgICAgIGdvdG8gZXJyb3Jfb3V0OwotCi0gICAgZm9yICggaSA9IDA7IGkgPCBw YWdlczsgaSsrICkKLSAgICAgICAgZW50cmllc1tpXS5tZm4gPSBwYXJyYXlbKG1zdGFydCA+PiBQ QUdFX1NISUZUKSArIGldOwotCi0gICAgZGVzdCA9IHhjX21hcF9mb3JlaWduX3JhbmdlcygKLSAg ICAgICAgeGNoLCBkb20sIHBhZ2VzIDw8IFBBR0VfU0hJRlQsIFBST1RfUkVBRCB8IFBST1RfV1JJ VEUsIDEgPDwgUEFHRV9TSElGVCwKLSAgICAgICAgZW50cmllcywgcGFnZXMpOwotICAgIGlmICgg ZGVzdCA9PSBOVUxMICkKLSAgICAgICAgZ290byBlcnJvcl9vdXQ7Ci0KLSAgICAvKiBaZXJvIHRo ZSByYW5nZSBzbyBwYWRkaW5nIGlzIGNsZWFyIGJldHdlZW4gbW9kdWxlcyAqLwotICAgIG1lbXNl dChkZXN0LCAwLCBwYWdlcyA8PCBQQUdFX1NISUZUKTsKLQotICAgIC8qIExvYWQgbW9kdWxlcyBp bnRvIHJhbmdlICovICAgIAotICAgIGlmICggYXJncy0+YWNwaV9tb2R1bGUubGVuZ3RoICE9IDAg KQotICAgIHsKLSAgICAgICAgbWVtY3B5KGRlc3QsCi0gICAgICAgICAgICAgICBhcmdzLT5hY3Bp X21vZHVsZS5kYXRhLAotICAgICAgICAgICAgICAgYXJncy0+YWNwaV9tb2R1bGUubGVuZ3RoKTsK LSAgICB9Ci0gICAgaWYgKCBhcmdzLT5zbWJpb3NfbW9kdWxlLmxlbmd0aCAhPSAwICkKLSAgICB7 Ci0gICAgICAgIG1lbWNweShkZXN0ICsgKGFyZ3MtPnNtYmlvc19tb2R1bGUuZ3Vlc3RfYWRkcl9v dXQgLSBtc3RhcnQpLAotICAgICAgICAgICAgICAgYXJncy0+c21iaW9zX21vZHVsZS5kYXRhLAot ICAgICAgICAgICAgICAgYXJncy0+c21iaW9zX21vZHVsZS5sZW5ndGgpOwotICAgIH0KLQotICAg IG11bm1hcChkZXN0LCBwYWdlcyA8PCBQQUdFX1NISUZUKTsKLSAgICByYyA9IDA7Ci0KLSBlcnJv cl9vdXQ6Ci0gICAgZnJlZShlbnRyaWVzKTsKLQotICAgIHJldHVybiByYzsKLX0KLQotLyoKLSAq IENoZWNrIHdoZXRoZXIgdGhlcmUgZXhpc3RzIG1taW8gaG9sZSBpbiB0aGUgc3BlY2lmaWVkIG1l bW9yeSByYW5nZS4KLSAqIFJldHVybnMgMSBpZiBleGlzdHMsIGVsc2UgcmV0dXJucyAwLgotICov Ci1zdGF0aWMgaW50IGNoZWNrX21taW9faG9sZSh1aW50NjRfdCBzdGFydCwgdWludDY0X3QgbWVt c2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1taW9fc3RhcnQsIHVp bnQ2NF90IG1taW9fc2l6ZSkKLXsKLSAgICBpZiAoIHN0YXJ0ICsgbWVtc2l6ZSA8PSBtbWlvX3N0 YXJ0IHx8IHN0YXJ0ID49IG1taW9fc3RhcnQgKyBtbWlvX3NpemUgKQotICAgICAgICByZXR1cm4g MDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IHhjX2h2bV9w b3B1bGF0ZV9tZW1vcnkoeGNfaW50ZXJmYWNlICp4Y2gsIHVpbnQzMl90IGRvbSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGNfaHZtX2J1aWxkX2FyZ3MgKmFyZ3Ms Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGVuX3Bmbl90ICpwYWdlX2FycmF5 KQotewotICAgIHVuc2lnbmVkIGxvbmcgaSwgdm1lbWlkLCBucl9wYWdlcyA9IGFyZ3MtPm1lbV9z aXplID4+IFBBR0VfU0hJRlQ7Ci0gICAgdW5zaWduZWQgbG9uZyBwMm1fc2l6ZTsKLSAgICB1bnNp Z25lZCBsb25nIHRhcmdldF9wYWdlcyA9IGFyZ3MtPm1lbV90YXJnZXQgPj4gUEFHRV9TSElGVDsK LSAgICB1bnNpZ25lZCBsb25nIGN1cl9wYWdlcywgY3VyX3BmbjsKLSAgICBpbnQgcmM7Ci0gICAg eGVuX2NhcGFiaWxpdGllc19pbmZvX3QgY2FwczsKLSAgICB1bnNpZ25lZCBsb25nIHN0YXRfbm9y bWFsX3BhZ2VzID0gMCwgc3RhdF8ybWJfcGFnZXMgPSAwLCAKLSAgICAgICAgc3RhdF8xZ2JfcGFn ZXMgPSAwOwotICAgIHVuc2lnbmVkIGludCBtZW1mbGFncyA9IDA7Ci0gICAgaW50IGNsYWltX2Vu YWJsZWQgPSBhcmdzLT5jbGFpbV9lbmFibGVkOwotICAgIHVpbnQ2NF90IHRvdGFsX3BhZ2VzOwot ICAgIHhlbl92bWVtcmFuZ2VfdCBkdW1teV92bWVtcmFuZ2VbMl07Ci0gICAgdW5zaWduZWQgaW50 IGR1bW15X3Zub2RlX3RvX3Bub2RlWzFdOwotICAgIHhlbl92bWVtcmFuZ2VfdCAqdm1lbXJhbmdl czsKLSAgICB1bnNpZ25lZCBpbnQgKnZub2RlX3RvX3Bub2RlOwotICAgIHVuc2lnbmVkIGludCBu cl92bWVtcmFuZ2VzLCBucl92bm9kZXM7Ci0KLSAgICBpZiAoIG5yX3BhZ2VzID4gdGFyZ2V0X3Bh Z2VzICkKLSAgICAgICAgbWVtZmxhZ3MgfD0gWEVOTUVNRl9wb3B1bGF0ZV9vbl9kZW1hbmQ7Ci0K LSAgICBpZiAoIGFyZ3MtPm5yX3ZtZW1yYW5nZXMgPT0gMCApCi0gICAgewotICAgICAgICAvKiBC dWlsZCBkdW1teSB2bm9kZSBpbmZvcm1hdGlvbgotICAgICAgICAgKgotICAgICAgICAgKiBHdWVz dCBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlIGxheW91dDoKLSAgICAgICAgICogWzAsIGhvbGVfc3Rh cnQpIFtob2xlX3N0YXJ0LCA0RykgWzRHLCBoaWdobWVtX2VuZCkKLSAgICAgICAgICoKLSAgICAg ICAgICogT2YgY291cnNlIGlmIHRoZXJlIGlzIG5vIGhpZ2ggbWVtb3J5LCB0aGUgc2Vjb25kIHZt ZW1yYW5nZQotICAgICAgICAgKiBoYXMgbm8gZWZmZWN0IG9uIHRoZSBhY3R1YWwgcmVzdWx0Lgot ICAgICAgICAgKi8KLQotICAgICAgICBkdW1teV92bWVtcmFuZ2VbMF0uc3RhcnQgPSAwOwotICAg ICAgICBkdW1teV92bWVtcmFuZ2VbMF0uZW5kICAgPSBhcmdzLT5sb3dtZW1fZW5kOwotICAgICAg ICBkdW1teV92bWVtcmFuZ2VbMF0uZmxhZ3MgPSAwOwotICAgICAgICBkdW1teV92bWVtcmFuZ2Vb MF0ubmlkICAgPSAwOwotICAgICAgICBucl92bWVtcmFuZ2VzID0gMTsKLQotICAgICAgICBpZiAo IGFyZ3MtPmhpZ2htZW1fZW5kID4gKDFVTEwgPDwgMzIpICkKLSAgICAgICAgewotICAgICAgICAg ICAgZHVtbXlfdm1lbXJhbmdlWzFdLnN0YXJ0ID0gMVVMTCA8PCAzMjsKLSAgICAgICAgICAgIGR1 bW15X3ZtZW1yYW5nZVsxXS5lbmQgICA9IGFyZ3MtPmhpZ2htZW1fZW5kOwotICAgICAgICAgICAg ZHVtbXlfdm1lbXJhbmdlWzFdLmZsYWdzID0gMDsKLSAgICAgICAgICAgIGR1bW15X3ZtZW1yYW5n ZVsxXS5uaWQgICA9IDA7Ci0KLSAgICAgICAgICAgIG5yX3ZtZW1yYW5nZXMrKzsKLSAgICAgICAg fQotCi0gICAgICAgIGR1bW15X3Zub2RlX3RvX3Bub2RlWzBdID0gWENfTlVNQV9OT19OT0RFOwot ICAgICAgICBucl92bm9kZXMgPSAxOwotICAgICAgICB2bWVtcmFuZ2VzID0gZHVtbXlfdm1lbXJh bmdlOwotICAgICAgICB2bm9kZV90b19wbm9kZSA9IGR1bW15X3Zub2RlX3RvX3Bub2RlOwotICAg IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoIG5yX3BhZ2VzID4gdGFyZ2V0X3BhZ2Vz ICkKLSAgICAgICAgewotICAgICAgICAgICAgUEVSUk9SKCJDYW5ub3QgZW5hYmxlIHZOVU1BIGFu ZCBQb0QgYXQgdGhlIHNhbWUgdGltZSIpOwotICAgICAgICAgICAgZ290byBlcnJvcl9vdXQ7Ci0g ICAgICAgIH0KLQotICAgICAgICBucl92bWVtcmFuZ2VzID0gYXJncy0+bnJfdm1lbXJhbmdlczsK LSAgICAgICAgbnJfdm5vZGVzID0gYXJncy0+bnJfdm5vZGVzOwotICAgICAgICB2bWVtcmFuZ2Vz ID0gYXJncy0+dm1lbXJhbmdlczsKLSAgICAgICAgdm5vZGVfdG9fcG5vZGUgPSBhcmdzLT52bm9k ZV90b19wbm9kZTsKLSAgICB9Ci0KLSAgICB0b3RhbF9wYWdlcyA9IDA7Ci0gICAgcDJtX3NpemUg PSAwOwotICAgIGZvciAoIGkgPSAwOyBpIDwgbnJfdm1lbXJhbmdlczsgaSsrICkKLSAgICB7Ci0g ICAgICAgIHRvdGFsX3BhZ2VzICs9ICgodm1lbXJhbmdlc1tpXS5lbmQgLSB2bWVtcmFuZ2VzW2ld LnN0YXJ0KQotICAgICAgICAgICAgICAgICAgICAgICAgPj4gUEFHRV9TSElGVCk7Ci0gICAgICAg IHAybV9zaXplID0gcDJtX3NpemUgPiAodm1lbXJhbmdlc1tpXS5lbmQgPj4gUEFHRV9TSElGVCkg PwotICAgICAgICAgICAgcDJtX3NpemUgOiAodm1lbXJhbmdlc1tpXS5lbmQgPj4gUEFHRV9TSElG VCk7Ci0gICAgfQotCi0gICAgaWYgKCB0b3RhbF9wYWdlcyAhPSAoYXJncy0+bWVtX3NpemUgPj4g UEFHRV9TSElGVCkgKQotICAgIHsKLSAgICAgICAgUEVSUk9SKCJ2TlVNQSBtZW1vcnkgcGFnZXMg bWlzbWF0Y2ggKDB4JSJQUkl4NjQiICE9IDB4JSJQUkl4NjQiKSIsCi0gICAgICAgICAgICAgICB0 b3RhbF9wYWdlcywgYXJncy0+bWVtX3NpemUgPj4gUEFHRV9TSElGVCk7Ci0gICAgICAgIGdvdG8g ZXJyb3Jfb3V0OwotICAgIH0KLQotICAgIGlmICggeGNfdmVyc2lvbih4Y2gsIFhFTlZFUl9jYXBh YmlsaXRpZXMsICZjYXBzKSAhPSAwICkKLSAgICB7Ci0gICAgICAgIFBFUlJPUigiQ291bGQgbm90 IGdldCBYZW4gY2FwYWJpbGl0aWVzIik7Ci0gICAgICAgIGdvdG8gZXJyb3Jfb3V0OwotICAgIH0K LQotICAgIGZvciAoIGkgPSAwOyBpIDwgcDJtX3NpemU7IGkrKyApCi0gICAgICAgIHBhZ2VfYXJy YXlbaV0gPSAoKHhlbl9wZm5fdCktMSk7Ci0gICAgZm9yICggdm1lbWlkID0gMDsgdm1lbWlkIDwg bnJfdm1lbXJhbmdlczsgdm1lbWlkKysgKQotICAgIHsKLSAgICAgICAgdWludDY0X3QgcGZuOwot Ci0gICAgICAgIGZvciAoIHBmbiA9IHZtZW1yYW5nZXNbdm1lbWlkXS5zdGFydCA+PiBQQUdFX1NI SUZUOwotICAgICAgICAgICAgICBwZm4gPCB2bWVtcmFuZ2VzW3ZtZW1pZF0uZW5kID4+IFBBR0Vf U0hJRlQ7Ci0gICAgICAgICAgICAgIHBmbisrICkKLSAgICAgICAgICAgIHBhZ2VfYXJyYXlbcGZu XSA9IHBmbjsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFRyeSB0byBjbGFpbSBwYWdlcyBmb3Ig ZWFybHkgd2FybmluZyBvZiBpbnN1ZmZpY2llbnQgbWVtb3J5IGF2YWlsYWJsZS4KLSAgICAgKiBU aGlzIHNob3VsZCBnbyBiZWZvcmUgeGNfZG9tYWluX3NldF9wb2RfdGFyZ2V0LCBiZWN1YXNlIHRo YXQgZnVuY3Rpb24KLSAgICAgKiBhY3R1YWxseSBhbGxvY2F0ZXMgbWVtb3J5IGZvciB0aGUgZ3Vl c3QuIENsYWltaW5nIGFmdGVyIG1lbW9yeSBoYXMgYmVlbgotICAgICAqIGFsbG9jYXRlZCBpcyBw b2ludGxlc3MuCi0gICAgICovCi0gICAgaWYgKCBjbGFpbV9lbmFibGVkICkgewotICAgICAgICBy YyA9IHhjX2RvbWFpbl9jbGFpbV9wYWdlcyh4Y2gsIGRvbSwgdGFyZ2V0X3BhZ2VzIC0gVkdBX0hP TEVfU0laRSk7Ci0gICAgICAgIGlmICggcmMgIT0gMCApCi0gICAgICAgIHsKLSAgICAgICAgICAg IFBFUlJPUigiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgSFZNIGd1ZXN0IGFzIHdlIGNh bm5vdCBjbGFpbSBtZW1vcnkhIik7Ci0gICAgICAgICAgICBnb3RvIGVycm9yX291dDsKLSAgICAg ICAgfQotICAgIH0KLQotICAgIGlmICggbWVtZmxhZ3MgJiBYRU5NRU1GX3BvcHVsYXRlX29uX2Rl bWFuZCApCi0gICAgewotICAgICAgICAvKgotICAgICAgICAgKiBTdWJ0cmFjdCBWR0FfSE9MRV9T SVpFIGZyb20gdGFyZ2V0X3BhZ2VzIGZvciB0aGUgVkdBCi0gICAgICAgICAqICJob2xlIi4gIFhl biB3aWxsIGFkanVzdCB0aGUgUG9EIGNhY2hlIHNpemUgc28gdGhhdCBkb21haW4KLSAgICAgICAg ICogdG90X3BhZ2VzIHdpbGwgYmUgdGFyZ2V0X3BhZ2VzIC0gVkdBX0hPTEVfU0laRSBhZnRlcgot ICAgICAgICAgKiB0aGlzIGNhbGwuCi0gICAgICAgICAqLwotICAgICAgICByYyA9IHhjX2RvbWFp bl9zZXRfcG9kX3RhcmdldCh4Y2gsIGRvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGFyZ2V0X3BhZ2VzIC0gVkdBX0hPTEVfU0laRSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgICAgIGlmICggcmMg IT0gMCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFBFUlJPUigiQ291bGQgbm90IHNldCBQb0Qg dGFyZ2V0IGZvciBIVk0gZ3Vlc3QuXG4iKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3Jfb3V0Owot ICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIEhW TSBndWVzdCwgc2tpcHBpbmcgVkdBIGhvbGUgMHhBMDAwMC0weEMwMDAwLgotICAgICAqCi0gICAg ICogV2UgYXR0ZW1wdCB0byBhbGxvY2F0ZSAxR0IgcGFnZXMgaWYgcG9zc2libGUuIEl0IGZhbGxz IGJhY2sgb24gMk1CCi0gICAgICogcGFnZXMgaWYgMUdCIGFsbG9jYXRpb24gZmFpbHMuIDRLQiBw YWdlcyB3aWxsIGJlIHVzZWQgZXZlbnR1YWxseSBpZgotICAgICAqIGJvdGggZmFpbC4KLSAgICAg KiAKLSAgICAgKiBVbmRlciAyTUIgbW9kZSwgd2UgYWxsb2NhdGUgcGFnZXMgaW4gYmF0Y2hlcyBv ZiBubyBtb3JlIHRoYW4gOE1CIHRvIAotICAgICAqIGVuc3VyZSB0aGF0IHdlIGNhbiBiZSBwcmVl bXB0ZWQgYW5kIGhlbmNlIGRvbTAgcmVtYWlucyByZXNwb25zaXZlLgotICAgICAqLwotICAgIHJj ID0geGNfZG9tYWluX3BvcHVsYXRlX3BoeXNtYXBfZXhhY3QoCi0gICAgICAgIHhjaCwgZG9tLCAw eGEwLCAwLCBtZW1mbGFncywgJnBhZ2VfYXJyYXlbMHgwMF0pOwotCi0gICAgc3RhdF9ub3JtYWxf cGFnZXMgPSAwOwotICAgIGZvciAoIHZtZW1pZCA9IDA7IHZtZW1pZCA8IG5yX3ZtZW1yYW5nZXM7 IHZtZW1pZCsrICkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBuZXdfbWVtZmxhZ3MgPSBt ZW1mbGFnczsKLSAgICAgICAgdWludDY0X3QgZW5kX3BhZ2VzOwotICAgICAgICB1bnNpZ25lZCBp bnQgdm5vZGUgPSB2bWVtcmFuZ2VzW3ZtZW1pZF0ubmlkOwotICAgICAgICB1bnNpZ25lZCBpbnQg cG5vZGUgPSB2bm9kZV90b19wbm9kZVt2bm9kZV07Ci0KLSAgICAgICAgaWYgKCBwbm9kZSAhPSBY Q19OVU1BX05PX05PREUgKQotICAgICAgICAgICAgbmV3X21lbWZsYWdzIHw9IFhFTk1FTUZfZXhh Y3Rfbm9kZShwbm9kZSk7Ci0KLSAgICAgICAgZW5kX3BhZ2VzID0gdm1lbXJhbmdlc1t2bWVtaWRd LmVuZCA+PiBQQUdFX1NISUZUOwotICAgICAgICAvKgotICAgICAgICAgKiBDb25zaWRlciB2Z2Eg aG9sZSBiZWxvbmdzIHRvIHRoZSB2bWVtcmFuZ2UgdGhhdCBjb3ZlcnMKLSAgICAgICAgICogMHhB MDAwMC0weEMwMDAwLiBOb3RlIHRoYXQgMHgwMDAwMC0weEEwMDAwIGlzIHBvcHVsYXRlZCBqdXN0 Ci0gICAgICAgICAqIGJlZm9yZSB0aGlzIGxvb3AuCi0gICAgICAgICAqLwotICAgICAgICBpZiAo IHZtZW1yYW5nZXNbdm1lbWlkXS5zdGFydCA9PSAwICkKLSAgICAgICAgewotICAgICAgICAgICAg Y3VyX3BhZ2VzID0gMHhjMDsKLSAgICAgICAgICAgIHN0YXRfbm9ybWFsX3BhZ2VzICs9IDB4YzA7 Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3VyX3BhZ2VzID0gdm1lbXJh bmdlc1t2bWVtaWRdLnN0YXJ0ID4+IFBBR0VfU0hJRlQ7Ci0KLSAgICAgICAgd2hpbGUgKCAocmMg PT0gMCkgJiYgKGVuZF9wYWdlcyA+IGN1cl9wYWdlcykgKQotICAgICAgICB7Ci0gICAgICAgICAg ICAvKiBDbGlwIGNvdW50IHRvIG1heGltdW0gMUdCIGV4dGVudC4gKi8KLSAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgY291bnQgPSBlbmRfcGFnZXMgLSBjdXJfcGFnZXM7Ci0gICAgICAgICAgICB1 bnNpZ25lZCBsb25nIG1heF9wYWdlcyA9IFNVUEVSUEFHRV8xR0JfTlJfUEZOUzsKLQotICAgICAg ICAgICAgaWYgKCBjb3VudCA+IG1heF9wYWdlcyApCi0gICAgICAgICAgICAgICAgY291bnQgPSBt YXhfcGFnZXM7Ci0KLSAgICAgICAgICAgIGN1cl9wZm4gPSBwYWdlX2FycmF5W2N1cl9wYWdlc107 Ci0KLSAgICAgICAgICAgIC8qIFRha2UgY2FyZSB0aGUgY29ybmVyIGNhc2VzIG9mIHN1cGVyIHBh Z2UgdGFpbHMgKi8KLSAgICAgICAgICAgIGlmICggKChjdXJfcGZuICYgKFNVUEVSUEFHRV8xR0Jf TlJfUEZOUy0xKSkgIT0gMCkgJiYKLSAgICAgICAgICAgICAgICAgKGNvdW50ID4gKC1jdXJfcGZu ICYgKFNVUEVSUEFHRV8xR0JfTlJfUEZOUy0xKSkpICkKLSAgICAgICAgICAgICAgICBjb3VudCA9 IC1jdXJfcGZuICYgKFNVUEVSUEFHRV8xR0JfTlJfUEZOUy0xKTsKLSAgICAgICAgICAgIGVsc2Ug aWYgKCAoKGNvdW50ICYgKFNVUEVSUEFHRV8xR0JfTlJfUEZOUy0xKSkgIT0gMCkgJiYKLSAgICAg ICAgICAgICAgICAgICAgICAoY291bnQgPiBTVVBFUlBBR0VfMUdCX05SX1BGTlMpICkKLSAgICAg ICAgICAgICAgICBjb3VudCAmPSB+KFNVUEVSUEFHRV8xR0JfTlJfUEZOUyAtIDEpOwotCi0gICAg ICAgICAgICAvKiBBdHRlbXAgdG8gYWxsb2NhdGUgMUdCIHN1cGVyIHBhZ2UuIEJlY2F1c2UgaW4g ZWFjaCBwYXNzCi0gICAgICAgICAgICAgKiB3ZSBvbmx5IGFsbG9jYXRlIGF0IG1vc3QgMUdCLCB3 ZSBkb24ndCBoYXZlIHRvIGNsaXAKLSAgICAgICAgICAgICAqIHN1cGVyIHBhZ2UgYm91bmRhcmll cy4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKCAoKGNvdW50IHwgY3VyX3Bmbikg JiAoU1VQRVJQQUdFXzFHQl9OUl9QRk5TIC0gMSkpID09IDAgJiYKLSAgICAgICAgICAgICAgICAg LyogQ2hlY2sgaWYgdGhlcmUgZXhpc3RzIE1NSU8gaG9sZSBpbiB0aGUgMUdCIG1lbW9yeQotICAg ICAgICAgICAgICAgICAgKiByYW5nZSAqLwotICAgICAgICAgICAgICAgICAhY2hlY2tfbW1pb19o b2xlKGN1cl9wZm4gPDwgUEFHRV9TSElGVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTVVBFUlBBR0VfMUdCX05SX1BGTlMgPDwgUEFHRV9TSElGVCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhcmdzLT5tbWlvX3N0YXJ0LCBhcmdzLT5tbWlvX3NpemUpICkK LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb25nIGRvbmU7Ci0gICAgICAgICAgICAg ICAgdW5zaWduZWQgbG9uZyBucl9leHRlbnRzID0gY291bnQgPj4gU1VQRVJQQUdFXzFHQl9TSElG VDsKLSAgICAgICAgICAgICAgICB4ZW5fcGZuX3Qgc3BfZXh0ZW50c1tucl9leHRlbnRzXTsKLQot ICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbnJfZXh0ZW50czsgaSsrICkKLSAgICAg ICAgICAgICAgICAgICAgc3BfZXh0ZW50c1tpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBw YWdlX2FycmF5W2N1cl9wYWdlcysoaTw8U1VQRVJQQUdFXzFHQl9TSElGVCldOwotCi0gICAgICAg ICAgICAgICAgZG9uZSA9IHhjX2RvbWFpbl9wb3B1bGF0ZV9waHlzbWFwKHhjaCwgZG9tLCBucl9l eHRlbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTVVBFUlBBR0VfMUdCX1NISUZULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBtZW1mbGFncywgc3BfZXh0ZW50cyk7Ci0KLSAgICAgICAgICAgICAg ICBpZiAoIGRvbmUgPiAwICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg IHN0YXRfMWdiX3BhZ2VzICs9IGRvbmU7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUgPDw9IFNV UEVSUEFHRV8xR0JfU0hJRlQ7Ci0gICAgICAgICAgICAgICAgICAgIGN1cl9wYWdlcyArPSBkb25l OwotICAgICAgICAgICAgICAgICAgICBjb3VudCAtPSBkb25lOwotICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCBjb3VudCAhPSAwICkKLSAgICAgICAg ICAgIHsKLSAgICAgICAgICAgICAgICAvKiBDbGlwIGNvdW50IHRvIG1heGltdW0gOE1CIGV4dGVu dC4gKi8KLSAgICAgICAgICAgICAgICBtYXhfcGFnZXMgPSBTVVBFUlBBR0VfMk1CX05SX1BGTlMg KiA0OwotICAgICAgICAgICAgICAgIGlmICggY291bnQgPiBtYXhfcGFnZXMgKQotICAgICAgICAg ICAgICAgICAgICBjb3VudCA9IG1heF9wYWdlczsKLQotICAgICAgICAgICAgICAgIC8qIENsaXAg cGFydGlhbCBzdXBlcnBhZ2UgZXh0ZW50cyB0byBzdXBlcnBhZ2UKLSAgICAgICAgICAgICAgICAg KiBib3VuZGFyaWVzLiAqLwotICAgICAgICAgICAgICAgIGlmICggKChjdXJfcGZuICYgKFNVUEVS UEFHRV8yTUJfTlJfUEZOUy0xKSkgIT0gMCkgJiYKLSAgICAgICAgICAgICAgICAgICAgIChjb3Vu dCA+ICgtY3VyX3BmbiAmIChTVVBFUlBBR0VfMk1CX05SX1BGTlMtMSkpKSApCi0gICAgICAgICAg ICAgICAgICAgIGNvdW50ID0gLWN1cl9wZm4gJiAoU1VQRVJQQUdFXzJNQl9OUl9QRk5TLTEpOwot ICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoKGNvdW50ICYgKFNVUEVSUEFHRV8yTUJfTlJfUEZO Uy0xKSkgIT0gMCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvdW50ID4gU1VQRVJQ QUdFXzJNQl9OUl9QRk5TKSApCi0gICAgICAgICAgICAgICAgICAgIGNvdW50ICY9IH4oU1VQRVJQ QUdFXzJNQl9OUl9QRk5TIC0gMSk7IC8qIGNsaXAgbm9uLXMucC4gdGFpbCAqLwotCi0gICAgICAg ICAgICAgICAgLyogQXR0ZW1wdCB0byBhbGxvY2F0ZSBzdXBlcnBhZ2UgZXh0ZW50cy4gKi8KLSAg ICAgICAgICAgICAgICBpZiAoICgoY291bnQgfCBjdXJfcGZuKSAmIChTVVBFUlBBR0VfMk1CX05S X1BGTlMgLSAxKSkgPT0gMCApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg ICBsb25nIGRvbmU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfZXh0ZW50 cyA9IGNvdW50ID4+IFNVUEVSUEFHRV8yTUJfU0hJRlQ7Ci0gICAgICAgICAgICAgICAgICAgIHhl bl9wZm5fdCBzcF9leHRlbnRzW25yX2V4dGVudHNdOwotCi0gICAgICAgICAgICAgICAgICAgIGZv ciAoIGkgPSAwOyBpIDwgbnJfZXh0ZW50czsgaSsrICkKLSAgICAgICAgICAgICAgICAgICAgICAg IHNwX2V4dGVudHNbaV0gPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VfYXJyYXlb Y3VyX3BhZ2VzKyhpPDxTVVBFUlBBR0VfMk1CX1NISUZUKV07Ci0KLSAgICAgICAgICAgICAgICAg ICAgZG9uZSA9IHhjX2RvbWFpbl9wb3B1bGF0ZV9waHlzbWFwKHhjaCwgZG9tLCBucl9leHRlbnRz LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg U1VQRVJQQUdFXzJNQl9TSElGVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1lbWZsYWdzLCBzcF9leHRlbnRzKTsKLQotICAgICAgICAgICAg ICAgICAgICBpZiAoIGRvbmUgPiAwICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg ICAgICAgICAgICAgICAgc3RhdF8ybWJfcGFnZXMgKz0gZG9uZTsKLSAgICAgICAgICAgICAgICAg ICAgICAgIGRvbmUgPDw9IFNVUEVSUEFHRV8yTUJfU0hJRlQ7Ci0gICAgICAgICAgICAgICAgICAg ICAgICBjdXJfcGFnZXMgKz0gZG9uZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50IC09 IGRvbmU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICB9Ci0KLSAgICAgICAgICAgIC8qIEZhbGwgYmFjayB0byA0a0IgZXh0ZW50cy4gKi8KLSAg ICAgICAgICAgIGlmICggY291bnQgIT0gMCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg ICAgcmMgPSB4Y19kb21haW5fcG9wdWxhdGVfcGh5c21hcF9leGFjdCgKLSAgICAgICAgICAgICAg ICAgICAgeGNoLCBkb20sIGNvdW50LCAwLCBuZXdfbWVtZmxhZ3MsICZwYWdlX2FycmF5W2N1cl9w YWdlc10pOwotICAgICAgICAgICAgICAgIGN1cl9wYWdlcyArPSBjb3VudDsKLSAgICAgICAgICAg ICAgICBzdGF0X25vcm1hbF9wYWdlcyArPSBjb3VudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg fQotCi0gICAgICAgIGlmICggcmMgIT0gMCApCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0K LSAgICBpZiAoIHJjICE9IDAgKQotICAgIHsKLSAgICAgICAgUEVSUk9SKCJDb3VsZCBub3QgYWxs b2NhdGUgbWVtb3J5IGZvciBIVk0gZ3Vlc3QuIik7Ci0gICAgICAgIGdvdG8gZXJyb3Jfb3V0Owot ICAgIH0KLQotICAgIERQUklOVEYoIlBIWVNJQ0FMIE1FTU9SWSBBTExPQ0FUSU9OOlxuIik7Ci0g ICAgRFBSSU5URigiICA0S0IgUEFHRVM6IDB4JTAxNmx4XG4iLCBzdGF0X25vcm1hbF9wYWdlcyk7 Ci0gICAgRFBSSU5URigiICAyTUIgUEFHRVM6IDB4JTAxNmx4XG4iLCBzdGF0XzJtYl9wYWdlcyk7 Ci0gICAgRFBSSU5URigiICAxR0IgUEFHRVM6IDB4JTAxNmx4XG4iLCBzdGF0XzFnYl9wYWdlcyk7 Ci0KLSAgICByYyA9IDA7Ci0gICAgZ290byBvdXQ7Ci0gZXJyb3Jfb3V0OgotICAgIHJjID0gLTE7 Ci0gb3V0OgotCi0gICAgLyogZW5zdXJlIG5vIHVuY2xhaW1lZCBwYWdlcyBhcmUgbGVmdCB1bnVz ZWQgKi8KLSAgICB4Y19kb21haW5fY2xhaW1fcGFnZXMoeGNoLCBkb20sIDAgLyogY2FuY2VscyB0 aGUgY2xhaW0gKi8pOwotCi0gICAgcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IHhjX2h2bV9s b2FkX2ltYWdlKHhjX2ludGVyZmFjZSAqeGNoLAotICAgICAgICAgICAgICAgICAgICAgICB1aW50 MzJfdCBkb20sIHN0cnVjdCB4Y19odm1fYnVpbGRfYXJncyAqYXJncywKLSAgICAgICAgICAgICAg ICAgICAgICAgeGVuX3Bmbl90ICpwYWdlX2FycmF5KQotewotICAgIHVuc2lnbmVkIGxvbmcgZW50 cnlfZWlwLCBpbWFnZV9zaXplOwotICAgIHN0cnVjdCBlbGZfYmluYXJ5IGVsZjsKLSAgICB1aW50 NjRfdCB2X3N0YXJ0LCB2X2VuZDsKLSAgICB1aW50NjRfdCBtX3N0YXJ0ID0gMCwgbV9lbmQgPSAw OwotICAgIGNoYXIgKmltYWdlOwotICAgIGludCByYzsKLQotICAgIGltYWdlID0geGNfcmVhZF9p bWFnZSh4Y2gsIGFyZ3MtPmltYWdlX2ZpbGVfbmFtZSwgJmltYWdlX3NpemUpOwotICAgIGlmICgg aW1hZ2UgPT0gTlVMTCApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIG1lbXNldCgmZWxmLCAw LCBzaXplb2YoZWxmKSk7Ci0gICAgaWYgKCBlbGZfaW5pdCgmZWxmLCBpbWFnZSwgaW1hZ2Vfc2l6 ZSkgIT0gMCApCi0gICAgICAgIGdvdG8gZXJyb3Jfb3V0OwotCi0gICAgeGNfZWxmX3NldF9sb2dm aWxlKHhjaCwgJmVsZiwgMSk7Ci0KLSAgICBlbGZfcGFyc2VfYmluYXJ5KCZlbGYpOwotICAgIHZf c3RhcnQgPSAwOwotICAgIHZfZW5kID0gYXJncy0+bWVtX3NpemU7Ci0KLSAgICBpZiAoIG1vZHVs ZXNfaW5pdChhcmdzLCB2X2VuZCwgJmVsZiwgJm1fc3RhcnQsICZtX2VuZCkgIT0gMCApCi0gICAg ewotICAgICAgICBFUlJPUigiSW5zdWZmaWNpZW50IHNwYWNlIHRvIGxvYWQgbW9kdWxlcy4iKTsK LSAgICAgICAgZ290byBlcnJvcl9vdXQ7Ci0gICAgfQotCi0gICAgRFBSSU5URigiVklSVFVBTCBN RU1PUlkgQVJSQU5HRU1FTlQ6XG4iKTsKLSAgICBEUFJJTlRGKCIgIExvYWRlcjogICAlMDE2IlBS SXg2NCItPiUwMTYiUFJJeDY0IlxuIiwgZWxmLnBzdGFydCwgZWxmLnBlbmQpOwotICAgIERQUklO VEYoIiAgTW9kdWxlczogICUwMTYiUFJJeDY0Ii0+JTAxNiJQUkl4NjQiXG4iLCBtX3N0YXJ0LCBt X2VuZCk7Ci0KLSAgICBpZiAoIGxvYWRlbGZpbWFnZSh4Y2gsICZlbGYsIGRvbSwgcGFnZV9hcnJh eSkgIT0gMCApCi0gICAgewotICAgICAgICBQRVJST1IoIkNvdWxkIG5vdCBsb2FkIEVMRiBpbWFn ZSIpOwotICAgICAgICBnb3RvIGVycm9yX291dDsKLSAgICB9Ci0KLSAgICBpZiAoIGxvYWRtb2R1 bGVzKHhjaCwgYXJncywgbV9zdGFydCwgbV9lbmQsIGRvbSwgcGFnZV9hcnJheSkgIT0gMCApCi0g ICAgewotICAgICAgICBQRVJST1IoIkNvdWxkIG5vdCBsb2FkIEFDUEkgbW9kdWxlcyIpOwotICAg ICAgICBnb3RvIGVycm9yX291dDsKLSAgICB9Ci0KLSAgICAvKiBJbnNlcnQgSk1QIDxyZWwzMj4g aW5zdHJ1Y3Rpb24gYXQgYWRkcmVzcyAweDAgdG8gcmVhY2ggZW50cnkgcG9pbnQuICovCi0gICAg ZW50cnlfZWlwID0gZWxmX3V2YWwoJmVsZiwgZWxmLmVoZHIsIGVfZW50cnkpOwotICAgIGlmICgg ZW50cnlfZWlwICE9IDAgKQotICAgIHsKLSAgICAgICAgY2hhciAqcGFnZTAgPSB4Y19tYXBfZm9y ZWlnbl9yYW5nZSgKLSAgICAgICAgICAgIHhjaCwgZG9tLCBQQUdFX1NJWkUsIFBST1RfUkVBRCB8 IFBST1RfV1JJVEUsIDApOwotICAgICAgICBpZiAoIHBhZ2UwID09IE5VTEwgKQotICAgICAgICAg ICAgZ290byBlcnJvcl9vdXQ7Ci0gICAgICAgIHBhZ2UwWzBdID0gMHhlOTsKLSAgICAgICAgKih1 aW50MzJfdCAqKSZwYWdlMFsxXSA9IGVudHJ5X2VpcCAtIDU7Ci0gICAgICAgIG11bm1hcChwYWdl MCwgUEFHRV9TSVpFKTsKLSAgICB9Ci0KLSAgICByYyA9IDA7Ci0gICAgZ290byBvdXQ7Ci0gZXJy b3Jfb3V0OgotICAgIHJjID0gLTE7Ci0gb3V0OgotICAgIGlmICggZWxmX2NoZWNrX2Jyb2tlbigm ZWxmKSApCi0gICAgICAgIEVSUk9SKCJIVk0gRUxGIGJyb2tlbjogJXMiLCBlbGZfY2hlY2tfYnJv a2VuKCZlbGYpKTsKLSAgICBmcmVlKGltYWdlKTsKLQotICAgIHJldHVybiByYzsKLX0KLQotc3Rh dGljIGludCB4Y19odm1fcG9wdWxhdGVfcGFyYW1zKHhjX2ludGVyZmFjZSAqeGNoLCB1aW50MzJf dCBkb20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHhjX2h2bV9i dWlsZF9hcmdzICphcmdzKQotewotICAgIHVuc2lnbmVkIGxvbmcgaTsKLSAgICB2b2lkICpodm1f aW5mb19wYWdlOwotICAgIHVpbnQzMl90ICppZGVudF9wdDsKLSAgICB1aW50NjRfdCB2X2VuZDsK LSAgICBpbnQgcmM7Ci0gICAgeGVuX3Bmbl90IHNwZWNpYWxfYXJyYXlbTlJfU1BFQ0lBTF9QQUdF U107Ci0gICAgeGVuX3Bmbl90IGlvcmVxX3NlcnZlcl9hcnJheVtOUl9JT1JFUV9TRVJWRVJfUEFH RVNdOwotCi0gICAgdl9lbmQgPSBhcmdzLT5tZW1fc2l6ZTsKLQotICAgIGlmICggKGh2bV9pbmZv X3BhZ2UgPSB4Y19tYXBfZm9yZWlnbl9yYW5nZSgKLSAgICAgICAgICAgICAgeGNoLCBkb20sIFBB R0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKLSAgICAgICAgICAgICAgSFZNX0lORk9f UEZOKSkgPT0gTlVMTCApCi0gICAgewotICAgICAgICBQRVJST1IoIkNvdWxkIG5vdCBtYXAgaHZt IGluZm8gcGFnZSIpOwotICAgICAgICBnb3RvIGVycm9yX291dDsKLSAgICB9Ci0gICAgYnVpbGRf aHZtX2luZm8oaHZtX2luZm9fcGFnZSwgYXJncyk7Ci0gICAgbXVubWFwKGh2bV9pbmZvX3BhZ2Us IFBBR0VfU0laRSk7Ci0KLSAgICAvKiBBbGxvY2F0ZSBhbmQgY2xlYXIgc3BlY2lhbCBwYWdlcy4g Ki8KLSAgICBmb3IgKCBpID0gMDsgaSA8IE5SX1NQRUNJQUxfUEFHRVM7IGkrKyApCi0gICAgICAg IHNwZWNpYWxfYXJyYXlbaV0gPSBzcGVjaWFsX3BmbihpKTsKLQotICAgIHJjID0geGNfZG9tYWlu X3BvcHVsYXRlX3BoeXNtYXBfZXhhY3QoeGNoLCBkb20sIE5SX1NQRUNJQUxfUEFHRVMsIDAsIDAs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWFsX2FycmF5 KTsKLSAgICBpZiAoIHJjICE9IDAgKQotICAgIHsKLSAgICAgICAgUEVSUk9SKCJDb3VsZCBub3Qg YWxsb2NhdGUgc3BlY2lhbCBwYWdlcy4iKTsKLSAgICAgICAgZ290byBlcnJvcl9vdXQ7Ci0gICAg fQotCi0gICAgaWYgKCB4Y19jbGVhcl9kb21haW5fcGFnZXMoeGNoLCBkb20sIHNwZWNpYWxfcGZu KDApLCBOUl9TUEVDSUFMX1BBR0VTKSApCi0gICAgewotICAgICAgICBQRVJST1IoIkNvdWxkIG5v dCBjbGVhciBzcGVjaWFsIHBhZ2VzIik7Ci0gICAgICAgIGdvdG8gZXJyb3Jfb3V0OwotICAgIH0K LQotICAgIHhjX2h2bV9wYXJhbV9zZXQoeGNoLCBkb20sIEhWTV9QQVJBTV9TVE9SRV9QRk4sCi0g ICAgICAgICAgICAgICAgICAgICBzcGVjaWFsX3BmbihTUEVDSUFMUEFHRV9YRU5TVE9SRSkpOwot ICAgIHhjX2h2bV9wYXJhbV9zZXQoeGNoLCBkb20sIEhWTV9QQVJBTV9CVUZJT1JFUV9QRk4sCi0g ICAgICAgICAgICAgICAgICAgICBzcGVjaWFsX3BmbihTUEVDSUFMUEFHRV9CVUZJT1JFUSkpOwot ICAgIHhjX2h2bV9wYXJhbV9zZXQoeGNoLCBkb20sIEhWTV9QQVJBTV9JT1JFUV9QRk4sCi0gICAg ICAgICAgICAgICAgICAgICBzcGVjaWFsX3BmbihTUEVDSUFMUEFHRV9JT1JFUSkpOwotICAgIHhj X2h2bV9wYXJhbV9zZXQoeGNoLCBkb20sIEhWTV9QQVJBTV9DT05TT0xFX1BGTiwKLSAgICAgICAg ICAgICAgICAgICAgIHNwZWNpYWxfcGZuKFNQRUNJQUxQQUdFX0NPTlNPTEUpKTsKLSAgICB4Y19o dm1fcGFyYW1fc2V0KHhjaCwgZG9tLCBIVk1fUEFSQU1fUEFHSU5HX1JJTkdfUEZOLAotICAgICAg ICAgICAgICAgICAgICAgc3BlY2lhbF9wZm4oU1BFQ0lBTFBBR0VfUEFHSU5HKSk7Ci0gICAgeGNf aHZtX3BhcmFtX3NldCh4Y2gsIGRvbSwgSFZNX1BBUkFNX01PTklUT1JfUklOR19QRk4sCi0gICAg ICAgICAgICAgICAgICAgICBzcGVjaWFsX3BmbihTUEVDSUFMUEFHRV9BQ0NFU1MpKTsKLSAgICB4 Y19odm1fcGFyYW1fc2V0KHhjaCwgZG9tLCBIVk1fUEFSQU1fU0hBUklOR19SSU5HX1BGTiwKLSAg ICAgICAgICAgICAgICAgICAgIHNwZWNpYWxfcGZuKFNQRUNJQUxQQUdFX1NIQVJJTkcpKTsKLQot ICAgIC8qCi0gICAgICogQWxsb2NhdGUgYW5kIGNsZWFyIGFkZGl0aW9uYWwgaW9yZXEgc2VydmVy IHBhZ2VzLiBUaGUgZGVmYXVsdAotICAgICAqIHNlcnZlciB3aWxsIHVzZSB0aGUgSU9SRVEgYW5k IEJVRklPUkVRIHNwZWNpYWwgcGFnZXMgYWJvdmUuCi0gICAgICovCi0gICAgZm9yICggaSA9IDA7 IGkgPCBOUl9JT1JFUV9TRVJWRVJfUEFHRVM7IGkrKyApCi0gICAgICAgIGlvcmVxX3NlcnZlcl9h cnJheVtpXSA9IGlvcmVxX3NlcnZlcl9wZm4oaSk7Ci0KLSAgICByYyA9IHhjX2RvbWFpbl9wb3B1 bGF0ZV9waHlzbWFwX2V4YWN0KHhjaCwgZG9tLCBOUl9JT1JFUV9TRVJWRVJfUEFHRVMsIDAsIDAs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3JlcV9zZXJ2ZXJf YXJyYXkpOwotICAgIGlmICggcmMgIT0gMCApCi0gICAgewotICAgICAgICBQRVJST1IoIkNvdWxk IG5vdCBhbGxvY2F0ZSBpb3JlcSBzZXJ2ZXIgcGFnZXMuIik7Ci0gICAgICAgIGdvdG8gZXJyb3Jf b3V0OwotICAgIH0KLQotICAgIGlmICggeGNfY2xlYXJfZG9tYWluX3BhZ2VzKHhjaCwgZG9tLCBp b3JlcV9zZXJ2ZXJfcGZuKDApLCBOUl9JT1JFUV9TRVJWRVJfUEFHRVMpICkKLSAgICB7Ci0gICAg ICAgIFBFUlJPUigiQ291bGQgbm90IGNsZWFyIGlvcmVxIHBhZ2UiKTsKLSAgICAgICAgZ290byBl cnJvcl9vdXQ7Ci0gICAgfQotCi0gICAgLyogVGVsbCB0aGUgZG9tYWluIHdoZXJlIHRoZSBwYWdl cyBhcmUgYW5kIGhvdyBtYW55IHRoZXJlIGFyZSAqLwotICAgIHhjX2h2bV9wYXJhbV9zZXQoeGNo LCBkb20sIEhWTV9QQVJBTV9JT1JFUV9TRVJWRVJfUEZOLAotICAgICAgICAgICAgICAgICAgICAg aW9yZXFfc2VydmVyX3BmbigwKSk7Ci0gICAgeGNfaHZtX3BhcmFtX3NldCh4Y2gsIGRvbSwgSFZN X1BBUkFNX05SX0lPUkVRX1NFUlZFUl9QQUdFUywKLSAgICAgICAgICAgICAgICAgICAgIE5SX0lP UkVRX1NFUlZFUl9QQUdFUyk7Ci0KLSAgICAvKgotICAgICAqIElkZW50aXR5LW1hcCBwYWdlIHRh YmxlIGlzIHJlcXVpcmVkIGZvciBydW5uaW5nIHdpdGggQ1IwLlBHPTAgd2hlbgotICAgICAqIHVz aW5nIEludGVsIEVQVC4gQ3JlYXRlIGEgMzItYml0IG5vbi1QQUUgcGFnZSBkaXJlY3Rvcnkgb2Yg c3VwZXJwYWdlcy4KLSAgICAgKi8KLSAgICBpZiAoIChpZGVudF9wdCA9IHhjX21hcF9mb3JlaWdu X3JhbmdlKAotICAgICAgICAgICAgICB4Y2gsIGRvbSwgUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQ Uk9UX1dSSVRFLAotICAgICAgICAgICAgICBzcGVjaWFsX3BmbihTUEVDSUFMUEFHRV9JREVOVF9Q VCkpKSA9PSBOVUxMICkKLSAgICB7Ci0gICAgICAgIFBFUlJPUigiQ291bGQgbm90IG1hcCBzcGVj aWFsIHBhZ2UgaWRlbnRfcHQiKTsKLSAgICAgICAgZ290byBlcnJvcl9vdXQ7Ci0gICAgfQotICAg IGZvciAoIGkgPSAwOyBpIDwgUEFHRV9TSVpFIC8gc2l6ZW9mKCppZGVudF9wdCk7IGkrKyApCi0g ICAgICAgIGlkZW50X3B0W2ldID0gKChpIDw8IDIyKSB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9S VyB8IF9QQUdFX1VTRVIgfAotICAgICAgICAgICAgICAgICAgICAgICBfUEFHRV9BQ0NFU1NFRCB8 IF9QQUdFX0RJUlRZIHwgX1BBR0VfUFNFKTsKLSAgICBtdW5tYXAoaWRlbnRfcHQsIFBBR0VfU0la RSk7Ci0gICAgeGNfaHZtX3BhcmFtX3NldCh4Y2gsIGRvbSwgSFZNX1BBUkFNX0lERU5UX1BULAot ICAgICAgICAgICAgICAgICAgICAgc3BlY2lhbF9wZm4oU1BFQ0lBTFBBR0VfSURFTlRfUFQpIDw8 IFBBR0VfU0hJRlQpOwotCi0gICAgcmMgPSAwOwotICAgIGdvdG8gb3V0OwotIGVycm9yX291dDoK LSAgICByYyA9IC0xOwotIG91dDoKLQotICAgIHJldHVybiByYzsKLX0KLQotLyogeGNfaHZtX2J1 aWxkOgotICogQ3JlYXRlIGEgZG9tYWluIGZvciBhIHZpcnR1YWxpemVkIExpbnV4LCB1c2luZyBm aWxlcy9maWxlbmFtZXMuCi0gKi8KLWludCB4Y19odm1fYnVpbGQoeGNfaW50ZXJmYWNlICp4Y2gs IHVpbnQzMl90IGRvbWlkLAotICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGNfaHZtX2J1aWxkX2Fy Z3MgKmh2bV9hcmdzKQotewotICAgIHN0cnVjdCB4Y19odm1fYnVpbGRfYXJncyBhcmdzID0gKmh2 bV9hcmdzOwotICAgIHhlbl9wZm5fdCAqcGFycmF5ID0gTlVMTDsKLSAgICBpbnQgcmM7Ci0KLSAg ICBpZiAoIGRvbWlkID09IDAgKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKCBhcmdzLmlt YWdlX2ZpbGVfbmFtZSA9PSBOVUxMICkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgLyogQW4g SFZNIGd1ZXN0IG11c3QgYmUgaW5pdGlhbGlzZWQgd2l0aCBhdCBsZWFzdCAyTUIgbWVtb3J5LiAq LwotICAgIGlmICggYXJncy5tZW1fc2l6ZSA8ICgydWxsIDw8IDIwKSB8fCBhcmdzLm1lbV90YXJn ZXQgPCAoMnVsbCA8PCAyMCkgKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBwYXJyYXkgPSBt YWxsb2MoKGFyZ3MubWVtX3NpemUgPj4gUEFHRV9TSElGVCkgKiBzaXplb2YoeGVuX3Bmbl90KSk7 Ci0gICAgaWYgKCBwYXJyYXkgPT0gTlVMTCApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHJj ID0geGNfaHZtX3BvcHVsYXRlX21lbW9yeSh4Y2gsIGRvbWlkLCAmYXJncywgcGFycmF5KTsKLSAg ICBpZiAoIHJjICE9IDAgKQotICAgIHsKLSAgICAgICAgUEVSUk9SKCJ4Y19odm1fcG9wdWxhdGVf bWVtb3J5IGZhaWxlZCIpOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0gICAgcmMgPSB4Y19o dm1fbG9hZF9pbWFnZSh4Y2gsIGRvbWlkLCAmYXJncywgcGFycmF5KTsKLSAgICBpZiAoIHJjICE9 IDAgKQotICAgIHsKLSAgICAgICAgUEVSUk9SKCJ4Y19odm1fbG9hZF9pbWFnZSBmYWlsZWQiKTsK LSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQotICAgIHJjID0geGNfaHZtX3BvcHVsYXRlX3BhcmFt cyh4Y2gsIGRvbWlkLCAmYXJncyk7Ci0gICAgaWYgKCByYyAhPSAwICkKLSAgICB7Ci0gICAgICAg IFBFUlJPUigieGNfaHZtX3BvcHVsYXRlX3BhcmFtcyBmYWlsZWQiKTsKLSAgICAgICAgZ290byBv dXQ7Ci0gICAgfQotCi0gICAgLyogUmV0dXJuIG1vZHVsZSBsb2FkIGFkZHJlc3NlcyB0byBjYWxs ZXIgKi8KLSAgICBodm1fYXJncy0+YWNwaV9tb2R1bGUuZ3Vlc3RfYWRkcl9vdXQgPSBhcmdzLmFj cGlfbW9kdWxlLmd1ZXN0X2FkZHJfb3V0OwotICAgIGh2bV9hcmdzLT5zbWJpb3NfbW9kdWxlLmd1 ZXN0X2FkZHJfb3V0ID0gYXJncy5zbWJpb3NfbW9kdWxlLmd1ZXN0X2FkZHJfb3V0OwotCi1vdXQ6 Ci0gICAgZnJlZShwYXJyYXkpOwotCi0gICAgcmV0dXJuIHJjOwotfQotCi0vKiB4Y19odm1fYnVp bGRfdGFyZ2V0X21lbTogCi0gKiBDcmVhdGUgYSBkb21haW4gZm9yIGEgcHJlLWJhbGxvb25lZCB2 aXJ0dWFsaXplZCBMaW51eCwgdXNpbmcKLSAqIGZpbGVzL2ZpbGVuYW1lcy4gIElmIHRhcmdldCA8 IG1lbXNpemUsIGRvbWFpbiBpcyBjcmVhdGVkIHdpdGgKLSAqIG1lbXNpemUgcGFnZXMgbWFya2Vk IHBvcHVsYXRlLW9uLWRlbWFuZCwgCi0gKiBjYWxjdWxhdGluZyBwb2QgY2FjaGUgc2l6ZSBiYXNl ZCBvbiB0YXJnZXQuCi0gKiBJZiB0YXJnZXQgPT0gbWVtc2l6ZSwgcGFnZXMgYXJlIHBvcHVsYXRl ZCBub3JtYWxseS4KLSAqLwotaW50IHhjX2h2bV9idWlsZF90YXJnZXRfbWVtKHhjX2ludGVyZmFj ZSAqeGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9taWQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWVtc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCB0YXJnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICppbWFnZV9uYW1lKQotewotICAgIHN0cnVjdCB4Y19odm1fYnVpbGRfYXJncyBhcmdzID0ge307 Ci0KLSAgICBtZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihzdHJ1Y3QgeGNfaHZtX2J1aWxkX2FyZ3Mp KTsKLSAgICBhcmdzLm1lbV9zaXplID0gKHVpbnQ2NF90KW1lbXNpemUgPDwgMjA7Ci0gICAgYXJn cy5tZW1fdGFyZ2V0ID0gKHVpbnQ2NF90KXRhcmdldCA8PCAyMDsKLSAgICBhcmdzLmltYWdlX2Zp bGVfbmFtZSA9IGltYWdlX25hbWU7Ci0gICAgaWYgKCBhcmdzLm1taW9fc2l6ZSA9PSAwICkKLSAg ICAgICAgYXJncy5tbWlvX3NpemUgPSBIVk1fQkVMT1dfNEdfTU1JT19MRU5HVEg7Ci0KLSAgICBy ZXR1cm4geGNfaHZtX2J1aWxkKHhjaCwgZG9taWQsICZhcmdzKTsKLX0KLQotLyoKLSAqIExvY2Fs IHZhcmlhYmxlczoKLSAqIG1vZGU6IEMKLSAqIGMtZmlsZS1zdHlsZTogIkJTRCIKLSAqIGMtYmFz aWMtb2Zmc2V0OiA0Ci0gKiB0YWItd2lkdGg6IDQKLSAqIGluZGVudC10YWJzLW1vZGU6IG5pbAot ICogRW5kOgotICovCmRpZmYgLS1naXQgYS90b29scy9saWJ4Yy94Z19wcml2YXRlLmMgYi90b29s cy9saWJ4Yy94Z19wcml2YXRlLmMKaW5kZXggNjc5NDZlMS4uZDk4ZjI4MiAxMDA2NDQKLS0tIGEv dG9vbHMvbGlieGMveGdfcHJpdmF0ZS5jCisrKyBiL3Rvb2xzL2xpYnhjL3hnX3ByaXZhdGUuYwpA QCAtMTg3LDE1ICsxODcsNiBAQCB1bnNpZ25lZCBsb25nIGNzdW1fcGFnZSh2b2lkICpwYWdlKQog ICAgIHJldHVybiBzdW0gXiAoc3VtPj4zMik7CiB9CiAKLV9fYXR0cmlidXRlX18oKHdlYWspKSAK LSAgICBpbnQgeGNfaHZtX2J1aWxkKHhjX2ludGVyZmFjZSAqeGNoLAotICAgICAgICAgICAgICAg ICAgICAgdWludDMyX3QgZG9taWQsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGNfaHZt X2J1aWxkX2FyZ3MgKmh2bV9hcmdzKQotewotICAgIGVycm5vID0gRU5PU1lTOwotICAgIHJldHVy biAtMTsKLX0KLQogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIG1vZGU6IEMKZGlmZiAtLWdp dCBhL3Rvb2xzL3B5dGhvbi94ZW4vbG93bGV2ZWwveGMveGMuYyBiL3Rvb2xzL3B5dGhvbi94ZW4v bG93bGV2ZWwveGMveGMuYwppbmRleCAyYzM2ZWIyLi4xZmIzNjRjIDEwMDY0NAotLS0gYS90b29s cy9weXRob24veGVuL2xvd2xldmVsL3hjL3hjLmMKKysrIGIvdG9vbHMvcHl0aG9uL3hlbi9sb3ds ZXZlbC94Yy94Yy5jCkBAIC05MTAsNzcgKzkxMCw2IEBAIHN0YXRpYyBQeU9iamVjdCAqcHl4Y19k b21fc3VwcHJlc3Nfc3B1cmlvdXNfcGFnZV9mYXVsdHMoWGNPYmplY3QgKnNlbGYsCiB9CiAjZW5k aWYgLyogX19pMzg2X18gfHwgX194ODZfNjRfXyAqLwogCi1zdGF0aWMgUHlPYmplY3QgKnB5eGNf aHZtX2J1aWxkKFhjT2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQeU9iamVjdCAqYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmpl Y3QgKmt3ZHMpCi17Ci0gICAgdWludDMyX3QgZG9tOwotICAgIHN0cnVjdCBodm1faW5mb190YWJs ZSAqdmFfaHZtOwotICAgIHVpbnQ4X3QgKnZhX21hcCwgc3VtOwotICAgIGludCBpOwotICAgIGNo YXIgKmltYWdlOwotICAgIGludCBtZW1zaXplLCB0YXJnZXQ9LTEsIHZjcHVzID0gMSwgYWNwaSA9 IDAsIGFwaWMgPSAxOwotICAgIFB5T2JqZWN0ICp2Y3B1X2F2YWlsX2hhbmRsZSA9IE5VTEw7Ci0g ICAgdWludDhfdCB2Y3B1X2F2YWlsWyhIVk1fTUFYX1ZDUFVTICsgNykvOF07Ci0KLSAgICBzdGF0 aWMgY2hhciAqa3dkX2xpc3RbXSA9IHsgImRvbWlkIiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIm1lbXNpemUiLCAiaW1hZ2UiLCAidGFyZ2V0IiwgInZjcHVzIiwgCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJ2Y3B1X2F2YWlsIiwgImFjcGkiLCAiYXBpYyIsIE5V TEwgfTsKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywg Imlpc3xpaU9paSIsIGt3ZF9saXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmZG9tLCAmbWVtc2l6ZSwgJmltYWdlLCAmdGFyZ2V0LCAmdmNwdXMsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2Y3B1X2F2YWlsX2hhbmRsZSwgJmFjcGksICZh cGljKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgbWVtc2V0KHZjcHVfYXZhaWwsIDAs IHNpemVvZih2Y3B1X2F2YWlsKSk7Ci0gICAgdmNwdV9hdmFpbFswXSA9IDE7Ci0gICAgaWYgKCB2 Y3B1X2F2YWlsX2hhbmRsZSAhPSBOVUxMICkKLSAgICB7Ci0gICAgICAgIGlmICggUHlJbnRfQ2hl Y2sodmNwdV9hdmFpbF9oYW5kbGUpICkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQg bG9uZyB2ID0gUHlJbnRfQXNMb25nKHZjcHVfYXZhaWxfaGFuZGxlKTsKLSAgICAgICAgICAgIGZv ciAoIGkgPSAwOyBpIDwgc2l6ZW9mKGxvbmcpOyBpKysgKQotICAgICAgICAgICAgICAgIHZjcHVf YXZhaWxbaV0gPSAodWludDhfdCkodj4+KGkqOCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug aWYgKCBQeUxvbmdfQ2hlY2sodmNwdV9hdmFpbF9oYW5kbGUpICkKLSAgICAgICAgewotICAgICAg ICAgICAgaWYgKCBfUHlMb25nX0FzQnl0ZUFycmF5KChQeUxvbmdPYmplY3QgKil2Y3B1X2F2YWls X2hhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQg Y2hhciAqKXZjcHVfYXZhaWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZW9mKHZjcHVfYXZhaWwpLCAxLCAwKSApCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7 Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBlcnJubyA9 IEVJTlZBTDsKLSAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyh4Y19lcnJvcl9vYmopOwot ICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIHRh cmdldCA9PSAtMSApCi0gICAgICAgIHRhcmdldCA9IG1lbXNpemU7Ci0KLSAgICBpZiAoIHhjX2h2 bV9idWlsZF90YXJnZXRfbWVtKHNlbGYtPnhjX2hhbmRsZSwgZG9tLCBtZW1zaXplLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCBpbWFnZSkgIT0gMCApCi0gICAgICAg IHJldHVybiBweXhjX2Vycm9yX3RvX2V4Y2VwdGlvbihzZWxmLT54Y19oYW5kbGUpOwotCi0gICAg LyogRml4IHVwIHRoZSBIVk0gaW5mbyB0YWJsZS4gKi8KLSAgICB2YV9tYXAgPSB4Y19tYXBfZm9y ZWlnbl9yYW5nZShzZWxmLT54Y19oYW5kbGUsIGRvbSwgWENfUEFHRV9TSVpFLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSFZNX0lORk9fUEZOKTsKLSAgICBpZiAoIHZhX21h cCA9PSBOVUxMICkKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyh4Y19lcnJvcl9v YmopOwotICAgIHZhX2h2bSA9IChzdHJ1Y3QgaHZtX2luZm9fdGFibGUgKikodmFfbWFwICsgSFZN X0lORk9fT0ZGU0VUKTsKLSAgICB2YV9odm0tPmFwaWNfbW9kZSAgICA9IGFwaWM7Ci0gICAgdmFf aHZtLT5ucl92Y3B1cyAgICAgPSB2Y3B1czsKLSAgICBtZW1jcHkodmFfaHZtLT52Y3B1X29ubGlu ZSwgdmNwdV9hdmFpbCwgc2l6ZW9mKHZjcHVfYXZhaWwpKTsKLSAgICBmb3IgKCBpID0gMCwgc3Vt ID0gMDsgaSA8IHZhX2h2bS0+bGVuZ3RoOyBpKysgKQotICAgICAgICBzdW0gKz0gKCh1aW50OF90 ICopdmFfaHZtKVtpXTsKLSAgICB2YV9odm0tPmNoZWNrc3VtIC09IHN1bTsKLSAgICBtdW5tYXAo dmFfbWFwLCBYQ19QQUdFX1NJWkUpOwotCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoInt9Iik7 Ci19Ci0KIHN0YXRpYyBQeU9iamVjdCAqcHl4Y19nbnR0YWJfaHZtX3NlZWQoWGNPYmplY3QgKnNl bGYsCiAJCQkJICAgICAgUHlPYmplY3QgKmFyZ3MsCiAJCQkJICAgICAgUHlPYmplY3QgKmt3ZHMp CkBAIC0yMzY2LDE2ICsyMjk1LDYgQEAgc3RhdGljIFB5TWV0aG9kRGVmIHB5eGNfbWV0aG9kc1td ID0gewogICAgICAgIiBpbWFnZSAgIFtzdHJdOiAgICAgIE5hbWUgb2Yga2VybmVsIGltYWdlIGZp bGUuIE1heSBiZSBnemlwcGVkLlxuIgogICAgICAgIiBjbWRsaW5lIFtzdHIsIG4vYV06IEtlcm5l bCBwYXJhbWV0ZXJzLCBpZiBhbnkuXG5cbiJ9LAogCi0gICAgeyAiaHZtX2J1aWxkIiwgCi0gICAg ICAoUHlDRnVuY3Rpb24pcHl4Y19odm1fYnVpbGQsIAotICAgICAgTUVUSF9WQVJBUkdTIHwgTUVU SF9LRVlXT1JEUywgIlxuIgotICAgICAgIkJ1aWxkIGEgbmV3IEhWTSBndWVzdCBPUy5cbiIKLSAg ICAgICIgZG9tICAgICBbaW50XTogICAgICBJZGVudGlmaWVyIG9mIGRvbWFpbiB0byBidWlsZCBp bnRvLlxuIgotICAgICAgIiBpbWFnZSAgIFtzdHJdOiAgICAgIE5hbWUgb2YgSFZNIGxvYWRlciBp bWFnZSBmaWxlLlxuIgotICAgICAgIiB2Y3B1cyAgIFtpbnQsIDFdOiAgIE51bWJlciBvZiBWaXJ0 dWFsIENQVVMgaW4gZG9tYWluLlxuXG4iCi0gICAgICAiIHZjcHVfYXZhaWwgW2xvbmcsIDFdOiBX aGljaCBWaXJ0dWFsIENQVVMgYXZhaWxhYmxlLlxuXG4iCi0gICAgICAiUmV0dXJuczogW2ludF0g MCBvbiBzdWNjZXNzOyAtMSBvbiBlcnJvci5cbiIgfSwKLQogICAgIHsgImdudHRhYl9odm1fc2Vl ZCIsCiAgICAgICAoUHlDRnVuY3Rpb24pcHl4Y19nbnR0YWJfaHZtX3NlZWQsCiAgICAgICBNRVRI X0tFWVdPUkRTLCAiXG4iCi0tIAoxLjkuNSAoQXBwbGUgR2l0LTUwLjMpCgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlz dApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK