From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20933 invoked by alias); 23 Apr 2008 06:16:58 -0000 Received: (qmail 20892 invoked by uid 22791); 23 Apr 2008 06:16:42 -0000 X-Spam-Check-By: sourceware.org Received: from wf-out-1314.google.com (HELO wf-out-1314.google.com) (209.85.200.170) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 23 Apr 2008 06:16:11 +0000 Received: by wf-out-1314.google.com with SMTP id 29so1928532wff.24 for ; Tue, 22 Apr 2008 23:16:09 -0700 (PDT) Received: by 10.142.178.13 with SMTP id a13mr75512wff.51.1208931369191; Tue, 22 Apr 2008 23:16:09 -0700 (PDT) Received: by 10.142.111.16 with HTTP; Tue, 22 Apr 2008 23:16:09 -0700 (PDT) Message-ID: Date: Wed, 23 Apr 2008 08:55:00 -0000 From: Tea To: "Michael Snyder" , "Thiago Jung Bauermann" Subject: GDB record patch 0.1.3.1 for GDB-6.8 release Cc: gdb-patches@sourceware.org MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_4705_28736715.1208931369182" X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2008-04/txt/msg00502.txt.bz2 ------=_Part_4705_28736715.1208931369182 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 274 Hi Michael and Thiago, most part of GDB record patch 0.1.3.1 is same with GDB record patch 0.1.3 (http://sourceware.org/ml/gdb-patches/2008-04/msg00300.html). I just did some change according to your mail. I must express the particularly grateful to you. Thanks, teawater ------=_Part_4705_28736715.1208931369182 Content-Type: text/x-patch; name=gdb-6.8-record-0.1.3.1.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_ffdig5dq0 Content-Disposition: attachment; filename=gdb-6.8-record-0.1.3.1.patch Content-length: 226652 UGF0Y2ggdG8gbWFrZSBtYWtlIEkzODYtTGludXggR0RCIHN1cHBvcnQgUmV2 ZXJzaWJsZSBEZWJ1Z2dpbmcgKGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJv amVjdHMvcmVjb3JkLykKLS0tCiBNYWtlZmlsZS5pbiAgICAgICB8ICAgIDYg CiBnZGJhcmNoLmMgICAgICAgICB8ICAgNDYgCiBnZGJhcmNoLmggICAgICAg ICB8ICAgMTMgCiBpMzg2LWxpbnV4LXRkZXAuYyB8IDI1MzMgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogaTM4 Ni10ZGVwLmMgICAgICAgfCAyNzY5ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQogaTM4Ni10ZGVwLmgg ICAgICAgfCAgICAzIAogaW5mY21kLmMgICAgICAgICAgfCAgIDQ3IAogaW5m ZXJpb3IuaCAgICAgICAgfCAgICA2IAogaW5mcnVuLmMgICAgICAgICAgfCAg MTMwICsrCiBtaXBzLXRkZXAuYyAgICAgICB8ICA3MzQgKysrKysrKysrKysr KysKIHJlY29yZC5jICAgICAgICAgIHwgIDYwNiArKysrKysrKysrKwogcmVj b3JkLmggICAgICAgICAgfCAgIDgxICsKIHRhcmdldC5jICAgICAgICAgIHwg ICAxNSAKIHRhcmdldC5oICAgICAgICAgIHwgICAgMyAKIDE0IGZpbGVzIGNo YW5nZWQsIDY4NTkgaW5zZXJ0aW9ucygrKSwgMTMzIGRlbGV0aW9ucygtKQoK LS0tIGEvZ2RiL2dkYmFyY2guYworKysgYi9nZGIvZ2RiYXJjaC5jCkBAIC0y MzAsNiArMjMwLDggQEAgc3RydWN0IGdkYmFyY2gKICAgZ2RiYXJjaF9jb3Jl X3JlYWRfZGVzY3JpcHRpb25fZnR5cGUgKmNvcmVfcmVhZF9kZXNjcmlwdGlv bjsKICAgZ2RiYXJjaF9zdGF0aWNfdHJhbnNmb3JtX25hbWVfZnR5cGUgKnN0 YXRpY190cmFuc2Zvcm1fbmFtZTsKICAgaW50IHNvZnVuX2FkZHJlc3NfbWF5 YmVfbWlzc2luZzsKKyAgZ2RiYXJjaF9yZWNvcmRfZnR5cGUgKnJlY29yZDsK KyAgZ2RiYXJjaF9yZWNvcmRfZGFzbV9mdHlwZSAqcmVjb3JkX2Rhc207CiB9 OwogCiAKQEAgLTM1Miw2ICszNTQsOCBAQCBzdHJ1Y3QgZ2RiYXJjaCBzdGFy dHVwX2dkYmFyY2ggPQogICAwLCAgLyogY29yZV9yZWFkX2Rlc2NyaXB0aW9u ICovCiAgIDAsICAvKiBzdGF0aWNfdHJhbnNmb3JtX25hbWUgKi8KICAgMCwg IC8qIHNvZnVuX2FkZHJlc3NfbWF5YmVfbWlzc2luZyAqLworICBOVUxMLAor ICBOVUxMLAogICAvKiBzdGFydHVwX2dkYmFyY2goKSAqLwogfTsKIApAQCAt MzM5MSw2ICszMzk1LDQ4IEBAIGRlcHJlY2F0ZWRfY3VycmVudF9nZGJhcmNo X3NlbGVjdF9oYWNrICgKICAgcmVpbml0X2ZyYW1lX2NhY2hlICgpOwogfQog CisKK2ludAorZ2RiYXJjaF9yZWNvcmRfcCAoc3RydWN0IGdkYmFyY2ggKmdk YmFyY2gpCit7CisgIGdkYl9hc3NlcnQgKGdkYmFyY2ggIT0gTlVMTCk7Cisg IHJldHVybiAoZ2RiYXJjaC0+cmVjb3JkICE9IE5VTEwpOworfQorCitpbnQK K2dkYmFyY2hfcmVjb3JkIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCkKK3sK KyAgZ2RiX2Fzc2VydCAoZ2RiYXJjaCAhPSBOVUxMKTsKKyAgZ2RiX2Fzc2Vy dCAoZ2RiYXJjaC0+cmVjb3JkICE9IE5VTEwpOworICBpZiAoZ2RiYXJjaF9k ZWJ1ZyA+PSAyKQorICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxv ZywgImdkYmFyY2hfcmVjb3JkIGNhbGxlZFxuIik7CisgIHJldHVybiAoZ2Ri YXJjaC0+cmVjb3JkIChnZGJhcmNoKSk7Cit9CisKK3ZvaWQKK3NldF9nZGJh cmNoX3JlY29yZCAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIGdkYmFyY2hf cmVjb3JkX2Z0eXBlICogcmVjb3JkKQoreworICBnZGJhcmNoLT5yZWNvcmQg PSByZWNvcmQ7Cit9CisKK3ZvaWQKK2dkYmFyY2hfcmVjb3JkX2Rhc20gKHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoKQoreworICBnZGJfYXNzZXJ0IChnZGJh cmNoICE9IE5VTEwpOworICBnZGJfYXNzZXJ0IChnZGJhcmNoLT5yZWNvcmRf ZGFzbSAhPSBOVUxMKTsKKyAgaWYgKGdkYmFyY2hfZGVidWcgPj0gMikKKyAg ICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJnZGJhcmNoX3Jl Y29yZF9kYXNtIGNhbGxlZFxuIik7CisgIGdkYmFyY2gtPnJlY29yZF9kYXNt IChnZGJhcmNoKTsKK30KKwordm9pZAorc2V0X2dkYmFyY2hfcmVjb3JkX2Rh c20gKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAorCQkJIGdkYmFyY2hfcmVj b3JkX2Rhc21fZnR5cGUgKiByZWNvcmRfZGFzbSkKK3sKKyAgZ2RiYXJjaC0+ cmVjb3JkX2Rhc20gPSByZWNvcmRfZGFzbTsKK30KKworCiBleHRlcm4gdm9p ZCBfaW5pdGlhbGl6ZV9nZGJhcmNoICh2b2lkKTsKIAogdm9pZAotLS0gYS9n ZGIvZ2RiYXJjaC5oCisrKyBiL2dkYi9nZGJhcmNoLmgKQEAgLTkwMCw0ICs5 MDAsMTcgQEAgZXh0ZXJuIGludCBnZGJhcmNoX2RlYnVnOwogCiBleHRlcm4g dm9pZCBnZGJhcmNoX2R1bXAgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBz dHJ1Y3QgdWlfZmlsZSAqZmlsZSk7CiAKKworZXh0ZXJuIGludCBnZGJhcmNo X3JlY29yZF9wIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCk7Cit0eXBlZGVm IGludCAoZ2RiYXJjaF9yZWNvcmRfZnR5cGUpIChzdHJ1Y3QgZ2RiYXJjaCAq Z2RiYXJjaCk7CitleHRlcm4gaW50IGdkYmFyY2hfcmVjb3JkIChzdHJ1Y3Qg Z2RiYXJjaCAqZ2RiYXJjaCk7CitleHRlcm4gdm9pZCBzZXRfZ2RiYXJjaF9y ZWNvcmQgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAorCQkJCWdkYmFyY2hf cmVjb3JkX2Z0eXBlICogcmVjb3JkKTsKKwordHlwZWRlZiB2b2lkIChnZGJh cmNoX3JlY29yZF9kYXNtX2Z0eXBlKSAoc3RydWN0IGdkYmFyY2ggKmdkYmFy Y2gpOworZXh0ZXJuIHZvaWQgZ2RiYXJjaF9yZWNvcmRfZGFzbSAoc3RydWN0 IGdkYmFyY2ggKmdkYmFyY2gpOworZXh0ZXJuIHZvaWQgc2V0X2dkYmFyY2hf cmVjb3JkX2Rhc20gKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLAorCQkJCSAg ICAgZ2RiYXJjaF9yZWNvcmRfZGFzbV9mdHlwZSAqIHJlY29yZF9kYXNtKTsK KworCiAjZW5kaWYKLS0tIGEvZ2RiL2kzODYtbGludXgtdGRlcC5jCisrKyBi L2dkYi9pMzg2LWxpbnV4LXRkZXAuYwpAQCAtMzUsNiArMzUsOSBAQAogI2lu Y2x1ZGUgInNvbGliLXN2cjQuaCIKICNpbmNsdWRlICJzeW10YWIuaCIKIAor I2luY2x1ZGUgInJlY29yZC5oIgorI2luY2x1ZGUgPHN0ZGludC5oPgorCiAv KiBSZXR1cm4gdGhlIG5hbWUgb2YgcmVnaXN0ZXIgUkVHLiAgKi8KIAogc3Rh dGljIGNvbnN0IGNoYXIgKgpAQCAtMzM1LDYgKzMzOCwyNTMzIEBAIGkzODZf bGludXhfd3JpdGVfcGMgKHN0cnVjdCByZWdjYWNoZSAqcmUKICAgICAgcmVz dGFydGVkLiAgKi8KICAgcmVnY2FjaGVfY29va2VkX3dyaXRlX3Vuc2lnbmVk IChyZWdjYWNoZSwgSTM4Nl9MSU5VWF9PUklHX0VBWF9SRUdOVU0sIC0xKTsK IH0KKworCisvKiBUaGVzZSBtYWNyb3MgYXJlIHRoZSBzaXplIG9mIHRoZSB0 eXBlIHRoYXQgd2lsbCBiZSB1c2UgaW4gc3lzdGVtIGNhbGwuIFRoZSB2YWx1 ZXMgb2YKKyAgIHRoZXNlIG1hY3JvcyBhcmUgZ290dGVuIGZyb20gTGludXgg S2VybmVsIHNvdXJjZS4gKi8KKyNkZWZpbmUgSTM4Nl9SRUNPUkRfU0laRV9f b2xkX2tlcm5lbF9zdGF0CTMyCisjZGVmaW5lIEkzODZfUkVDT1JEX1NJWkVf dG1zCQkJMTYKKyNkZWZpbmUgSTM4Nl9SRUNPUkRfU0laRV9sb2ZmX3QJCQk4 CisjZGVmaW5lIEkzODZfUkVDT1JEX1NJWkVfZmxvY2sJCQkxNgorI2RlZmlu ZSBJMzg2X1JFQ09SRF9TSVpFX29sZG9sZF91dHNuYW1lCQk0NQorI2RlZmlu ZSBJMzg2X1JFQ09SRF9TSVpFX3VzdGF0CQkJMjAKKyNkZWZpbmUgSTM4Nl9S RUNPUkRfU0laRV9vbGRfc2lnYWN0aW9uCQkxNDAKKyNkZWZpbmUgSTM4Nl9S RUNPUkRfU0laRV9vbGRfc2lnc2V0X3QJCTEyOAorI2RlZmluZSBJMzg2X1JF Q09SRF9TSVpFX3JsaW1pdAkJCTgKKyNkZWZpbmUgSTM4Nl9SRUNPUkRfU0la RV9ydXNhZ2UJCQk3MgorI2RlZmluZSBJMzg2X1JFQ09SRF9TSVpFX3RpbWV2 YWwJCTgKKyNkZWZpbmUgSTM4Nl9SRUNPUkRfU0laRV90aW1lem9uZQkJOAor I2RlZmluZSBJMzg2X1JFQ09SRF9TSVpFX29sZF9naWRfdAkJMgorI2RlZmlu ZSBJMzg2X1JFQ09SRF9TSVpFX29sZF91aWRfdAkJMgorI2RlZmluZSBJMzg2 X1JFQ09SRF9TSVpFX2ZkX3NldAkJCTEyOAorI2RlZmluZSBJMzg2X1JFQ09S RF9TSVpFX2RpcmVudAkJCTI2OAorI2RlZmluZSBJMzg2X1JFQ09SRF9TSVpF X2RpcmVudDY0CQkyNzYKKyNkZWZpbmUgSTM4Nl9SRUNPUkRfU0laRV9zdGF0 ZnMJCQk2NAorI2RlZmluZSBJMzg2X1JFQ09SRF9TSVpFX3N0YXRmczY0CQk4 NAorI2RlZmluZSBJMzg2X1JFQ09SRF9TSVpFX3NvY2thZGRyCQkxNgorI2Rl ZmluZSBJMzg2X1JFQ09SRF9TSVpFX2ludAkJCTQKKyNkZWZpbmUgSTM4Nl9S RUNPUkRfU0laRV9sb25nCQkJNAorI2RlZmluZSBJMzg2X1JFQ09SRF9TSVpF X3Vsb25nCQkJNAorI2RlZmluZSBJMzg2X1JFQ09SRF9TSVpFX21zZ2hkcgkJ CTI4CisjZGVmaW5lIEkzODZfUkVDT1JEX1NJWkVfaXRpbWVydmFsCQkxNgor I2RlZmluZSBJMzg2X1JFQ09SRF9TSVpFX3N0YXQJCQk4OAorI2RlZmluZSBJ Mzg2X1JFQ09SRF9TSVpFX29sZF91dHNuYW1lCQkzMjUKKyNkZWZpbmUgSTM4 Nl9SRUNPUkRfU0laRV9ydXNhZ2UJCQk3MgorI2RlZmluZSBJMzg2X1JFQ09S RF9TSVpFX3N5c2luZm8JCTY0CisjZGVmaW5lIEkzODZfUkVDT1JEX1NJWkVf bXNxaWRfZHMJCTg4CisjZGVmaW5lIEkzODZfUkVDT1JEX1NJWkVfc2htaWRf ZHMJCTg0CisjZGVmaW5lIEkzODZfUkVDT1JEX1NJWkVfbmV3X3V0c25hbWUJ CTM5MAorI2RlZmluZSBJMzg2X1JFQ09SRF9TSVpFX3RpbWV4CQkJMTI4Cisj ZGVmaW5lIEkzODZfUkVDT1JEX1NJWkVfbWVtX2RxaW5mbwkJMjQKKyNkZWZp bmUgSTM4Nl9SRUNPUkRfU0laRV9pZl9kcWJsawkJNjgKKyNkZWZpbmUgSTM4 Nl9SRUNPUkRfU0laRV9mc19xdW90YV9zdGF0CQk2OAorI2RlZmluZSBJMzg2 X1JFQ09SRF9TSVpFX3RpbWVzcGVjCQk4CisjZGVmaW5lIEkzODZfUkVDT1JE X1NJWkVfcG9sbGZkCQkJOAorI2RlZmluZSBJMzg2X1JFQ09SRF9TSVpFX05G U19GSFNJWkUJCTMyCisjZGVmaW5lIEkzODZfUkVDT1JEX1NJWkVfa25mc2Rf ZmgJCTEzMgorI2RlZmluZSBJMzg2X1JFQ09SRF9TSVpFX1RBU0tfQ09NTV9M RU4JCTE2CisjZGVmaW5lIEkzODZfUkVDT1JEX1NJWkVfc2lnYWN0aW9uCQkx NDAKKyNkZWZpbmUgSTM4Nl9SRUNPUkRfU0laRV9zaWdzZXRfdAkJOAorI2Rl ZmluZSBJMzg2X1JFQ09SRF9TSVpFX3NpZ2luZm9fdAkJMTI4CisjZGVmaW5l IEkzODZfUkVDT1JEX1NJWkVfY2FwX3VzZXJfZGF0YV90CTEyCisjZGVmaW5l IEkzODZfUkVDT1JEX1NJWkVfc3RhY2tfdAkJMTIKKyNkZWZpbmUgSTM4Nl9S RUNPUkRfU0laRV9vZmZfdAkJCUkzODZfUkVDT1JEX1NJWkVfbG9uZworI2Rl ZmluZSBJMzg2X1JFQ09SRF9TSVpFX3N0YXQ2NAkJCTk2CisjZGVmaW5lIEkz ODZfUkVDT1JEX1NJWkVfZ2lkX3QJCQkyCisjZGVmaW5lIEkzODZfUkVDT1JE X1NJWkVfdWlkX3QJCQkyCisjZGVmaW5lIEkzODZfUkVDT1JEX1NJWkVfdWlk X3QJCQkyCisjZGVmaW5lIEkzODZfUkVDT1JEX1NJWkVfUEFHRV9TSVpFCQk0 MDk2CisjZGVmaW5lIEkzODZfUkVDT1JEX1NJWkVfZmxvY2s2NAkJMjQKKyNk ZWZpbmUgSTM4Nl9SRUNPUkRfU0laRV91c2VyX2Rlc2MJCTE2CisjZGVmaW5l IEkzODZfUkVDT1JEX1NJWkVfaW9fZXZlbnQJCTMyCisjZGVmaW5lIEkzODZf UkVDT1JEX1NJWkVfaW9jYgkJCTY0CisjZGVmaW5lIEkzODZfUkVDT1JEX1NJ WkVfZXBvbGxfZXZlbnQJCTEyCisjZGVmaW5lIEkzODZfUkVDT1JEX1NJWkVf aXRpbWVyc3BlYwkJKEkzODZfUkVDT1JEX1NJWkVfdGltZXNwZWMgKiAyKQor I2RlZmluZSBJMzg2X1JFQ09SRF9TSVpFX21xX2F0dHIJCTMyCisjZGVmaW5l IEkzODZfUkVDT1JEX1NJWkVfc2lnaW5mbwkJMTI4CisjZGVmaW5lIEkzODZf UkVDT1JEX1NJWkVfcnVzYWdlCQkJNzIKKworLyogVGhlc2UgbWFjcm9zIGFy ZSB0aGUgdmFsdWVzIG9mIHRoZSBmaXJzdCBhcmd1bWVudCBvZiBzeXN0ZW0g Y2FsbAorICAgInN5c19wdHJhY2UiLiBUaGUgdmFsdWVzIG9mIHRoZXNlIG1h Y3JvcyBhcmUgZ290dGVuIGZyb20gTGludXggS2VybmVsCisgICBzb3VyY2Uu ICovCisjZGVmaW5lIEkzODZfUkVDT1JEX1BUUkFDRV9QRUVLVEVYVAkxCisj ZGVmaW5lIEkzODZfUkVDT1JEX1BUUkFDRV9QRUVLREFUQQkyCisjZGVmaW5l IEkzODZfUkVDT1JEX1BUUkFDRV9QRUVLVVNSCTMKKworLyogVGhlc2UgbWFj cm9zIGFyZSB0aGUgdmFsdWVzIG9mIHRoZSBzZWNvbmQgYXJndW1lbnQgb2Yg c3lzdGVtIGNhbGwKKyAgICJzeXNfaW9jdGwiLiBUaGUgdmFsdWVzIG9mIHRo ZXNlIG1hY3JvcyBhcmUgZ290dGVuIGZyb20gTGludXggS2VybmVsCisgICBz b3VyY2UuICovCisjZGVmaW5lIEkzODZfUkVDT1JEX0ZJT05DTEVYCTB4NTQ1 MAorI2RlZmluZSBJMzg2X1JFQ09SRF9GSU9DTEVYCTB4NTQ1MQorI2RlZmlu ZSBJMzg2X1JFQ09SRF9GSU9OQklPCTB4NTQyMQorI2RlZmluZSBJMzg2X1JF Q09SRF9GSU9BU1lOQwkweDU0NTIKKyNkZWZpbmUgSTM4Nl9SRUNPUkRfRklP UVNJWkUJMHg1NDYwCisKKy8qIFRoZXNlIG1hY3JvcyBhcmUgdGhlIHZhbHVl cyBvZiB0aGUgZmlyc3QgYXJndW1lbnQgb2Ygc3lzdGVtIGNhbGwKKyAgICJz eXNfc29ja2V0Y2FsbCIuIFRoZSB2YWx1ZXMgb2YgdGhlc2UgbWFjcm9zIGFy ZSBnb3R0ZW4gZnJvbSBMaW51eCBLZXJuZWwKKyAgIHNvdXJjZS4gKi8KKyNk ZWZpbmUgSTM4Nl9SRUNPUkRfU1lTX1NPQ0tFVAkJMQorI2RlZmluZSBJMzg2 X1JFQ09SRF9TWVNfQklORAkJMgorI2RlZmluZSBJMzg2X1JFQ09SRF9TWVNf Q09OTkVDVAkzCisjZGVmaW5lIEkzODZfUkVDT1JEX1NZU19MSVNURU4JCTQK KyNkZWZpbmUgSTM4Nl9SRUNPUkRfU1lTX0FDQ0VQVAkJNQorI2RlZmluZSBJ Mzg2X1JFQ09SRF9TWVNfR0VUU09DS05BTUUJNgorI2RlZmluZSBJMzg2X1JF Q09SRF9TWVNfR0VUUEVFUk5BTUUJNworI2RlZmluZSBJMzg2X1JFQ09SRF9T WVNfU09DS0VUUEFJUgk4CisjZGVmaW5lIEkzODZfUkVDT1JEX1NZU19TRU5E CQk5CisjZGVmaW5lIEkzODZfUkVDT1JEX1NZU19SRUNWCQkxMAorI2RlZmlu ZSBJMzg2X1JFQ09SRF9TWVNfU0VORFRPCQkxMQorI2RlZmluZSBJMzg2X1JF Q09SRF9TWVNfUkVDVkZST00JMTIKKyNkZWZpbmUgSTM4Nl9SRUNPUkRfU1lT X1NIVVRET1dOCTEzCisjZGVmaW5lIEkzODZfUkVDT1JEX1NZU19TRVRTT0NL T1BUCTE0CisjZGVmaW5lIEkzODZfUkVDT1JEX1NZU19HRVRTT0NLT1BUCTE1 CisjZGVmaW5lIEkzODZfUkVDT1JEX1NZU19TRU5ETVNHCTE2CisjZGVmaW5l IEkzODZfUkVDT1JEX1NZU19SRUNWTVNHCTE3CisKKy8qIFRoZXNlIG1hY3Jv cyBhcmUgdGhlIHZhbHVlcyBvZiB0aGUgZmlyc3QgYXJndW1lbnQgb2Ygc3lz dGVtIGNhbGwKKyAgICJzeXNfaXBjIi4gVGhlIHZhbHVlcyBvZiB0aGVzZSBt YWNyb3MgYXJlIGdvdHRlbiBmcm9tIExpbnV4IEtlcm5lbCBzb3VyY2UuICov CisjZGVmaW5lIEkzODZfUkVDT1JEX1NFTU9QCQkxCisjZGVmaW5lIEkzODZf UkVDT1JEX1NFTUdFVAkJMgorI2RlZmluZSBJMzg2X1JFQ09SRF9TRU1DVEwJ CTMKKyNkZWZpbmUgSTM4Nl9SRUNPUkRfU0VNVElNRURPUAkJNAorI2RlZmlu ZSBJMzg2X1JFQ09SRF9NU0dTTkQJCTExCisjZGVmaW5lIEkzODZfUkVDT1JE X01TR1JDVgkJMTIKKyNkZWZpbmUgSTM4Nl9SRUNPUkRfTVNHR0VUCQkxMwor I2RlZmluZSBJMzg2X1JFQ09SRF9NU0dDVEwJCTE0CisjZGVmaW5lIEkzODZf UkVDT1JEX1NITUFUCQkyMQorI2RlZmluZSBJMzg2X1JFQ09SRF9TSE1EVAkJ MjIKKyNkZWZpbmUgSTM4Nl9SRUNPUkRfU0hNR0VUCQkyMworI2RlZmluZSBJ Mzg2X1JFQ09SRF9TSE1DVEwJCTI0CisKKy8qIFRoZXNlIG1hY3JvcyBhcmUg dGhlIHZhbHVlcyBvZiB0aGUgZmlyc3QgYXJndW1lbnQgb2Ygc3lzdGVtIGNh bGwKKyAgICJzeXNfcXVvdGFjdGwiLiBUaGUgdmFsdWVzIG9mIHRoZXNlIG1h Y3JvcyBhcmUgZ290dGVuIGZyb20gTGludXggS2VybmVsCisgICBzb3VyY2Uu ICovCisjZGVmaW5lIEkzODZfUkVDT1JEX1FfR0VURk1UCQkweDgwMDAwNAor I2RlZmluZSBJMzg2X1JFQ09SRF9RX0dFVElORk8JCTB4ODAwMDA1CisjZGVm aW5lIEkzODZfUkVDT1JEX1FfR0VUUVVPVEEJCTB4ODAwMDA3CisjZGVmaW5l IEkzODZfUkVDT1JEX1FfWEdFVFFTVEFUCSgoJzUnPDw4KSsoNSkpCisjZGVm aW5lIEkzODZfUkVDT1JEX1FfWEdFVFFVT1RBCSgoJzMnPDw4KSsoMykpCisK Ky8qIFBhcnNlIHRoZSBhcmd1bWVudHMgb2YgY3VycmVudCBzeXN0ZW0gY2Fs bCBpbnN0cnVjdGlvbiBhbmQgcmVjb3JkIHRoZQorICAgdmFsdWVzIG9mIHRo ZSByZWdpc3RlcnMgYW5kIG1lbW9yeSB0aGF0IHdpbGwgYmUgY2hhbmdlZCBp biBjdXJyZW50IHN5c3RlbQorICAgY2FsbCBpbnN0cnVjdGlvbiB0byAicmVj b3JkX2FyY2hfbGlzdCIuIFRoaXMgaW5zdHJ1Y3Rpb24gaXMgImludCAweDgw IiAoTGludXgKKyAgIEtlcm5lbDIuNCkgb3IgInN5c2VudGVyIiAoTGludXgg S2VybmVsIDIuNikuCisgICBSZXR1cm4gLTEgaWYgc29tZXRoaW5nIHdyb25n LiAqLworc3RhdGljIGludAoraTM4Nl9saW51eF9pbnR4ODBfc3lzZW50ZXJf cmVjb3JkICh2b2lkKQoreworICB1aW50MzJfdCB0bXB1MzI7CisKKyAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FQVhfUkVH TlVNLCAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICBzd2l0Y2ggKHRtcHUz MikKKyAgICB7CisgICAgICAvKiBzeXNfcmVzdGFydF9zeXNjYWxsICovCisg ICAgY2FzZSAwOgorICAgICAgeworCWludCBxOworCXRhcmdldF90ZXJtaW5h bF9vdXJzICgpOworCXEgPQorCSAgeXF1ZXJ5IChfCisJCSAgKCJUaGUgbmV4 dCBpbnN0cnVjdGlvbiBpcyBzeXNjYWxsIHJlc3RhcnQuIEl0IHdpbGwgcmVz dGFydCB0aGUgY29tcHV0ZXIuIERvIHlvdSB3YW50IHRvIHBhdXNlIHRoZSBw cm9ncmFtLiIpKTsKKwl0YXJnZXRfdGVybWluYWxfaW5mZXJpb3IgKCk7CisJ aWYgKHEpCisJICB7CisJICAgIHJldHVybiAoMSk7CisJICB9CisgICAgICB9 CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2V4aXQgKi8KKyAgICBj YXNlIDE6CisgICAgICB7CisJaW50IHE7CisJdGFyZ2V0X3Rlcm1pbmFsX291 cnMgKCk7CisJcSA9CisJICB5cXVlcnkgKF8KKwkJICAoIlRoZSBuZXh0IGlu c3RydWN0aW9uIGlzIHN5c2NhbGwgZXhpdC4gSXQgd2lsbCBtYWtlIHRoZSBw cm9ncmFtIGV4aXQuIERvIHlvdSB3YW50IHRvIHBhdXNlIHRoZSBwcm9ncmFt LiIpKTsKKwl0YXJnZXRfdGVybWluYWxfaW5mZXJpb3IgKCk7CisJaWYgKHEp CisJICB7CisJICAgIHJldHVybiAoMSk7CisJICB9CisgICAgICB9CisgICAg ICBicmVhazsKKworICAgICAgLyogc3lzX2ZvcmsgKi8KKyAgICBjYXNlIDI6 CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3JlYWQgKi8KKyAgICBj YXNlIDM6CisgICAgICB7CisJdWludDMyX3QgYWRkciwgY291bnQ7CisJcmVn Y2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FQ1hfUkVH TlVNLAorCQkJICAgKGdkYl9ieXRlICopICYgYWRkcik7CisJcmVnY2FjaGVf cmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FRFhfUkVHTlVNLAor CQkJICAgKGdkYl9ieXRlICopICYgY291bnQpOworCWlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKGFkZHIsIGNvdW50KSkKKwkgIHsKKwkgICAgcmV0 dXJuICgtMSk7CisJICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAg ICAgLyogc3lzX3dyaXRlICovCisgICAgY2FzZSA0OgorICAgICAgLyogc3lz X29wZW4gKi8KKyAgICBjYXNlIDU6CisgICAgICAvKiBzeXNfY2xvc2UgKi8K KyAgICBjYXNlIDY6CisgICAgICAvKiBzeXNfd2FpdHBpZCAqLworICAgIGNh c2UgNzoKKyAgICAgIC8qIHN5c19jcmVhdCAqLworICAgIGNhc2UgODoKKyAg ICAgIC8qIHN5c19saW5rICovCisgICAgY2FzZSA5OgorICAgICAgLyogc3lz X3VubGluayAqLworICAgIGNhc2UgMTA6CisgICAgICAvKiBzeXNfZXhlY3Zl ICovCisgICAgY2FzZSAxMToKKyAgICAgIC8qIHN5c19jaGRpciAqLworICAg IGNhc2UgMTI6CisgICAgICAvKiBzeXNfdGltZSAqLworICAgIGNhc2UgMTM6 CisgICAgICAvKiBzeXNfbWtub2QgKi8KKyAgICBjYXNlIDE0OgorICAgICAg Lyogc3lzX2NobW9kICovCisgICAgY2FzZSAxNToKKyAgICAgIC8qIHN5c19s Y2hvd24xNiAqLworICAgIGNhc2UgMTY6CisgICAgICAvKiBzeXNfbmlfc3lz Y2FsbCAqLworICAgIGNhc2UgMTc6CisgICAgICBicmVhazsKKworICAgICAg Lyogc3lzX3N0YXQgKi8KKyAgICBjYXNlIDE4OgorICAgICAgLyogc3lzX2Zz dGF0ICovCisgICAgY2FzZSAyODoKKyAgICAgIC8qIHN5c19sc3RhdCAqLwor ICAgIGNhc2UgODQ6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3Jk X3JlZ2NhY2hlLCBJMzg2X0VDWF9SRUdOVU0sCisJCQkgKGdkYl9ieXRlICop ICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKHRtcHUzMiwgSTM4Nl9SRUNPUkRfU0laRV9fb2xkX2tlcm5lbF9zdGF0 KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKwor ICAgICAgLyogc3lzX2xzZWVrICovCisgICAgY2FzZSAxOToKKyAgICAgIC8q IHN5c19nZXRwaWQgKi8KKyAgICBjYXNlIDIwOgorICAgICAgLyogc3lzX21v dW50ICovCisgICAgY2FzZSAyMToKKyAgICAgIC8qIHN5c19vbGR1bW91bnQg Ki8KKyAgICBjYXNlIDIyOgorICAgICAgLyogc3lzX3NldHVpZDE2ICovCisg ICAgY2FzZSAyMzoKKyAgICAgIC8qIHN5c19nZXR1aWQxNiAqLworICAgIGNh c2UgMjQ6CisgICAgICAvKiBzeXNfc3RpbWUgKi8KKyAgICBjYXNlIDI1Ogor ICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19wdHJhY2UgKi8KKyAgICBj YXNlIDI2OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdj YWNoZSwgSTM4Nl9FQlhfUkVHTlVNLAorCQkJIChnZGJfYnl0ZSAqKSAmIHRt cHUzMik7CisgICAgICBpZiAodG1wdTMyID09IEkzODZfUkVDT1JEX1BUUkFD RV9QRUVLVEVYVAorCSAgfHwgdG1wdTMyID09IEkzODZfUkVDT1JEX1BUUkFD RV9QRUVLREFUQQorCSAgfHwgdG1wdTMyID09IEkzODZfUkVDT1JEX1BUUkFD RV9QRUVLVVNSKQorCXsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRf cmVnY2FjaGUsIEkzODZfRVNJX1JFR05VTSwKKwkJCSAgICAgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKHRtcHUzMiwgNCkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsK KwkgICAgfQorCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfYWxh cm0gKi8KKyAgICBjYXNlIDI3OgorICAgICAgLyogc3lzX3BhdXNlICovCisg ICAgY2FzZSAyOToKKyAgICAgIC8qIHN5c191dGltZSAgICAqLworICAgIGNh c2UgMzA6CisgICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLworICAgIGNhc2Ug MzE6CisgICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLworICAgIGNhc2UgMzI6 CisgICAgICAvKiBzeXNfYWNjZXNzICovCisgICAgY2FzZSAzMzoKKyAgICAg IC8qIHN5c19uaWNlICovCisgICAgY2FzZSAzNDoKKyAgICAgIC8qIHN5c19u aV9zeXNjYWxsICovCisgICAgY2FzZSAzNToKKyAgICAgIC8qIHN5c19zeW5j ICovCisgICAgY2FzZSAzNjoKKyAgICAgIC8qIHN5c19raWxsICovCisgICAg Y2FzZSAzNzoKKyAgICAgIC8qIHN5c19yZW5hbWUgKi8KKyAgICBjYXNlIDM4 OgorICAgICAgLyogc3lzX21rZGlyICovCisgICAgY2FzZSAzOToKKyAgICAg IC8qIHN5c19ybWRpciAqLworICAgIGNhc2UgNDA6CisgICAgICAvKiBzeXNf ZHVwICovCisgICAgY2FzZSA0MToKKyAgICAgIC8qIHN5c19waXBlICovCisg ICAgY2FzZSA0MjoKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfdGlt ZXMgKi8KKyAgICBjYXNlIDQzOgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FQlhfUkVHTlVNLAorCQkJIChnZGJf Ynl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICh0bXB1MzIsIEkzODZfUkVDT1JEX1NJWkVfdG1zKSkKKwl7 CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAg Lyogc3lzX25pX3N5c2NhbGwgKi8KKyAgICBjYXNlIDQ0OgorICAgICAgLyog c3lzX2JyayAqLworICAgIGNhc2UgNDU6CisgICAgICAvKiBzeXNfc2V0Z2lk MTYgKi8KKyAgICBjYXNlIDQ2OgorICAgICAgLyogc3lzX2dldGdpZDE2ICov CisgICAgY2FzZSA0NzoKKyAgICAgIC8qIHN5c19zaWduYWwgKi8KKyAgICBj YXNlIDQ4OgorICAgICAgLyogc3lzX2dldGV1aWQxNiAqLworICAgIGNhc2Ug NDk6CisgICAgICAvKiBzeXNfZ2V0ZWdpZDE2ICovCisgICAgY2FzZSA1MDoK KyAgICAgIC8qIHN5c19hY2N0ICovCisgICAgY2FzZSA1MToKKyAgICAgIC8q IHN5c191bW91bnQgKi8KKyAgICBjYXNlIDUyOgorICAgICAgLyogc3lzX25p X3N5c2NhbGwgKi8KKyAgICBjYXNlIDUzOgorICAgICAgYnJlYWs7CisKKyAg ICAgIC8qIHN5c19pb2N0bCAqLworICAgIGNhc2UgNTQ6CisgICAgICAvKiBY WFggKi8KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2Fj aGUsIEkzODZfRUNYX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1 MzIpOworICAgICAgc3dpdGNoICh0bXB1MzIpCisJeworCWNhc2UgSTM4Nl9S RUNPUkRfRklPQ0xFWDoKKwljYXNlIEkzODZfUkVDT1JEX0ZJT05DTEVYOgor CWNhc2UgSTM4Nl9SRUNPUkRfRklPTkJJTzoKKwljYXNlIEkzODZfUkVDT1JE X0ZJT0FTWU5DOgorCSAgYnJlYWs7CisJY2FzZSBJMzg2X1JFQ09SRF9GSU9R U0laRToKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUs IEkzODZfRURYX1JFR05VTSwKKwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUz MiwgSTM4Nl9SRUNPUkRfU0laRV9sb2ZmX3QpKQorCSAgICB7CisJICAgICAg cmV0dXJuICgtMSk7CisJICAgIH0KKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJ ICBwcmludGZfdW5maWx0ZXJlZCAoXworCQkJICAgICAoInJlY29yZDogcmVj b3JkIGFuZCByZXZlcnNlIGZ1bmN0aW9uIGRvbid0IHN1cHBvcnQgaW9jdGwg cmVxdWVzdCAweCUwOHhcbiIpLAorCQkJICAgICB0bXB1MzIpOworCSAgcmV0 dXJuICgtMSk7CisJICBicmVhazsKKwl9CisgICAgICBicmVhazsKKworICAg ICAgLyogc3lzX2ZjbnRsICovCisgICAgY2FzZSA1NToKKyAgICAgIC8qIFhY WCAqLworICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNo ZSwgSTM4Nl9FQ1hfUkVHTlVNLAorCQkJIChnZGJfYnl0ZSAqKSAmIHRtcHUz Mik7CisgICAgc3lzX2ZjbnRsOgorICAgICAgaWYgKHRtcHUzMiA9PSBGX0dF VExLKQorCXsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2Fj aGUsIEkzODZfRURYX1JFR05VTSwKKwkJCSAgICAgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRt cHUzMiwgSTM4Nl9SRUNPUkRfU0laRV9mbG9jaykpCisJICAgIHsKKwkgICAg ICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGJyZWFrOworCisg ICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLworICAgIGNhc2UgNTY6CisgICAg ICAvKiBzeXNfc2V0cGdpZCAqLworICAgIGNhc2UgNTc6CisgICAgICAvKiBz eXNfbmlfc3lzY2FsbCAqLworICAgIGNhc2UgNTg6CisgICAgICBicmVhazsK KworICAgICAgLyogc3lzX29sZHVuYW1lICovCisgICAgY2FzZSA1OToKKyAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZf RUJYX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJMzg2 X1JFQ09SRF9TSVpFX29sZG9sZF91dHNuYW1lKSkKKwl7CisJICByZXR1cm4g KC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3VtYXNr ICovCisgICAgY2FzZSA2MDoKKyAgICAgIC8qIHN5c19jaHJvb3QgKi8KKyAg ICBjYXNlIDYxOgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c191c3Rh dCAqLworICAgIGNhc2UgNjI6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VDWF9SRUdOVU0sCisJCQkgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKHRtcHUzMiwgSTM4Nl9SRUNPUkRfU0laRV91c3RhdCkpCisJ eworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAg IC8qIHN5c19kdXAyICovCisgICAgY2FzZSA2MzoKKyAgICAgIC8qIHN5c19n ZXRwcGlkICovCisgICAgY2FzZSA2NDoKKyAgICAgIC8qIHN5c19nZXRwZ3Jw ICovCisgICAgY2FzZSA2NToKKyAgICAgIC8qIHN5c19zZXRzaWQgKi8KKyAg ICBjYXNlIDY2OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19zaWdh Y3Rpb24gKi8KKyAgICBjYXNlIDY3OgorICAgICAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FRFhfUkVHTlVNLAorCQkJIChn ZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICh0bXB1MzIsIEkzODZfUkVDT1JEX1NJWkVfb2xkX3Np Z2FjdGlvbikpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJl YWs7CisKKyAgICAgIC8qIHN5c19zZ2V0bWFzayAqLworICAgIGNhc2UgNjg6 CisgICAgICAvKiBzeXNfc3NldG1hc2sgKi8KKyAgICBjYXNlIDY5OgorICAg ICAgLyogc3lzX3NldHJldWlkMTYgKi8KKyAgICBjYXNlIDcwOgorICAgICAg Lyogc3lzX3NldHJlZ2lkMTYgKi8KKyAgICBjYXNlIDcxOgorICAgICAgLyog c3lzX3NpZ3N1c3BlbmQgKi8KKyAgICBjYXNlIDcyOgorICAgICAgYnJlYWs7 CisKKyAgICAgIC8qIHN5c19zaWdwZW5kaW5nICovCisgICAgY2FzZSA3MzoK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkz ODZfRUJYX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJ Mzg2X1JFQ09SRF9TSVpFX29sZF9zaWdzZXRfdCkpCisJeworCSAgcmV0dXJu ICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19zZXRo b3N0bmFtZSAqLworICAgIGNhc2UgNzQ6CisgICAgICAvKiBzeXNfc2V0cmxp bWl0ICovCisgICAgY2FzZSA3NToKKyAgICAgIGJyZWFrOworCisgICAgICAv KiBzeXNfb2xkX2dldHJsaW1pdCAqLworICAgIGNhc2UgNzY6CisgICAgICBy ZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VDWF9S RUdOVU0sCisJCQkgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgSTM4Nl9SRUNP UkRfU0laRV9ybGltaXQpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAg ICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfZ2V0cnVzYWdlICovCisgICAg Y2FzZSA3NzoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIEkzODZfRUNYX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCBJMzg2X1JFQ09SRF9TSVpFX3J1c2FnZSkpCisJeworCSAgcmV0 dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19n ZXR0aW1lb2ZkYXkgKi8KKyAgICBjYXNlIDc4OgorICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FQlhfUkVHTlVNLAor CQkJIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIEkzODZfUkVDT1JEX1NJWkVf dGltZXZhbCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FQ1hfUkVH TlVNLAorCQkJIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIEkzODZfUkVDT1JE X1NJWkVfdGltZXpvbmUpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAg ICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfc2V0dGltZW9mZGF5ICovCisg ICAgY2FzZSA3OToKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfZ2V0 Z3JvdXBzMTYgKi8KKyAgICBjYXNlIDgwOgorICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FQ1hfUkVHTlVNLAorCQkJ IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIEkzODZfUkVDT1JEX1NJWkVfb2xk X2dpZF90KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX3NldGdyb3VwczE2ICovCisgICAgY2FzZSA4 MToKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUs IEkzODZfRUNYX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMy LCBJMzg2X1JFQ09SRF9TSVpFX29sZF9naWRfdCkpCisJeworCSAgcmV0dXJu ICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIG9sZF9zZWxl Y3QgKi8KKyAgICBjYXNlIDgyOgorICAgICAgeworCS8qCisJICAgc3RydWN0 IHNlbF9hcmdfc3RydWN0IHsKKwkgICB1bnNpZ25lZCBsb25nIG47CisJICAg ZmRfc2V0ICppbnA7CisJICAgZmRfc2V0ICpvdXRwOworCSAgIGZkX3NldCAq ZXhwOworCSAgIHN0cnVjdCB0aW1ldmFsICp0dnA7CisJICAgfTsKKwkgKi8K KwlzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QKKwl7CisJICB1aW50MzJfdCBuOwor CSAgdWludDMyX3QgaW5wOworCSAgdWludDMyX3Qgb3V0cDsKKwkgIHVpbnQz Ml90IGV4cDsKKwkgIHVpbnQzMl90IHR2cDsKKwl9IHNlbDsKKworCXJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUJYX1JFR05V TSwKKwkJCSAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJaWYgKHRtcHUz MikKKwkgIHsKKwkgICAgaWYgKHRhcmdldF9yZWFkX21lbW9yeSAodG1wdTMy LCAoZ2RiX2J5dGUgKikgJiBzZWwsIHNpemVvZiAoc2VsKSkpCisJICAgICAg eworCQlmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJICAg ICJyZWNvcmQ6IHJlYWQgbWVtb3J5IGFkZHIgPSAweCVzIGxlbiA9ICVkIGVy cm9yLlxuIiwKKwkJCQkgICAgcGFkZHJfbnogKHRtcHUzMiksIHNpemVvZiAo c2VsKSk7CisJCXJldHVybiAoLTEpOworCSAgICAgIH0KKwkgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAoc2VsLmlucCwgSTM4Nl9SRUNPUkRf U0laRV9mZF9zZXQpKQorCSAgICAgIHsKKwkJcmV0dXJuICgtMSk7CisJICAg ICAgfQorCSAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChzZWwu b3V0cCwgSTM4Nl9SRUNPUkRfU0laRV9mZF9zZXQpKQorCSAgICAgIHsKKwkJ cmV0dXJuICgtMSk7CisJICAgICAgfQorCSAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtIChzZWwuZXhwLCBJMzg2X1JFQ09SRF9TSVpFX2ZkX3Nl dCkpCisJICAgICAgeworCQlyZXR1cm4gKC0xKTsKKwkgICAgICB9CisJICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHNlbC50dnAsIEkzODZf UkVDT1JEX1NJWkVfdGltZXZhbCkpCisJICAgICAgeworCQlyZXR1cm4gKC0x KTsKKwkgICAgICB9CisJICB9CisgICAgICB9CisgICAgICBicmVhazsKKwor ICAgICAgLyogc3lzX3N5bWxpbmsgKi8KKyAgICBjYXNlIDgzOgorICAgICAg YnJlYWs7CisKKyAgICAgIC8qIHN5c19yZWFkbGluayAqLworICAgIGNhc2Ug ODU6CisgICAgICB7CisJdWludDMyX3QgbGVuOworCXJlZ2NhY2hlX3Jhd19y ZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUNYX1JFR05VTSwKKwkJCSAg IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJcmVnY2FjaGVfcmF3X3JlYWQg KHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FRFhfUkVHTlVNLAorCQkJICAgKGdk Yl9ieXRlICopICYgbGVuKTsKKwlpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICh0bXB1MzIsIGxlbikpCisJICB7CisJICAgIHJldHVybiAoLTEpOwor CSAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c191 c2VsaWIgKi8KKyAgICBjYXNlIDg2OgorICAgICAgLyogc3lzX3N3YXBvbiAq LworICAgIGNhc2UgODc6CisgICAgICBicmVhazsKKworICAgICAgLyogc3lz X3JlYm9vdCAqLworICAgIGNhc2UgODg6CisgICAgICB7CisJaW50IHE7CisJ dGFyZ2V0X3Rlcm1pbmFsX291cnMgKCk7CisJcSA9CisJICB5cXVlcnkgKF8K KwkJICAoIlRoZSBuZXh0IGluc3RydWN0aW9uIGlzIHN5c2NhbGwgcmVib290 LiBJdCB3aWxsIHJlc3RhcnQgdGhlIGNvbXB1dGVyLiBEbyB5b3Ugd2FudCB0 byBwYXVzZSB0aGUgcHJvZ3JhbS4iKSk7CisJdGFyZ2V0X3Rlcm1pbmFsX2lu ZmVyaW9yICgpOworCWlmIChxKQorCSAgeworCSAgICByZXR1cm4gKDEpOwor CSAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIG9sZF9y ZWFkZGlyICovCisgICAgY2FzZSA4OToKKyAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUNYX1JFR05VTSwKKwkJCSAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAodG1wdTMyLCBJMzg2X1JFQ09SRF9TSVpFX2RpcmVu dCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisK KyAgICAgIC8qIG9sZF9tbWFwICovCisgICAgY2FzZSA5MDoKKyAgICAgIGJy ZWFrOworCisgICAgICAvKiBzeXNfbXVubWFwICovCisgICAgY2FzZSA5MToK KyAgICAgIHsKKwlpbnQgcTsKKwl1aW50MzJfdCBsZW47CisKKwlyZWdjYWNo ZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VCWF9SRUdOVU0s CisJCQkgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworCXJlZ2NhY2hlX3Jh d19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUNYX1JFR05VTSwKKwkJ CSAgIChnZGJfYnl0ZSAqKSAmIGxlbik7CisJdGFyZ2V0X3Rlcm1pbmFsX291 cnMgKCk7CisJcSA9CisJICB5cXVlcnkgKF8KKwkJICAoIlRoZSBuZXh0IGlu c3RydWN0aW9uIGlzIHN5c2NhbGwgbXVubWFwLiBJdCB3aWxsIGZyZWUgdGhl IG1lbW9yeSBhZGRyID0gMHglcyBsZW4gPSAlZC4gRG8geW91IHdhbnQgdG8g cGF1c2UgdGhlIHByb2dyYW0uIiksCisJCSAgcGFkZHJfbnogKHRtcHUzMiks IGxlbik7CisJdGFyZ2V0X3Rlcm1pbmFsX2luZmVyaW9yICgpOworCWlmIChx KQorCSAgeworCSAgICByZXR1cm4gKDEpOworCSAgfQorICAgICAgfQorICAg ICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c190cnVuY2F0ZSAqLworICAgIGNh c2UgOTI6CisgICAgICAvKiBzeXNfZnRydW5jYXRlICovCisgICAgY2FzZSA5 MzoKKyAgICAgIC8qIHN5c19mY2htb2QgKi8KKyAgICBjYXNlIDk0OgorICAg ICAgLyogc3lzX2ZjaG93bjE2ICovCisgICAgY2FzZSA5NToKKyAgICAgIC8q IHN5c19nZXRwcmlvcml0eSAqLworICAgIGNhc2UgOTY6CisgICAgICAvKiBz eXNfc2V0cHJpb3JpdHkgKi8KKyAgICBjYXNlIDk3OgorICAgICAgLyogc3lz X25pX3N5c2NhbGwgKi8KKyAgICBjYXNlIDk4OgorICAgICAgYnJlYWs7CisK KyAgICAgIC8qIHN5c19zdGF0ZnMgKi8KKyAgICBjYXNlIDk5OgorICAgICAg Lyogc3lzX2ZzdGF0ZnMgKi8KKyAgICBjYXNlIDEwMDoKKyAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUNYX1JFR05V TSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJMzg2X1JFQ09SRF9T SVpFX3N0YXRmcykpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAg YnJlYWs7CisKKyAgICAgIC8qIHN5c19pb3Blcm0gKi8KKyAgICBjYXNlIDEw MToKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfc29ja2V0Y2FsbCAq LworICAgIGNhc2UgMTAyOgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Y29yZF9yZWdjYWNoZSwgSTM4Nl9FQlhfUkVHTlVNLAorCQkJIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7CisgICAgICBzd2l0Y2ggKHRtcHUzMikKKwl7CisJ Y2FzZSBJMzg2X1JFQ09SRF9TWVNfU09DS0VUOgorCWNhc2UgSTM4Nl9SRUNP UkRfU1lTX0JJTkQ6CisJY2FzZSBJMzg2X1JFQ09SRF9TWVNfQ09OTkVDVDoK KwljYXNlIEkzODZfUkVDT1JEX1NZU19MSVNURU46CisJICBicmVhazsKKwlj YXNlIEkzODZfUkVDT1JEX1NZU19BQ0NFUFQ6CisJY2FzZSBJMzg2X1JFQ09S RF9TWVNfR0VUU09DS05BTUU6CisJY2FzZSBJMzg2X1JFQ09SRF9TWVNfR0VU UEVFUk5BTUU6CisJICB7CisJICAgIHVpbnQzMl90IGFbM107CisJICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUNYX1JF R05VTSwKKwkJCSAgICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworCSAg ICBpZiAodG1wdTMyKQorCSAgICAgIHsKKwkJaWYgKHRhcmdldF9yZWFkX21l bW9yeSAodG1wdTMyLCAoZ2RiX2J5dGUgKikgYSwgc2l6ZW9mIChhKSkpCisJ CSAgeworCQkgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAor CQkJCQkicmVjb3JkOiByZWFkIG1lbW9yeSBhZGRyID0gMHglcyBsZW4gPSAl ZCBlcnJvci5cbiIsCisJCQkJCXBhZGRyX256ICh0bXB1MzIpLCBzaXplb2Yg KGEpKTsKKwkJICAgIHJldHVybiAoLTEpOworCQkgIH0KKwkJaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAoYVsxXSwgSTM4Nl9SRUNPUkRfU0laRV9z b2NrYWRkcikpCisJCSAgeworCQkgICAgcmV0dXJuICgtMSk7CisJCSAgfQor CQlpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhWzJdLCBJMzg2X1JF Q09SRF9TSVpFX2ludCkpCisJCSAgeworCQkgICAgcmV0dXJuICgtMSk7CisJ CSAgfQorCSAgICAgIH0KKwkgIH0KKwkgIGJyZWFrOworCisJY2FzZSBJMzg2 X1JFQ09SRF9TWVNfU09DS0VUUEFJUjoKKwkgIHsKKwkgICAgdWludDMyX3Qg YVs0XTsKKwkgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNo ZSwgSTM4Nl9FQ1hfUkVHTlVNLAorCQkJICAgICAgIChnZGJfYnl0ZSAqKSAm IHRtcHUzMik7CisJICAgIGlmICh0bXB1MzIpCisJICAgICAgeworCQlpZiAo dGFyZ2V0X3JlYWRfbWVtb3J5ICh0bXB1MzIsIChnZGJfYnl0ZSAqKSBhLCBz aXplb2YgKGEpKSkKKwkJICB7CisJCSAgICBmcHJpbnRmX3VuZmlsdGVyZWQg KGdkYl9zdGRsb2csCisJCQkJCSJyZWNvcmQ6IHJlYWQgbWVtb3J5IGFkZHIg PSAweCVzIGxlbiA9ICVkIGVycm9yLlxuIiwKKwkJCQkJcGFkZHJfbnogKHRt cHUzMiksIHNpemVvZiAoYSkpOworCQkgICAgcmV0dXJuICgtMSk7CisJCSAg fQorCQlpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhWzNdLCBJMzg2 X1JFQ09SRF9TSVpFX2ludCkpCisJCSAgeworCQkgICAgcmV0dXJuICgtMSk7 CisJCSAgfQorCSAgICAgIH0KKwkgIH0KKwkgIGJyZWFrOworCWNhc2UgSTM4 Nl9SRUNPUkRfU1lTX1NFTkQ6CisJY2FzZSBJMzg2X1JFQ09SRF9TWVNfU0VO RFRPOgorCSAgYnJlYWs7CisJY2FzZSBJMzg2X1JFQ09SRF9TWVNfUkVDVjoK KwkgIHsKKwkgICAgdWludDMyX3QgYVszXTsKKwkgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FQ1hfUkVHTlVNLAorCQkJ ICAgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJICAgIGlmICh0bXB1 MzIpCisJICAgICAgeworCQlpZiAodGFyZ2V0X3JlYWRfbWVtb3J5ICh0bXB1 MzIsIChnZGJfYnl0ZSAqKSBhLCBzaXplb2YgKGEpKSkKKwkJICB7CisJCSAg ICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSJyZWNv cmQ6IHJlYWQgbWVtb3J5IGFkZHIgPSAweCVzIGxlbiA9ICVkIGVycm9yLlxu IiwKKwkJCQkJcGFkZHJfbnogKHRtcHUzMiksIHNpemVvZiAoYSkpOworCQkg ICAgcmV0dXJuICgtMSk7CisJCSAgfQorCQlpZiAoYVsyXSkKKwkJICB7CisJ CSAgICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5CisJCQkoYVsyXSwgKGdkYl9i eXRlICopICYgKGFbMl0pLCBzaXplb2YgKGFbMl0pKSkKKwkJICAgICAgewor CQkJZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCQkgICAg InJlY29yZDogcmVhZCBtZW1vcnkgYWRkciA9IDB4JXMgbGVuID0gJWQgZXJy b3IuXG4iLAorCQkJCQkgICAgcGFkZHJfbnogKGFbMl0pLCBzaXplb2YgKGFb Ml0pKTsKKwkJCXJldHVybiAoLTEpOworCQkgICAgICB9CisJCSAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhWzFdLCBhWzJdKSkKKwkJICAg ICAgeworCQkJcmV0dXJuICgtMSk7CisJCSAgICAgIH0KKwkJICB9CisJICAg ICAgfQorCSAgfQorCSAgYnJlYWs7CisJY2FzZSBJMzg2X1JFQ09SRF9TWVNf UkVDVkZST006CisJICB7CisJICAgIHVpbnQzMl90IGFbNl07CisJICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUNYX1JF R05VTSwKKwkJCSAgICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworCSAg ICBpZiAodG1wdTMyKQorCSAgICAgIHsKKwkJaWYgKHRhcmdldF9yZWFkX21l bW9yeSAodG1wdTMyLCAoZ2RiX2J5dGUgKikgYSwgc2l6ZW9mIChhKSkpCisJ CSAgeworCQkgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAor CQkJCQkicmVjb3JkOiByZWFkIG1lbW9yeSBhZGRyID0gMHglcyBsZW4gPSAl ZCBlcnJvci5cbiIsCisJCQkJCXBhZGRyX256ICh0bXB1MzIpLCBzaXplb2Yg KGEpKTsKKwkJICAgIHJldHVybiAoLTEpOworCQkgIH0KKwkJaWYgKGFbMl0p CisJCSAgeworCQkgICAgaWYgKHRhcmdldF9yZWFkX21lbW9yeQorCQkJKGFb Ml0sIChnZGJfYnl0ZSAqKSAmIChhWzJdKSwgc2l6ZW9mIChhWzJdKSkpCisJ CSAgICAgIHsKKwkJCWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywK KwkJCQkJICAgICJyZWNvcmQ6IHJlYWQgbWVtb3J5IGFkZHIgPSAweCVzIGxl biA9ICVkIGVycm9yLlxuIiwKKwkJCQkJICAgIHBhZGRyX256IChhWzJdKSwg c2l6ZW9mIChhWzJdKSk7CisJCQlyZXR1cm4gKC0xKTsKKwkJICAgICAgfQor CQkgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoYVsxXSwgYVsy XSkpCisJCSAgICAgIHsKKwkJCXJldHVybiAoLTEpOworCQkgICAgICB9CisJ CSAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhWzRdLCBJMzg2 X1JFQ09SRF9TSVpFX3NvY2thZGRyKSkKKwkJICAgICAgeworCQkJcmV0dXJu ICgtMSk7CisJCSAgICAgIH0KKwkJICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKGFbNV0sIEkzODZfUkVDT1JEX1NJWkVfaW50KSkKKwkJICAg ICAgeworCQkJcmV0dXJuICgtMSk7CisJCSAgICAgIH0KKwkJICB9CisJICAg ICAgfQorCSAgfQorCSAgYnJlYWs7CisJY2FzZSBJMzg2X1JFQ09SRF9TWVNf U0hVVERPV046CisJY2FzZSBJMzg2X1JFQ09SRF9TWVNfU0VUU09DS09QVDoK KwkgIGJyZWFrOworCWNhc2UgSTM4Nl9SRUNPUkRfU1lTX0dFVFNPQ0tPUFQ6 CisJICB7CisJICAgIHVpbnQzMl90IGFbNV07CisJICAgIHVpbnQzMl90IGF2 OworCisJICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUs IEkzODZfRUNYX1JFR05VTSwKKwkJCSAgICAgICAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOworCSAgICBpZiAodG1wdTMyKQorCSAgICAgIHsKKwkJaWYgKHRh cmdldF9yZWFkX21lbW9yeSAodG1wdTMyLCAoZ2RiX2J5dGUgKikgYSwgc2l6 ZW9mIChhKSkpCisJCSAgeworCQkgICAgZnByaW50Zl91bmZpbHRlcmVkIChn ZGJfc3RkbG9nLAorCQkJCQkicmVjb3JkOiByZWFkIG1lbW9yeSBhZGRyID0g MHglcyBsZW4gPSAlZCBlcnJvci5cbiIsCisJCQkJCXBhZGRyX256ICh0bXB1 MzIpLCBzaXplb2YgKGEpKTsKKwkJICAgIHJldHVybiAoLTEpOworCQkgIH0K KwkJaWYgKGFbNF0pCisJCSAgeworCQkgICAgaWYgKHRhcmdldF9yZWFkX21l bW9yeQorCQkJKGFbNF0sIChnZGJfYnl0ZSAqKSAmIGF2LCBzaXplb2YgKGF2 KSkpCisJCSAgICAgIHsKKwkJCWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0 ZGxvZywKKwkJCQkJICAgICJyZWNvcmQ6IHJlYWQgbWVtb3J5IGFkZHIgPSAw eCVzIGxlbiA9ICVkIGVycm9yLlxuIiwKKwkJCQkJICAgIHBhZGRyX256IChh WzRdKSwgc2l6ZW9mIChhdikpOworCQkJcmV0dXJuICgtMSk7CisJCSAgICAg IH0KKwkJICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKGFbM10s IGF2KSkKKwkJICAgICAgeworCQkJcmV0dXJuICgtMSk7CisJCSAgICAgIH0K KwkJICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKGFbNF0sIEkz ODZfUkVDT1JEX1NJWkVfaW50KSkKKwkJICAgICAgeworCQkJcmV0dXJuICgt MSk7CisJCSAgICAgIH0KKwkJICB9CisJICAgICAgfQorCSAgfQorCSAgYnJl YWs7CisJY2FzZSBJMzg2X1JFQ09SRF9TWVNfU0VORE1TRzoKKwkgIGJyZWFr OworCWNhc2UgSTM4Nl9SRUNPUkRfU1lTX1JFQ1ZNU0c6CisJICB7CisJICAg IHVpbnQzMl90IGFbMl0sIGk7CisJICAgIHN0cnVjdCByZWNvcmRfbXNnaGRy CisJICAgIHsKKwkgICAgICB1aW50MzJfdCBtc2dfbmFtZTsKKwkgICAgICB1 aW50MzJfdCBtc2dfbmFtZWxlbjsKKwkgICAgICB1aW50MzJfdCBtc2dfaW92 OworCSAgICAgIHVpbnQzMl90IG1zZ19pb3ZsZW47CisJICAgICAgdWludDMy X3QgbXNnX2NvbnRyb2w7CisJICAgICAgdWludDMyX3QgbXNnX2NvbnRyb2xs ZW47CisJICAgICAgdWludDMyX3QgbXNnX2ZsYWdzOworCSAgICB9IHJlYzsK KwkgICAgc3RydWN0IHJlY29yZF9pb3ZlYworCSAgICB7CisJICAgICAgdWlu dDMyX3QgaW92X2Jhc2U7CisJICAgICAgdWludDMyX3QgaW92X2xlbjsKKwkg ICAgfSBpb3Y7CisKKwkgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9y ZWdjYWNoZSwgSTM4Nl9FQ1hfUkVHTlVNLAorCQkJICAgICAgIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7CisJICAgIGlmICh0bXB1MzIpCisJICAgICAgewor CQlpZiAodGFyZ2V0X3JlYWRfbWVtb3J5ICh0bXB1MzIsIChnZGJfYnl0ZSAq KSBhLCBzaXplb2YgKGEpKSkKKwkJICB7CisJCSAgICBmcHJpbnRmX3VuZmls dGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSJyZWNvcmQ6IHJlYWQgbWVtb3J5 IGFkZHIgPSAweCVzIGxlbiA9ICVkIGVycm9yLlxuIiwKKwkJCQkJcGFkZHJf bnogKHRtcHUzMiksIHNpemVvZiAoYSkpOworCQkgICAgcmV0dXJuICgtMSk7 CisJCSAgfQorCQlpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhWzFd LCBJMzg2X1JFQ09SRF9TSVpFX21zZ2hkcikpCisJCSAgeworCQkgICAgcmV0 dXJuICgtMSk7CisJCSAgfQorCQlpZiAoYVsxXSkKKwkJICB7CisJCSAgICBp ZiAodGFyZ2V0X3JlYWRfbWVtb3J5CisJCQkoYVsxXSwgKGdkYl9ieXRlICop ICYgcmVjLCBzaXplb2YgKHJlYykpKQorCQkgICAgICB7CisJCQlmcHJpbnRm X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkJCSAgICAicmVjb3JkOiBy ZWFkIG1lbW9yeSBhZGRyID0gMHglcyBsZW4gPSAlZCBlcnJvci5cbiIsCisJ CQkJCSAgICBwYWRkcl9ueiAoYVsxXSksIHNpemVvZiAocmVjKSk7CisJCQly ZXR1cm4gKC0xKTsKKwkJICAgICAgfQorCQkgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbQorCQkJKHJlYy5tc2dfbmFtZSwgcmVjLm1zZ19uYW1l bGVuKSkKKwkJICAgICAgeworCQkJcmV0dXJuICgtMSk7CisJCSAgICAgIH0K KwkJICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0KKwkJCShyZWMu bXNnX2NvbnRyb2wsIHJlYy5tc2dfY29udHJvbGxlbikpCisJCSAgICAgIHsK KwkJCXJldHVybiAoLTEpOworCQkgICAgICB9CisJCSAgICBpZiAocmVjLm1z Z19pb3YpCisJCSAgICAgIHsKKwkJCWZvciAoaSA9IDA7IGkgPCByZWMubXNn X2lvdmxlbjsgaSsrKQorCQkJICB7CisJCQkgICAgaWYgKHRhcmdldF9yZWFk X21lbW9yeQorCQkJCShyZWMubXNnX2lvdiwgKGdkYl9ieXRlICopICYgaW92 LAorCQkJCSBzaXplb2YgKGlvdikpKQorCQkJICAgICAgeworCQkJCWZwcmlu dGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCQkJCSAgICAicmVjb3Jk OiByZWFkIG1lbW9yeSBhZGRyID0gMHglcyBsZW4gPSAlZCBlcnJvci5cbiIs CisJCQkJCQkgICAgcGFkZHJfbnogKHJlYy5tc2dfaW92KSwKKwkJCQkJCSAg ICBzaXplb2YgKGlvdikpOworCQkJCXJldHVybiAoLTEpOworCQkJICAgICAg fQorCQkJICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0KKwkJCQko aW92Lmlvdl9iYXNlLCBpb3YuaW92X2xlbikpCisJCQkgICAgICB7CisJCQkJ cmV0dXJuICgtMSk7CisJCQkgICAgICB9CisJCQkgICAgcmVjLm1zZ19pb3Yg Kz0gc2l6ZW9mIChzdHJ1Y3QgcmVjb3JkX2lvdmVjKTsKKwkJCSAgfQorCQkg ICAgICB9CisJCSAgfQorCSAgICAgIH0KKwkgIH0KKwkgIGJyZWFrOworCWRl ZmF1bHQ6CisJICBwcmludGZfdW5maWx0ZXJlZCAoXworCQkJICAgICAoInJl Y29yZDogcmVjb3JkIGFuZCByZXZlcnNlIGZ1bmN0aW9uIGRvbid0IHN1cHBv cnQgc29ja2V0Y2FsbCBjYWxsIDB4JTA4eFxuIiksCisJCQkgICAgIHRtcHUz Mik7CisJICByZXR1cm4gKC0xKTsKKwkgIGJyZWFrOworCX0KKyAgICAgIGJy ZWFrOworCisgICAgICAvKiBzeXNfc3lzbG9nICovCisgICAgY2FzZSAxMDM6 CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3NldGl0aW1lciAqLwor ICAgIGNhc2UgMTA0OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29y ZF9yZWdjYWNoZSwgSTM4Nl9FRFhfUkVHTlVNLAorCQkJIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICh0bXB1MzIsIEkzODZfUkVDT1JEX1NJWkVfaXRpbWVydmFsKSkKKwl7 CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAg Lyogc3lzX2dldGl0aW1lciAqLworICAgIGNhc2UgMTA1OgorICAgICAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FQ1hfUkVH TlVNLAorCQkJIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIEkzODZfUkVDT1JE X1NJWkVfaXRpbWVydmFsKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9Cisg ICAgICBicmVhazsKKworICAgICAgLyogc3lzX25ld3N0YXQgKi8KKyAgICBj YXNlIDEwNjoKKyAgICAgIC8qIHN5c19uZXdsc3RhdCAqLworICAgIGNhc2Ug MTA3OgorICAgICAgLyogc3lzX25ld2ZzdGF0ICovCisgICAgY2FzZSAxMDg6 CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJ Mzg2X0VDWF9SRUdOVU0sCisJCQkgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK KyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwg STM4Nl9SRUNPUkRfU0laRV9zdGF0KSkKKwl7CisJICByZXR1cm4gKC0xKTsK Kwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3VuYW1lICovCisg ICAgY2FzZSAxMDk6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3Jk X3JlZ2NhY2hlLCBJMzg2X0VCWF9SRUdOVU0sCisJCQkgKGdkYl9ieXRlICop ICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKHRtcHUzMiwgSTM4Nl9SRUNPUkRfU0laRV9vbGRfdXRzbmFtZSkpCisJ eworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAg IC8qIHN5c19pb3BsICovCisgICAgY2FzZSAxMTA6CisgICAgICAvKiBzeXNf dmhhbmd1cCAqLworICAgIGNhc2UgMTExOgorICAgICAgLyogc3lzX25pX3N5 c2NhbGwgKi8KKyAgICBjYXNlIDExMjoKKyAgICAgIC8qIHN5c192bTg2b2xk ICovCisgICAgY2FzZSAxMTM6CisgICAgICBicmVhazsKKworICAgICAgLyog c3lzX3dhaXQ0ICovCisgICAgY2FzZSAxMTQ6CisgICAgICByZWdjYWNoZV9y YXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VDWF9SRUdOVU0sCisJ CQkgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgSTM4Nl9SRUNPUkRfU0laRV9p bnQpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRVNJX1JFR05VTSwK KwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJMzg2X1JFQ09SRF9TSVpF X3J1c2FnZSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJl YWs7CisKKyAgICAgIC8qIHN5c19zd2Fwb2ZmICovCisgICAgY2FzZSAxMTU6 CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3N5c2luZm8gKi8KKyAg ICBjYXNlIDExNjoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRf cmVnY2FjaGUsIEkzODZfRUJYX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAodG1wdTMyLCBJMzg2X1JFQ09SRF9TSVpFX3N5c2luZm8pKQorCXsKKwkg IHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBz eXNfaXBjICovCisgICAgY2FzZSAxMTc6CisgICAgICByZWdjYWNoZV9yYXdf cmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VCWF9SRUdOVU0sCisJCQkg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIHN3aXRjaCAodG1wdTMy KQorCXsKKwljYXNlIEkzODZfUkVDT1JEX01TR1JDVjoKKwkgIHsKKwkgICAg aW50MzJfdCBzZWNvbmQ7CisJICAgIHVpbnQzMl90IHB0cjsKKwkgICAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FRFhfUkVH TlVNLAorCQkJICAgICAgIChnZGJfYnl0ZSAqKSAmIHNlY29uZCk7CisJICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRURJ X1JFR05VTSwKKwkJCSAgICAgICAoZ2RiX2J5dGUgKikgJiBwdHIpOworCSAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChwdHIsIHNlY29uZCAr IEkzODZfUkVDT1JEX1NJWkVfbG9uZykpCisJICAgICAgeworCQlyZXR1cm4g KC0xKTsKKwkgICAgICB9CisJICB9CisJICBicmVhazsKKwljYXNlIEkzODZf UkVDT1JEX01TR0NUTDoKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRf cmVnY2FjaGUsIEkzODZfRURJX1JFR05VTSwKKwkJCSAgICAgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKHRtcHUzMiwgSTM4Nl9SRUNPUkRfU0laRV9tc3FpZF9kcykpCisJICAg IHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCSAgYnJlYWs7CisJ Y2FzZSBJMzg2X1JFQ09SRF9TSE1BVDoKKwkgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRVNJX1JFR05VTSwKKwkJCSAgICAg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgSTM4Nl9SRUNPUkRfU0laRV91bG9uZykp CisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCSAgYnJl YWs7CisJY2FzZSBJMzg2X1JFQ09SRF9TSE1DVEw6CisJICByZWdjYWNoZV9y YXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VESV9SRUdOVU0sCisJ CQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIEkzODZfUkVDT1JEX1NJWkVf c2htaWRfZHMpKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAg IH0KKwkgIGJyZWFrOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBz eXNfZnN5bmMgKi8KKyAgICBjYXNlIDExODoKKyAgICAgIC8qIHN5c19zaWdy ZXR1cm4gKi8KKyAgICBjYXNlIDExOToKKyAgICAgIC8qIHN5c19jbG9uZSAq LworICAgIGNhc2UgMTIwOgorICAgICAgLyogc3lzX3NldGRvbWFpbm5hbWUg Ki8KKyAgICBjYXNlIDEyMToKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBz eXNfbmV3dW5hbWUgKi8KKyAgICBjYXNlIDEyMjoKKyAgICAgIHJlZ2NhY2hl X3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUJYX1JFR05VTSwK KwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJMzg2X1JFQ09SRF9TSVpF X25ld191dHNuYW1lKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAg ICBicmVhazsKKworICAgICAgLyogc3lzX21vZGlmeV9sZHQgKi8KKyAgICBj YXNlIDEyMzoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIEkzODZfRUJYX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOworICAgICAgaWYgKHRtcHUzMiA9PSAwIHx8IHRtcHUzMiA9PSAy KQorCXsKKwkgIHVpbnQzMl90IHB0ciwgYnl0ZWNvdW50OworCSAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FQ1hfUkVHTlVN LAorCQkJICAgICAoZ2RiX2J5dGUgKikgJiBwdHIpOworCSAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FRFhfUkVHTlVNLAor CQkJICAgICAoZ2RiX2J5dGUgKikgJiBieXRlY291bnQpOworCSAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAocHRyLCBieXRlY291bnQpKQorCSAg ICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwl9CisgICAgICBi cmVhazsKKworICAgICAgLyogc3lzX2FkanRpbWV4ICovCisgICAgY2FzZSAx MjQ6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hl LCBJMzg2X0VCWF9SRUdOVU0sCisJCQkgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUz MiwgSTM4Nl9SRUNPUkRfU0laRV90aW1leCkpCisJeworCSAgcmV0dXJuICgt MSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19tcHJvdGVj dCAqLworICAgIGNhc2UgMTI1OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8q IHN5c19zaWdwcm9jbWFzayAqLworICAgIGNhc2UgMTI2OgorICAgICAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FRFhfUkVH TlVNLAorCQkJIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIEkzODZfUkVDT1JE X1NJWkVfb2xkX3NpZ3NldF90KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9 CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX25pX3N5c2NhbGwgKi8K KyAgICBjYXNlIDEyNzoKKyAgICAgIC8qIHN5c19pbml0X21vZHVsZSAqLwor ICAgIGNhc2UgMTI4OgorICAgICAgLyogc3lzX2RlbGV0ZV9tb2R1bGUgKi8K KyAgICBjYXNlIDEyOToKKyAgICAgIC8qIHN5c19uaV9zeXNjYWxsICovCisg ICAgY2FzZSAxMzA6CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3F1 b3RhY3RsICovCisgICAgY2FzZSAxMzE6CisgICAgICByZWdjYWNoZV9yYXdf cmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VCWF9SRUdOVU0sCisJCQkg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIHN3aXRjaCAodG1wdTMy KQorCXsKKwljYXNlIEkzODZfUkVDT1JEX1FfR0VURk1UOgorCSAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FU0lfUkVHTlVN LAorCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworCSAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCA0KSkKKwkgICAgewor CSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJICBicmVhazsKKwljYXNl IEkzODZfUkVDT1JEX1FfR0VUSU5GTzoKKwkgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRVNJX1JFR05VTSwKKwkJCSAgICAg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9tZW0gKHRtcHUzMiwgSTM4Nl9SRUNPUkRfU0laRV9tZW1fZHFp bmZvKSkKKwkgICAgeworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJ ICBicmVhazsKKwljYXNlIEkzODZfUkVDT1JEX1FfR0VUUVVPVEE6CisJICBy ZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VTSV9S RUdOVU0sCisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIEkzODZfUkVD T1JEX1NJWkVfaWZfZHFibGspKQorCSAgICB7CisJICAgICAgcmV0dXJuICgt MSk7CisJICAgIH0KKwkgIGJyZWFrOworCWNhc2UgSTM4Nl9SRUNPUkRfUV9Y R0VUUVNUQVQ6CisJY2FzZSBJMzg2X1JFQ09SRF9RX1hHRVRRVU9UQToKKwkg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRVNJ X1JFR05VTSwKKwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgSTM4Nl9S RUNPUkRfU0laRV9mc19xdW90YV9zdGF0KSkKKwkgICAgeworCSAgICAgIHJl dHVybiAoLTEpOworCSAgICB9CisJICBicmVhazsKKwl9CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX2dldHBnaWQgKi8KKyAgICBjYXNlIDEzMjoK KyAgICAgIC8qIHN5c19mY2hkaXIgKi8KKyAgICBjYXNlIDEzMzoKKyAgICAg IC8qIHN5c19iZGZsdXNoICovCisgICAgY2FzZSAxMzQ6CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX3N5c2ZzICovCisgICAgY2FzZSAxMzU6Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2 X0VCWF9SRUdOVU0sCisJCQkgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAg ICAgIGlmICh0bXB1MzIgPT0gMikKKwl7CisJICByZWdjYWNoZV9yYXdfcmVh ZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VEWF9SRUdOVU0sCisJCQkgICAg IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJICAvKlhYWCB0aGUgc2l6ZSBv ZiBtZW1vcnkgaXMgbm90IHZlcnkgY2xlYXIgKi8KKwkgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgMTApKQorCSAgICB7CisJICAg ICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwl9CisgICAgICBicmVhazsKKwor ICAgICAgLyogc3lzX3BlcnNvbmFsaXR5ICovCisgICAgY2FzZSAxMzY6Cisg ICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLworICAgIGNhc2UgMTM3OgorICAg ICAgLyogc3lzX3NldGZzdWlkMTYgKi8KKyAgICBjYXNlIDEzODoKKyAgICAg IC8qIHN5c19zZXRmc2dpZDE2ICovCisgICAgY2FzZSAxMzk6CisgICAgICBi cmVhazsKKworICAgICAgLyogc3lzX2xsc2VlayAqLworICAgIGNhc2UgMTQw OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwg STM4Nl9FU0lfUkVHTlVNLAorCQkJIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IEkzODZfUkVDT1JEX1NJWkVfbG9mZl90KSkKKwl7CisJICByZXR1cm4gKC0x KTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2dldGRlbnRz ICovCisgICAgY2FzZSAxNDE6CisgICAgICB7CisJdWludDMyX3QgY291bnQ7 CisJcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9F Q1hfUkVHTlVNLAorCQkJICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwly ZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VEWF9S RUdOVU0sCisJCQkgICAoZ2RiX2J5dGUgKikgJiBjb3VudCk7CisJaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJMzg2X1JFQ09SRF9T SVpFX2RpcmVudCAqIGNvdW50KSkKKwkgIHsKKwkgICAgcmV0dXJuICgtMSk7 CisJICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lz X3NlbGVjdCAqLworICAgIGNhc2UgMTQyOgorICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FQ1hfUkVHTlVNLAorCQkJ IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIEkzODZfUkVDT1JEX1NJWkVfZmRf c2V0KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VEWF9SRUdOVU0s CisJCQkgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgSTM4Nl9SRUNPUkRfU0la RV9mZF9zZXQpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRVNJX1JF R05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJMzg2X1JFQ09S RF9TSVpFX2ZkX3NldCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9F RElfUkVHTlVNLAorCQkJIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIEkzODZf UkVDT1JEX1NJWkVfdGltZXZhbCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJ fQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19mbG9jayAqLworICAg IGNhc2UgMTQzOgorICAgICAgLyogc3lzX21zeW5jICovCisgICAgY2FzZSAx NDQ6CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3JlYWR2ICovCisg ICAgY2FzZSAxNDU6CisgICAgICB7CisJdWludDMyX3QgdmVjOworCXVpbnQz Ml90IHZsZW47CisJc3RydWN0IHJlY29yZF9pb3ZlYworCXsKKwkgIHVpbnQz Ml90IGlvdl9iYXNlOworCSAgdWludDMyX3QgaW92X2xlbjsKKwl9IGlvdjsK KwlyZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VD WF9SRUdOVU0sCisJCQkgICAoZ2RiX2J5dGUgKikgJiB2ZWMpOworCWlmICh2 ZWMpCisJICB7CisJICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIEkzODZfRURYX1JFR05VTSwKKwkJCSAgICAgICAoZ2RiX2J5dGUg KikgJiB2bGVuKTsKKwkgICAgZm9yICh0bXB1MzIgPSAwOyB0bXB1MzIgPCB2 bGVuOyB0bXB1MzIrKykKKwkgICAgICB7CisJCWlmICh0YXJnZXRfcmVhZF9t ZW1vcnkKKwkJICAgICh2ZWMsIChnZGJfYnl0ZSAqKSAmIGlvdiwgc2l6ZW9m IChzdHJ1Y3QgcmVjb3JkX2lvdmVjKSkpCisJCSAgeworCQkgICAgZnByaW50 Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCQkicmVjb3JkOiByZWFk IG1lbW9yeSBhZGRyID0gMHglcyBsZW4gPSAlZCBlcnJvci5cbiIsCisJCQkJ CXBhZGRyX256ICh2ZWMpLAorCQkJCQlzaXplb2YgKHN0cnVjdCByZWNvcmRf aW92ZWMpKTsKKwkJICAgIHJldHVybiAoLTEpOworCQkgIH0KKwkJaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAoaW92Lmlvdl9iYXNlLCBpb3YuaW92 X2xlbikpCisJCSAgeworCQkgICAgcmV0dXJuICgtMSk7CisJCSAgfQorCQl2 ZWMgKz0gc2l6ZW9mIChzdHJ1Y3QgcmVjb3JkX2lvdmVjKTsKKwkgICAgICB9 CisJICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lz X3dyaXRldiAqLworICAgIGNhc2UgMTQ2OgorICAgICAgLyogc3lzX2dldHNp ZCAqLworICAgIGNhc2UgMTQ3OgorICAgICAgLyogc3lzX2ZkYXRhc3luYyAq LworICAgIGNhc2UgMTQ4OgorICAgICAgLyogc3lzX3N5c2N0bCAqLworICAg IGNhc2UgMTQ5OgorICAgICAgLyogc3lzX21sb2NrICovCisgICAgY2FzZSAx NTA6CisgICAgICAvKiBzeXNfbXVubG9jayAqLworICAgIGNhc2UgMTUxOgor ICAgICAgLyogc3lzX21sb2NrYWxsICovCisgICAgY2FzZSAxNTI6CisgICAg ICAvKiBzeXNfbXVubG9ja2FsbCAqLworICAgIGNhc2UgMTUzOgorICAgICAg Lyogc3lzX3NjaGVkX3NldHBhcmFtICovCisgICAgY2FzZSAxNTQ6CisgICAg ICBicmVhazsKKworICAgICAgLyogc3lzX3NjaGVkX2dldHBhcmFtICovCisg ICAgY2FzZSAxNTU6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3Jk X3JlZ2NhY2hlLCBJMzg2X0VDWF9SRUdOVU0sCisJCQkgKGdkYl9ieXRlICop ICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKHRtcHUzMiwgSTM4Nl9SRUNPUkRfU0laRV9pbnQpKQorCXsKKwkgIHJl dHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNf c2NoZWRfc2V0c2NoZWR1bGVyICovCisgICAgY2FzZSAxNTY6CisgICAgICAv KiBzeXNfc2NoZWRfZ2V0c2NoZWR1bGVyICovCisgICAgY2FzZSAxNTc6Cisg ICAgICAvKiBzeXNfc2NoZWRfeWllbGQgKi8KKyAgICBjYXNlIDE1ODoKKyAg ICAgIC8qIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4ICovCisgICAgY2Fz ZSAxNTk6CisgICAgICAvKiBzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAq LworICAgIGNhc2UgMTYwOgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5 c19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKi8KKyAgICBjYXNlIDE2MToKKyAg ICAgIC8qIHN5c19uYW5vc2xlZXAgKi8KKyAgICBjYXNlIDE2MjoKKyAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUNY X1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJMzg2X1JF Q09SRF9TSVpFX3RpbWVzcGVjKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9 CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX21yZW1hcCAqLworICAg IGNhc2UgMTYzOgorICAgICAgLyogc3lzX3NldHJlc3VpZDE2ICovCisgICAg Y2FzZSAxNjQ6CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2dldHJl c3VpZDE2ICovCisgICAgY2FzZSAxNjU6CisgICAgICByZWdjYWNoZV9yYXdf cmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VCWF9SRUdOVU0sCisJCQkg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgSTM4Nl9SRUNPUkRfU0laRV9vbGRf dWlkX3QpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUNYX1JFR05V TSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJMzg2X1JFQ09SRF9T SVpFX29sZF91aWRfdCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9F RFhfUkVHTlVNLAorCQkJIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIEkzODZf UkVDT1JEX1NJWkVfb2xkX3VpZF90KSkKKwl7CisJICByZXR1cm4gKC0xKTsK Kwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3ZtODYgKi8KKyAg ICBjYXNlIDE2NjoKKyAgICAgIC8qIHN5c19uaV9zeXNjYWxsICovCisgICAg Y2FzZSAxNjc6CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3BvbGwg Ki8KKyAgICBjYXNlIDE2ODoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWNvcmRfcmVnY2FjaGUsIEkzODZfRUJYX1JFR05VTSwKKwkJCSAoZ2RiX2J5 dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHRtcHUzMikKKwl7CisJICB1 aW50MzJfdCBuZmRzOworCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9y ZWdjYWNoZSwgSTM4Nl9FQ1hfUkVHTlVNLAorCQkJICAgICAoZ2RiX2J5dGUg KikgJiBuZmRzKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KHRtcHUzMiwgSTM4Nl9SRUNPUkRfU0laRV9wb2xsZmQgKiBuZmRzKSkKKwkg ICAgeworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJfQorICAgICAg YnJlYWs7CisKKyAgICAgIC8qIHN5c19uZnNzZXJ2Y3RsICovCisgICAgY2Fz ZSAxNjk6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2Nh Y2hlLCBJMzg2X0VCWF9SRUdOVU0sCisJCQkgKGdkYl9ieXRlICopICYgdG1w dTMyKTsKKyAgICAgIGlmICh0bXB1MzIgPT0gNyB8fCB0bXB1MzIgPT0gOCkK Kwl7CisJICB1aW50MzJfdCByc2l6ZTsKKwkgIGlmICh0bXB1MzIgPT0gNykK KwkgICAgeworCSAgICAgIHJzaXplID0gSTM4Nl9SRUNPUkRfU0laRV9ORlNf RkhTSVpFOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICByc2l6 ZSA9IEkzODZfUkVDT1JEX1NJWkVfa25mc2RfZmg7CisJICAgIH0KKwkgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRURYX1JF R05VTSwKKwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgcnNpemUpKQor CSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwl9CisgICAg ICBicmVhazsKKworICAgICAgLyogc3lzX3NldHJlc2dpZDE2ICovCisgICAg Y2FzZSAxNzA6CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2dldHJl c2dpZDE2ICovCisgICAgY2FzZSAxNzE6CisgICAgICByZWdjYWNoZV9yYXdf cmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VCWF9SRUdOVU0sCisJCQkg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgSTM4Nl9SRUNPUkRfU0laRV9vbGRf Z2lkX3QpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUNYX1JFR05V TSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJMzg2X1JFQ09SRF9T SVpFX29sZF9naWRfdCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9F RFhfUkVHTlVNLAorCQkJIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIEkzODZf UkVDT1JEX1NJWkVfb2xkX2dpZF90KSkKKwl7CisJICByZXR1cm4gKC0xKTsK Kwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3ByY3RsICovCisg ICAgY2FzZSAxNzI6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3Jk X3JlZ2NhY2hlLCBJMzg2X0VCWF9SRUdOVU0sCisJCQkgKGdkYl9ieXRlICop ICYgdG1wdTMyKTsKKyAgICAgIHN3aXRjaCAodG1wdTMyKQorCXsKKwljYXNl IDI6CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJ Mzg2X0VDWF9SRUdOVU0sCisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUz Mik7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IEkzODZfUkVDT1JEX1NJWkVfaW50KSkKKwkgICAgeworCSAgICAgIHJldHVy biAoLTEpOworCSAgICB9CisJICBicmVhazsKKwljYXNlIDE2OgorCSAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FQ1hfUkVH TlVNLAorCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworCSAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJMzg2X1JFQ09S RF9TSVpFX1RBU0tfQ09NTV9MRU4pKQorCSAgICB7CisJICAgICAgcmV0dXJu ICgtMSk7CisJICAgIH0KKwkgIGJyZWFrOworCX0KKyAgICAgIGJyZWFrOwor CisgICAgICAvKiBzeXNfcnRfc2lncmV0dXJuICovCisgICAgY2FzZSAxNzM6 CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3J0X3NpZ2FjdGlvbiAq LworICAgIGNhc2UgMTc0OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJl Y29yZF9yZWdjYWNoZSwgSTM4Nl9FRFhfUkVHTlVNLAorCQkJIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICh0bXB1MzIsIEkzODZfUkVDT1JEX1NJWkVfc2lnYWN0aW9uKSkK Kwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAg ICAgLyogc3lzX3J0X3NpZ3Byb2NtYXNrICovCisgICAgY2FzZSAxNzU6Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2 X0VEWF9SRUdOVU0sCisJCQkgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgSTM4 Nl9SRUNPUkRfU0laRV9zaWdzZXRfdCkpCisJeworCSAgcmV0dXJuICgtMSk7 CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19ydF9zaWdwZW5k aW5nICovCisgICAgY2FzZSAxNzY6CisgICAgICByZWdjYWNoZV9yYXdfcmVh ZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VCWF9SRUdOVU0sCisJCQkgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmICh0bXB1MzIpCisJewor CSAgdWludDMyX3Qgc2lnc2V0c2l6ZTsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUNYX1JFR05VTSwKKwkJCSAgICAg KGdkYl9ieXRlICopICYgc2lnc2V0c2l6ZSk7CisJICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHNpZ3NldHNpemUpKQorCSAgICB7 CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwl9CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX3J0X3NpZ3RpbWVkd2FpdCAqLworICAgIGNh c2UgMTc3OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdj YWNoZSwgSTM4Nl9FQ1hfUkVHTlVNLAorCQkJIChnZGJfYnl0ZSAqKSAmIHRt cHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0 bXB1MzIsIEkzODZfUkVDT1JEX1NJWkVfc2lnaW5mb190KSkKKwl7CisJICBy ZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lz X3J0X3NpZ3F1ZXVlaW5mbyAqLworICAgIGNhc2UgMTc4OgorICAgICAgLyog c3lzX3J0X3NpZ3N1c3BlbmQgKi8KKyAgICBjYXNlIDE3OToKKyAgICAgIGJy ZWFrOworCisgICAgICAvKiBzeXNfcHJlYWQ2NCAqLworICAgIGNhc2UgMTgw OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwg STM4Nl9FQ1hfUkVHTlVNLAorCQkJIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 CisgICAgICBpZiAodG1wdTMyKQorCXsKKwkgIHVpbnQzMl90IGNvdW50Owor CSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9F RFhfUkVHTlVNLAorCQkJICAgICAoZ2RiX2J5dGUgKikgJiBjb3VudCk7CisJ ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIGNvdW50 KSkKKwkgICAgeworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJfQor ICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19wd3JpdGU2NCAqLworICAg IGNhc2UgMTgxOgorICAgICAgLyogc3lzX2Nob3duMTYgKi8KKyAgICBjYXNl IDE4MjoKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfZ2V0Y3dkICov CisgICAgY2FzZSAxODM6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVj b3JkX3JlZ2NhY2hlLCBJMzg2X0VCWF9SRUdOVU0sCisJCQkgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKKyAgICAgIGlmICh0bXB1MzIpCisJeworCSAgdWlu dDMyX3Qgc2l6ZTsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIEkzODZfRUNYX1JFR05VTSwKKwkJCSAgICAgKGdkYl9ieXRlICop ICYgc2l6ZSk7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0 bXB1MzIsIHNpemUpKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJ ICAgIH0KKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2NhcGdl dCAqLworICAgIGNhc2UgMTg0OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FQ1hfUkVHTlVNLAorCQkJIChnZGJf Ynl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICh0bXB1MzIsIEkzODZfUkVDT1JEX1NJWkVfY2FwX3VzZXJf ZGF0YV90KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX2NhcHNldCAqLworICAgIGNhc2UgMTg1Ogor ICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19zaWdhbHRzdGFjayAqLwor ICAgIGNhc2UgMTg2OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29y ZF9yZWdjYWNoZSwgSTM4Nl9FQ1hfUkVHTlVNLAorCQkJIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICh0bXB1MzIsIEkzODZfUkVDT1JEX1NJWkVfc3RhY2tfdCkpCisJewor CSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8q IHN5c19zZW5kZmlsZSAqLworICAgIGNhc2UgMTg3OgorICAgICAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FRFhfUkVHTlVN LAorCQkJIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIEkzODZfUkVDT1JEX1NJ WkVfb2ZmX3QpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJy ZWFrOworCisgICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLworICAgIGNhc2Ug MTg4OgorICAgICAgLyogc3lzX25pX3N5c2NhbGwgKi8KKyAgICBjYXNlIDE4 OToKKyAgICAgIC8qIHN5c192Zm9yayAqLworICAgIGNhc2UgMTkwOgorICAg ICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19nZXRybGltaXQgKi8KKyAgICBj YXNlIDE5MToKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIEkzODZfRUNYX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCBJMzg2X1JFQ09SRF9TSVpFX3JsaW1pdCkpCisJeworCSAgcmV0 dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19t bWFwMiAqLworICAgIGNhc2UgMTkyOgorICAgICAgYnJlYWs7CisKKyAgICAg IC8qIHN5c190cnVuY2F0ZTY0ICovCisgICAgY2FzZSAxOTM6CisgICAgICAv KiBzeXNfZnRydW5jYXRlNjQgKi8KKyAgICBjYXNlIDE5NDoKKyAgICAgIGJy ZWFrOworCisgICAgICAvKiBzeXNfc3RhdDY0ICovCisgICAgY2FzZSAxOTU6 CisgICAgICAvKiBzeXNfbHN0YXQ2NCAqLworICAgIGNhc2UgMTk2OgorICAg ICAgLyogc3lzX2ZzdGF0NjQgKi8KKyAgICBjYXNlIDE5NzoKKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUNYX1JF R05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJMzg2X1JFQ09S RF9TSVpFX3N0YXQ2NCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAg ICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19sY2hvd24gKi8KKyAgICBjYXNl IDE5ODoKKyAgICAgIC8qIHN5c19nZXR1aWQgKi8KKyAgICBjYXNlIDE5OToK KyAgICAgIC8qIHN5c19nZXRnaWQgKi8KKyAgICBjYXNlIDIwMDoKKyAgICAg IC8qIHN5c19nZXRldWlkICovCisgICAgY2FzZSAyMDE6CisgICAgICAvKiBz eXNfZ2V0ZWdpZCAqLworICAgIGNhc2UgMjAyOgorICAgICAgLyogc3lzX3Nl dHJldWlkICovCisgICAgY2FzZSAyMDM6CisgICAgICAvKiBzeXNfc2V0cmVn aWQgKi8KKyAgICBjYXNlIDIwNDoKKyAgICAgIGJyZWFrOworCisgICAgICAv KiBzeXNfZ2V0Z3JvdXBzICovCisgICAgY2FzZSAyMDU6CisgICAgICByZWdj YWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VDWF9SRUdO VU0sCisJCQkgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmICh0 bXB1MzIpCisJeworCSAgaW50IGdpZHNldHNpemU7CisJICByZWdjYWNoZV9y YXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VCWF9SRUdOVU0sCisJ CQkgICAgIChnZGJfYnl0ZSAqKSAmIGdpZHNldHNpemUpOworCSAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbQorCSAgICAgICh0bXB1MzIsIEkzODZf UkVDT1JEX1NJWkVfZ2lkX3QgKiBnaWRzZXRzaXplKSkKKwkgICAgeworCSAg ICAgIHJldHVybiAoLTEpOworCSAgICB9CisJfQorICAgICAgYnJlYWs7CisK KyAgICAgIC8qIHN5c19zZXRncm91cHMgKi8KKyAgICBjYXNlIDIwNjoKKyAg ICAgIC8qIHN5c19mY2hvd24gKi8KKyAgICBjYXNlIDIwNzoKKyAgICAgIC8q IHN5c19zZXRyZXN1aWQgKi8KKyAgICBjYXNlIDIwODoKKyAgICAgIGJyZWFr OworCisgICAgICAvKiBzeXNfZ2V0cmVzdWlkICovCisgICAgY2FzZSAyMDk6 CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJ Mzg2X0VCWF9SRUdOVU0sCisJCQkgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK KyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwg STM4Nl9SRUNPUkRfU0laRV91aWRfdCkpCisJeworCSAgcmV0dXJuICgtMSk7 CisJfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNo ZSwgSTM4Nl9FQ1hfUkVHTlVNLAorCQkJIChnZGJfYnl0ZSAqKSAmIHRtcHUz Mik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIEkzODZfUkVDT1JEX1NJWkVfdWlkX3QpKQorCXsKKwkgIHJldHVybiAo LTEpOworCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIEkzODZfRURYX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCBJMzg2X1JFQ09SRF9TSVpFX3VpZF90KSkKKwl7CisJICByZXR1 cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3Nl dHJlc2dpZCAqLworICAgIGNhc2UgMjEwOgorICAgICAgYnJlYWs7CisKKyAg ICAgIC8qIHN5c19nZXRyZXNnaWQgKi8KKyAgICBjYXNlIDIxMToKKyAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUJY X1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJMzg2X1JF Q09SRF9TSVpFX2dpZF90KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9Cisg ICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2 X0VDWF9SRUdOVU0sCisJCQkgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgSTM4 Nl9SRUNPUkRfU0laRV9naWRfdCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJ fQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwg STM4Nl9FRFhfUkVHTlVNLAorCQkJIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIs IEkzODZfUkVDT1JEX1NJWkVfZ2lkX3QpKQorCXsKKwkgIHJldHVybiAoLTEp OworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfY2hvd24gKi8K KyAgICBjYXNlIDIxMjoKKyAgICAgIC8qIHN5c19zZXR1aWQgKi8KKyAgICBj YXNlIDIxMzoKKyAgICAgIC8qIHN5c19zZXRnaWQgKi8KKyAgICBjYXNlIDIx NDoKKyAgICAgIC8qIHN5c19zZXRmc3VpZCAqLworICAgIGNhc2UgMjE1Ogor ICAgICAgLyogc3lzX3NldGZzZ2lkICovCisgICAgY2FzZSAyMTY6CisgICAg ICAvKiBzeXNfcGl2b3Rfcm9vdCAqLworICAgIGNhc2UgMjE3OgorICAgICAg YnJlYWs7CisKKyAgICAgIC8qIHN5c19taW5jb3JlICovCisgICAgY2FzZSAy MTg6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hl LCBJMzg2X0VEWF9SRUdOVU0sCisJCQkgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUz MiwgSTM4Nl9SRUNPUkRfU0laRV9QQUdFX1NJWkUpKQorCXsKKwkgIHJldHVy biAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfbWFk dmlzZSAqLworICAgIGNhc2UgMjE5OgorICAgICAgYnJlYWs7CisKKyAgICAg IC8qIHN5c19nZXRkZW50czY0ICovCisgICAgY2FzZSAyMjA6CisgICAgICB7 CisJdWludDMyX3QgY291bnQ7CisJcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29y ZF9yZWdjYWNoZSwgSTM4Nl9FQ1hfUkVHTlVNLAorCQkJICAgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKKwlyZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3Jl Z2NhY2hlLCBJMzg2X0VEWF9SRUdOVU0sCisJCQkgICAoZ2RiX2J5dGUgKikg JiBjb3VudCk7CisJaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCBJMzg2X1JFQ09SRF9TSVpFX2RpcmVudDY0ICogY291bnQpKQorCSAg eworCSAgICByZXR1cm4gKC0xKTsKKwkgIH0KKyAgICAgIH0KKyAgICAgIGJy ZWFrOworCisgICAgICAvKiBzeXNfZmNudGw2NCAqLworICAgIGNhc2UgMjIx OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwg STM4Nl9FQ1hfUkVHTlVNLAorCQkJIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 CisgICAgICBzd2l0Y2ggKHRtcHUzMikKKwl7CisJY2FzZSBGX0dFVExLNjQ6 CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2 X0VEWF9SRUdOVU0sCisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7 CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIEkz ODZfUkVDT1JEX1NJWkVfZmxvY2s2NCkpCisJICAgIHsKKwkgICAgICByZXR1 cm4gKC0xKTsKKwkgICAgfQorCSAgYnJlYWs7CisJY2FzZSBGX1NFVExLNjQ6 CisJY2FzZSBGX1NFVExLVzY0OgorCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkg IGdvdG8gc3lzX2ZjbnRsOworCSAgYnJlYWs7CisJfQorICAgICAgYnJlYWs7 CisKKyAgICAgIC8qIHN5c19uaV9zeXNjYWxsICovCisgICAgY2FzZSAyMjI6 CisgICAgICAvKiBzeXNfbmlfc3lzY2FsbCAqLworICAgIGNhc2UgMjIzOgor ICAgICAgLyogc3lzX2dldHRpZCAqLworICAgIGNhc2UgMjI0OgorICAgICAg Lyogc3lzX3JlYWRhaGVhZCAqLworICAgIGNhc2UgMjI1OgorICAgICAgLyog c3lzX3NldHhhdHRyICovCisgICAgY2FzZSAyMjY6CisgICAgICAvKiBzeXNf bHNldHhhdHRyICovCisgICAgY2FzZSAyMjc6CisgICAgICAvKiBzeXNfZnNl dHhhdHRyICovCisgICAgY2FzZSAyMjg6CisgICAgICBicmVhazsKKworICAg ICAgLyogc3lzX2dldHhhdHRyICovCisgICAgY2FzZSAyMjk6CisgICAgICAv KiBzeXNfbGdldHhhdHRyICovCisgICAgY2FzZSAyMzA6CisgICAgICAvKiBz eXNfZmdldHhhdHRyICovCisgICAgY2FzZSAyMzE6CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VEWF9SRUdOVU0s CisJCQkgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmICh0bXB1 MzIpCisJeworCSAgdWludDMyX3Qgc2l6ZTsKKwkgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRVNJX1JFR05VTSwKKwkJCSAg ICAgKGdkYl9ieXRlICopICYgc2l6ZSk7CisJICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtICh0bXB1MzIsIHNpemUpKQorCSAgICB7CisJICAgICAg cmV0dXJuICgtMSk7CisJICAgIH0KKwl9CisgICAgICBicmVhazsKKworICAg ICAgLyogc3lzX2xpc3R4YXR0ciAqLworICAgIGNhc2UgMjMyOgorICAgICAg Lyogc3lzX2xsaXN0eGF0dHIgKi8KKyAgICBjYXNlIDIzMzoKKyAgICAgIC8q IHN5c19mbGlzdHhhdHRyICovCisgICAgY2FzZSAyMzQ6CisgICAgICByZWdj YWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VDWF9SRUdO VU0sCisJCQkgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmICh0 bXB1MzIpCisJeworCSAgdWludDMyX3Qgc2l6ZTsKKwkgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRURYX1JFR05VTSwKKwkJ CSAgICAgKGdkYl9ieXRlICopICYgc2l6ZSk7CisJICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIHNpemUpKQorCSAgICB7CisJICAg ICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwl9CisgICAgICBicmVhazsKKwor ICAgICAgLyogc3lzX3JlbW92ZXhhdHRyICovCisgICAgY2FzZSAyMzU6Cisg ICAgICAvKiBzeXNfbHJlbW92ZXhhdHRyICovCisgICAgY2FzZSAyMzY6Cisg ICAgICAvKiBzeXNfZnJlbW92ZXhhdHRyICovCisgICAgY2FzZSAyMzc6Cisg ICAgICAvKiBzeXNfdGtpbGwgKi8KKyAgICBjYXNlIDIzODoKKyAgICAgIGJy ZWFrOworCisgICAgICAvKiBzeXNfc2VuZGZpbGU2NCAqLworICAgIGNhc2Ug MjM5OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNo ZSwgSTM4Nl9FRFhfUkVHTlVNLAorCQkJIChnZGJfYnl0ZSAqKSAmIHRtcHUz Mik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1 MzIsIEkzODZfUkVDT1JEX1NJWkVfbG9mZl90KSkKKwl7CisJICByZXR1cm4g KC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2Z1dGV4 ICovCisgICAgY2FzZSAyNDA6CisgICAgICAvKiBzeXNfc2NoZWRfc2V0YWZm aW5pdHkgKi8KKyAgICBjYXNlIDI0MToKKyAgICAgIGJyZWFrOworCisgICAg ICAvKiBzeXNfc2NoZWRfZ2V0YWZmaW5pdHkgKi8KKyAgICBjYXNlIDI0MjoK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkz ODZfRURYX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwor ICAgICAgaWYgKHRtcHUzMikKKwl7CisJICB1aW50MzJfdCBsZW47CisJICBy ZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VDWF9S RUdOVU0sCisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIGxlbik7CisJICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIGxlbikpCisJICAg IHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGJy ZWFrOworCisgICAgICAvKiBzeXNfc2V0X3RocmVhZF9hcmVhICovCisgICAg Y2FzZSAyNDM6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3Jl Z2NhY2hlLCBJMzg2X0VCWF9SRUdOVU0sCisJCQkgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KHRtcHUzMiwgSTM4Nl9SRUNPUkRfU0laRV9pbnQpKQorCXsKKwkgIHJldHVy biAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfZ2V0 X3RocmVhZF9hcmVhICovCisgICAgY2FzZSAyNDQ6CisgICAgICByZWdjYWNo ZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VCWF9SRUdOVU0s CisJCQkgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgSTM4Nl9SRUNPUkRfU0la RV91c2VyX2Rlc2MpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAg IGJyZWFrOworCisgICAgICAvKiBzeXNfaW9fc2V0dXAgKi8KKyAgICBjYXNl IDI0NToKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2Fj aGUsIEkzODZfRUNYX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1 MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1w dTMyLCBJMzg2X1JFQ09SRF9TSVpFX2xvbmcpKQorCXsKKwkgIHJldHVybiAo LTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfaW9fZGVz dHJveSAqLworICAgIGNhc2UgMjQ2OgorICAgICAgYnJlYWs7CisKKyAgICAg IC8qIHN5c19pb19nZXRldmVudHMgKi8KKyAgICBjYXNlIDI0NzoKKyAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRVNJ X1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAg aWYgKHRtcHUzMikKKwl7CisJICBpbnQzMl90IG5yOworCSAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FRFhfUkVHTlVNLAor CQkJICAgICAoZ2RiX2J5dGUgKikgJiBucik7CisJICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIG5yICogSTM4Nl9SRUNPUkRfU0la RV9pb19ldmVudCkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkg ICAgfQorCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfaW9fc3Vi bWl0ICovCisgICAgY2FzZSAyNDg6CisgICAgICByZWdjYWNoZV9yYXdfcmVh ZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VEWF9SRUdOVU0sCisJCQkgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmICh0bXB1MzIpCisJewor CSAgaW50MzJfdCBpLCBucjsKKwkgIHVpbnQzMl90ICppb2NicDsKKwkgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUNYX1JF R05VTSwKKwkJCSAgICAgKGdkYl9ieXRlICopICYgbnIpOworCSAgaW9jYnAg PSAodWludDMyX3QgKikgYWxsb2NhIChuciAqIEkzODZfUkVDT1JEX1NJWkVf aW50KTsKKwkgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkKKwkgICAgICAodG1w dTMyLCAoZ2RiX2J5dGUgKikgaW9jYnAsIG5yICogSTM4Nl9SRUNPUkRfU0la RV9pbnQpKQorCSAgICB7CisJICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChn ZGJfc3RkbG9nLAorCQkJCSAgInJlY29yZDogcmVhZCBtZW1vcnkgYWRkciA9 IDB4JXMgbGVuID0gJWQgZXJyb3IuXG4iLAorCQkJCSAgcGFkZHJfbnogKHRt cHUzMiksIG5yICogSTM4Nl9SRUNPUkRfU0laRV9pbnQpOworCSAgICAgIHJl dHVybiAoLTEpOworCSAgICB9CisJICBmb3IgKGkgPSAwOyBpIDwgbnI7IGkr KykKKwkgICAgeworCSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKGlvY2JwW2ldLCBJMzg2X1JFQ09SRF9TSVpFX2lvY2IpKQorCQl7CisJ CSAgcmV0dXJuICgtMSk7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIGJyZWFr OworCisgICAgICAvKiBzeXNfaW9fY2FuY2VsICovCisgICAgY2FzZSAyNDk6 CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJ Mzg2X0VEWF9SRUdOVU0sCisJCQkgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK KyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwg STM4Nl9SRUNPUkRfU0laRV9pb19ldmVudCkpCisJeworCSAgcmV0dXJuICgt MSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19mYWR2aXNl NjQgKi8KKyAgICBjYXNlIDI1MDoKKyAgICAgIC8qIHN5c19uaV9zeXNjYWxs ICovCisgICAgY2FzZSAyNTE6CisgICAgICBicmVhazsKKworICAgICAgLyog c3lzX2V4aXRfZ3JvdXAgKi8KKyAgICBjYXNlIDI1MjoKKyAgICAgIHsKKwlp bnQgcTsKKwl0YXJnZXRfdGVybWluYWxfb3VycyAoKTsKKwlxID0KKwkgIHlx dWVyeSAoXworCQkgICgiVGhlIG5leHQgaW5zdHJ1Y3Rpb24gaXMgc3lzY2Fs bCBleGl0X2dyb3VwLiBJdCB3aWxsIG1ha2UgdGhlIHByb2dyYW0gZXhpdC4g RG8geW91IHdhbnQgdG8gcGF1c2UgdGhlIHByb2dyYW0uIikpOworCXRhcmdl dF90ZXJtaW5hbF9pbmZlcmlvciAoKTsKKwlpZiAocSkKKwkgIHsKKwkgICAg cmV0dXJuICgxKTsKKwkgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisg ICAgICAvKiBzeXNfbG9va3VwX2Rjb29raWUgKi8KKyAgICBjYXNlIDI1MzoK KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkz ODZfRUNYX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwor ICAgICAgaWYgKHRtcHUzMikKKwl7CisJICB1aW50MzJfdCBsZW47CisJICBy ZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VEWF9S RUdOVU0sCisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIGxlbik7CisJICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIGxlbikpCisJICAg IHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGJy ZWFrOworCisgICAgICAvKiBzeXNfZXBvbGxfY3JlYXRlICovCisgICAgY2Fz ZSAyNTQ6CisgICAgICAvKiBzeXNfZXBvbGxfY3RsICovCisgICAgY2FzZSAy NTU6CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2Vwb2xsX3dhaXQg Ki8KKyAgICBjYXNlIDI1NjoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWNvcmRfcmVnY2FjaGUsIEkzODZfRUNYX1JFR05VTSwKKwkJCSAoZ2RiX2J5 dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHRtcHUzMikKKwl7CisJICBp bnQzMl90IG1heGV2ZW50czsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNv cmRfcmVnY2FjaGUsIEkzODZfRURYX1JFR05VTSwKKwkJCSAgICAgKGdkYl9i eXRlICopICYgbWF4ZXZlbnRzKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0KKwkgICAgICAodG1wdTMyLCBtYXhldmVudHMgKiBJMzg2X1JF Q09SRF9TSVpFX2Vwb2xsX2V2ZW50KSkKKwkgICAgeworCSAgICAgIHJldHVy biAoLTEpOworCSAgICB9CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8q IHN5c19yZW1hcF9maWxlX3BhZ2VzICovCisgICAgY2FzZSAyNTc6CisgICAg ICAvKiBzeXNfc2V0X3RpZF9hZGRyZXNzICovCisgICAgY2FzZSAyNTg6Cisg ICAgICBicmVhazsKKworICAgICAgLyogc3lzX3RpbWVyX2NyZWF0ZSAqLwor ICAgIGNhc2UgMjU5OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29y ZF9yZWdjYWNoZSwgSTM4Nl9FRFhfUkVHTlVNLAorCQkJIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICh0bXB1MzIsIEkzODZfUkVDT1JEX1NJWkVfaW50KSkKKwl7CisJICBy ZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lz X3RpbWVyX3NldHRpbWUgKi8KKyAgICBjYXNlIDI2MDoKKyAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRVNJX1JFR05V TSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJMzg2X1JFQ09SRF9T SVpFX2l0aW1lcnNwZWMpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAg ICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfdGltZXJfZ2V0dGltZSAqLwor ICAgIGNhc2UgMjYxOgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29y ZF9yZWdjYWNoZSwgSTM4Nl9FQ1hfUkVHTlVNLAorCQkJIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICh0bXB1MzIsIEkzODZfUkVDT1JEX1NJWkVfaXRpbWVyc3BlYykpCisJ eworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAg IC8qIHN5c190aW1lcl9nZXRvdmVycnVuICovCisgICAgY2FzZSAyNjI6Cisg ICAgICAvKiBzeXNfdGltZXJfZGVsZXRlICovCisgICAgY2FzZSAyNjM6Cisg ICAgICAvKiBzeXNfY2xvY2tfc2V0dGltZSAqLworICAgIGNhc2UgMjY0Ogor ICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19jbG9ja19nZXR0aW1lICov CisgICAgY2FzZSAyNjU6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVj b3JkX3JlZ2NhY2hlLCBJMzg2X0VDWF9SRUdOVU0sCisJCQkgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKHRtcHUzMiwgSTM4Nl9SRUNPUkRfU0laRV90aW1lc3BlYykpCisJ eworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAg IC8qIHN5c19jbG9ja19nZXRyZXMgKi8KKyAgICBjYXNlIDI2NjoKKyAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUNY X1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJMzg2X1JF Q09SRF9TSVpFX3RpbWVzcGVjKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9 CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX2Nsb2NrX25hbm9zbGVl cCAqLworICAgIGNhc2UgMjY3OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQg KHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FU0lfUkVHTlVNLAorCQkJIChnZGJf Ynl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICh0bXB1MzIsIEkzODZfUkVDT1JEX1NJWkVfdGltZXNwZWMp KQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisg ICAgICAvKiBzeXNfc3RhdGZzNjQgKi8KKyAgICBjYXNlIDI2ODoKKyAgICAg IC8qIHN5c19mc3RhdGZzNjQgKi8KKyAgICBjYXNlIDI2OToKKyAgICAgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRURYX1JF R05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJMzg2X1JFQ09S RF9TSVpFX3N0YXRmczY0KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9Cisg ICAgICBicmVhazsKKworICAgICAgLyogc3lzX3Rna2lsbCAqLworICAgIGNh c2UgMjcwOgorICAgICAgLyogc3lzX3V0aW1lcyAqLworICAgIGNhc2UgMjcx OgorICAgICAgLyogc3lzX2ZhZHZpc2U2NF82NCAqLworICAgIGNhc2UgMjcy OgorICAgICAgLyogc3lzX25pX3N5c2NhbGwgKi8KKyAgICBjYXNlIDI3MzoK KyAgICAgIC8qIHN5c19tYmluZCAqLworICAgIGNhc2UgMjc0OgorICAgICAg YnJlYWs7CisKKyAgICAgIC8qIHN5c19nZXRfbWVtcG9saWN5ICovCisgICAg Y2FzZSAyNzU6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3Jl Z2NhY2hlLCBJMzg2X0VCWF9SRUdOVU0sCisJCQkgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KHRtcHUzMiwgSTM4Nl9SRUNPUkRfU0laRV9pbnQpKQorCXsKKwkgIHJldHVy biAoLTEpOworCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRf cmVnY2FjaGUsIEkzODZfRUNYX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOworICAgICAgaWYgKHRtcHUzMikKKwl7CisJICB1aW50MzJf dCBtYXhub2RlOworCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdj YWNoZSwgSTM4Nl9FRFhfUkVHTlVNLAorCQkJICAgICAoZ2RiX2J5dGUgKikg JiBtYXhub2RlKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0g KHRtcHUzMiwgbWF4bm9kZSAqIEkzODZfUkVDT1JEX1NJWkVfbG9uZykpCisJ ICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAg IGJyZWFrOworCisgICAgICAvKiBzeXNfc2V0X21lbXBvbGljeSAqLworICAg IGNhc2UgMjc2OgorICAgICAgLyogc3lzX21xX29wZW4gKi8KKyAgICBjYXNl IDI3NzoKKyAgICAgIC8qIHN5c19tcV91bmxpbmsgKi8KKyAgICBjYXNlIDI3 ODoKKyAgICAgIC8qIHN5c19tcV90aW1lZHNlbmQgKi8KKyAgICBjYXNlIDI3 OToKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfbXFfdGltZWRyZWNl aXZlICovCisgICAgY2FzZSAyODA6CisgICAgICByZWdjYWNoZV9yYXdfcmVh ZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VDWF9SRUdOVU0sCisJCQkgKGdk Yl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmICh0bXB1MzIpCisJewor CSAgdWludDMyX3QgbXNnX2xlbjsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWNvcmRfcmVnY2FjaGUsIEkzODZfRURYX1JFR05VTSwKKwkJCSAgICAgKGdk Yl9ieXRlICopICYgbXNnX2xlbik7CisJICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfbWVtICh0bXB1MzIsIG1zZ19sZW4pKQorCSAgICB7CisJICAgICAg cmV0dXJuICgtMSk7CisJICAgIH0KKwl9CisgICAgICByZWdjYWNoZV9yYXdf cmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VTSV9SRUdOVU0sCisJCQkg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgSTM4Nl9SRUNPUkRfU0laRV9pbnQp KQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisg ICAgICAvKiBzeXNfbXFfbm90aWZ5ICovCisgICAgY2FzZSAyODE6CisgICAg ICBicmVhazsKKworICAgICAgLyogc3lzX21xX2dldHNldGF0dHIgKi8KKyAg ICBjYXNlIDI4MjoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRf cmVnY2FjaGUsIEkzODZfRURYX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21l bSAodG1wdTMyLCBJMzg2X1JFQ09SRF9TSVpFX21xX2F0dHIpKQorCXsKKwkg IHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBz eXNfa2V4ZWNfbG9hZCAqLworICAgIGNhc2UgMjgzOgorICAgICAgYnJlYWs7 CisKKyAgICAgIC8qIHN5c193YWl0aWQgKi8KKyAgICBjYXNlIDI4NDoKKyAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZf RURYX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJMzg2 X1JFQ09SRF9TSVpFX3NpZ2luZm8pKQorCXsKKwkgIHJldHVybiAoLTEpOwor CX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUs IEkzODZfRURJX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMy LCBJMzg2X1JFQ09SRF9TSVpFX3J1c2FnZSkpCisJeworCSAgcmV0dXJuICgt MSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19uaV9zeXNj YWxsICovCisgICAgY2FzZSAyODU6CisgICAgICAvKiBzeXNfYWRkX2tleSAq LworICAgIGNhc2UgMjg2OgorICAgICAgLyogc3lzX3JlcXVlc3Rfa2V5ICov CisgICAgY2FzZSAyODc6CisgICAgICBicmVhazsKKworICAgICAgLyogc3lz X2tleWN0bCAqLworICAgIGNhc2UgMjg4OgorICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FQlhfUkVHTlVNLAorCQkJ IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAodG1wdTMyID09 IDYgfHwgdG1wdTMyID09IDExKQorCXsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFk IChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRURYX1JFR05VTSwKKwkJCSAgICAg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgIGlmICh0bXB1MzIpCisJICAg IHsKKwkgICAgICB1aW50MzJfdCBidWZsZW47CisJICAgICAgcmVnY2FjaGVf cmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FU0lfUkVHTlVNLAor CQkJCSAoZ2RiX2J5dGUgKikgJiBidWZsZW4pOworCSAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgYnVmbGVuKSkKKwkJewor CQkgIHJldHVybiAoLTEpOworCQl9CisJICAgIH0KKwl9CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzX2lvcHJpb19zZXQgKi8KKyAgICBjYXNlIDI4 OToKKyAgICAgIC8qIHN5c19pb3ByaW9fZ2V0ICovCisgICAgY2FzZSAyOTA6 CisgICAgICAvKiBzeXNfaW5vdGlmeV9pbml0ICovCisgICAgY2FzZSAyOTE6 CisgICAgICAvKiBzeXNfaW5vdGlmeV9hZGRfd2F0Y2ggKi8KKyAgICBjYXNl IDI5MjoKKyAgICAgIC8qIHN5c19pbm90aWZ5X3JtX3dhdGNoICovCisgICAg Y2FzZSAyOTM6CisgICAgICAvKiBzeXNfbWlncmF0ZV9wYWdlcyAqLworICAg IGNhc2UgMjk0OgorICAgICAgLyogc3lzX29wZW5hdCAqLworICAgIGNhc2Ug Mjk1OgorICAgICAgLyogc3lzX21rZGlyYXQgKi8KKyAgICBjYXNlIDI5NjoK KyAgICAgIC8qIHN5c19ta25vZGF0ICovCisgICAgY2FzZSAyOTc6CisgICAg ICAvKiBzeXNfZmNob3duYXQgKi8KKyAgICBjYXNlIDI5ODoKKyAgICAgIC8q IHN5c19mdXRpbWVzYXQgKi8KKyAgICBjYXNlIDI5OToKKyAgICAgIGJyZWFr OworCisgICAgICAvKiBzeXNfZnN0YXRhdDY0ICovCisgICAgY2FzZSAzMDA6 CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJ Mzg2X0VEWF9SRUdOVU0sCisJCQkgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK KyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwg STM4Nl9SRUNPUkRfU0laRV9zdGF0NjQpKQorCXsKKwkgIHJldHVybiAoLTEp OworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfdW5saW5rYXQg Ki8KKyAgICBjYXNlIDMwMToKKyAgICAgIC8qIHN5c19yZW5hbWVhdCAqLwor ICAgIGNhc2UgMzAyOgorICAgICAgLyogc3lzX2xpbmthdCAqLworICAgIGNh c2UgMzAzOgorICAgICAgLyogc3lzX3N5bWxpbmthdCAqLworICAgIGNhc2Ug MzA0OgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19yZWFkbGlua2F0 ICovCisgICAgY2FzZSAzMDU6CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAo cmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VEWF9SRUdOVU0sCisJCQkgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmICh0bXB1MzIpCisJeworCSAg aW50MzJfdCBidWZzaXo7CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3Jk X3JlZ2NhY2hlLCBJMzg2X0VTSV9SRUdOVU0sCisJCQkgICAgIChnZGJfYnl0 ZSAqKSAmIGJ1ZnNpeik7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICh0bXB1MzIsIGJ1ZnNpeikpCisJICAgIHsKKwkgICAgICByZXR1cm4g KC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBz eXNfZmNobW9kYXQgKi8KKyAgICBjYXNlIDMwNjoKKyAgICAgIC8qIHN5c19m YWNjZXNzYXQgKi8KKyAgICBjYXNlIDMwNzoKKyAgICAgIGJyZWFrOworCisg ICAgICAvKiBzeXNfcHNlbGVjdDYgKi8KKyAgICBjYXNlIDMwODoKKyAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUNY X1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJMzg2X1JF Q09SRF9TSVpFX2ZkX3NldCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQor ICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4 Nl9FRFhfUkVHTlVNLAorCQkJIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7Cisg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIEkz ODZfUkVDT1JEX1NJWkVfZmRfc2V0KSkKKwl7CisJICByZXR1cm4gKC0xKTsK Kwl9CisgICAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hl LCBJMzg2X0VTSV9SRUdOVU0sCisJCQkgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUz MiwgSTM4Nl9SRUNPUkRfU0laRV9mZF9zZXQpKQorCXsKKwkgIHJldHVybiAo LTEpOworCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIEkzODZfRURJX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCBJMzg2X1JFQ09SRF9TSVpFX3RpbWVzcGVjKSkKKwl7CisJICBy ZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lz X3Bwb2xsICovCisgICAgY2FzZSAzMDk6CisgICAgICByZWdjYWNoZV9yYXdf cmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VCWF9SRUdOVU0sCisJCQkg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmICh0bXB1MzIpCisJ eworCSAgdWludDMyX3QgbmZkczsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChy ZWNvcmRfcmVnY2FjaGUsIEkzODZfRUNYX1JFR05VTSwKKwkJCSAgICAgKGdk Yl9ieXRlICopICYgbmZkcyk7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtICh0bXB1MzIsIEkzODZfUkVDT1JEX1NJWkVfcG9sbGZkICogbmZk cykpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0K KyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkz ODZfRURYX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOwor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJ Mzg2X1JFQ09SRF9TSVpFX3RpbWVzcGVjKSkKKwl7CisJICByZXR1cm4gKC0x KTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc3lzX3Vuc2hhcmUg Ki8KKyAgICBjYXNlIDMxMDoKKyAgICAgIC8qIHN5c19zZXRfcm9idXN0X2xp c3QgKi8KKyAgICBjYXNlIDMxMToKKyAgICAgIGJyZWFrOworCisgICAgICAv KiBzeXNfZ2V0X3JvYnVzdF9saXN0ICovCisgICAgY2FzZSAzMTI6CisgICAg ICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VD WF9SRUdOVU0sCisJCQkgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgSTM4Nl9S RUNPUkRfU0laRV9pbnQpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAg ICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZf RURYX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJMzg2 X1JFQ09SRF9TSVpFX2ludCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQor ICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHN5c19zcGxpY2UgKi8KKyAgICBj YXNlIDMxMzoKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIEkzODZfRUNYX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAo dG1wdTMyLCBJMzg2X1JFQ09SRF9TSVpFX2xvZmZfdCkpCisJeworCSAgcmV0 dXJuICgtMSk7CisJfQorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29y ZF9yZWdjYWNoZSwgSTM4Nl9FU0lfUkVHTlVNLAorCQkJIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtICh0bXB1MzIsIEkzODZfUkVDT1JEX1NJWkVfbG9mZl90KSkKKwl7CisJ ICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyog c3lzX3N5bmNfZmlsZV9yYW5nZSAqLworICAgIGNhc2UgMzE0OgorICAgICAg Lyogc3lzX3RlZSAqLworICAgIGNhc2UgMzE1OgorICAgICAgLyogc3lzX3Zt c3BsaWNlICovCisgICAgY2FzZSAzMTY6CisgICAgICBicmVhazsKKworICAg ICAgLyogc3lzX21vdmVfcGFnZXMgKi8KKyAgICBjYXNlIDMxNzoKKyAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRURJ X1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAg aWYgKHRtcHUzMikKKwl7CisJICB1aW50MzJfdCBucl9wYWdlczsKKwkgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUNYX1JF R05VTSwKKwkJCSAgICAgKGdkYl9ieXRlICopICYgbnJfcGFnZXMpOworCSAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBucl9wYWdl cyAqIEkzODZfUkVDT1JEX1NJWkVfaW50KSkKKwkgICAgeworCSAgICAgIHJl dHVybiAoLTEpOworCSAgICB9CisJfQorICAgICAgYnJlYWs7CisKKyAgICAg IC8qIHN5c19nZXRjcHUgKi8KKyAgICBjYXNlIDMxODoKKyAgICAgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUJYX1JFR05V TSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX21lbSAodG1wdTMyLCBJMzg2X1JFQ09SRF9T SVpFX2ludCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FQ1hfUkVH TlVNLAorCQkJIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtICh0bXB1MzIsIEkzODZfUkVDT1JE X1NJWkVfaW50KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBy ZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VEWF9S RUdOVU0sCisJCQkgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKHRtcHUzMiwgSTM4Nl9SRUNP UkRfU0laRV91bG9uZyAqIDIpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0K KyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNfZXBvbGxfcHdhaXQgKi8K KyAgICBjYXNlIDMxOToKKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNv cmRfcmVnY2FjaGUsIEkzODZfRUNYX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUg KikgJiB0bXB1MzIpOworICAgICAgaWYgKHRtcHUzMikKKwl7CisJICBpbnQz Ml90IG1heGV2ZW50czsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRf cmVnY2FjaGUsIEkzODZfRURYX1JFR05VTSwKKwkJCSAgICAgKGdkYl9ieXRl ICopICYgbWF4ZXZlbnRzKTsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0KKwkgICAgICAodG1wdTMyLCBtYXhldmVudHMgKiBJMzg2X1JFQ09S RF9TSVpFX2Vwb2xsX2V2ZW50KSkKKwkgICAgeworCSAgICAgIHJldHVybiAo LTEpOworCSAgICB9CisJfQorICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0 OgorICAgICAgcHJpbnRmX3VuZmlsdGVyZWQgKF8KKwkJCSAoInJlY29yZDog cmVjb3JkIGFuZCByZXZlcnNlIGZ1bmN0aW9uIGRvbid0IHN1cHBvcnQgc3lz Y2FsbCBudW1iZXIgMHglMDh4XG4iKSwKKwkJCSB0bXB1MzIpOworICAgICAg cmV0dXJuICgtMSk7CisgICAgICBicmVhazsKKyAgICB9CisgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUFYX1JFR05VTSkpCisgICAg eworICAgICAgcmV0dXJuICgtMSk7CisgICAgfQorCisgIHJldHVybiAoMCk7 Cit9CisKIAwKIAogLyogVGhlIHJlZ2lzdGVyIHNldHMgdXNlZCBpbiBHTlUv TGludXggRUxGIGNvcmUtZHVtcHMgYXJlIGlkZW50aWNhbCB0bwpAQCAtNDI5 LDYgKzI5NTksOSBAQCBpMzg2X2xpbnV4X2luaXRfYWJpIChzdHJ1Y3QgZ2Ri YXJjaF9pbmZvCiAgIHRkZXAtPnNjX3JlZ19vZmZzZXQgPSBpMzg2X2xpbnV4 X3NjX3JlZ19vZmZzZXQ7CiAgIHRkZXAtPnNjX251bV9yZWdzID0gQVJSQVlf U0laRSAoaTM4Nl9saW51eF9zY19yZWdfb2Zmc2V0KTsKIAorICB0ZGVwLT5p Mzg2X2ludHg4MF9yZWNvcmQgPSBpMzg2X2xpbnV4X2ludHg4MF9zeXNlbnRl cl9yZWNvcmQ7CisgIHRkZXAtPmkzODZfc3lzZW50ZXJfcmVjb3JkID0gaTM4 Nl9saW51eF9pbnR4ODBfc3lzZW50ZXJfcmVjb3JkOworCiAgIC8qIE5fRlVO IHN5bWJvbHMgaW4gc2hhcmVkIGxpYmFyaWVzIGhhdmUgMCBmb3IgdGhlaXIg dmFsdWVzIGFuZCBuZWVkCiAgICAgIHRvIGJlIHJlbG9jYXRlZC4gKi8KICAg c2V0X2dkYmFyY2hfc29mdW5fYWRkcmVzc19tYXliZV9taXNzaW5nIChnZGJh cmNoLCAxKTsKLS0tIGEvZ2RiL2kzODYtdGRlcC5jCisrKyBiL2dkYi9pMzg2 LXRkZXAuYwpAQCAtNDksNiArNDksOSBAQAogI2luY2x1ZGUgImkzODYtdGRl cC5oIgogI2luY2x1ZGUgImkzODctdGRlcC5oIgogCisjaW5jbHVkZSAicmVj b3JkLmgiCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKIC8qIFJlZ2lzdGVyIG5h bWVzLiAgKi8KIAogc3RhdGljIGNoYXIgKmkzODZfcmVnaXN0ZXJfbmFtZXNb XSA9CkBAIC0yMzE1LDE1NCArMjMxOCwyNjgyIEBAIGkzODZfZmV0Y2hfcG9p bnRlcl9hcmd1bWVudCAoc3RydWN0IGZyYW0KICAgcmV0dXJuIHJlYWRfbWVt b3J5X3Vuc2lnbmVkX2ludGVnZXIgKHNwICsgKDQgKiAoYXJnaSArIDEpKSwg NCk7CiB9CiAKLQwKLXN0YXRpYyBzdHJ1Y3QgZ2RiYXJjaCAqCi1pMzg2X2dk YmFyY2hfaW5pdCAoc3RydWN0IGdkYmFyY2hfaW5mbyBpbmZvLCBzdHJ1Y3Qg Z2RiYXJjaF9saXN0ICphcmNoZXMpCi17Ci0gIHN0cnVjdCBnZGJhcmNoX3Rk ZXAgKnRkZXA7Ci0gIHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoOwogCi0gIC8q IElmIHRoZXJlIGlzIGFscmVhZHkgYSBjYW5kaWRhdGUsIHVzZSBpdC4gICov Ci0gIGFyY2hlcyA9IGdkYmFyY2hfbGlzdF9sb29rdXBfYnlfaW5mbyAoYXJj aGVzLCAmaW5mbyk7Ci0gIGlmIChhcmNoZXMgIT0gTlVMTCkKLSAgICByZXR1 cm4gYXJjaGVzLT5nZGJhcmNoOworI2RlZmluZSBQUkVGSVhfUkVQWgkweDAx CisjZGVmaW5lIFBSRUZJWF9SRVBOWgkweDAyCisjZGVmaW5lIFBSRUZJWF9M T0NLCTB4MDQKKyNkZWZpbmUgUFJFRklYX0RBVEEJMHgwOAorI2RlZmluZSBQ UkVGSVhfQUREUgkweDEwCisKKy8qIG9wZXJhbmQgc2l6ZSAqLworZW51bQor eworICBPVF9CWVRFID0gMCwKKyAgT1RfV09SRCwKKyAgT1RfTE9ORywKK307 CiAKLSAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBuZXcgYXJjaGl0ZWN0 dXJlLiAgKi8KLSAgdGRlcCA9IFhDQUxMT0MgKDEsIHN0cnVjdCBnZGJhcmNo X3RkZXApOwotICBnZGJhcmNoID0gZ2RiYXJjaF9hbGxvYyAoJmluZm8sIHRk ZXApOworLyogaTM4NiBhcml0aC9sb2dpYyBvcGVyYXRpb25zICovCitlbnVt Cit7CisgIE9QX0FEREwsCisgIE9QX09STCwKKyAgT1BfQURDTCwKKyAgT1Bf U0JCTCwKKyAgT1BfQU5ETCwKKyAgT1BfU1VCTCwKKyAgT1BfWE9STCwKKyAg T1BfQ01QTCwKK307CiAKLSAgLyogR2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVy cy4gICovCi0gIHRkZXAtPmdyZWdzZXQgPSBOVUxMOwotICB0ZGVwLT5ncmVn c2V0X3JlZ19vZmZzZXQgPSBOVUxMOwotICB0ZGVwLT5ncmVnc2V0X251bV9y ZWdzID0gSTM4Nl9OVU1fR1JFR1M7Ci0gIHRkZXAtPnNpemVvZl9ncmVnc2V0 ID0gMDsKK3N0YXRpYyBpbnQgYWZsYWcgPSAxOworc3RhdGljIGludCBkZmxh ZyA9IDE7CitzdGF0aWMgaW50IG92ZXJyaWRlID0gMDsKK3N0YXRpYyB1aW50 OF90IG1vZHJtOworc3RhdGljIHVpbnQ4X3QgbW9kLCByZWcsIHJtOworc3Rh dGljIGludCBvdDsKK3N0YXRpYyBDT1JFX0FERFIgaTM4Nl9yZWNvcmRfcGM7 CiAKLSAgLyogRmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzLiAgKi8KLSAgdGRl cC0+ZnByZWdzZXQgPSBOVUxMOwotICB0ZGVwLT5zaXplb2ZfZnByZWdzZXQg PSBJMzg3X1NJWkVPRl9GU0FWRTsKKy8qIFBhcnNlICJtb2RybSIgcGFydCBp biBjdXJyZW50IG1lbW9yeSBhZGRyZXNzIHRoYXQgaTM4Nl9yZWNvcmRfcGMg cG9pbnQgdG8uCisgICBSZXR1cm4gLTEgaWYgc29tZXRoaW5nIHdyb25nLiAq Lworc3RhdGljIGludAoraTM4Nl9yZWNvcmRfbW9kcm0gKHZvaWQpCit7Cisg IGlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKGkzODZfcmVjb3JkX3BjLCAmbW9k cm0sIDEpKQorICAgIHsKKyAgICAgIHByaW50Zl91bmZpbHRlcmVkIChfKCJy ZWNvcmQ6IHJlYWQgbWVtZW9yeSAweCVzIGVycm9yLlxuIiksCisJCQkgcGFk ZHJfbnogKGkzODZfcmVjb3JkX3BjKSk7CisgICAgICByZXR1cm4gKC0xKTsK KyAgICB9CisgIGkzODZfcmVjb3JkX3BjKys7CisgIG1vZCA9IChtb2RybSA+ PiA2KSAmIDM7CisgIHJlZyA9IChtb2RybSA+PiAzKSAmIDc7CisgIHJtID0g bW9kcm0gJiA3OwogCi0gIC8qIFRoZSBkZWZhdWx0IHNldHRpbmdzIGluY2x1 ZGUgdGhlIEZQVSByZWdpc3RlcnMsIHRoZSBNTVggcmVnaXN0ZXJzCi0gICAg IGFuZCB0aGUgU1NFIHJlZ2lzdGVycy4gIFRoaXMgY2FuIGJlIG92ZXJyaWRk ZW4gZm9yIGEgc3BlY2lmaWMgQUJJCi0gICAgIGJ5IGFkanVzdGluZyB0aGUg bWVtYmVycyBgc3QwX3JlZ251bScsIGBtbTBfcmVnbnVtJyBhbmQKLSAgICAg YG51bV94bW1fcmVncycgb2YgYHN0cnVjdCBnZGJhcmNoX3RkZXAnLCBvdGhl cndpc2UgdGhlIHJlZ2lzdGVycwotICAgICB3aWxsIHNob3cgdXAgaW4gdGhl IG91dHB1dCBvZiAiaW5mbyBhbGwtcmVnaXN0ZXJzIi4gIElkZWFsbHkgd2UK LSAgICAgc2hvdWxkIHRyeSB0byBhdXRvZGV0ZWN0IHdoZXRoZXIgdGhleSBh cmUgYXZhaWxhYmxlLCBzdWNoIHRoYXQgd2UKLSAgICAgY2FuIHByZXZlbnQg ImluZm8gYWxsLXJlZ2lzdGVycyIgZnJvbSBkaXNwbGF5aW5nIHJlZ2lzdGVy cyB0aGF0Ci0gICAgIGFyZW4ndCBhdmFpbGFibGUuCisgIHJldHVybiAoMCk7 Cit9CiAKLSAgICAgTk9URToga2V2aW5iLzIwMDMtMDctMTM6IC4uLiBpZiBp dCdzIGEgY2hvaWNlIGJldHdlZW4gcHJpbnRpbmcKLSAgICAgW3RoZSBTU0Ug cmVnaXN0ZXJzXSBhbHdheXMgKGV2ZW4gd2hlbiB0aGV5IGRvbid0IGV4aXN0 KSBvciBuZXZlcgotICAgICBzaG93aW5nIHRoZW0gdG8gdGhlIHVzZXIgKGV2 ZW4gd2hlbiB0aGV5IGRvIGV4aXN0KSwgSSBwcmVmZXIgdGhlCi0gICAgIGZv cm1lciBvdmVyIHRoZSBsYXR0ZXIuICAqLworLyogR2V0IHRoZSBtZW1vcnkg YWRkcmVzcyB0aGF0IGN1cnJlbnQgaW5zdHJ1Y3Rpb24gIHdyaXRlIHRvIGFu ZCBzZXQgaXQgdG8KKyAgIHRoZSBhcmd1bWVudCAiYWRkciIuCisgICBSZXR1 cm4gLTEgaWYgc29tZXRoaW5nIHdyb25nLiAqLworc3RhdGljIGludAoraTM4 Nl9yZWNvcmRfbGVhX21vZHJtX2FkZHIgKHVpbnQzMl90ICogYWRkcikKK3sK KyAgdWludDhfdCB0bXB1ODsKKyAgdWludDE2X3QgdG1wdTE2OworICB1aW50 MzJfdCB0bXB1MzI7CisKKyAgKmFkZHIgPSAwOworICBpZiAoYWZsYWcpCisg ICAgeworICAgICAgLyogMzIgYml0cyAqLworICAgICAgaW50IGhhdmVzaWIg PSAwOworICAgICAgdWludDhfdCBzY2FsZSA9IDA7CisgICAgICB1aW50OF90 IGluZGV4ID0gMDsKKyAgICAgIHVpbnQ4X3QgYmFzZSA9IHJtOwogCi0gIHRk ZXAtPnN0MF9yZWdudW0gPSBJMzg2X1NUMF9SRUdOVU07CisgICAgICBpZiAo YmFzZSA9PSA0KQorCXsKKwkgIGhhdmVzaWIgPSAxOworCSAgaWYgKHRhcmdl dF9yZWFkX21lbW9yeSAoaTM4Nl9yZWNvcmRfcGMsICZ0bXB1OCwgMSkpCisJ ICAgIHsKKwkgICAgICBwcmludGZfdW5maWx0ZXJlZCAoXygicmVjb3JkOiBy ZWFkIG1lbWVvcnkgMHglcyBlcnJvci5cbiIpLAorCQkJCSBwYWRkcl9ueiAo aTM4Nl9yZWNvcmRfcGMpKTsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAg fQorCSAgaTM4Nl9yZWNvcmRfcGMrKzsKKwkgIHNjYWxlID0gKHRtcHU4ID4+ IDYpICYgMzsKKwkgIGluZGV4ID0gKCh0bXB1OCA+PiAzKSAmIDcpOworCSAg YmFzZSA9ICh0bXB1OCAmIDcpOworCX0KIAotICAvKiBUaGUgTU1YIHJlZ2lz dGVycyBhcmUgaW1wbGVtZW50ZWQgYXMgcHNldWRvLXJlZ2lzdGVycy4gIFB1 dCBvZmYKLSAgICAgY2FsY3VsYXRpbmcgdGhlIHJlZ2lzdGVyIG51bWJlciBm b3IgJW1tMCB1bnRpbCB3ZSBrbm93IHRoZSBudW1iZXIKLSAgICAgb2YgcmF3 IHJlZ2lzdGVycy4gICovCi0gIHRkZXAtPm1tMF9yZWdudW0gPSAwOworICAg ICAgc3dpdGNoIChtb2QpCisJeworCWNhc2UgMDoKKwkgIGlmICgoYmFzZSAm IDcpID09IDUpCisJICAgIHsKKwkgICAgICBiYXNlID0gMHhmZjsKKwkgICAg ICBpZiAodGFyZ2V0X3JlYWRfbWVtb3J5IChpMzg2X3JlY29yZF9wYywgKGdk Yl9ieXRlICopIGFkZHIsIDQpKQorCQl7CisJCSAgcHJpbnRmX3VuZmlsdGVy ZWQgKF8oInJlY29yZDogcmVhZCBtZW1lb3J5IDB4JXMgZXJyb3IuXG4iKSwK KwkJCQkgICAgIHBhZGRyX256IChpMzg2X3JlY29yZF9wYykpOworCQkgIHJl dHVybiAoLTEpOworCQl9CisJICAgICAgaTM4Nl9yZWNvcmRfcGMgKz0gNDsK KwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgKmFkZHIgPSAwOwor CSAgICB9CisJICBicmVhazsKKwljYXNlIDE6CisJICBpZiAodGFyZ2V0X3Jl YWRfbWVtb3J5IChpMzg2X3JlY29yZF9wYywgJnRtcHU4LCAxKSkKKwkgICAg eworCSAgICAgIHByaW50Zl91bmZpbHRlcmVkIChfKCJyZWNvcmQ6IHJlYWQg bWVtZW9yeSAweCVzIGVycm9yLlxuIiksCisJCQkJIHBhZGRyX256IChpMzg2 X3JlY29yZF9wYykpOworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJ ICBpMzg2X3JlY29yZF9wYysrOworCSAgKmFkZHIgPSAoaW50OF90KSB0bXB1 ODsKKwkgIGJyZWFrOworCWNhc2UgMjoKKwkgIGlmICh0YXJnZXRfcmVhZF9t ZW1vcnkgKGkzODZfcmVjb3JkX3BjLCAoZ2RiX2J5dGUgKikgYWRkciwgNCkp CisJICAgIHsKKwkgICAgICBwcmludGZfdW5maWx0ZXJlZCAoXygicmVjb3Jk OiByZWFkIG1lbWVvcnkgMHglcyBlcnJvci5cbiIpLAorCQkJCSBwYWRkcl9u eiAoaTM4Nl9yZWNvcmRfcGMpKTsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkg ICAgfQorCSAgaTM4Nl9yZWNvcmRfcGMgKz0gNDsKKwkgIGJyZWFrOworCX0K IAotICAvKiBJMzg2X05VTV9YUkVHUyBpbmNsdWRlcyAlbXhjc3IsIHNvIHN1 YnN0cmFjdCBvbmUuICAqLwotICB0ZGVwLT5udW1feG1tX3JlZ3MgPSBJMzg2 X05VTV9YUkVHUyAtIDE7CisgICAgICBpZiAoYmFzZSAhPSAweGZmKQorCXsK KwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIGJhc2Us IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJICAqYWRkciArPSB0bXB1MzI7 CisJfQogCi0gIHRkZXAtPmpiX3BjX29mZnNldCA9IC0xOwotICB0ZGVwLT5z dHJ1Y3RfcmV0dXJuID0gcGNjX3N0cnVjdF9yZXR1cm47Ci0gIHRkZXAtPnNp Z3RyYW1wX3N0YXJ0ID0gMDsKLSAgdGRlcC0+c2lndHJhbXBfZW5kID0gMDsK LSAgdGRlcC0+c2lndHJhbXBfcCA9IGkzODZfc2lndHJhbXBfcDsKLSAgdGRl cC0+c2lnY29udGV4dF9hZGRyID0gTlVMTDsKLSAgdGRlcC0+c2NfcmVnX29m ZnNldCA9IE5VTEw7Ci0gIHRkZXAtPnNjX3BjX29mZnNldCA9IC0xOwotICB0 ZGVwLT5zY19zcF9vZmZzZXQgPSAtMTsKKyAgICAgIC8qIFhYWDogaW5kZXgg PT0gNCBpcyBhbHdheXMgaW52YWxpZCAqLworICAgICAgaWYgKGhhdmVzaWIg JiYgKGluZGV4ICE9IDQgfHwgc2NhbGUgIT0gMCkpCisJeworCSAgcmVnY2Fj aGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgaW5kZXgsIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7CisJICAqYWRkciArPSB0bXB1MzIgPDwgc2NhbGU7 CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIDE2IGJpdHMg Ki8KKyAgICAgIHN3aXRjaCAobW9kKQorCXsKKwljYXNlIDA6CisJICBpZiAo cm0gPT0gNikKKwkgICAgeworCSAgICAgIGlmICh0YXJnZXRfcmVhZF9tZW1v cnkKKwkJICAoaTM4Nl9yZWNvcmRfcGMsIChnZGJfYnl0ZSAqKSAmIHRtcHUx NiwgMikpCisJCXsKKwkJICBwcmludGZfdW5maWx0ZXJlZCAoXygicmVjb3Jk OiByZWFkIG1lbWVvcnkgMHglcyBlcnJvci5cbiIpLAorCQkJCSAgICAgcGFk ZHJfbnogKGkzODZfcmVjb3JkX3BjKSk7CisJCSAgcmV0dXJuICgtMSk7CisJ CX0KKwkgICAgICBpMzg2X3JlY29yZF9wYyArPSAyOworCSAgICAgICphZGRy ID0gKGludDE2X3QpIHRtcHUxNjsKKwkgICAgICBybSA9IDA7CisJICAgICAg Z290byBub19ybTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAg KmFkZHIgPSAwOworCSAgICB9CisJICBicmVhazsKKwljYXNlIDE6CisJICBp ZiAodGFyZ2V0X3JlYWRfbWVtb3J5IChpMzg2X3JlY29yZF9wYywgJnRtcHU4 LCAxKSkKKwkgICAgeworCSAgICAgIHByaW50Zl91bmZpbHRlcmVkIChfKCJy ZWNvcmQ6IHJlYWQgbWVtZW9yeSAweCVzIGVycm9yLlxuIiksCisJCQkJIHBh ZGRyX256IChpMzg2X3JlY29yZF9wYykpOworCSAgICAgIHJldHVybiAoLTEp OworCSAgICB9CisJICBpMzg2X3JlY29yZF9wYysrOworCSAgKmFkZHIgPSAo aW50OF90KSB0bXB1ODsKKwkgIGJyZWFrOworCWNhc2UgMjoKKwkgIGlmICh0 YXJnZXRfcmVhZF9tZW1vcnkgKGkzODZfcmVjb3JkX3BjLCAoZ2RiX2J5dGUg KikgJiB0bXB1MTYsIDIpKQorCSAgICB7CisJICAgICAgcHJpbnRmX3VuZmls dGVyZWQgKF8oInJlY29yZDogcmVhZCBtZW1lb3J5IDB4JXMgZXJyb3IuXG4i KSwKKwkJCQkgcGFkZHJfbnogKGkzODZfcmVjb3JkX3BjKSk7CisJICAgICAg cmV0dXJuICgtMSk7CisJICAgIH0KKwkgIGkzODZfcmVjb3JkX3BjICs9IDI7 CisJICAqYWRkciA9IChpbnQxNl90KSB0bXB1MTY7CisJICBicmVhazsKKwl9 CiAKLSAgLyogVGhlIGZvcm1hdCB1c2VkIGZvciBgbG9uZyBkb3VibGUnIG9u IGFsbW9zdCBhbGwgaTM4NiB0YXJnZXRzIGlzCi0gICAgIHRoZSBpMzg3IGV4 dGVuZGVkIGZsb2F0aW5nLXBvaW50IGZvcm1hdC4gIEluIGZhY3QsIG9mIGFs bCB0YXJnZXRzCi0gICAgIGluIHRoZSBHQ0MgMi45NSB0cmVlLCBvbmx5IE9T Ri8xIGRvZXMgaXQgZGlmZmVyZW50LCBhbmQgaW5zaXN0cwotICAgICBvbiBo YXZpbmcgYSBgbG9uZyBkb3VibGUnIHRoYXQncyBub3QgYGxvbmcnIGF0IGFs bC4gICovCi0gIHNldF9nZGJhcmNoX2xvbmdfZG91YmxlX2Zvcm1hdCAoZ2Ri YXJjaCwgZmxvYXRmb3JtYXRzX2kzODdfZXh0KTsKKyAgICAgIHN3aXRjaCAo cm0pCisJeworCWNhc2UgMDoKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNv cmRfcmVnY2FjaGUsIEkzODZfRUJYX1JFR05VTSwKKwkJCSAgICAgKGdkYl9i eXRlICopICYgdG1wdTMyKTsKKwkgICphZGRyICs9IHRtcHUzMjsKKwkgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRVNJX1JF R05VTSwKKwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgICph ZGRyICs9IHRtcHUzMjsKKwkgIGJyZWFrOworCWNhc2UgMToKKwkgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUJYX1JFR05V TSwKKwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgICphZGRy ICs9IHRtcHUzMjsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIEkzODZfRURJX1JFR05VTSwKKwkJCSAgICAgKGdkYl9ieXRlICop ICYgdG1wdTMyKTsKKwkgICphZGRyICs9IHRtcHUzMjsKKwkgIGJyZWFrOwor CWNhc2UgMjoKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2Fj aGUsIEkzODZfRUJQX1JFR05VTSwKKwkJCSAgICAgKGdkYl9ieXRlICopICYg dG1wdTMyKTsKKwkgICphZGRyICs9IHRtcHUzMjsKKwkgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRVNJX1JFR05VTSwKKwkJ CSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgICphZGRyICs9IHRt cHUzMjsKKwkgIGJyZWFrOworCWNhc2UgMzoKKwkgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUJQX1JFR05VTSwKKwkJCSAg ICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgICphZGRyICs9IHRtcHUz MjsKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkz ODZfRURJX1JFR05VTSwKKwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMy KTsKKwkgICphZGRyICs9IHRtcHUzMjsKKwkgIGJyZWFrOworCWNhc2UgNDoK KwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZf RVNJX1JFR05VTSwKKwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK KwkgICphZGRyICs9IHRtcHUzMjsKKwkgIGJyZWFrOworCWNhc2UgNToKKwkg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRURJ X1JFR05VTSwKKwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkg ICphZGRyICs9IHRtcHUzMjsKKwkgIGJyZWFrOworCWNhc2UgNjoKKwkgIHJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUJQX1JF R05VTSwKKwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgICph ZGRyICs9IHRtcHUzMjsKKwkgIGJyZWFrOworCWNhc2UgNzoKKwkgIHJlZ2Nh Y2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRUJYX1JFR05V TSwKKwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgICphZGRy ICs9IHRtcHUzMjsKKwkgIGJyZWFrOworCX0KKyAgICAgICphZGRyICY9IDB4 ZmZmZjsKKyAgICB9CiAKLSAgLyogQWx0aG91Z2ggdGhlIGkzODcgZXh0ZW5k ZWQgZmxvYXRpbmctcG9pbnQgaGFzIG9ubHkgODAgc2lnbmlmaWNhbnQKLSAg ICAgYml0cywgYSBgbG9uZyBkb3VibGUnIGFjdHVhbGx5IHRha2VzIHVwIDk2 LCBwcm9iYWJseSB0byBlbmZvcmNlCi0gICAgIGFsaWdubWVudC4gICovCi0g IHNldF9nZGJhcmNoX2xvbmdfZG91YmxlX2JpdCAoZ2RiYXJjaCwgOTYpOwor bm9fcm06CisgIHJldHVybiAoMCk7Cit9CiAKLSAgLyogVGhlIGRlZmF1bHQg QUJJIGluY2x1ZGVzIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMsIAotICAg ICBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMsIGFuZCB0aGUgU1NFIHJlZ2lz dGVycy4gICovCi0gIHNldF9nZGJhcmNoX251bV9yZWdzIChnZGJhcmNoLCBJ Mzg2X1NTRV9OVU1fUkVHUyk7Ci0gIHNldF9nZGJhcmNoX3JlZ2lzdGVyX25h bWUgKGdkYmFyY2gsIGkzODZfcmVnaXN0ZXJfbmFtZSk7Ci0gIHNldF9nZGJh cmNoX3JlZ2lzdGVyX3R5cGUgKGdkYmFyY2gsIGkzODZfcmVnaXN0ZXJfdHlw ZSk7CisvKiBSZWNvcmQgdGhlIHZhbHVlIG9mIHRoZSBtZW1vcnkgdGhhdCB3 aWxsYmUgY2hhbmdlZCBpbiBjdXJyZW50IGluc3RydWN0aW9uCisgICB0byAi cmVjb3JkX2FyY2hfbGlzdCIuCisgICBSZXR1cm4gLTEgaWYgc29tZXRoaW5n IHdyb25nLiAqLworc3RhdGljIGludAoraTM4Nl9yZWNvcmRfbGVhX21vZHJt ICh2b2lkKQoreworICB1aW50MzJfdCBhZGRyOwogCi0gIC8qIFJlZ2lzdGVy IG51bWJlcnMgb2YgdmFyaW91cyBpbXBvcnRhbnQgcmVnaXN0ZXJzLiAgKi8K LSAgc2V0X2dkYmFyY2hfc3BfcmVnbnVtIChnZGJhcmNoLCBJMzg2X0VTUF9S RUdOVU0pOyAvKiAlZXNwICovCi0gIHNldF9nZGJhcmNoX3BjX3JlZ251bSAo Z2RiYXJjaCwgSTM4Nl9FSVBfUkVHTlVNKTsgLyogJWVpcCAqLwotICBzZXRf Z2RiYXJjaF9wc19yZWdudW0gKGdkYmFyY2gsIEkzODZfRUZMQUdTX1JFR05V TSk7IC8qICVlZmxhZ3MgKi8KLSAgc2V0X2dkYmFyY2hfZnAwX3JlZ251bSAo Z2RiYXJjaCwgSTM4Nl9TVDBfUkVHTlVNKTsgLyogJXN0KDApICovCisgIGlm IChvdmVycmlkZSkKKyAgICB7CisgICAgICBwcmludGZfdW5maWx0ZXJlZCAo XworCQkJICgicmVjb3JkOiBjYW5uJ3QgZ2V0IHRoZSB2YWx1ZSBvZiB0aGUg c2VnbWVudCByZWdpc3RlciBpbiBhZGRyZXNzIDB4JXMuIFJlY29yZCBpZ25v cmUgdGhpcyBjaGFuZ2UuXG4iKSwKKwkJCSBwYWRkcl9ueiAocmVhZF9wYyAo KSkpOworICAgICAgcmV0dXJuICgwKTsKKyAgICB9CiAKLSAgLyogTk9URTog a2V0dGVuaXMvMjAwNDA0MTg6IEdDQyBkb2VzIGhhdmUgdHdvIHBvc3NpYmxl IHJlZ2lzdGVyCi0gICAgIG51bWJlcmluZyBzY2hlbWVzIG9uIHRoZSBpMzg2 OiBkYnggYW5kIFNWUjQuICBUaGVzZSBzY2hlbWVzCi0gICAgIGRpZmZlciBp biBob3cgdGhleSBudW1iZXIgJWVicCwgJWVzcCwgJWVmbGFncywgYW5kIHRo ZQotICAgICBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMsIGFuZCBhcmUgaW1w bGVtZW50ZWQgYnkgdGhlIGFycmF5cwotICAgICBkYnhfcmVnaXN0ZXJfbWFw W10gYW5kIHN2cjRfZGJ4X3JlZ2lzdGVyX21hcCBpbgotICAgICBnY2MvY29u ZmlnL2kzODYuYy4gIEdDQyBhbHNvIGRlZmluZXMgYSB0aGlyZCBudW1iZXJp bmcgc2NoZW1lIGluCi0gICAgIGdjYy9jb25maWcvaTM4Ni5jLCB3aGljaCBp dCBkZXNpZ25hdGVzIGFzIHRoZSAiZGVmYXVsdCIgcmVnaXN0ZXIKLSAgICAg bWFwIHVzZWQgaW4gNjRiaXQgbW9kZS4gIFRoaXMgbGFzdCByZWdpc3RlciBu dW1iZXJpbmcgc2NoZW1lIGlzCi0gICAgIGltcGxlbWVudGVkIGluIGRieDY0 X3JlZ2lzdGVyX21hcCwgYW5kIGlzIHVzZWQgZm9yIEFNRDY0OyBzZWUKLSAg ICAgYW1kNjQtdGRlcC5jLgorICBpZiAoaTM4Nl9yZWNvcmRfbGVhX21vZHJt X2FkZHIgKCZhZGRyKSkKKyAgICB7CisgICAgICByZXR1cm4gKC0xKTsKKyAg ICB9CiAKLSAgICAgQ3VycmVudGx5LCBlYWNoIEdDQyBpMzg2IHRhcmdldCBh bHdheXMgdXNlcyB0aGUgc2FtZSByZWdpc3RlcgotICAgICBudW1iZXJpbmcg c2NoZW1lIGFjcm9zcyBhbGwgaXRzIHN1cHBvcnRlZCBkZWJ1Z2dpbmcgZm9y bWF0cwotICAgICBpLmUuIFNEQiAoQ09GRiksIHN0YWJzIGFuZCBEV0FSRiAy LiAgVGhpcyBpcyBiZWNhdXNlCi0gICAgIGdjYy9zZGJvdXQuYywgZ2NjL2Ri eG91dC5jIGFuZCBnY2MvZHdhcmYyb3V0LmMgYWxsIHVzZSB0aGUKLSAgICAg REJYX1JFR0lTVEVSX05VTUJFUiBtYWNybyB3aGljaCBpcyBkZWZpbmVkIGJ5 IGVhY2ggdGFyZ2V0J3MKLSAgICAgcmVzcGVjdGl2ZSBjb25maWcgaGVhZGVy IGluIGEgbWFubmVyIGluZGVwZW5kZW50IG9mIHRoZSByZXF1ZXN0ZWQKLSAg ICAgb3V0cHV0IGRlYnVnZ2luZyBmb3JtYXQuCisgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0gKGFkZHIsIDEgPDwgb3QpKQorICAgIHsKKyAgICAg IHJldHVybiAoLTEpOworICAgIH0KIAotICAgICBUaGlzIGRvZXMgbm90IG1h dGNoIHRoZSBhcnJhbmdlbWVudCBiZWxvdywgd2hpY2ggcHJlc3VtZXMgdGhh dAotICAgICB0aGUgU0RCIGFuZCBzdGFicyBudW1iZXJpbmcgc2NoZW1lcyBk aWZmZXIgZnJvbSB0aGUgRFdBUkYgYW5kCi0gICAgIERXQVJGIDIgb25lcy4g IFRoZSByZWFzb24gZm9yIHRoaXMgYXJyYW5nZW1lbnQgaXMgdGhhdCBpdCBp cwotICAgICBsaWtlbHkgdG8gZ2V0IHRoZSBudW1iZXJpbmcgc2NoZW1lIGZv ciB0aGUgdGFyZ2V0J3MKLSAgICAgZGVmYXVsdC9uYXRpdmUgZGVidWcgZm9y bWF0IHJpZ2h0LiAgRm9yIHRhcmdldHMgd2hlcmUgR0NDIGlzIHRoZQotICAg ICBuYXRpdmUgY29tcGlsZXIgKEZyZWVCU0QsIE5ldEJTRCwgT3BlbkJTRCwg R05VL0xpbnV4KSBvciBmb3IKLSAgICAgdGFyZ2V0cyB3aGVyZSB0aGUgbmF0 aXZlIHRvb2xjaGFpbiB1c2VzIGEgZGlmZmVyZW50IG51bWJlcmluZwotICAg ICBzY2hlbWUgZm9yIGEgcGFydGljdWxhciBkZWJ1ZyBmb3JtYXQgKHN0YWJz LWluLUVMRiBvbiBTb2xhcmlzKQotICAgICB0aGUgZGVmYXVsdHMgYmVsb3cg d2lsbCBoYXZlIHRvIGJlIG92ZXJyaWRkZW4sIGxpa2UKLSAgICAgaTM4Nl9l bGZfaW5pdF9hYmkoKSBkb2VzLiAgKi8KKyAgcmV0dXJuICgwKTsKK30KIAot ICAvKiBVc2UgdGhlIGRieCByZWdpc3RlciBudW1iZXJpbmcgc2NoZW1lIGZv ciBzdGFicyBhbmQgQ09GRi4gICovCi0gIHNldF9nZGJhcmNoX3N0YWJfcmVn X3RvX3JlZ251bSAoZ2RiYXJjaCwgaTM4Nl9kYnhfcmVnX3RvX3JlZ251bSk7 Ci0gIHNldF9nZGJhcmNoX3NkYl9yZWdfdG9fcmVnbnVtIChnZGJhcmNoLCBp Mzg2X2RieF9yZWdfdG9fcmVnbnVtKTsKKy8qIFBhcnNlIHRoZSBjdXJyZW50 IGluc3RydWN0aW9uIGFuZCByZWNvcmQgdGhlIHZhbHVlcyBvZiB0aGUgcmVn aXN0ZXJzIGFuZAorICAgbWVtb3J5IHRoYXQgd2lsbCBiZSBjaGFuZ2VkIGlu IGN1cnJlbnQgaW5zdHJ1Y3Rpb24gdG8gInJlY29yZF9hcmNoX2xpc3QiLgor ICAgUmV0dXJuIC0xIGlmIHNvbWV0aGluZyB3cm9uZy4gKi8KK3N0YXRpYyBp bnQKK2kzODZfcmVjb3JkIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCkKK3sK KyAgaW50IHByZWZpeGVzID0gMDsKKyAgdWludDhfdCB0bXB1ODsKKyAgdWlu dDE2X3QgdG1wdTE2OworICB1aW50MzJfdCB0bXB1MzI7CisgIHVpbnQzMl90 IG9wY29kZTsKKyAgaW50IG5lZWRfZGFzbSA9IDA7CiAKLSAgLyogVXNlIHRo ZSBTVlI0IHJlZ2lzdGVyIG51bWJlcmluZyBzY2hlbWUgZm9yIERXQVJGIGFu ZCBEV0FSRiAyLiAgKi8KLSAgc2V0X2dkYmFyY2hfZHdhcmZfcmVnX3RvX3Jl Z251bSAoZ2RiYXJjaCwgaTM4Nl9zdnI0X3JlZ190b19yZWdudW0pOwotICBz ZXRfZ2RiYXJjaF9kd2FyZjJfcmVnX3RvX3JlZ251bSAoZ2RiYXJjaCwgaTM4 Nl9zdnI0X3JlZ190b19yZWdudW0pOworICBpMzg2X3JlY29yZF9wYyA9IHJl YWRfcGMgKCk7CisgIGFmbGFnID0gMTsKKyAgZGZsYWcgPSAxOworICBvdmVy cmlkZSA9IDA7CiAKLSAgLyogV2UgZG9uJ3Qgc2V0IGdkYmFyY2hfc3RhYl9y ZWdfdG9fcmVnbnVtLCBzaW5jZSBFQ09GRiBkb2Vzbid0IHNlZW0gdG8KLSAg ICAgYmUgaW4gdXNlIG9uIGFueSBvZiB0aGUgc3VwcG9ydGVkIGkzODYgdGFy Z2V0cy4gICovCisgIGlmIChkZWJ1Z19yZWNvcmQpCisgICAgeworICAgICAg ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAicmVjb3JkOiBpMzg2 X3JlY29yZCBwYyA9IDB4JXNcbiIsCisJCQkgIHBhZGRyX256IChpMzg2X3Jl Y29yZF9wYykpOworICAgIH0KIAotICBzZXRfZ2RiYXJjaF9wcmludF9mbG9h dF9pbmZvIChnZGJhcmNoLCBpMzg3X3ByaW50X2Zsb2F0X2luZm8pOworICAv KiBwcmVmaXhlcyAqLworICB3aGlsZSAoMSkKKyAgICB7CisgICAgICBpZiAo dGFyZ2V0X3JlYWRfbWVtb3J5IChpMzg2X3JlY29yZF9wYywgJnRtcHU4LCAx KSkKKwl7CisJICBwcmludGZfdW5maWx0ZXJlZCAoXygicmVjb3JkOiByZWFk IG1lbWVvcnkgMHglcyBlcnJvci5cbiIpLAorCQkJICAgICBwYWRkcl9ueiAo aTM4Nl9yZWNvcmRfcGMpKTsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAg IGkzODZfcmVjb3JkX3BjKys7CisgICAgICBzd2l0Y2ggKHRtcHU4KQorCXsK KwljYXNlIDB4ZjM6CisJICBwcmVmaXhlcyB8PSBQUkVGSVhfUkVQWjsKKwkg IGJyZWFrOworCWNhc2UgMHhmMjoKKwkgIHByZWZpeGVzIHw9IFBSRUZJWF9S RVBOWjsKKwkgIGJyZWFrOworCWNhc2UgMHhmMDoKKwkgIHByZWZpeGVzIHw9 IFBSRUZJWF9MT0NLOworCSAgYnJlYWs7CisJY2FzZSAweDJlOgorCSAgb3Zl cnJpZGUgPSBJMzg2X0NTX1JFR05VTTsKKwkgIGJyZWFrOworCWNhc2UgMHgz NjoKKwkgIG92ZXJyaWRlID0gSTM4Nl9TU19SRUdOVU07CisJICBicmVhazsK KwljYXNlIDB4M2U6CisJICBvdmVycmlkZSA9IEkzODZfRFNfUkVHTlVNOwor CSAgYnJlYWs7CisJY2FzZSAweDI2OgorCSAgb3ZlcnJpZGUgPSBJMzg2X0VT X1JFR05VTTsKKwkgIGJyZWFrOworCWNhc2UgMHg2NDoKKwkgIG92ZXJyaWRl ID0gSTM4Nl9GU19SRUdOVU07CisJICBicmVhazsKKwljYXNlIDB4NjU6CisJ ICBvdmVycmlkZSA9IEkzODZfR1NfUkVHTlVNOworCSAgYnJlYWs7CisJY2Fz ZSAweDY2OgorCSAgcHJlZml4ZXMgfD0gUFJFRklYX0RBVEE7CisJICBicmVh azsKKwljYXNlIDB4Njc6CisJICBwcmVmaXhlcyB8PSBQUkVGSVhfQUREUjsK KwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBnb3RvIG91dF9wcmVmaXhlczsK KwkgIGJyZWFrOworCX0KKyAgICB9CitvdXRfcHJlZml4ZXM6CisgIGlmIChw cmVmaXhlcyAmIFBSRUZJWF9EQVRBKQorICAgIHsKKyAgICAgIGRmbGFnIF49 IDE7CisgICAgfQorICBpZiAocHJlZml4ZXMgJiBQUkVGSVhfQUREUikKKyAg ICB7CisgICAgICBhZmxhZyBePSAxOworICAgIH0KIAotICBzZXRfZ2RiYXJj aF9nZXRfbG9uZ2ptcF90YXJnZXQgKGdkYmFyY2gsIGkzODZfZ2V0X2xvbmdq bXBfdGFyZ2V0KTsKKyAgLyogbm93IGNoZWNrIG9wIGNvZGUgKi8KKyAgb3Bj b2RlID0gKHVpbnQzMl90KSB0bXB1ODsKK3Jlc3dpdGNoOgorICBzd2l0Y2gg KG9wY29kZSkKKyAgICB7CisgICAgY2FzZSAweDBmOgorICAgICAgaWYgKHRh cmdldF9yZWFkX21lbW9yeSAoaTM4Nl9yZWNvcmRfcGMsICZ0bXB1OCwgMSkp CisJeworCSAgcHJpbnRmX3VuZmlsdGVyZWQgKF8oInJlY29yZDogcmVhZCBt ZW1lb3J5IDB4JXMgZXJyb3IuXG4iKSwKKwkJCSAgICAgcGFkZHJfbnogKGkz ODZfcmVjb3JkX3BjKSk7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBp Mzg2X3JlY29yZF9wYysrOworICAgICAgb3Bjb2RlID0gKHVpbnQxNl90KSB0 bXB1OCB8IDB4MGYwMDsKKyAgICAgIGdvdG8gcmVzd2l0Y2g7CisgICAgICBi cmVhazsKIAotICAvKiBDYWxsIGR1bW15IGNvZGUuICAqLwotICBzZXRfZ2Ri YXJjaF9wdXNoX2R1bW15X2NhbGwgKGdkYmFyY2gsIGkzODZfcHVzaF9kdW1t eV9jYWxsKTsKKyAgICAgIC8qIGFyaXRoICYgbG9naWMgKi8KKyAgICBjYXNl IDB4MDAgLi4uIDB4MDU6CisgICAgY2FzZSAweDA4IC4uLiAweDBkOgorICAg IGNhc2UgMHgxMCAuLi4gMHgxNToKKyAgICBjYXNlIDB4MTggLi4uIDB4MWQ6 CisgICAgY2FzZSAweDIwIC4uLiAweDI1OgorICAgIGNhc2UgMHgyOCAuLi4g MHgyZDoKKyAgICBjYXNlIDB4MzAgLi4uIDB4MzU6CisgICAgY2FzZSAweDM4 IC4uLiAweDNkOgorICAgICAgaWYgKCgob3Bjb2RlID4+IDMpICYgNykgIT0g T1BfQ01QTCkKKwl7CisJICBpZiAoKG9wY29kZSAmIDEpID09IDApCisJICAg IHsKKwkgICAgICBvdCA9IE9UX0JZVEU7CisJICAgIH0KKwkgIGVsc2UKKwkg ICAgeworCSAgICAgIG90ID0gZGZsYWcgKyBPVF9XT1JEOworCSAgICB9CiAK LSAgc2V0X2dkYmFyY2hfY29udmVydF9yZWdpc3Rlcl9wIChnZGJhcmNoLCBp Mzg2X2NvbnZlcnRfcmVnaXN0ZXJfcCk7Ci0gIHNldF9nZGJhcmNoX3JlZ2lz dGVyX3RvX3ZhbHVlIChnZGJhcmNoLCAgaTM4Nl9yZWdpc3Rlcl90b192YWx1 ZSk7Ci0gIHNldF9nZGJhcmNoX3ZhbHVlX3RvX3JlZ2lzdGVyIChnZGJhcmNo LCBpMzg2X3ZhbHVlX3RvX3JlZ2lzdGVyKTsKKwkgIHN3aXRjaCAoKG9wY29k ZSA+PiAxKSAmIDMpCisJICAgIHsKKwkgICAgICAvKiBPUCBFdiwgR3YgKi8K KwkgICAgY2FzZSAwOgorCSAgICAgIGlmIChpMzg2X3JlY29yZF9tb2RybSAo KSkKKwkJeworCQkgIHJldHVybiAoLTEpOworCQl9CisJICAgICAgaWYgKG1v ZCAhPSAzKQorCQl7CisJCSAgaWYgKGkzODZfcmVjb3JkX2xlYV9tb2RybSAo KSkKKwkJICAgIHsKKwkJICAgICAgcmV0dXJuICgtMSk7CisJCSAgICB9CisJ CX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBpZiAob3QgPT0gT1RfQllURSkK KwkJICAgIHsKKwkJICAgICAgcm0gJj0gMHgzOworCQkgICAgfQorCQkgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKHJtKSkKKwkJICAgIHsKKwkJ ICAgICAgcmV0dXJuICgtMSk7CisJCSAgICB9CisJCX0KKwkgICAgICBicmVh azsKKwkgICAgICAvKiBPUCBHdiwgRXYgKi8KKwkgICAgY2FzZSAxOgorCSAg ICAgIGlmIChpMzg2X3JlY29yZF9tb2RybSAoKSkKKwkJeworCQkgIHJldHVy biAoLTEpOworCQl9CisJICAgICAgaWYgKG90ID09IE9UX0JZVEUpCisJCXsK KwkJICByZWcgJj0gMHgzOworCQl9CisJICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX3JlZyAocmVnKSkKKwkJeworCQkgIHJldHVybiAoLTEpOwor CQl9CisJICAgICAgYnJlYWs7CisJICAgICAgLyogT1AgQSwgSXYgKi8KKwkg ICAgY2FzZSAyOgorCSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9y ZWcgKEkzODZfRUFYX1JFR05VTSkpCisJCXsKKwkJICByZXR1cm4gKC0xKTsK KwkJfQorCSAgICAgIGJyZWFrOworCSAgICB9CisJfQorICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FRkxBR1NfUkVHTlVNKSkK Kwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKIAotICBz ZXRfZ2RiYXJjaF9yZXR1cm5fdmFsdWUgKGdkYmFyY2gsIGkzODZfcmV0dXJu X3ZhbHVlKTsKKyAgICAgIC8qIEdSUDEgKi8KKyAgICBjYXNlIDB4ODAgLi4u IDB4ODM6CisgICAgICBpZiAoaTM4Nl9yZWNvcmRfbW9kcm0gKCkpCisJewor CSAgcmV0dXJuICgtMSk7CisJfQogCi0gIHNldF9nZGJhcmNoX3NraXBfcHJv bG9ndWUgKGdkYmFyY2gsIGkzODZfc2tpcF9wcm9sb2d1ZSk7CisgICAgICBp ZiAocmVnICE9IE9QX0NNUEwpCisJeworCSAgaWYgKChvcGNvZGUgJiAxKSA9 PSAwKQorCSAgICB7CisJICAgICAgb3QgPSBPVF9CWVRFOworCSAgICB9CisJ ICBlbHNlCisJICAgIHsKKwkgICAgICBvdCA9IGRmbGFnICsgT1RfV09SRDsK KwkgICAgfQogCi0gIC8qIFN0YWNrIGdyb3dzIGRvd253YXJkLiAgKi8KLSAg c2V0X2dkYmFyY2hfaW5uZXJfdGhhbiAoZ2RiYXJjaCwgY29yZV9hZGRyX2xl c3N0aGFuKTsKKwkgIGlmIChtb2QgIT0gMykKKwkgICAgeworCSAgICAgIGlm IChpMzg2X3JlY29yZF9sZWFfbW9kcm0gKCkpCisJCXsKKwkJICByZXR1cm4g KC0xKTsKKwkJfQorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBp ZiAob3QgPT0gT1RfQllURSkKKwkJeworCQkgIHJlZyAmPSAweDM7CisJCX0K KwkgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChyZWcpKQor CQl7CisJCSAgcmV0dXJuICgtMSk7CisJCX0KKwkgICAgfQorCX0KKyAgICAg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUZMQUdTX1JF R05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7 CiAKLSAgc2V0X2dkYmFyY2hfYnJlYWtwb2ludF9mcm9tX3BjIChnZGJhcmNo LCBpMzg2X2JyZWFrcG9pbnRfZnJvbV9wYyk7Ci0gIHNldF9nZGJhcmNoX2Rl Y3JfcGNfYWZ0ZXJfYnJlYWsgKGdkYmFyY2gsIDEpOworICAgICAgLyogaW52 ICovCisgICAgY2FzZSAweDQwIC4uLiAweDQ3OgorICAgICAgLyogZGVjICov CisgICAgY2FzZSAweDQ4IC4uLiAweDRmOgorICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX3JlZyAob3Bjb2RlICYgNykpCisJeworCSAgcmV0dXJu ICgtMSk7CisJfQorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3Jl ZyAoSTM4Nl9FRkxBR1NfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsK Kwl9CisgICAgICBicmVhazsKIAotICBzZXRfZ2RiYXJjaF9mcmFtZV9hcmdz X3NraXAgKGdkYmFyY2gsIDgpOworICAgICAgLyogR1JQMyAqLworICAgIGNh c2UgMHhmNjoKKyAgICBjYXNlIDB4Zjc6CisgICAgICBpZiAoKG9wY29kZSAm IDEpID09IDApCisJeworCSAgb3QgPSBPVF9CWVRFOworCX0KKyAgICAgIGVs c2UKKwl7CisJICBvdCA9IGRmbGFnICsgT1RfV09SRDsKKwl9CisgICAgICBp ZiAoaTM4Nl9yZWNvcmRfbW9kcm0gKCkpCisJeworCSAgcmV0dXJuICgtMSk7 CisJfQogCi0gIC8qIFdpcmUgaW4gdGhlIE1NWCByZWdpc3RlcnMuICAqLwor ICAgICAgc3dpdGNoIChyZWcpCisJeworCSAgLyogdGVzdCAqLworCWNhc2Ug MDoKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUZM QUdTX1JFR05VTSkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkg ICAgfQorCSAgYnJlYWs7CisJICAvKiBub3QgKi8KKwljYXNlIDI6CisJICBp ZiAobW9kICE9IDMpCisJICAgIHsKKwkgICAgICBpZiAoaTM4Nl9yZWNvcmRf bGVhX21vZHJtICgpKQorCQl7CisJCSAgcmV0dXJuICgtMSk7CisJCX0KKwkg ICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKG90ID09IE9UX0JZ VEUpCisJCXsKKwkJICBybSAmPSAweDM7CisJCX0KKwkgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfcmVnIChybSkpCisJCXsKKwkJICByZXR1cm4g KC0xKTsKKwkJfQorCSAgICB9CisJICBicmVhazsKKwkgIC8qIG5lZyAqLwor CWNhc2UgMzoKKwkgIGlmIChtb2QgIT0gMykKKwkgICAgeworCSAgICAgIGlm IChpMzg2X3JlY29yZF9sZWFfbW9kcm0gKCkpCisJCXsKKwkJICByZXR1cm4g KC0xKTsKKwkJfQorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBp ZiAob3QgPT0gT1RfQllURSkKKwkJeworCQkgIHJtICY9IDB4MzsKKwkJfQor CSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKHJtKSkKKwkJ eworCQkgIHJldHVybiAoLTEpOworCQl9CisJICAgIH0KKwkgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUZMQUdTX1JFR05VTSkpCisJ ICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCSAgYnJlYWs7 CisJICAvKiBtdWwgKi8KKwljYXNlIDQ6CisJICAvKiBpbXVsICovCisJY2Fz ZSA1OgorCSAgLyogZGl2ICovCisJY2FzZSA2OgorCSAgLyogaWRpdiAqLwor CWNhc2UgNzoKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkz ODZfRUFYX1JFR05VTSkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsK KwkgICAgfQorCSAgaWYgKG90ICE9IE9UX0JZVEUpCisJICAgIHsKKwkgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VEWF9SRUdO VU0pKQorCQl7CisJCSAgcmV0dXJuICgtMSk7CisJCX0KKwkgICAgfQorCSAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FRkxBR1NfUkVH TlVNKSkKKwkgICAgeworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJ ICBicmVhazsKKwlkZWZhdWx0OgorCSAgaTM4Nl9yZWNvcmRfcGMgLT0gMjsK KwkgIG9wY29kZSA9IG9wY29kZSA8PCA4IHwgbW9kcm07CisJICBnb3RvIG5v X3N1cHBvcnQ7CisJICBicmVhazsKKwl9CisgICAgICBicmVhazsKKworICAg ICAgLyogR1JQNCAqLworICAgIGNhc2UgMHhmZToKKyAgICAgIC8qIEdSUDUg Ki8KKyAgICBjYXNlIDB4ZmY6CisgICAgICBpZiAoKG9wY29kZSAmIDEpID09 IDApCisJeworCSAgb3QgPSBPVF9CWVRFOworCX0KKyAgICAgIGVsc2UKKwl7 CisJICBvdCA9IGRmbGFnICsgT1RfV09SRDsKKwl9CisgICAgICBpZiAoaTM4 Nl9yZWNvcmRfbW9kcm0gKCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQor ICAgICAgaWYgKHJlZyA+PSAyICYmIG9wY29kZSA9PSAweGZlKQorCXsKKwkg IGkzODZfcmVjb3JkX3BjIC09IDI7CisJICBvcGNvZGUgPSBvcGNvZGUgPDwg OCB8IG1vZHJtOworCSAgZ290byBub19zdXBwb3J0OworCX0KKworICAgICAg c3dpdGNoIChyZWcpCisJeworCSAgLyogaW5jICovCisJY2FzZSAwOgorCSAg LyogZGVjICovCisJY2FzZSAxOgorCSAgaWYgKG1vZCAhPSAzKQorCSAgICB7 CisJICAgICAgaWYgKGkzODZfcmVjb3JkX2xlYV9tb2RybSAoKSkKKwkJewor CQkgIHJldHVybiAoLTEpOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAg eworCSAgICAgIGlmIChvdCA9PSBPVF9CWVRFKQorCQl7CisJCSAgcm0gJj0g MHgzOworCQl9CisJICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3Jl ZyAocm0pKQorCQl7CisJCSAgcmV0dXJuICgtMSk7CisJCX0KKwkgICAgfQor CSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FRkxBR1Nf UkVHTlVNKSkKKwkgICAgeworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9 CisJICBicmVhazsKKwkgIC8qIGNhbGwgKi8KKwljYXNlIDI6CisJICAvKiBw dXNoICovCisJY2FzZSA2OgorCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X3JlZyAoSTM4Nl9FU1BfUkVHTlVNKSkKKwkgICAgeworCSAgICAgIHJldHVy biAoLTEpOworCSAgICB9CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3Jk X3JlZ2NhY2hlLCBJMzg2X0VTUF9SRUdOVU0sCisJCQkgICAgIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf bWVtCisJICAgICAgKChDT1JFX0FERFIpIHRtcHUzMiAtICgxIDw8IChkZmxh ZyArIDEpKSwgKDEgPDwgKGRmbGFnICsgMSkpKSkKKwkgICAgeworCSAgICAg IHJldHVybiAoLTEpOworCSAgICB9CisJICBicmVhazsKKwkgIC8qIGxjYWxs ICovCisJY2FzZSAzOgorCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3Jl ZyAoSTM4Nl9FU1BfUkVHTlVNKSkKKwkgICAgeworCSAgICAgIHJldHVybiAo LTEpOworCSAgICB9CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVn IChJMzg2X0NTX1JFR05VTSkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0x KTsKKwkgICAgfQorCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdj YWNoZSwgSTM4Nl9FU1BfUkVHTlVNLAorCQkJICAgICAoZ2RiX2J5dGUgKikg JiB0bXB1MzIpOworCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbQor CSAgICAgICgoQ09SRV9BRERSKSB0bXB1MzIgLSAoMSA8PCAoZGZsYWcgKyAy KSksICgxIDw8IChkZmxhZyArIDIpKSkpCisJICAgIHsKKwkgICAgICByZXR1 cm4gKC0xKTsKKwkgICAgfQorCSAgYnJlYWs7CisJICAvKiBqbXAgKi8KKwlj YXNlIDQ6CisJICAvKiBsam1wICovCisJY2FzZSA1OgorCSAgYnJlYWs7CisJ ZGVmYXVsdDoKKwkgIGkzODZfcmVjb3JkX3BjIC09IDI7CisJICBvcGNvZGUg PSBvcGNvZGUgPDwgOCB8IG1vZHJtOworCSAgZ290byBub19zdXBwb3J0Owor CSAgYnJlYWs7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHRlc3Qg Ki8KKyAgICBjYXNlIDB4ODQ6CisgICAgY2FzZSAweDg1OgorICAgIGNhc2Ug MHhhODoKKyAgICBjYXNlIDB4YTk6CisgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfcmVnIChJMzg2X0VGTEFHU19SRUdOVU0pKQorCXsKKwkgIHJl dHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBDV0RF L0NCVyAqLworICAgIGNhc2UgMHg5ODoKKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9yZWcgKEkzODZfRUFYX1JFR05VTSkpCisJeworCSAgcmV0 dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIENEUS9D V0QgKi8KKyAgICBjYXNlIDB4OTk6CisgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfcmVnIChJMzg2X0VBWF9SRUdOVU0pKQorCXsKKwkgIHJldHVy biAoLTEpOworCX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9y ZWcgKEkzODZfRURYX1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJ fQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIGltdWwgKi8KKyAgICBjYXNl IDB4MGZhZjoKKyAgICBjYXNlIDB4Njk6CisgICAgY2FzZSAweDZiOgorICAg ICAgb3QgPSBkZmxhZyArIE9UX1dPUkQ7CisgICAgICBpZiAoaTM4Nl9yZWNv cmRfbW9kcm0gKCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAg aWYgKG90ID09IE9UX0JZVEUpCisJeworCSAgcmVnICY9IDB4MzsKKwl9Cisg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChyZWcpKQorCXsK KwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9s aXN0X2FkZF9yZWcgKEkzODZfRUZMQUdTX1JFR05VTSkpCisJeworCSAgcmV0 dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHhhZGQg Ki8KKyAgICBjYXNlIDB4MGZjMDoKKyAgICBjYXNlIDB4MGZjMToKKyAgICAg IGlmICgob3Bjb2RlICYgMSkgPT0gMCkKKwl7CisJICBvdCA9IE9UX0JZVEU7 CisJfQorICAgICAgZWxzZQorCXsKKwkgIG90ID0gZGZsYWcgKyBPVF9XT1JE OworCX0KKyAgICAgIGlmIChpMzg2X3JlY29yZF9tb2RybSAoKSkKKwl7CisJ ICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBpZiAobW9kID09IDMpCisJewor CSAgaWYgKG90ID09IE9UX0JZVEUpCisJICAgIHsKKwkgICAgICByZWcgJj0g MHgzOworCSAgICB9CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVn IChyZWcpKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0K KwkgIGlmIChvdCA9PSBPVF9CWVRFKQorCSAgICB7CisJICAgICAgcm0gJj0g MHgzOworCSAgICB9CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVn IChybSkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQor CX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoaTM4Nl9yZWNvcmRfbGVhX21v ZHJtICgpKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0K KwkgIGlmIChvdCA9PSBPVF9CWVRFKQorCSAgICB7CisJICAgICAgcmVnICY9 IDB4MzsKKwkgICAgfQorCSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3Jl ZyAocmVnKSkKKwkgICAgeworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9 CisJfQorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4 Nl9FRkxBR1NfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9Cisg ICAgICBicmVhazsKKworICAgICAgLyogY21weGNoZyAqLworICAgIGNhc2Ug MHgwZmIwOgorICAgIGNhc2UgMHgwZmIxOgorICAgICAgaWYgKChvcGNvZGUg JiAxKSA9PSAwKQorCXsKKwkgIG90ID0gT1RfQllURTsKKwl9CisgICAgICBl bHNlCisJeworCSAgb3QgPSBkZmxhZyArIE9UX1dPUkQ7CisJfQorICAgICAg aWYgKGkzODZfcmVjb3JkX21vZHJtICgpKQorCXsKKwkgIHJldHVybiAoLTEp OworCX0KKyAgICAgIGlmIChtb2QgPT0gMykKKwl7CisJICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VBWF9SRUdOVU0pKQorCSAgICB7 CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwkgIGlmIChvdCA9PSBP VF9CWVRFKQorCSAgICB7CisJICAgICAgcmVnICY9IDB4MzsKKwkgICAgfQor CSAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAocmVnKSkKKwkgICAg eworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJfQorICAgICAgZWxz ZQorCXsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZf RUFYX1JFR05VTSkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkg ICAgfQorCSAgaWYgKGkzODZfcmVjb3JkX2xlYV9tb2RybSAoKSkKKwkgICAg eworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJfQorICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FRkxBR1NfUkVHTlVN KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKwor ICAgICAgLyogY21weGNoZzhiICovCisgICAgY2FzZSAweDBmYzc6CisgICAg ICBpZiAoaTM4Nl9yZWNvcmRfbW9kcm0gKCkpCisJeworCSAgcmV0dXJuICgt MSk7CisJfQorICAgICAgaWYgKG1vZCA9PSAzKQorCXsKKwkgIGkzODZfcmVj b3JkX3BjIC09IDI7CisJICBvcGNvZGUgPSBvcGNvZGUgPDwgOCB8IG1vZHJt OworCSAgZ290byBub19zdXBwb3J0OworCX0KKyAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUFYX1JFR05VTSkpCisJeworCSAg cmV0dXJuICgtMSk7CisJfQorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX3JlZyAoSTM4Nl9FRFhfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0x KTsKKwl9CisgICAgICBpZiAoaTM4Nl9yZWNvcmRfbGVhX21vZHJtICgpKQor CXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9yZWcgKEkzODZfRUZMQUdTX1JFR05VTSkpCisJeworCSAg cmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHB1 c2ggKi8KKyAgICBjYXNlIDB4NTAgLi4uIDB4NTc6CisgICAgY2FzZSAweDY4 OgorICAgIGNhc2UgMHg2YToKKyAgICAgIC8qIHB1c2ggZXMgKi8KKyAgICBj YXNlIDB4MDY6CisgICAgICAvKiBwdXNoIGNzICovCisgICAgY2FzZSAweDBl OgorICAgICAgLyogcHVzaCBzcyAqLworICAgIGNhc2UgMHgxNjoKKyAgICAg IC8qIHB1c2ggZHMgKi8KKyAgICBjYXNlIDB4MWU6CisgICAgICAvKiBwdXNo IGZzICovCisgICAgY2FzZSAweDBmYTA6CisgICAgICAvKiBwdXNoIGdzICov CisgICAgY2FzZSAweDBmYTg6CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfcmVnIChJMzg2X0VTUF9SRUdOVU0pKQorCXsKKwkgIHJldHVybiAo LTEpOworCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVn Y2FjaGUsIEkzODZfRVNQX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0 bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbQor CSAgKChDT1JFX0FERFIpIHRtcHUzMiAtICgxIDw8IChkZmxhZyArIDEpKSwg KDEgPDwgKGRmbGFnICsgMSkpKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9 CisgICAgICBicmVhazsKKworICAgICAgLyogcG9wICovCisgICAgY2FzZSAw eDU4IC4uLiAweDVmOgorICAgICAgb3QgPSBkZmxhZyArIE9UX1dPUkQ7Cisg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VTUF9S RUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGlmIChv dCA9PSBPVF9CWVRFKQorCXsKKwkgIG9wY29kZSAmPSAweDM7CisJfQorICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAob3Bjb2RlICYgMHg3 KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKwor ICAgICAgLyogcHVzaGEgKi8KKyAgICBjYXNlIDB4NjA6CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VTUF9SRUdOVU0pKQor CXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19y ZWFkIChyZWNvcmRfcmVnY2FjaGUsIEkzODZfRVNQX1JFR05VTSwKKwkJCSAo Z2RiX2J5dGUgKikgJiB0bXB1MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX21lbQorCSAgKChDT1JFX0FERFIpIHRtcHUzMiAtICgxIDw8 IChkZmxhZyArIDQpKSwgKDEgPDwgKGRmbGFnICsgNCkpKSkKKwl7CisJICBy ZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogcG9w YSAqLworICAgIGNhc2UgMHg2MToKKyAgICAgIGZvciAodG1wdTggPSBJMzg2 X0VBWF9SRUdOVU07IHRtcHU4IDw9IEkzODZfRURJX1JFR05VTTsgdG1wdTgr KykKKwl7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnICh0bXB1 OCkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0K KyAgICAgIGJyZWFrOworCisgICAgICAvKiBwb3AgKi8KKyAgICBjYXNlIDB4 OGY6CisgICAgICBvdCA9IGRmbGFnICsgT1RfV09SRDsKKyAgICAgIGlmIChp Mzg2X3JlY29yZF9tb2RybSAoKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9 CisgICAgICBpZiAobW9kID09IDMpCisJeworCSAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX3JlZyAocm0pKQorCSAgICB7CisJICAgICAgcmV0dXJuICgt MSk7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKGkzODZf cmVjb3JkX2xlYV9tb2RybSAoKSkKKwkgICAgeworCSAgICAgIHJldHVybiAo LTEpOworCSAgICB9CisJfQorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX3JlZyAoSTM4Nl9FU1BfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0x KTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogZW50ZXIgKi8KKyAg ICBjYXNlIDB4Yzg6CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf cmVnIChJMzg2X0VTUF9SRUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEpOwor CX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZf RUJQX1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FU1Bf UkVHTlVNLAorCQkJIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtCisJICAoKENPUkVfQUREUikg dG1wdTMyIC0gKDEgPDwgKGRmbGFnICsgMSkpLCAoMSA8PCAoZGZsYWcgKyAx KSkpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOwor CisgICAgICAvKiBsZWF2ZSAqLworICAgIGNhc2UgMHhjOToKKyAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRVNQX1JFR05VTSkp CisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FQlBfUkVHTlVNKSkKKwl7CisJICBy ZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogcG9w IGVzICovCisgICAgY2FzZSAweDA3OgorICAgICAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX3JlZyAoSTM4Nl9FU1BfUkVHTlVNKSkKKwl7CisJICByZXR1 cm4gKC0xKTsKKwl9CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf cmVnIChJMzg2X0VTX1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJ fQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHBvcCBzcyAqLworICAgIGNh c2UgMHgxNzoKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcg KEkzODZfRVNQX1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQor ICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9TU19S RUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFr OworCisgICAgICAvKiBwb3AgZHMgKi8KKyAgICBjYXNlIDB4MWY6CisgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VTUF9SRUdO VU0pKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRFNfUkVHTlVNKSkKKwl7CisJ ICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyog cG9wIGZzICovCisgICAgY2FzZSAweDBmYTE6CisgICAgICBpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VTUF9SRUdOVU0pKQorCXsKKwkg IHJldHVybiAoLTEpOworCX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9yZWcgKEkzODZfRlNfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0x KTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogcG9wIGdzICovCisg ICAgY2FzZSAweDBmYTk6CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfcmVnIChJMzg2X0VTUF9SRUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEp OworCX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkz ODZfR1NfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAg ICBicmVhazsKKworICAgICAgLyogbW92ICovCisgICAgY2FzZSAweDg4Ogor ICAgIGNhc2UgMHg4OToKKyAgICBjYXNlIDB4YzY6CisgICAgY2FzZSAweGM3 OgorICAgICAgaWYgKChvcGNvZGUgJiAxKSA9PSAwKQorCXsKKwkgIG90ID0g T1RfQllURTsKKwl9CisgICAgICBlbHNlCisJeworCSAgb3QgPSBkZmxhZyAr IE9UX1dPUkQ7CisJfQorCisgICAgICBpZiAoaTM4Nl9yZWNvcmRfbW9kcm0g KCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorCisgICAgICBpZiAobW9k ICE9IDMpCisJeworCSAgaWYgKGkzODZfcmVjb3JkX2xlYV9tb2RybSAoKSkK KwkgICAgeworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJfQorICAg ICAgZWxzZQorCXsKKwkgIGlmIChvdCA9PSBPVF9CWVRFKQorCSAgICB7CisJ ICAgICAgcm0gJj0gMHgzOworCSAgICB9CisJICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfcmVnIChybSkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0x KTsKKwkgICAgfQorCX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9yZWcgKEkzODZfRUZMQUdTX1JFR05VTSkpCisJeworCSAgcmV0dXJuICgt MSk7CisJfQorICAgICAgYnJlYWs7CisgICAgICAvKiBtb3YgKi8KKyAgICBj YXNlIDB4OGE6CisgICAgY2FzZSAweDhiOgorICAgICAgaWYgKChvcGNvZGUg JiAxKSA9PSAwKQorCXsKKwkgIG90ID0gT1RfQllURTsKKwl9CisgICAgICBl bHNlCisJeworCSAgb3QgPSBkZmxhZyArIE9UX1dPUkQ7CisJfQorCisgICAg ICBpZiAoaTM4Nl9yZWNvcmRfbW9kcm0gKCkpCisJeworCSAgcmV0dXJuICgt MSk7CisJfQorCisgICAgICBpZiAob3QgPT0gT1RfQllURSkKKwl7CisJICBy ZWcgJj0gMHgzOworCX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9yZWcgKHJlZykpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorCisgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VGTEFHU19S RUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFr OworCisgICAgICAvKiBtb3Ygc2VnICovCisgICAgY2FzZSAweDhlOgorICAg ICAgaWYgKGkzODZfcmVjb3JkX21vZHJtICgpKQorCXsKKwkgIHJldHVybiAo LTEpOworCX0KKworICAgICAgc3dpdGNoIChyZWcpCisJeworCWNhc2UgMDoK KwkgIHRtcHU4ID0gSTM4Nl9FU19SRUdOVU07CisJICBicmVhazsKKwljYXNl IDI6CisJICB0bXB1OCA9IEkzODZfU1NfUkVHTlVNOworCSAgYnJlYWs7CisJ Y2FzZSAzOgorCSAgdG1wdTggPSBJMzg2X0RTX1JFR05VTTsKKwkgIGJyZWFr OworCWNhc2UgNDoKKwkgIHRtcHU4ID0gSTM4Nl9GU19SRUdOVU07CisJICBi cmVhazsKKwljYXNlIDU6CisJICB0bXB1OCA9IEkzODZfR1NfUkVHTlVNOwor CSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGkzODZfcmVjb3JkX3BjIC09IDI7 CisJICBvcGNvZGUgPSBvcGNvZGUgPDwgOCB8IG1vZHJtOworCSAgZ290byBu b19zdXBwb3J0OworCSAgYnJlYWs7CisJfQorICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX3JlZyAodG1wdTgpKQorCXsKKwkgIHJldHVybiAoLTEp OworCX0KKworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAo STM4Nl9FRkxBR1NfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9 CisgICAgICBicmVhazsKKworICAgICAgLyogbW92IHNlZyAqLworICAgIGNh c2UgMHg4YzoKKyAgICAgIGlmIChpMzg2X3JlY29yZF9tb2RybSAoKSkKKwl7 CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBpZiAocmVnID4gNSkKKwl7 CisJICBpMzg2X3JlY29yZF9wYyAtPSAyOworCSAgb3Bjb2RlID0gb3Bjb2Rl IDw8IDggfCBtb2RybTsKKwkgIGdvdG8gbm9fc3VwcG9ydDsKKwl9CisKKyAg ICAgIGlmIChtb2QgPT0gMykKKwl7CisJICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfcmVnIChybSkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsK KwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICBvdCA9IE9UX1dPUkQ7 CisJICBpZiAoaTM4Nl9yZWNvcmRfbGVhX21vZHJtICgpKQorCSAgICB7CisJ ICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwl9CisKKyAgICAgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUZMQUdTX1JFR05VTSkp CisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAg ICAgIC8qIG1vdnpiUyAqLworICAgIGNhc2UgMHgwZmI2OgorICAgICAgLyog bW92endTICovCisgICAgY2FzZSAweDBmYjc6CisgICAgICAvKiBtb3ZzYlMg Ki8KKyAgICBjYXNlIDB4MGZiZToKKyAgICAgIC8qIG1vdnN3UyAqLworICAg IGNhc2UgMHgwZmJmOgorICAgICAgaWYgKGkzODZfcmVjb3JkX21vZHJtICgp KQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9yZWcgKHJlZykpCisJeworCSAgcmV0dXJuICgtMSk7 CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIGxlYSAqLworICAgIGNh c2UgMHg4ZDoKKyAgICAgIGlmIChpMzg2X3JlY29yZF9tb2RybSAoKSkKKwl7 CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBpZiAobW9kID09IDMpCisJ eworCSAgaTM4Nl9yZWNvcmRfcGMgLT0gMjsKKwkgIG9wY29kZSA9IG9wY29k ZSA8PCA4IHwgbW9kcm07CisJICBnb3RvIG5vX3N1cHBvcnQ7CisJfQorCisg ICAgICBvdCA9IGRmbGFnOworICAgICAgaWYgKG90ID09IE9UX0JZVEUpCisJ eworCSAgcmVnICY9IDB4MzsKKwl9CisgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfcmVnIChyZWcpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0K KyAgICAgIGJyZWFrOworCisgICAgICAvKiBtb3YgRUFYICovCisgICAgY2Fz ZSAweGEwOgorICAgIGNhc2UgMHhhMToKKyAgICAgIC8qIHhsYXQgKi8KKyAg ICBjYXNlIDB4ZDc6CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRf cmVnIChJMzg2X0VBWF9SRUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEpOwor CX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBtb3YgRUFYICovCisgICAg Y2FzZSAweGEyOgorICAgIGNhc2UgMHhhMzoKKyAgICAgIHsKKwl1aW50MzJf dCBhZGRyOworCisJaWYgKChvcGNvZGUgJiAxKSA9PSAwKQorCSAgeworCSAg ICBvdCA9IE9UX0JZVEU7CisJICB9CisJZWxzZQorCSAgeworCSAgICBvdCA9 IGRmbGFnICsgT1RfV09SRDsKKwkgIH0KKwlpZiAoYWZsYWcpCisJICB7CisJ ICAgIGlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKGkzODZfcmVjb3JkX3BjLCAo Z2RiX2J5dGUgKikgJiBhZGRyLCA0KSkKKwkgICAgICB7CisJCXByaW50Zl91 bmZpbHRlcmVkIChfKCJyZWNvcmQ6IHJlYWQgbWVtZW9yeSAweCVzIGVycm9y LlxuIiksCisJCQkJICAgcGFkZHJfbnogKGkzODZfcmVjb3JkX3BjKSk7CisJ CXJldHVybiAoLTEpOworCSAgICAgIH0KKwkgICAgaTM4Nl9yZWNvcmRfcGMg Kz0gNDsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGlmICh0YXJnZXRfcmVh ZF9tZW1vcnkgKGkzODZfcmVjb3JkX3BjLCAoZ2RiX2J5dGUgKikgJiB0bXB1 MTYsIDQpKQorCSAgICAgIHsKKwkJcHJpbnRmX3VuZmlsdGVyZWQgKF8oInJl Y29yZDogcmVhZCBtZW1lb3J5IDB4JXMgZXJyb3IuXG4iKSwKKwkJCQkgICBw YWRkcl9ueiAoaTM4Nl9yZWNvcmRfcGMpKTsKKwkJcmV0dXJuICgtMSk7CisJ ICAgICAgfQorCSAgICBpMzg2X3JlY29yZF9wYyArPSAyOworCSAgICBhZGRy ID0gdG1wdTE2OworCSAgfQorCWlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9t ZW0gKGFkZHIsIDEgPDwgb3QpKQorCSAgeworCSAgICByZXR1cm4gKC0xKTsK KwkgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBtb3Yg UiwgSWIgKi8KKyAgICBjYXNlIDB4YjAgLi4uIDB4Yjc6CisgICAgICBpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnICgob3Bjb2RlICYgMHg3KSAmIDB4 MykpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisK KyAgICAgIC8qIG1vdiBSLCBJdiAqLworICAgIGNhc2UgMHhiOCAuLi4gMHhi ZjoKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKG9wY29k ZSAmIDB4NykpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJl YWs7CisKKyAgICAgIC8qIHhjaGcgUiwgRUFYICovCisgICAgY2FzZSAweDkx IC4uLiAweDk3OgorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3Jl ZyAoSTM4Nl9FQVhfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9 CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChvcGNvZGUg JiAweDcpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFr OworCisgICAgICAvKiB4Y2hnIEV2LCBHdiAqLworICAgIGNhc2UgMHg4NjoK KyAgICBjYXNlIDB4ODc6CisgICAgICBpZiAoKG9wY29kZSAmIDEpID09IDAp CisJeworCSAgb3QgPSBPVF9CWVRFOworCX0KKyAgICAgIGVsc2UKKwl7CisJ ICBvdCA9IGRmbGFnICsgT1RfV09SRDsKKwl9CisKKyAgICAgIGlmIChpMzg2 X3JlY29yZF9tb2RybSAoKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisK KyAgICAgIGlmIChtb2QgPT0gMykKKwl7CisJICBpZiAob3QgPT0gT1RfQllU RSkKKwkgICAgeworCSAgICAgIHJtICY9IDB4MzsKKwkgICAgfQorCSAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAocm0pKQorCSAgICB7CisJICAg ICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJewor CSAgaWYgKGkzODZfcmVjb3JkX2xlYV9tb2RybSAoKSkKKwkgICAgeworCSAg ICAgIHJldHVybiAoLTEpOworCSAgICB9CisJfQorCisgICAgICBpZiAob3Qg PT0gT1RfQllURSkKKwl7CisJICByZWcgJj0gMHgzOworCX0KKyAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKHJlZykpCisJeworCSAgcmV0 dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIGxlcyBH diAqLworICAgIGNhc2UgMHhjNDoKKyAgICAgIC8qIGxkcyBHdiAqLworICAg IGNhc2UgMHhjNToKKyAgICAgIC8qIGxzcyBHdiAqLworICAgIGNhc2UgMHgw ZmIyOgorICAgICAgLyogbGZzIEd2ICovCisgICAgY2FzZSAweDBmYjQ6Cisg ICAgICAvKiBsZ3MgR3YgKi8KKyAgICBjYXNlIDB4MGZiNToKKyAgICAgIGlm IChpMzg2X3JlY29yZF9tb2RybSAoKSkKKwl7CisJICByZXR1cm4gKC0xKTsK Kwl9CisgICAgICBpZiAobW9kID09IDMpCisJeworCSAgaWYgKG9wY29kZSA+ IDB4ZmYpCisJICAgIHsKKwkgICAgICBpMzg2X3JlY29yZF9wYyAtPSAzOwor CSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpMzg2X3JlY29yZF9w YyAtPSAyOworCSAgICB9CisJICBvcGNvZGUgPSBvcGNvZGUgPDwgOCB8IG1v ZHJtOworCSAgZ290byBub19zdXBwb3J0OworCX0KKworICAgICAgc3dpdGNo IChvcGNvZGUpCisJeworCSAgLyogbGVzIEd2ICovCisJY2FzZSAweGM0Ogor CSAgdG1wdTggPSBJMzg2X0VTX1JFR05VTTsKKwkgIGJyZWFrOworCSAgLyog bGRzIEd2ICovCisJY2FzZSAweGM1OgorCSAgdG1wdTggPSBJMzg2X0RTX1JF R05VTTsKKwkgIGJyZWFrOworCSAgLyogbHNzIEd2ICovCisJY2FzZSAweDBm YjI6CisJICB0bXB1OCA9IEkzODZfU1NfUkVHTlVNOworCSAgYnJlYWs7CisJ ICAvKiBsZnMgR3YgKi8KKwljYXNlIDB4MGZiNDoKKwkgIHRtcHU4ID0gSTM4 Nl9GU19SRUdOVU07CisJICBicmVhazsKKwkgIC8qIGxncyBHdiAqLworCWNh c2UgMHgwZmI1OgorCSAgdG1wdTggPSBJMzg2X0dTX1JFR05VTTsKKwkgIGJy ZWFrOworCX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcg KHRtcHU4KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisKKyAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKHJlZykpCisJeworCSAgcmV0 dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHNoaWZ0 cyAqLworICAgIGNhc2UgMHhjMDoKKyAgICBjYXNlIDB4YzE6CisgICAgY2Fz ZSAweGQwOgorICAgIGNhc2UgMHhkMToKKyAgICBjYXNlIDB4ZDI6CisgICAg Y2FzZSAweGQzOgorICAgICAgaWYgKChvcGNvZGUgJiAxKSA9PSAwKQorCXsK KwkgIG90ID0gT1RfQllURTsKKwl9CisgICAgICBlbHNlCisJeworCSAgb3Qg PSBkZmxhZyArIE9UX1dPUkQ7CisJfQorCisgICAgICBpZiAoaTM4Nl9yZWNv cmRfbW9kcm0gKCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorCisgICAg ICBpZiAobW9kICE9IDMgJiYgKG9wY29kZSA9PSAweGQyIHx8IG9wY29kZSA9 PSAweGQzKSkKKwl7CisJICBpZiAoaTM4Nl9yZWNvcmRfbGVhX21vZHJtICgp KQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJICAgIH0KKwl9Cisg ICAgICBlbHNlCisJeworCSAgaWYgKG90ID09IE9UX0JZVEUpCisJICAgIHsK KwkgICAgICBybSAmPSAweDM7CisJICAgIH0KKwkgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9yZWcgKHJtKSkKKwkgICAgeworCSAgICAgIHJldHVybiAo LTEpOworCSAgICB9CisJfQorCisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlz dF9hZGRfcmVnIChJMzg2X0VGTEFHU19SRUdOVU0pKQorCXsKKwkgIHJldHVy biAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSAweDBmYTQ6 CisgICAgY2FzZSAweDBmYTU6CisgICAgY2FzZSAweDBmYWM6CisgICAgY2Fz ZSAweDBmYWQ6CisgICAgICBpZiAoaTM4Nl9yZWNvcmRfbW9kcm0gKCkpCisJ eworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgaWYgKG1vZCA9PSAzKQor CXsKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKHJtKSkKKwkg ICAgeworCSAgICAgIHJldHVybiAoLTEpOworCSAgICB9CisJfQorICAgICAg ZWxzZQorCXsKKwkgIGlmIChpMzg2X3JlY29yZF9sZWFfbW9kcm0gKCkpCisJ ICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAg IGJyZWFrOworCisgICAgICAvKiBmbG9hdHMgKi8KKyAgICAgIC8qIFhYWCAq LworCisgICAgICAvKiBzdHJpbmcgb3BzICovCisgICAgICAvKiBtb3ZzUyAq LworICAgIGNhc2UgMHhhNDoKKyAgICBjYXNlIDB4YTU6CisgICAgICAvKiBz dG9zUyAqLworICAgIGNhc2UgMHhhYToKKyAgICBjYXNlIDB4YWI6CisgICAg ICAvKiBpbnNTICovCisgICAgY2FzZSAweDZjOgorICAgIGNhc2UgMHg2ZDoK KyAgICAgIHsKKwl1aW50MzJfdCBhZGRyOworCisJaWYgKChvcGNvZGUgJiAx KSA9PSAwKQorCSAgeworCSAgICBvdCA9IE9UX0JZVEU7CisJICB9CisJZWxz ZQorCSAgeworCSAgICBvdCA9IGRmbGFnICsgT1RfV09SRDsKKwkgIH0KKwlp ZiAob3Bjb2RlID09IDB4YTQgfHwgb3Bjb2RlID09IDB4YTUpCisJICB7CisJ ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRVNJX1JF R05VTSkpCisJICAgICAgeworCQlyZXR1cm4gKC0xKTsKKwkgICAgICB9CisJ ICB9CisJaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FRElf UkVHTlVNKSkKKwkgIHsKKwkgICAgcmV0dXJuICgtMSk7CisJICB9CisKKwly ZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VESV9S RUdOVU0sCisJCQkgICAoZ2RiX2J5dGUgKikgJiBhZGRyKTsKKwlpZiAoIWFm bGFnKQorCSAgeworCSAgICBhZGRyICY9IDB4ZmZmZjsKKwkgICAgLyogYWRk ciArPSAoKHVpbnQzMl90KXJlYWRfcmVnaXN0ZXIgKEkzODZfRVNfUkVHTlVN KSkgPDwgNDsgKi8KKwkgICAgcHJpbnRmX3VuZmlsdGVyZWQgKF8KKwkJCSAg ICAgICAoInJlY29yZDogY2Fubid0IGdldCB0aGUgdmFsdWUgb2YgdGhlIHNl Z21lbnQgcmVnaXN0ZXIuXG4iKSk7CisJICAgIHJldHVybiAoLTEpOworCSAg fQorCisJaWYgKHByZWZpeGVzICYgKFBSRUZJWF9SRVBaIHwgUFJFRklYX1JF UE5aKSkKKwkgIHsKKwkgICAgdWludDMyX3QgY291bnQ7CisKKwkgICAgcmVn Y2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FQ1hfUkVH TlVNLAorCQkJICAgICAgIChnZGJfYnl0ZSAqKSAmIGNvdW50KTsKKwkgICAg aWYgKCFhZmxhZykKKwkgICAgICB7CisJCWNvdW50ICY9IDB4ZmZmZjsKKwkg ICAgICB9CisKKwkgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdj YWNoZSwgSTM4Nl9FRkxBR1NfUkVHTlVNLAorCQkJICAgICAgIChnZGJfYnl0 ZSAqKSAmIHRtcHUzMik7CisJICAgIGlmICgodG1wdTMyID4+IDEwKSAmIDB4 MSkKKwkgICAgICB7CisJCWFkZHIgLT0gKGNvdW50IC0gMSkgKiAoMSA8PCBv dCk7CisJICAgICAgfQorCisJICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKGFkZHIsIGNvdW50ICogKDEgPDwgb3QpKSkKKwkgICAgICB7CisJ CXJldHVybiAoLTEpOworCSAgICAgIH0KKworCSAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfcmVnIChJMzg2X0VDWF9SRUdOVU0pKQorCSAgICAgIHsK KwkJcmV0dXJuICgtMSk7CisJICAgICAgfQorCSAgfQorCWVsc2UKKwkgIHsK KwkgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoYWRkciwgMSA8 PCBvdCkpCisJICAgICAgeworCQlyZXR1cm4gKC0xKTsKKwkgICAgICB9CisJ ICB9CisgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyogbG9kc1Mg Ki8KKyAgICBjYXNlIDB4YWM6CisgICAgY2FzZSAweGFkOgorICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FQVhfUkVHTlVNKSkK Kwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfcmVnIChJMzg2X0VTSV9SRUdOVU0pKQorCXsKKwkgIHJl dHVybiAoLTEpOworCX0KKyAgICAgIGlmIChwcmVmaXhlcyAmIChQUkVGSVhf UkVQWiB8IFBSRUZJWF9SRVBOWikpCisJeworCSAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX3JlZyAoSTM4Nl9FQ1hfUkVHTlVNKSkKKwkgICAgeworCSAg ICAgIHJldHVybiAoLTEpOworCSAgICB9CisJfQorICAgICAgYnJlYWs7CisK KyAgICAgIC8qIG91dHNTICovCisgICAgY2FzZSAweDZlOgorICAgIGNhc2Ug MHg2ZjoKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkz ODZfRVNJX1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAg ICAgaWYgKHByZWZpeGVzICYgKFBSRUZJWF9SRVBaIHwgUFJFRklYX1JFUE5a KSkKKwl7CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2 X0VDWF9SRUdOVU0pKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJ ICAgIH0KKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogc2Nhc1MgKi8K KyAgICBjYXNlIDB4YWU6CisgICAgY2FzZSAweGFmOgorICAgICAgaWYgKHJl Y29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FRElfUkVHTlVNKSkKKwl7 CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBpZiAocHJlZml4ZXMgJiAo UFJFRklYX1JFUFogfCBQUkVGSVhfUkVQTlopKQorCXsKKwkgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUNYX1JFR05VTSkpCisJICAg IHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUZMQUdTX1JFR05V TSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisK KyAgICAgIC8qIGNtcHNTICovCisgICAgY2FzZSAweGE2OgorICAgIGNhc2Ug MHhhNzoKKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkz ODZfRURJX1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FU0lfUkVH TlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBpZiAocHJl Zml4ZXMgJiAoUFJFRklYX1JFUFogfCBQUkVGSVhfUkVQTlopKQorCXsKKwkg IGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUNYX1JFR05V TSkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCX0K KyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUZM QUdTX1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAg YnJlYWs7CisKKyAgICAgIC8qIHBvcnQgSS9PICovCisgICAgY2FzZSAweGU0 OgorICAgIGNhc2UgMHhlNToKKyAgICBjYXNlIDB4ZWM6CisgICAgY2FzZSAw eGVkOgorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4 Nl9FQVhfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAg ICBicmVhazsKKworICAgIGNhc2UgMHhlNjoKKyAgICBjYXNlIDB4ZTc6Cisg ICAgY2FzZSAweGVlOgorICAgIGNhc2UgMHhlZjoKKyAgICAgIGJyZWFrOwor CisgICAgICAvKiBjb250cm9sICovCisgICAgICAvKiByZXQgaW0gKi8KKyAg ICBjYXNlIDB4YzI6CisgICAgICAvKiByZXQgKi8KKyAgICBjYXNlIDB4YzM6 CisgICAgICAvKiBscmV0IGltICovCisgICAgY2FzZSAweGNhOgorICAgICAg LyogbHJldCAqLworICAgIGNhc2UgMHhjYjoKKyAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRVNQX1JFR05VTSkpCisJeworCSAg cmV0dXJuICgtMSk7CisJfQorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX3JlZyAoSTM4Nl9DU19SRUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEp OworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBpcmV0ICovCisgICAg Y2FzZSAweGNmOgorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3Jl ZyAoSTM4Nl9FU1BfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9 CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0NT X1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FRkxBR1NfUkVHTlVN KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKwor ICAgICAgLyogY2FsbCBpbSAqLworICAgIGNhc2UgMHhlODoKKyAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRVNQX1JFR05VTSkp CisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgcmVnY2FjaGVfcmF3 X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgSTM4Nl9FU1BfUkVHTlVNLAorCQkJ IChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtCisJICAoKENPUkVfQUREUikgdG1wdTMyIC0gKDEg PDwgKGRmbGFnICsgMSkpLCAoMSA8PCAoZGZsYWcgKyAxKSkpKQorCXsKKwkg IHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBs Y2FsbCBpbSAqLworICAgIGNhc2UgMHg5YToKKyAgICAgIGlmIChyZWNvcmRf YXJjaF9saXN0X2FkZF9yZWcgKEkzODZfQ1NfUkVHTlVNKSkKKwl7CisJICBy ZXR1cm4gKC0xKTsKKwl9CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfcmVnIChJMzg2X0VTUF9SRUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEp OworCX0KKyAgICAgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2Fj aGUsIEkzODZfRVNQX1JFR05VTSwKKwkJCSAoZ2RiX2J5dGUgKikgJiB0bXB1 MzIpOworICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbQorCSAg KChDT1JFX0FERFIpIHRtcHUzMiAtICgxIDw8IChkZmxhZyArIDIpKSwgKDEg PDwgKGRmbGFnICsgMikpKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9Cisg ICAgICBicmVhazsKKworICAgICAgLyogam1wIGltICovCisgICAgY2FzZSAw eGU5OgorICAgICAgLyogbGptcCBpbSAqLworICAgIGNhc2UgMHhlYToKKyAg ICAgIC8qIGptcCBKYiAqLworICAgIGNhc2UgMHhlYjoKKyAgICAgIC8qIGpj YyBKYiAqLworICAgIGNhc2UgMHg3MCAuLi4gMHg3ZjoKKyAgICAgIC8qIGpj YyBKdiAqLworICAgIGNhc2UgMHgwZjgwIC4uLiAweDBmOGY6CisgICAgICBi cmVhazsKKworICAgICAgLyogc2V0Y2MgR3YgKi8KKyAgICBjYXNlIDB4MGY5 MCAuLi4gMHgwZjlmOgorICAgICAgb3QgPSBPVF9CWVRFOworICAgICAgaWYg KGkzODZfcmVjb3JkX21vZHJtICgpKQorCXsKKwkgIHJldHVybiAoLTEpOwor CX0KKyAgICAgIGlmIChtb2QgPT0gMykKKwl7CisJICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfcmVnIChybSAmIDB4MykpCisJICAgIHsKKwkgICAgICBy ZXR1cm4gKC0xKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICBp ZiAoaTM4Nl9yZWNvcmRfbGVhX21vZHJtICgpKQorCSAgICB7CisJICAgICAg cmV0dXJuICgtMSk7CisJICAgIH0KKwl9CisgICAgICBicmVhazsKKworICAg ICAgLyogY21vdiBHdiwgRXYgKi8KKyAgICBjYXNlIDB4MGY0MCAuLi4gMHgw ZjRmOgorICAgICAgaWYgKGkzODZfcmVjb3JkX21vZHJtICgpKQorCXsKKwkg IHJldHVybiAoLTEpOworCX0KKyAgICAgIGlmIChkZmxhZyA9PSBPVF9CWVRF KQorCXsKKwkgIHJlZyAmPSAweDM7CisJfQorICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX3JlZyAocmVnICYgMHgzKSkKKwl7CisJICByZXR1cm4g KC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogZmxhZ3MgKi8K KyAgICAgIC8qIHB1c2hmICovCisgICAgY2FzZSAweDljOgorICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FU1BfUkVHTlVNKSkK Kwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICByZWdjYWNoZV9yYXdf cmVhZCAocmVjb3JkX3JlZ2NhY2hlLCBJMzg2X0VTUF9SRUdOVU0sCisJCQkg KGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9tZW0KKwkgICgoQ09SRV9BRERSKSB0bXB1MzIgLSAoMSA8 PCAoZGZsYWcgKyAxKSksICgxIDw8IChkZmxhZyArIDEpKSkpCisJeworCSAg cmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHBv cGYgKi8KKyAgICBjYXNlIDB4OWQ6CisgICAgICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfcmVnIChJMzg2X0VTUF9SRUdOVU0pKQorCXsKKwkgIHJldHVy biAoLTEpOworCX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9y ZWcgKEkzODZfRUZMQUdTX1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7 CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHNhaGYgKi8KKyAgICBj YXNlIDB4OWU6CisgICAgICAvKiBjbWMgKi8KKyAgICBjYXNlIDB4ZjU6Cisg ICAgICAvKiBjbGMgKi8KKyAgICBjYXNlIDB4Zjg6CisgICAgICAvKiBzdGMg Ki8KKyAgICBjYXNlIDB4Zjk6CisgICAgICAvKiBjbGQgKi8KKyAgICBjYXNl IDB4ZmM6CisgICAgICAvKiBzdGQgKi8KKyAgICBjYXNlIDB4ZmQ6CisgICAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VGTEFHU19S RUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFr OworCisgICAgICAvKiBsYWhmICovCisgICAgY2FzZSAweDlmOgorICAgICAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FQVhfUkVHTlVN KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKwor ICAgICAgLyogYml0IG9wZXJhdGlvbnMgKi8KKyAgICAgIC8qIGJ0L2J0cy9i dHIvYnRjIEd2LCBpbSAqLworICAgIGNhc2UgMHgwZmJhOgorICAgICAgLyog YnRzICovCisgICAgY2FzZSAweDBmYWI6CisgICAgICAvKiBidHIgKi8KKyAg ICBjYXNlIDB4MGZiMzoKKyAgICAgIC8qIGJ0YyAqLworICAgIGNhc2UgMHgw ZmJiOgorICAgICAgb3QgPSBkZmxhZyArIE9UX1dPUkQ7CisgICAgICBpZiAo aTM4Nl9yZWNvcmRfbW9kcm0gKCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJ fQorICAgICAgaWYgKHJlZyA8IDQpCisJeworCSAgaTM4Nl9yZWNvcmRfcGMg LT0gMzsKKwkgIG9wY29kZSA9IG9wY29kZSA8PCA4IHwgbW9kcm07CisJICBn b3RvIG5vX3N1cHBvcnQ7CisJfQorICAgICAgcmVnIC09IDQ7CisgICAgICBp ZiAocmVnICE9IDApCisJeworCSAgaWYgKG1vZCAhPSAzKQorCSAgICB7CisJ ICAgICAgaWYgKGkzODZfcmVjb3JkX2xlYV9tb2RybSAoKSkKKwkJeworCQkg IHJldHVybiAoLTEpOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgewor CSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKHJtKSkKKwkJ eworCQkgIHJldHVybiAoLTEpOworCQl9CisJICAgIH0KKwl9CisgICAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VGTEFHU19SRUdO VU0pKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJyZWFrOwor CisgICAgICAvKiBidCBHdiwgRXYgKi8KKyAgICBjYXNlIDB4MGZhMzoKKyAg ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUZMQUdT X1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJl YWs7CisKKyAgICAgIC8qIGJzZiAqLworICAgIGNhc2UgMHgwZmJjOgorICAg ICAgLyogYnNyICovCisgICAgY2FzZSAweDBmYmQ6CisgICAgICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfcmVnIChyZWcpKQorCXsKKwkgIHJldHVybiAo LTEpOworCX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcg KEkzODZfRUZMQUdTX1JFR05VTSkpCisJeworCSAgcmV0dXJuICgtMSk7CisJ fQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIGJjZCAqLworICAgICAgLyog ZGFhICovCisgICAgY2FzZSAweDI3OgorICAgICAgLyogZGFzICovCisgICAg Y2FzZSAweDJmOgorICAgICAgLyogYWFhICovCisgICAgY2FzZSAweDM3Ogor ICAgICAgLyogYWFzICovCisgICAgY2FzZSAweDNmOgorICAgICAgLyogYWFt ICovCisgICAgY2FzZSAweGQ0OgorICAgICAgLyogYWFkICovCisgICAgY2Fz ZSAweGQ1OgorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAo STM4Nl9FQVhfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9Cisg ICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VGTEFH U19SRUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGJy ZWFrOworCisgICAgICAvKiBtaXNjICovCisgICAgICAvKiBub3AgKi8KKyAg ICBjYXNlIDB4OTA6CisgICAgICBpZiAocHJlZml4ZXMgJiBQUkVGSVhfTE9D SykKKwl7CisJICBpMzg2X3JlY29yZF9wYyAtPSAxOworCSAgZ290byBub19z dXBwb3J0OworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBmd2FpdCAq LworICAgICAgLyogWFhYICovCisgICAgY2FzZSAweDliOgorICAgICAgcHJp bnRmX3VuZmlsdGVyZWQgKF8KKwkJCSAoInJlY29yZDogcmVjb3JkIGFuZCBy ZXZlcnNlIGZ1bmN0aW9uIGRvbid0IHN1cHBvcnQgaW5zdHJ1Y3Rpb24gZndh aXQuXG4iKSk7CisgICAgICBpMzg2X3JlY29yZF9wYyAtPSAxOworICAgICAg Z290byBub19zdXBwb3J0OworICAgICAgYnJlYWs7CisKKyAgICAgIC8qIGlu dDMgKi8KKyAgICAgIC8qIFhYWCAqLworICAgIGNhc2UgMHhjYzoKKyAgICAg IHByaW50Zl91bmZpbHRlcmVkIChfCisJCQkgKCJyZWNvcmQ6IHJlY29yZCBh bmQgcmV2ZXJzZSBmdW5jdGlvbiBkb24ndCBzdXBwb3J0IGluc3RydWN0aW9u IGludDMuXG4iKSk7CisgICAgICBpMzg2X3JlY29yZF9wYyAtPSAxOworICAg ICAgZ290byBub19zdXBwb3J0OworICAgICAgYnJlYWs7CisKKyAgICAgIC8q IGludCAqLworICAgICAgLyogWFhYICovCisgICAgY2FzZSAweGNkOgorICAg ICAgeworCWludCByZXQ7CisJaWYgKHRhcmdldF9yZWFkX21lbW9yeSAoaTM4 Nl9yZWNvcmRfcGMsICZ0bXB1OCwgMSkpCisJICB7CisJICAgIHByaW50Zl91 bmZpbHRlcmVkIChfKCJyZWNvcmQ6IHJlYWQgbWVtZW9yeSAweCVzIGVycm9y LlxuIiksCisJCQkgICAgICAgcGFkZHJfbnogKGkzODZfcmVjb3JkX3BjKSk7 CisJICAgIHJldHVybiAoLTEpOworCSAgfQorCWkzODZfcmVjb3JkX3BjKys7 CisJaWYgKHRtcHU4ICE9IDB4ODAKKwkgICAgfHwgZ2RiYXJjaF90ZGVwIChn ZGJhcmNoKS0+aTM4Nl9pbnR4ODBfcmVjb3JkID09IE5VTEwpCisJICB7CisJ ICAgIHByaW50Zl91bmZpbHRlcmVkIChfCisJCQkgICAgICAgKCJyZWNvcmQ6 IHJlY29yZCBhbmQgcmV2ZXJzZSBmdW5jdGlvbiBkb24ndCBzdXBwb3J0IGlu c3RydWN0aW9uIGludCAweCUwMnguXG4iKSwKKwkJCSAgICAgICB0bXB1OCk7 CisJICAgIGkzODZfcmVjb3JkX3BjIC09IDI7CisJICAgIGdvdG8gbm9fc3Vw cG9ydDsKKwkgIH0KKwlyZXQgPSBnZGJhcmNoX3RkZXAgKGdkYmFyY2gpLT5p Mzg2X2ludHg4MF9yZWNvcmQgKCk7CisJaWYgKHJldCkKKwkgIHsKKwkgICAg cmV0dXJuIChyZXQpOworCSAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisK KyAgICAgIC8qIGludG8gKi8KKyAgICAgIC8qIFhYWCAqLworICAgIGNhc2Ug MHhjZToKKyAgICAgIHByaW50Zl91bmZpbHRlcmVkIChfCisJCQkgKCJyZWNv cmQ6IHJlY29yZCBhbmQgcmV2ZXJzZSBmdW5jdGlvbiBkb24ndCBzdXBwb3J0 IGluc3RydWN0aW9uIGludG8uXG4iKSk7CisgICAgICBpMzg2X3JlY29yZF9w YyAtPSAxOworICAgICAgZ290byBub19zdXBwb3J0OworICAgICAgYnJlYWs7 CisKKyAgICAgIC8qIGNsaSAqLworICAgIGNhc2UgMHhmYToKKyAgICAgIC8q IHN0aSAqLworICAgIGNhc2UgMHhmYjoKKyAgICAgIGJyZWFrOworCisgICAg ICAvKiBib3VuZCAqLworICAgIGNhc2UgMHg2MjoKKyAgICAgIHByaW50Zl91 bmZpbHRlcmVkIChfCisJCQkgKCJyZWNvcmQ6IHJlY29yZCBhbmQgcmV2ZXJz ZSBmdW5jdGlvbiBkb24ndCBzdXBwb3J0IGluc3RydWN0aW9uIGJvdW5kLlxu IikpOworICAgICAgaTM4Nl9yZWNvcmRfcGMgLT0gMTsKKyAgICAgIGdvdG8g bm9fc3VwcG9ydDsKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBic3dhcCBy ZWcgKi8KKyAgICBjYXNlIDB4MGZjOCAuLi4gMHgwZmNmOgorICAgICAgaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAob3Bjb2RlICYgNykpCisJewor CSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8q IHNhbGMgKi8KKyAgICBjYXNlIDB4ZDY6CisgICAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfcmVnIChJMzg2X0VBWF9SRUdOVU0pKQorCXsKKwkgIHJl dHVybiAoLTEpOworCX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9yZWcgKEkzODZfRUZMQUdTX1JFR05VTSkpCisJeworCSAgcmV0dXJuICgt MSk7CisJfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIGxvb3BueiAqLwor ICAgIGNhc2UgMHhlMDoKKyAgICAgIC8qIGxvb3B6ICovCisgICAgY2FzZSAw eGUxOgorICAgICAgLyogbG9vcCAqLworICAgIGNhc2UgMHhlMjoKKyAgICAg IC8qIGplY3h6ICovCisgICAgY2FzZSAweGUzOgorICAgICAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FQ1hfUkVHTlVNKSkKKwl7CisJ ICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyog d3Jtc3IgKi8KKyAgICBjYXNlIDB4MGYzMDoKKyAgICAgIHByaW50Zl91bmZp bHRlcmVkIChfCisJCQkgKCJyZWNvcmQ6IHJlY29yZCBhbmQgcmV2ZXJzZSBm dW5jdGlvbiBkb24ndCBzdXBwb3J0IGluc3RydWN0aW9uIHdybXNyLlxuIikp OworICAgICAgaTM4Nl9yZWNvcmRfcGMgLT0gMjsKKyAgICAgIGdvdG8gbm9f c3VwcG9ydDsKKyAgICAgIGJyZWFrOworCisgICAgICAvKiByZG1zciAqLwor ICAgIGNhc2UgMHgwZjMyOgorICAgICAgcHJpbnRmX3VuZmlsdGVyZWQgKF8K KwkJCSAoInJlY29yZDogcmVjb3JkIGFuZCByZXZlcnNlIGZ1bmN0aW9uIGRv bid0IHN1cHBvcnQgaW5zdHJ1Y3Rpb24gcmRtc3IuXG4iKSk7CisgICAgICBp Mzg2X3JlY29yZF9wYyAtPSAyOworICAgICAgZ290byBub19zdXBwb3J0Owor ICAgICAgYnJlYWs7CisKKyAgICAgIC8qIHJkdHNjICovCisgICAgY2FzZSAw eDBmMzE6CisgICAgICBwcmludGZfdW5maWx0ZXJlZCAoXworCQkJICgicmVj b3JkOiByZWNvcmQgYW5kIHJldmVyc2UgZnVuY3Rpb24gZG9uJ3Qgc3VwcG9y dCBpbnN0cnVjdGlvbiByZHRzYy5cbiIpKTsKKyAgICAgIGkzODZfcmVjb3Jk X3BjIC09IDI7CisgICAgICBnb3RvIG5vX3N1cHBvcnQ7CisgICAgICBicmVh azsKKworICAgICAgLyogc3lzZW50ZXIgKi8KKyAgICBjYXNlIDB4MGYzNDoK KyAgICAgIHsKKwlpbnQgcmV0OworCWlmIChnZGJhcmNoX3RkZXAgKGdkYmFy Y2gpLT5pMzg2X3N5c2VudGVyX3JlY29yZCA9PSBOVUxMKQorCSAgeworCSAg ICBwcmludGZfdW5maWx0ZXJlZCAoXworCQkJICAgICAgICgicmVjb3JkOiBy ZWNvcmQgYW5kIHJldmVyc2UgZnVuY3Rpb24gZG9uJ3Qgc3VwcG9ydCBpbnN0 cnVjdGlvbiBzeXNlbnRlci5cbiIpKTsKKwkgICAgaTM4Nl9yZWNvcmRfcGMg LT0gMjsKKwkgICAgZ290byBub19zdXBwb3J0OworCSAgfQorCXJldCA9IGdk YmFyY2hfdGRlcCAoZ2RiYXJjaCktPmkzODZfc3lzZW50ZXJfcmVjb3JkICgp OworCWlmIChyZXQpCisJICB7CisJICAgIHJldHVybiAocmV0KTsKKwkgIH0K KyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBzeXNleGl0ICov CisgICAgY2FzZSAweDBmMzU6CisgICAgICBwcmludGZfdW5maWx0ZXJlZCAo XworCQkJICgicmVjb3JkOiByZWNvcmQgYW5kIHJldmVyc2UgZnVuY3Rpb24g ZG9uJ3Qgc3VwcG9ydCBpbnN0cnVjdGlvbiBzeXNleGl0LlxuIikpOworICAg ICAgaTM4Nl9yZWNvcmRfcGMgLT0gMjsKKyAgICAgIGdvdG8gbm9fc3VwcG9y dDsKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBjcHVpZCAqLworICAgIGNh c2UgMHgwZmEyOgorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3Jl ZyAoSTM4Nl9FQVhfUkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9 CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChJMzg2X0VD WF9SRUdOVU0pKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRURYX1JFR05VTSkp CisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FQlhfUkVHTlVNKSkKKwl7CisJICBy ZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogaGx0 ICovCisgICAgY2FzZSAweGY0OgorICAgICAgcHJpbnRmX3VuZmlsdGVyZWQg KF8KKwkJCSAoInJlY29yZDogcmVjb3JkIGFuZCByZXZlcnNlIGZ1bmN0aW9u IGRvbid0IHN1cHBvcnQgaW5zdHJ1Y3Rpb24gaGx0LlxuIikpOworICAgICAg aTM4Nl9yZWNvcmRfcGMgLT0gMTsKKyAgICAgIGdvdG8gbm9fc3VwcG9ydDsK KyAgICAgIGJyZWFrOworCisgICAgY2FzZSAweDBmMDA6CisgICAgICBpZiAo aTM4Nl9yZWNvcmRfbW9kcm0gKCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJ fQorICAgICAgc3dpdGNoIChyZWcpCisJeworCSAgLyogc2xkdCAqLworCWNh c2UgMDoKKwkgIC8qIHN0ciAqLworCWNhc2UgMToKKwkgIGlmIChtb2QgPT0g MykKKwkgICAgeworCSAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9y ZWcgKHJtKSkKKwkJeworCQkgIHJldHVybiAoLTEpOworCQl9CisJICAgIH0K KwkgIGVsc2UKKwkgICAgeworCSAgICAgIG90ID0gT1RfV09SRDsKKwkgICAg ICBpZiAoaTM4Nl9yZWNvcmRfbGVhX21vZHJtICgpKQorCQl7CisJCSAgcmV0 dXJuICgtMSk7CisJCX0KKwkgICAgfQorCSAgYnJlYWs7CisJICAvKiBsbGR0 ICovCisJY2FzZSAyOgorCSAgLyogbHRyICovCisJY2FzZSAzOgorCSAgYnJl YWs7CisJICAvKiB2ZXJyICovCisJY2FzZSA0OgorCSAgLyogdmVydyAqLwor CWNhc2UgNToKKwkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKEkz ODZfRUZMQUdTX1JFR05VTSkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0x KTsKKwkgICAgfQorCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGkzODZfcmVj b3JkX3BjIC09IDM7CisJICBvcGNvZGUgPSBvcGNvZGUgPDwgOCB8IG1vZHJt OworCSAgZ290byBub19zdXBwb3J0OworCSAgYnJlYWs7CisJfQorICAgICAg YnJlYWs7CisKKyAgICBjYXNlIDB4MGYwMToKKyAgICAgIGlmIChpMzg2X3Jl Y29yZF9tb2RybSAoKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAg ICBzd2l0Y2ggKHJlZykKKwl7CisJICAvKiBzZ2R0ICovCisJY2FzZSAwOgor CSAgeworCSAgICB1aW50MzJfdCBhZGRyOworCisJICAgIGlmIChtb2QgPT0g MykKKwkgICAgICB7CisJCWkzODZfcmVjb3JkX3BjIC09IDM7CisJCW9wY29k ZSA9IG9wY29kZSA8PCA4IHwgbW9kcm07CisJCWdvdG8gbm9fc3VwcG9ydDsK KwkgICAgICB9CisKKwkgICAgaWYgKG92ZXJyaWRlKQorCSAgICAgIHsKKwkJ cHJpbnRmX3VuZmlsdGVyZWQgKF8KKwkJCQkgICAoInJlY29yZDogY2Fubid0 IGdldCB0aGUgdmFsdWUgb2YgdGhlIHNlZ21lbnQgcmVnaXN0ZXIgaW4gYWRk cmVzcyAweCVzLiBSZWNvcmQgaWdub3JlIHRoaXMgY2hhbmdlLlxuIiksCisJ CQkJICAgcGFkZHJfbnogKHJlYWRfcGMgKCkpKTsKKwkgICAgICB9CisJICAg IGVsc2UKKwkgICAgICB7CisJCWlmIChpMzg2X3JlY29yZF9sZWFfbW9kcm1f YWRkciAoJmFkZHIpKQorCQkgIHsKKwkJICAgIHJldHVybiAoLTEpOworCQkg IH0KKwkJaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoYWRkciwgMikp CisJCSAgeworCQkgICAgcmV0dXJuICgtMSk7CisJCSAgfQorCQlhZGRyICs9 IDI7CisJCWlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKGFkZHIsIDQp KQorCQkgIHsKKwkJICAgIHJldHVybiAoLTEpOworCQkgIH0KKwkgICAgICB9 CisJICB9CisJICBicmVhazsKKwljYXNlIDE6CisJICBpZiAobW9kID09IDMp CisJICAgIHsKKwkgICAgICBzd2l0Y2ggKHJtKQorCQl7CisJCSAgLyogbW9u aXRvciAqLworCQljYXNlIDA6CisJCSAgYnJlYWs7CisJCSAgLyogbXdhaXQg Ki8KKwkJY2FzZSAxOgorCQkgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9y ZWcgKEkzODZfRUZMQUdTX1JFR05VTSkpCisJCSAgICB7CisJCSAgICAgIHJl dHVybiAoLTEpOworCQkgICAgfQorCQkgIGJyZWFrOworCQlkZWZhdWx0Ogor CQkgIGkzODZfcmVjb3JkX3BjIC09IDM7CisJCSAgb3Bjb2RlID0gb3Bjb2Rl IDw8IDggfCBtb2RybTsKKwkJICBnb3RvIG5vX3N1cHBvcnQ7CisJCSAgYnJl YWs7CisJCX0KKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLyog c2lkdCAqLworCSAgICAgIGlmIChvdmVycmlkZSkKKwkJeworCQkgIHByaW50 Zl91bmZpbHRlcmVkIChfCisJCQkJICAgICAoInJlY29yZDogY2Fubid0IGdl dCB0aGUgdmFsdWUgb2YgdGhlIHNlZ21lbnQgcmVnaXN0ZXIgaW4gYWRkcmVz cyAweCVzLiBSZWNvcmQgaWdub3JlIHRoaXMgY2hhbmdlLlxuIiksCisJCQkJ ICAgICBwYWRkcl9ueiAocmVhZF9wYyAoKSkpOworCQl9CisJICAgICAgZWxz ZQorCQl7CisJCSAgdWludDMyX3QgYWRkcjsKKworCQkgIGlmIChpMzg2X3Jl Y29yZF9sZWFfbW9kcm1fYWRkciAoJmFkZHIpKQorCQkgICAgeworCQkgICAg ICByZXR1cm4gKC0xKTsKKwkJICAgIH0KKwkJICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfbWVtIChhZGRyLCAyKSkKKwkJICAgIHsKKwkJICAgICAgcmV0 dXJuICgtMSk7CisJCSAgICB9CisJCSAgYWRkciArPSAyOworCQkgIGlmIChy ZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKGFkZHIsIDQpKQorCQkgICAgewor CQkgICAgICByZXR1cm4gKC0xKTsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJ ICBicmVhazsKKwkgIC8qIGxnZHQgKi8KKwljYXNlIDI6CisJICAvKiBsaWR0 ICovCisJY2FzZSAzOgorCSAgLyogaW52bHBnICovCisJY2FzZSA3OgorCWRl ZmF1bHQ6CisJICBpZiAobW9kID09IDMpCisJICAgIHsKKwkgICAgICBpMzg2 X3JlY29yZF9wYyAtPSAzOworCSAgICAgIG9wY29kZSA9IG9wY29kZSA8PCA4 IHwgbW9kcm07CisJICAgICAgZ290byBub19zdXBwb3J0OworCSAgICB9CisJ ICBicmVhazsKKwkgIC8qIHNtc3cgKi8KKwljYXNlIDQ6CisJICBpZiAobW9k ID09IDMpCisJICAgIHsKKwkgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfcmVnIChybSkpCisJCXsKKwkJICByZXR1cm4gKC0xKTsKKwkJfQorCSAg ICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBvdCA9IE9UX1dPUkQ7CisJ ICAgICAgaWYgKGkzODZfcmVjb3JkX2xlYV9tb2RybSAoKSkKKwkJeworCQkg IHJldHVybiAoLTEpOworCQl9CisJICAgIH0KKwkgIGJyZWFrOworCSAgLyog bG1zdyAqLworCWNhc2UgNjoKKwkgIGJyZWFrOworCX0KKyAgICAgIGJyZWFr OworCisgICAgICAvKiBpbnZkICovCisgICAgY2FzZSAweDBmMDg6CisgICAg ICAvKiB3YmludmQgKi8KKyAgICBjYXNlIDB4MGYwOToKKyAgICAgIGJyZWFr OworCisgICAgICAvKiBhcnBsICovCisgICAgY2FzZSAweDYzOgorICAgICAg b3QgPSBkZmxhZyA/IE9UX0xPTkcgOiBPVF9XT1JEOworICAgICAgaWYgKGkz ODZfcmVjb3JkX21vZHJtICgpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0K KyAgICAgIGlmIChtb2QgIT0gMykKKwl7CisJICBpZiAoaTM4Nl9yZWNvcmRf bGVhX21vZHJtICgpKQorCSAgICB7CisJICAgICAgcmV0dXJuICgtMSk7CisJ ICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX3JlZyAocm0pKQorCSAgICB7CisJICAgICAgcmV0dXJuICgt MSk7CisJICAgIH0KKwl9CisgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfcmVnIChJMzg2X0VGTEFHU19SRUdOVU0pKQorCXsKKwkgIHJldHVybiAo LTEpOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBsYXIgKi8KKyAg ICBjYXNlIDB4MGYwMjoKKyAgICAgIC8qIGxzbCAqLworICAgIGNhc2UgMHgw ZjAzOgorICAgICAgaWYgKGkzODZfcmVjb3JkX21vZHJtICgpKQorCXsKKwkg IHJldHVybiAoLTEpOworCX0KKyAgICAgIGlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9yZWcgKHJlZykpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAg ICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoSTM4Nl9FRkxBR1Nf UkVHTlVNKSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICBicmVh azsKKworICAgIGNhc2UgMHgwZjE4OgorICAgICAgYnJlYWs7CisKKyAgICAg IC8qIG5vcCAobXVsdGkgYnl0ZSkgKi8KKyAgICBjYXNlIDB4MGYxOSAuLi4g MHgwZjFmOgorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIG1vdiByZWcsIGNy TiAqLworICAgIGNhc2UgMHgwZjIwOgorICAgICAgLyogbW92IGNyTiwgcmVn ICovCisgICAgY2FzZSAweDBmMjI6CisgICAgICBpZiAoaTM4Nl9yZWNvcmRf bW9kcm0gKCkpCisJeworCSAgcmV0dXJuICgtMSk7CisJfQorICAgICAgaWYg KChtb2RybSAmIDB4YzApICE9IDB4YzApCisJeworCSAgaTM4Nl9yZWNvcmRf cGMgLT0gMjsKKwkgIG9wY29kZSA9IG9wY29kZSA8PCA4IHwgbW9kcm07CisJ ICBnb3RvIG5vX3N1cHBvcnQ7CisJfQorICAgICAgc3dpdGNoIChyZWcpCisJ eworCWNhc2UgMDoKKwljYXNlIDI6CisJY2FzZSAzOgorCWNhc2UgNDoKKwlj YXNlIDg6CisJICBpZiAob3Bjb2RlICYgMikKKwkgICAgeworCSAgICB9CisJ ICBlbHNlCisJICAgIHsKKwkgICAgICBpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfcmVnIChybSkpCisJCXsKKwkJICByZXR1cm4gKC0xKTsKKwkJfQorCSAg ICB9CisJICBicmVhazsKKwlkZWZhdWx0OgorCSAgaTM4Nl9yZWNvcmRfcGMg LT0gMjsKKwkgIG9wY29kZSA9IG9wY29kZSA8PCA4IHwgbW9kcm07CisJICBn b3RvIG5vX3N1cHBvcnQ7CisJICBicmVhazsKKwl9CisgICAgICBicmVhazsK KworICAgICAgLyogbW92IHJlZywgZHJOICovCisgICAgY2FzZSAweDBmMjE6 CisgICAgICAvKiBtb3YgZHJOLCByZWcgKi8KKyAgICBjYXNlIDB4MGYyMzoK KyAgICAgIGlmIChpMzg2X3JlY29yZF9tb2RybSAoKSkKKwl7CisJICByZXR1 cm4gKC0xKTsKKwl9CisgICAgICBpZiAoKG1vZHJtICYgMHhjMCkgIT0gMHhj MCB8fCByZWcgPT0gNCB8fCByZWcgPT0gNSB8fCByZWcgPj0gOCkKKwl7CisJ ICBpMzg2X3JlY29yZF9wYyAtPSAyOworCSAgb3Bjb2RlID0gb3Bjb2RlIDw8 IDggfCBtb2RybTsKKwkgIGdvdG8gbm9fc3VwcG9ydDsKKwl9CisgICAgICBp ZiAob3Bjb2RlICYgMikKKwl7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlm IChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKHJtKSkKKwkgICAgeworCSAg ICAgIHJldHVybiAoLTEpOworCSAgICB9CisJfQorICAgICAgYnJlYWs7CisK KyAgICAgIC8qIGNsdHMgKi8KKyAgICBjYXNlIDB4MGYwNjoKKyAgICAgIGJy ZWFrOworCisgICAgICAvKiBNTVgvU1NFL1NTRTIvUE5JIHN1cHBvcnQgKi8K KyAgICAgIC8qIFhYWCAqLworCisgICAgZGVmYXVsdDoKKyAgICAgIGlmIChv cGNvZGUgPiAweGZmKQorCXsKKwkgIGkzODZfcmVjb3JkX3BjIC09IDI7CisJ fQorICAgICAgZWxzZQorCXsKKwkgIGkzODZfcmVjb3JkX3BjIC09IDE7CisJ fQorICAgICAgZ290byBub19zdXBwb3J0OworICAgICAgYnJlYWs7CisgICAg fQorCisgIGlmICghbmVlZF9kYXNtKQorICAgIHsKKyAgICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9yZWcgKEkzODZfRUlQX1JFR05VTSkpCisJewor CSAgcmV0dXJuICgtMSk7CisJfQorICAgIH0KKyAgaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX2VuZCAobmVlZF9kYXNtKSkKKyAgICB7CisgICAgICByZXR1 cm4gKC0xKTsKKyAgICB9CisKKyAgcmV0dXJuICgwKTsKKworbm9fc3VwcG9y dDoKKyAgcHJpbnRmX3VuZmlsdGVyZWQgKF8KKwkJICAgICAoInJlY29yZDog cmVjb3JkIGFuZCByZXZlcnNlIGZ1bmN0aW9uIGRvbid0IHN1cHBvcnQgaW5z dHJ1Y3Rpb24gMHglMDJ4IGF0IGFkZHJlc3MgMHglcy5cbiIpLAorCQkgICAg ICh1bnNpZ25lZCBpbnQpIChvcGNvZGUpLCBwYWRkcl9ueiAoaTM4Nl9yZWNv cmRfcGMpKTsKKyAgcmV0dXJuICgtMSk7Cit9CisKKwwKK3N0YXRpYyBzdHJ1 Y3QgZ2RiYXJjaCAqCitpMzg2X2dkYmFyY2hfaW5pdCAoc3RydWN0IGdkYmFy Y2hfaW5mbyBpbmZvLCBzdHJ1Y3QgZ2RiYXJjaF9saXN0ICphcmNoZXMpCit7 CisgIHN0cnVjdCBnZGJhcmNoX3RkZXAgKnRkZXA7CisgIHN0cnVjdCBnZGJh cmNoICpnZGJhcmNoOworCisgIC8qIElmIHRoZXJlIGlzIGFscmVhZHkgYSBj YW5kaWRhdGUsIHVzZSBpdC4gICovCisgIGFyY2hlcyA9IGdkYmFyY2hfbGlz dF9sb29rdXBfYnlfaW5mbyAoYXJjaGVzLCAmaW5mbyk7CisgIGlmIChhcmNo ZXMgIT0gTlVMTCkKKyAgICByZXR1cm4gYXJjaGVzLT5nZGJhcmNoOworCisg IC8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgbmV3IGFyY2hpdGVjdHVyZS4g ICovCisgIHRkZXAgPSBYQ0FMTE9DICgxLCBzdHJ1Y3QgZ2RiYXJjaF90ZGVw KTsKKyAgZ2RiYXJjaCA9IGdkYmFyY2hfYWxsb2MgKCZpbmZvLCB0ZGVwKTsK KworICAvKiBHZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXJzLiAgKi8KKyAgdGRl cC0+Z3JlZ3NldCA9IE5VTEw7CisgIHRkZXAtPmdyZWdzZXRfcmVnX29mZnNl dCA9IE5VTEw7CisgIHRkZXAtPmdyZWdzZXRfbnVtX3JlZ3MgPSBJMzg2X05V TV9HUkVHUzsKKyAgdGRlcC0+c2l6ZW9mX2dyZWdzZXQgPSAwOworCisgIC8q IEZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycy4gICovCisgIHRkZXAtPmZwcmVn c2V0ID0gTlVMTDsKKyAgdGRlcC0+c2l6ZW9mX2ZwcmVnc2V0ID0gSTM4N19T SVpFT0ZfRlNBVkU7CisKKyAgLyogVGhlIGRlZmF1bHQgc2V0dGluZ3MgaW5j bHVkZSB0aGUgRlBVIHJlZ2lzdGVycywgdGhlIE1NWCByZWdpc3RlcnMKKyAg ICAgYW5kIHRoZSBTU0UgcmVnaXN0ZXJzLiAgVGhpcyBjYW4gYmUgb3ZlcnJp ZGRlbiBmb3IgYSBzcGVjaWZpYyBBQkkKKyAgICAgYnkgYWRqdXN0aW5nIHRo ZSBtZW1iZXJzIGBzdDBfcmVnbnVtJywgYG1tMF9yZWdudW0nIGFuZAorICAg ICBgbnVtX3htbV9yZWdzJyBvZiBgc3RydWN0IGdkYmFyY2hfdGRlcCcsIG90 aGVyd2lzZSB0aGUgcmVnaXN0ZXJzCisgICAgIHdpbGwgc2hvdyB1cCBpbiB0 aGUgb3V0cHV0IG9mICJpbmZvIGFsbC1yZWdpc3RlcnMiLiAgSWRlYWxseSB3 ZQorICAgICBzaG91bGQgdHJ5IHRvIGF1dG9kZXRlY3Qgd2hldGhlciB0aGV5 IGFyZSBhdmFpbGFibGUsIHN1Y2ggdGhhdCB3ZQorICAgICBjYW4gcHJldmVu dCAiaW5mbyBhbGwtcmVnaXN0ZXJzIiBmcm9tIGRpc3BsYXlpbmcgcmVnaXN0 ZXJzIHRoYXQKKyAgICAgYXJlbid0IGF2YWlsYWJsZS4KKworICAgICBOT1RF OiBrZXZpbmIvMjAwMy0wNy0xMzogLi4uIGlmIGl0J3MgYSBjaG9pY2UgYmV0 d2VlbiBwcmludGluZworICAgICBbdGhlIFNTRSByZWdpc3RlcnNdIGFsd2F5 cyAoZXZlbiB3aGVuIHRoZXkgZG9uJ3QgZXhpc3QpIG9yIG5ldmVyCisgICAg IHNob3dpbmcgdGhlbSB0byB0aGUgdXNlciAoZXZlbiB3aGVuIHRoZXkgZG8g ZXhpc3QpLCBJIHByZWZlciB0aGUKKyAgICAgZm9ybWVyIG92ZXIgdGhlIGxh dHRlci4gICovCisKKyAgdGRlcC0+c3QwX3JlZ251bSA9IEkzODZfU1QwX1JF R05VTTsKKworICAvKiBUaGUgTU1YIHJlZ2lzdGVycyBhcmUgaW1wbGVtZW50 ZWQgYXMgcHNldWRvLXJlZ2lzdGVycy4gIFB1dCBvZmYKKyAgICAgY2FsY3Vs YXRpbmcgdGhlIHJlZ2lzdGVyIG51bWJlciBmb3IgJW1tMCB1bnRpbCB3ZSBr bm93IHRoZSBudW1iZXIKKyAgICAgb2YgcmF3IHJlZ2lzdGVycy4gICovCisg IHRkZXAtPm1tMF9yZWdudW0gPSAwOworCisgIC8qIEkzODZfTlVNX1hSRUdT IGluY2x1ZGVzICVteGNzciwgc28gc3Vic3RyYWN0IG9uZS4gICovCisgIHRk ZXAtPm51bV94bW1fcmVncyA9IEkzODZfTlVNX1hSRUdTIC0gMTsKKworICB0 ZGVwLT5qYl9wY19vZmZzZXQgPSAtMTsKKyAgdGRlcC0+c3RydWN0X3JldHVy biA9IHBjY19zdHJ1Y3RfcmV0dXJuOworICB0ZGVwLT5zaWd0cmFtcF9zdGFy dCA9IDA7CisgIHRkZXAtPnNpZ3RyYW1wX2VuZCA9IDA7CisgIHRkZXAtPnNp Z3RyYW1wX3AgPSBpMzg2X3NpZ3RyYW1wX3A7CisgIHRkZXAtPnNpZ2NvbnRl eHRfYWRkciA9IE5VTEw7CisgIHRkZXAtPnNjX3JlZ19vZmZzZXQgPSBOVUxM OworICB0ZGVwLT5zY19wY19vZmZzZXQgPSAtMTsKKyAgdGRlcC0+c2Nfc3Bf b2Zmc2V0ID0gLTE7CisKKyAgLyogVGhlIGZvcm1hdCB1c2VkIGZvciBgbG9u ZyBkb3VibGUnIG9uIGFsbW9zdCBhbGwgaTM4NiB0YXJnZXRzIGlzCisgICAg IHRoZSBpMzg3IGV4dGVuZGVkIGZsb2F0aW5nLXBvaW50IGZvcm1hdC4gIElu IGZhY3QsIG9mIGFsbCB0YXJnZXRzCisgICAgIGluIHRoZSBHQ0MgMi45NSB0 cmVlLCBvbmx5IE9TRi8xIGRvZXMgaXQgZGlmZmVyZW50LCBhbmQgaW5zaXN0 cworICAgICBvbiBoYXZpbmcgYSBgbG9uZyBkb3VibGUnIHRoYXQncyBub3Qg YGxvbmcnIGF0IGFsbC4gICovCisgIHNldF9nZGJhcmNoX2xvbmdfZG91Ymxl X2Zvcm1hdCAoZ2RiYXJjaCwgZmxvYXRmb3JtYXRzX2kzODdfZXh0KTsKKwor ICAvKiBBbHRob3VnaCB0aGUgaTM4NyBleHRlbmRlZCBmbG9hdGluZy1wb2lu dCBoYXMgb25seSA4MCBzaWduaWZpY2FudAorICAgICBiaXRzLCBhIGBsb25n IGRvdWJsZScgYWN0dWFsbHkgdGFrZXMgdXAgOTYsIHByb2JhYmx5IHRvIGVu Zm9yY2UKKyAgICAgYWxpZ25tZW50LiAgKi8KKyAgc2V0X2dkYmFyY2hfbG9u Z19kb3VibGVfYml0IChnZGJhcmNoLCA5Nik7CisKKyAgLyogVGhlIGRlZmF1 bHQgQUJJIGluY2x1ZGVzIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlcnMsIAor ICAgICBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMsIGFuZCB0aGUgU1NFIHJl Z2lzdGVycy4gICovCisgIHNldF9nZGJhcmNoX251bV9yZWdzIChnZGJhcmNo LCBJMzg2X1NTRV9OVU1fUkVHUyk7CisgIHNldF9nZGJhcmNoX3JlZ2lzdGVy X25hbWUgKGdkYmFyY2gsIGkzODZfcmVnaXN0ZXJfbmFtZSk7CisgIHNldF9n ZGJhcmNoX3JlZ2lzdGVyX3R5cGUgKGdkYmFyY2gsIGkzODZfcmVnaXN0ZXJf dHlwZSk7CisKKyAgLyogUmVnaXN0ZXIgbnVtYmVycyBvZiB2YXJpb3VzIGlt cG9ydGFudCByZWdpc3RlcnMuICAqLworICBzZXRfZ2RiYXJjaF9zcF9yZWdu dW0gKGdkYmFyY2gsIEkzODZfRVNQX1JFR05VTSk7IC8qICVlc3AgKi8KKyAg c2V0X2dkYmFyY2hfcGNfcmVnbnVtIChnZGJhcmNoLCBJMzg2X0VJUF9SRUdO VU0pOyAvKiAlZWlwICovCisgIHNldF9nZGJhcmNoX3BzX3JlZ251bSAoZ2Ri YXJjaCwgSTM4Nl9FRkxBR1NfUkVHTlVNKTsgLyogJWVmbGFncyAqLworICBz ZXRfZ2RiYXJjaF9mcDBfcmVnbnVtIChnZGJhcmNoLCBJMzg2X1NUMF9SRUdO VU0pOyAvKiAlc3QoMCkgKi8KKworICAvKiBOT1RFOiBrZXR0ZW5pcy8yMDA0 MDQxODogR0NDIGRvZXMgaGF2ZSB0d28gcG9zc2libGUgcmVnaXN0ZXIKKyAg ICAgbnVtYmVyaW5nIHNjaGVtZXMgb24gdGhlIGkzODY6IGRieCBhbmQgU1ZS NC4gIFRoZXNlIHNjaGVtZXMKKyAgICAgZGlmZmVyIGluIGhvdyB0aGV5IG51 bWJlciAlZWJwLCAlZXNwLCAlZWZsYWdzLCBhbmQgdGhlCisgICAgIGZsb2F0 aW5nLXBvaW50IHJlZ2lzdGVycywgYW5kIGFyZSBpbXBsZW1lbnRlZCBieSB0 aGUgYXJyYXlzCisgICAgIGRieF9yZWdpc3Rlcl9tYXBbXSBhbmQgc3ZyNF9k YnhfcmVnaXN0ZXJfbWFwIGluCisgICAgIGdjYy9jb25maWcvaTM4Ni5jLiAg R0NDIGFsc28gZGVmaW5lcyBhIHRoaXJkIG51bWJlcmluZyBzY2hlbWUgaW4K KyAgICAgZ2NjL2NvbmZpZy9pMzg2LmMsIHdoaWNoIGl0IGRlc2lnbmF0ZXMg YXMgdGhlICJkZWZhdWx0IiByZWdpc3RlcgorICAgICBtYXAgdXNlZCBpbiA2 NGJpdCBtb2RlLiAgVGhpcyBsYXN0IHJlZ2lzdGVyIG51bWJlcmluZyBzY2hl bWUgaXMKKyAgICAgaW1wbGVtZW50ZWQgaW4gZGJ4NjRfcmVnaXN0ZXJfbWFw LCBhbmQgaXMgdXNlZCBmb3IgQU1ENjQ7IHNlZQorICAgICBhbWQ2NC10ZGVw LmMuCisKKyAgICAgQ3VycmVudGx5LCBlYWNoIEdDQyBpMzg2IHRhcmdldCBh bHdheXMgdXNlcyB0aGUgc2FtZSByZWdpc3RlcgorICAgICBudW1iZXJpbmcg c2NoZW1lIGFjcm9zcyBhbGwgaXRzIHN1cHBvcnRlZCBkZWJ1Z2dpbmcgZm9y bWF0cworICAgICBpLmUuIFNEQiAoQ09GRiksIHN0YWJzIGFuZCBEV0FSRiAy LiAgVGhpcyBpcyBiZWNhdXNlCisgICAgIGdjYy9zZGJvdXQuYywgZ2NjL2Ri eG91dC5jIGFuZCBnY2MvZHdhcmYyb3V0LmMgYWxsIHVzZSB0aGUKKyAgICAg REJYX1JFR0lTVEVSX05VTUJFUiBtYWNybyB3aGljaCBpcyBkZWZpbmVkIGJ5 IGVhY2ggdGFyZ2V0J3MKKyAgICAgcmVzcGVjdGl2ZSBjb25maWcgaGVhZGVy IGluIGEgbWFubmVyIGluZGVwZW5kZW50IG9mIHRoZSByZXF1ZXN0ZWQKKyAg ICAgb3V0cHV0IGRlYnVnZ2luZyBmb3JtYXQuCisKKyAgICAgVGhpcyBkb2Vz IG5vdCBtYXRjaCB0aGUgYXJyYW5nZW1lbnQgYmVsb3csIHdoaWNoIHByZXN1 bWVzIHRoYXQKKyAgICAgdGhlIFNEQiBhbmQgc3RhYnMgbnVtYmVyaW5nIHNj aGVtZXMgZGlmZmVyIGZyb20gdGhlIERXQVJGIGFuZAorICAgICBEV0FSRiAy IG9uZXMuICBUaGUgcmVhc29uIGZvciB0aGlzIGFycmFuZ2VtZW50IGlzIHRo YXQgaXQgaXMKKyAgICAgbGlrZWx5IHRvIGdldCB0aGUgbnVtYmVyaW5nIHNj aGVtZSBmb3IgdGhlIHRhcmdldCdzCisgICAgIGRlZmF1bHQvbmF0aXZlIGRl YnVnIGZvcm1hdCByaWdodC4gIEZvciB0YXJnZXRzIHdoZXJlIEdDQyBpcyB0 aGUKKyAgICAgbmF0aXZlIGNvbXBpbGVyIChGcmVlQlNELCBOZXRCU0QsIE9w ZW5CU0QsIEdOVS9MaW51eCkgb3IgZm9yCisgICAgIHRhcmdldHMgd2hlcmUg dGhlIG5hdGl2ZSB0b29sY2hhaW4gdXNlcyBhIGRpZmZlcmVudCBudW1iZXJp bmcKKyAgICAgc2NoZW1lIGZvciBhIHBhcnRpY3VsYXIgZGVidWcgZm9ybWF0 IChzdGFicy1pbi1FTEYgb24gU29sYXJpcykKKyAgICAgdGhlIGRlZmF1bHRz IGJlbG93IHdpbGwgaGF2ZSB0byBiZSBvdmVycmlkZGVuLCBsaWtlCisgICAg IGkzODZfZWxmX2luaXRfYWJpKCkgZG9lcy4gICovCisKKyAgLyogVXNlIHRo ZSBkYnggcmVnaXN0ZXIgbnVtYmVyaW5nIHNjaGVtZSBmb3Igc3RhYnMgYW5k IENPRkYuICAqLworICBzZXRfZ2RiYXJjaF9zdGFiX3JlZ190b19yZWdudW0g KGdkYmFyY2gsIGkzODZfZGJ4X3JlZ190b19yZWdudW0pOworICBzZXRfZ2Ri YXJjaF9zZGJfcmVnX3RvX3JlZ251bSAoZ2RiYXJjaCwgaTM4Nl9kYnhfcmVn X3RvX3JlZ251bSk7CisKKyAgLyogVXNlIHRoZSBTVlI0IHJlZ2lzdGVyIG51 bWJlcmluZyBzY2hlbWUgZm9yIERXQVJGIGFuZCBEV0FSRiAyLiAgKi8KKyAg c2V0X2dkYmFyY2hfZHdhcmZfcmVnX3RvX3JlZ251bSAoZ2RiYXJjaCwgaTM4 Nl9zdnI0X3JlZ190b19yZWdudW0pOworICBzZXRfZ2RiYXJjaF9kd2FyZjJf cmVnX3RvX3JlZ251bSAoZ2RiYXJjaCwgaTM4Nl9zdnI0X3JlZ190b19yZWdu dW0pOworCisgIC8qIFdlIGRvbid0IHNldCBnZGJhcmNoX3N0YWJfcmVnX3Rv X3JlZ251bSwgc2luY2UgRUNPRkYgZG9lc24ndCBzZWVtIHRvCisgICAgIGJl IGluIHVzZSBvbiBhbnkgb2YgdGhlIHN1cHBvcnRlZCBpMzg2IHRhcmdldHMu ICAqLworCisgIHNldF9nZGJhcmNoX3ByaW50X2Zsb2F0X2luZm8gKGdkYmFy Y2gsIGkzODdfcHJpbnRfZmxvYXRfaW5mbyk7CisKKyAgc2V0X2dkYmFyY2hf Z2V0X2xvbmdqbXBfdGFyZ2V0IChnZGJhcmNoLCBpMzg2X2dldF9sb25nam1w X3RhcmdldCk7CisKKyAgLyogQ2FsbCBkdW1teSBjb2RlLiAgKi8KKyAgc2V0 X2dkYmFyY2hfcHVzaF9kdW1teV9jYWxsIChnZGJhcmNoLCBpMzg2X3B1c2hf ZHVtbXlfY2FsbCk7CisKKyAgc2V0X2dkYmFyY2hfY29udmVydF9yZWdpc3Rl cl9wIChnZGJhcmNoLCBpMzg2X2NvbnZlcnRfcmVnaXN0ZXJfcCk7CisgIHNl dF9nZGJhcmNoX3JlZ2lzdGVyX3RvX3ZhbHVlIChnZGJhcmNoLCAgaTM4Nl9y ZWdpc3Rlcl90b192YWx1ZSk7CisgIHNldF9nZGJhcmNoX3ZhbHVlX3RvX3Jl Z2lzdGVyIChnZGJhcmNoLCBpMzg2X3ZhbHVlX3RvX3JlZ2lzdGVyKTsKKwor ICBzZXRfZ2RiYXJjaF9yZXR1cm5fdmFsdWUgKGdkYmFyY2gsIGkzODZfcmV0 dXJuX3ZhbHVlKTsKKworICBzZXRfZ2RiYXJjaF9za2lwX3Byb2xvZ3VlIChn ZGJhcmNoLCBpMzg2X3NraXBfcHJvbG9ndWUpOworCisgIC8qIFN0YWNrIGdy b3dzIGRvd253YXJkLiAgKi8KKyAgc2V0X2dkYmFyY2hfaW5uZXJfdGhhbiAo Z2RiYXJjaCwgY29yZV9hZGRyX2xlc3N0aGFuKTsKKworICBzZXRfZ2RiYXJj aF9icmVha3BvaW50X2Zyb21fcGMgKGdkYmFyY2gsIGkzODZfYnJlYWtwb2lu dF9mcm9tX3BjKTsKKyAgc2V0X2dkYmFyY2hfZGVjcl9wY19hZnRlcl9icmVh ayAoZ2RiYXJjaCwgMSk7CisKKyAgc2V0X2dkYmFyY2hfZnJhbWVfYXJnc19z a2lwIChnZGJhcmNoLCA4KTsKKworICAvKiBXaXJlIGluIHRoZSBNTVggcmVn aXN0ZXJzLiAgKi8KICAgc2V0X2dkYmFyY2hfbnVtX3BzZXVkb19yZWdzIChn ZGJhcmNoLCBpMzg2X251bV9tbXhfcmVncyk7CiAgIHNldF9nZGJhcmNoX3Bz ZXVkb19yZWdpc3Rlcl9yZWFkIChnZGJhcmNoLCBpMzg2X3BzZXVkb19yZWdp c3Rlcl9yZWFkKTsKICAgc2V0X2dkYmFyY2hfcHNldWRvX3JlZ2lzdGVyX3dy aXRlIChnZGJhcmNoLCBpMzg2X3BzZXVkb19yZWdpc3Rlcl93cml0ZSk7CkBA IC0yNTAzLDYgKzUwMzQsOCBAQCBpMzg2X2dkYmFyY2hfaW5pdCAoc3RydWN0 IGdkYmFyY2hfaW5mbyBpCiAgIGlmICh0ZGVwLT5tbTBfcmVnbnVtID09IDAp CiAgICAgdGRlcC0+bW0wX3JlZ251bSA9IGdkYmFyY2hfbnVtX3JlZ3MgKGdk YmFyY2gpOwogCisgIHNldF9nZGJhcmNoX3JlY29yZCAoZ2RiYXJjaCwgaTM4 Nl9yZWNvcmQpOworCiAgIHJldHVybiBnZGJhcmNoOwogfQogCi0tLSBhL2dk Yi9pMzg2LXRkZXAuaAorKysgYi9nZGIvaTM4Ni10ZGVwLmgKQEAgLTEwNiw2 ICsxMDYsOSBAQCBzdHJ1Y3QgZ2RiYXJjaF90ZGVwCiAgIC8qIElTQS1zcGVj aWZpYyBkYXRhIHR5cGVzLiAgKi8KICAgc3RydWN0IHR5cGUgKmkzODZfbW14 X3R5cGU7CiAgIHN0cnVjdCB0eXBlICppMzg2X3NzZV90eXBlOworCisgIGlu dCAoKmkzODZfaW50eDgwX3JlY29yZCkgKHZvaWQpOworICBpbnQgKCppMzg2 X3N5c2VudGVyX3JlY29yZCkgKHZvaWQpOwogfTsKIAogLyogRmxvYXRpbmct cG9pbnQgcmVnaXN0ZXJzLiAgKi8KLS0tIGEvZ2RiL2luZmNtZC5jCisrKyBi L2dkYi9pbmZjbWQuYwpAQCAtNDksNiArNDksOCBAQAogI2luY2x1ZGUgInRh cmdldC1kZXNjcmlwdGlvbnMuaCIKICNpbmNsdWRlICJ1c2VyLXJlZ3MuaCIK IAorI2luY2x1ZGUgInJlY29yZC5oIgorCiAvKiBGdW5jdGlvbnMgZXhwb3J0 ZWQgZm9yIGdlbmVyYWwgdXNlLCBpbiBpbmZlcmlvci5oOiAqLwogCiB2b2lk IGFsbF9yZWdpc3RlcnNfaW5mbyAoY2hhciAqLCBpbnQpOwpAQCAtMTg5LDYg KzE5MSwxMiBAQCBDT1JFX0FERFIgc3RlcF9yYW5nZV9lbmQ7CS8qIEV4Y2x1 c2l2ZSAqCiAKIHN0cnVjdCBmcmFtZV9pZCBzdGVwX2ZyYW1lX2lkOwogCisv KiBQcmV2IHN0YWNrIGZyYW1lIGFkZHJlc3Mgb2YgInN0ZXBfZnJhbWVfaWQi LgorICAgV2hlbiBHREIgaXMgaW4gdGhlIHJldmVyc2UgZGVidWcgbW9kZSwg aXQgaXMgdXNlZCB0byBtYWtlIHN1cmUgaWYgaW5mZXJpb3IgcmV0dXJuIHRv CisgICB0aGUgcHJldiBmdW5jdGlvbi4gKi8KKworc3RydWN0IGZyYW1lX2lk IHN0ZXBfcHJldl9mcmFtZV9pZDsKKwogZW51bSBzdGVwX292ZXJfY2FsbHNf a2luZCBzdGVwX292ZXJfY2FsbHM7CiAKIC8qIElmIHN0ZXBwaW5nLCBub256 ZXJvIG1lYW5zIHN0ZXAgY291bnQgaXMgPiAxCkBAIC03MzgsNiArNzQ2LDE5 IEBAIHN0ZXBfMSAoaW50IHNraXBfc3Vicm91dGluZXMsIGludCBzaW5nbGUK IAkgICAgZXJyb3IgKF8oIk5vIGN1cnJlbnQgZnJhbWUiKSk7CiAJICBzdGVw X2ZyYW1lX2lkID0gZ2V0X2ZyYW1lX2lkIChmcmFtZSk7CiAKKwkgIGlmIChn ZGJfaXNfcmV2ZXJzZSkKKwkgICAgeworCSAgICAgIGZyYW1lID0gZ2V0X3By ZXZfZnJhbWUgKGZyYW1lKTsKKwkgICAgICBpZiAoZnJhbWUpCisJICAgICAg ICB7CisJCSAgc3RlcF9wcmV2X2ZyYW1lX2lkID0gZ2V0X2ZyYW1lX2lkIChm cmFtZSk7CisJICAgICAgICB9CisJICAgICAgZWxzZQorCSAgICAgICAgewor CQkgIHN0ZXBfcHJldl9mcmFtZV9pZCA9IG51bGxfZnJhbWVfaWQ7CisJICAg ICAgICB9CisJICAgIH0KKwogCSAgaWYgKCFzaW5nbGVfaW5zdCkKIAkgICAg ewogCSAgICAgIGZpbmRfcGNfbGluZV9wY19yYW5nZSAoc3RvcF9wYywgJnN0 ZXBfcmFuZ2Vfc3RhcnQsICZzdGVwX3JhbmdlX2VuZCk7CkBAIC04MzcsNiAr ODU4LDE5IEBAIHN0ZXBfb25jZSAoaW50IHNraXBfc3Vicm91dGluZXMsIGlu dCBzaW4KIAllcnJvciAoXygiTm8gY3VycmVudCBmcmFtZSIpKTsKICAgICAg IHN0ZXBfZnJhbWVfaWQgPSBnZXRfZnJhbWVfaWQgKGZyYW1lKTsKIAorICAg ICAgaWYgKGdkYl9pc19yZXZlcnNlKQorICAgICAgICB7CisgICAgICAgICAg ZnJhbWUgPSBnZXRfcHJldl9mcmFtZSAoZnJhbWUpOworICAgICAgICAgIGlm IChmcmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc3RlcF9w cmV2X2ZyYW1lX2lkID0gZ2V0X2ZyYW1lX2lkIChmcmFtZSk7CisgICAgICAg ICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICBzdGVwX3ByZXZfZnJhbWVfaWQgPSBudWxsX2ZyYW1lX2lkOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgIGlmICghc2luZ2xl X2luc3QpCiAJewogCSAgZmluZF9wY19saW5lX3BjX3JhbmdlIChzdG9wX3Bj LCAmc3RlcF9yYW5nZV9zdGFydCwgJnN0ZXBfcmFuZ2VfZW5kKTsKQEAgLTEw ODksNiArMTEyMywxOSBAQCB1bnRpbF9uZXh0X2NvbW1hbmQgKGludCBmcm9t X3R0eSkKICAgc3RlcF9vdmVyX2NhbGxzID0gU1RFUF9PVkVSX0FMTDsKICAg c3RlcF9mcmFtZV9pZCA9IGdldF9mcmFtZV9pZCAoZnJhbWUpOwogCisgIGlm IChnZGJfaXNfcmV2ZXJzZSkKKyAgICB7CisgICAgICBmcmFtZSA9IGdldF9w cmV2X2ZyYW1lIChmcmFtZSk7CisgICAgICBpZiAoZnJhbWUpCisgICAgICAg IHsKKyAgICAgICAgICBzdGVwX3ByZXZfZnJhbWVfaWQgPSBnZXRfZnJhbWVf aWQgKGZyYW1lKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7 CisJICBzdGVwX3ByZXZfZnJhbWVfaWQgPSBudWxsX2ZyYW1lX2lkOworICAg ICAgICB9CisgICAgfQorCiAgIHN0ZXBfbXVsdGkgPSAwOwkJLyogT25seSBv bmUgY2FsbCB0byBwcm9jZWVkICovCiAKICAgcHJvY2VlZCAoKENPUkVfQURE UikgLTEsIFRBUkdFVF9TSUdOQUxfREVGQVVMVCwgMSk7Ci0tLSBhL2dkYi9p bmZlcmlvci5oCisrKyBiL2dkYi9pbmZlcmlvci5oCkBAIC0zMTgsNiArMzE4 LDEyIEBAIGV4dGVybiBDT1JFX0FERFIgc3RlcF9yYW5nZV9lbmQ7CS8qIEV4 Y2wKIAogZXh0ZXJuIHN0cnVjdCBmcmFtZV9pZCBzdGVwX2ZyYW1lX2lkOwog CisvKiBQcmV2IHN0YWNrIGZyYW1lIGFkZHJlc3Mgb2YgInN0ZXBfZnJhbWVf aWQiLgorICAgV2hlbiBHREIgaXMgaW4gdGhlIHJldmVyc2UgZGVidWcgbW9k ZSwgaXQgaXMgdXNlZCB0byBtYWtlIHN1cmUgaWYgaW5mZXJpb3IgcmV0dXJu IHRvCisgICB0aGUgcHJldiBmdW5jdGlvbi4gKi8KKworZXh0ZXJuIHN0cnVj dCBmcmFtZV9pZCBzdGVwX3ByZXZfZnJhbWVfaWQ7CisKIC8qIDEgbWVhbnMg c3RlcCBvdmVyIGFsbCBzdWJyb3V0aW5lIGNhbGxzLgogICAgLTEgbWVhbnMg c3RlcCBvdmVyIGNhbGxzIHRvIHVuZGVidWdnYWJsZSBmdW5jdGlvbnMuICAq LwogCi0tLSBhL2dkYi9pbmZydW4uYworKysgYi9nZGIvaW5mcnVuLmMKQEAg LTQ5LDYgKzQ5LDEyIEBACiAjaW5jbHVkZSAiZ2RiX2Fzc2VydC5oIgogI2lu Y2x1ZGUgIm1pL21pLWNvbW1vbi5oIgogCisjaW5jbHVkZSAicmVjb3JkLmgi CisKKy8qIFdoZW4gdGhlIHJlY29yZCBmdW5jdGlvbiB3YW50IGluZmVyaW9y IHN0ZXAgYmVmb3JlIGNhbGwgImtlZXBfZ29pbmciLAorICAgInJlY29yZF9y ZXN1bWVfc3RlcCIgd2lsbCBiZSBzZXQgdG8gMS4gQWZ0ZXIgdGhhdCwgaXQg d2lsbCBiZSBzZXQgYmFjayB0byAwLiAqLworc3RhdGljIGludCByZWNvcmRf cmVzdW1lX3N0ZXAgPSAwOworCiAvKiBQcm90b3R5cGVzIGZvciBsb2NhbCBm dW5jdGlvbnMgKi8KIAogc3RhdGljIHZvaWQgc2lnbmFsc19pbmZvIChjaGFy ICosIGludCk7CkBAIC01MTgsNiArNTI0LDIxIEBAIHJlc3VtZSAoaW50IHN0 ZXAsIGVudW0gdGFyZ2V0X3NpZ25hbCBzaWcKICAgICBmcHJpbnRmX3VuZmls dGVyZWQgKGdkYl9zdGRsb2csICJpbmZydW46IHJlc3VtZSAoc3RlcD0lZCwg c2lnbmFsPSVkKVxuIiwKIAkJCXN0ZXAsIHNpZyk7CiAKKyAgaWYgKGdkYl9p c19yZWNvcmRpbmcpCisgICAgeworICAgICAgaWYgKHJlY29yZF9saXN0ICYm IChyZWNvcmRfbGlzdC0+bmV4dCB8fCBnZGJfaXNfcmV2ZXJzZSkpCisgICAg ICAgIHsKKyAgICAgICAgICBkaXNjYXJkX2NsZWFudXBzIChvbGRfY2xlYW51 cHMpOworICAgICAgICAgIHJlY29yZF93YWl0X3N0ZXAgPSBzdGVwOworICAg ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAg ICB7CisgICAgICAgICAgc3RlcCA9IDE7CisgICAgICAgICAgcmVjb3JkX21l c3NhZ2UgKGN1cnJlbnRfZ2RiYXJjaCk7CisgICAgICAgIH0KKyAgICB9CisK ICAgLyogRklYTUU6IGNhbGxpbmcgYnJlYWtwb2ludF9oZXJlX3AgKHJlYWRf cGMgKCkpIHRocmVlIHRpbWVzISAqLwogCiAKQEAgLTEwMjYsMTAgKzEwNDcs MTggQEAgd2FpdF9mb3JfaW5mZXJpb3IgKGludCB0cmVhdF9leGVjX2FzX3Np ZwogCiAgIHdoaWxlICgxKQogICAgIHsKLSAgICAgIGlmIChkZXByZWNhdGVk X3RhcmdldF93YWl0X2hvb2spCi0JZWNzLT5wdGlkID0gZGVwcmVjYXRlZF90 YXJnZXRfd2FpdF9ob29rIChlY3MtPndhaXRvbl9wdGlkLCBlY3MtPndwKTsK KyAgICAgIGlmIChyZWNvcmRfbGlzdCAmJiAocmVjb3JkX2xpc3QtPm5leHQg fHwgZ2RiX2lzX3JldmVyc2UpKQorCXsKKwkgIGVjcy0+cHRpZCA9IHJlY29y ZF93YWl0IChjdXJyZW50X2dkYmFyY2gsIGVjcy0+d2FpdG9uX3B0aWQsIGVj cy0+d3ApOworCX0KICAgICAgIGVsc2UKLQllY3MtPnB0aWQgPSB0YXJnZXRf d2FpdCAoZWNzLT53YWl0b25fcHRpZCwgZWNzLT53cCk7CisJeworCSAgaWYg KGRlcHJlY2F0ZWRfdGFyZ2V0X3dhaXRfaG9vaykKKwkgICAgZWNzLT5wdGlk ID0KKwkgICAgICBkZXByZWNhdGVkX3RhcmdldF93YWl0X2hvb2sgKGVjcy0+ d2FpdG9uX3B0aWQsIGVjcy0+d3ApOworCSAgZWxzZQorCSAgICBlY3MtPnB0 aWQgPSB0YXJnZXRfd2FpdCAoZWNzLT53YWl0b25fcHRpZCwgZWNzLT53cCk7 CisJfQogCiAgICAgICBpZiAodHJlYXRfZXhlY19hc19zaWd0cmFwICYmIGVj cy0+d3Mua2luZCA9PSBUQVJHRVRfV0FJVEtJTkRfRVhFQ0QpCiAgICAgICAg IHsKQEAgLTIwMDQsMTAgKzIwMzMsMTkgQEAgaGFuZGxlX2luZmVyaW9yX2V2 ZW50IChzdHJ1Y3QgZXhlY3V0aW9uXwogICAgICAgICAgU1BBUkMuICAqLwog CiAgICAgICBpZiAoc3RvcF9zaWduYWwgPT0gVEFSR0VUX1NJR05BTF9UUkFQ KQotCWVjcy0+cmFuZG9tX3NpZ25hbAotCSAgPSAhKGJwc3RhdF9leHBsYWlu c19zaWduYWwgKHN0b3BfYnBzdGF0KQotCSAgICAgIHx8IHN0ZXBwaW5nX292 ZXJfYnJlYWtwb2ludAotCSAgICAgIHx8IChzdGVwX3JhbmdlX2VuZCAmJiBz dGVwX3Jlc3VtZV9icmVha3BvaW50ID09IE5VTEwpKTsKKwl7CisJICBpZiAo Z2RiX2lzX3JldmVyc2UgfHwgZ2RiX2lzX3JlY29yZGluZykKKwkgICAgewor CSAgICAgIGVjcy0+cmFuZG9tX3NpZ25hbCA9IDA7CisJICAgIH0KKwkgIGVs c2UKKwkgICAgeworCSAgICAgIGVjcy0+cmFuZG9tX3NpZ25hbAorCQk9ICEo YnBzdGF0X2V4cGxhaW5zX3NpZ25hbCAoc3RvcF9icHN0YXQpCisJCSAgICB8 fCBzdGVwcGluZ19vdmVyX2JyZWFrcG9pbnQKKwkJICAgIHx8IChzdGVwX3Jh bmdlX2VuZCAmJiBzdGVwX3Jlc3VtZV9icmVha3BvaW50ID09IE5VTEwpKTsK KwkgICAgfQorCX0KICAgICAgIGVsc2UKIAl7CiAJICBlY3MtPnJhbmRvbV9z aWduYWwgPSAhYnBzdGF0X2V4cGxhaW5zX3NpZ25hbCAoc3RvcF9icHN0YXQp OwpAQCAtMjQ4OSw2ICsyNTI3LDE1IEBAIHByb2Nlc3NfZXZlbnRfc3RvcF90 ZXN0OgogCSAgLyogV2UncmUgZG9pbmcgYSAibmV4dCIsIHNldCBhIGJyZWFr cG9pbnQgYXQgY2FsbGVlJ3MgcmV0dXJuCiAJICAgICBhZGRyZXNzICh0aGUg YWRkcmVzcyBhdCB3aGljaCB0aGUgY2FsbGVyIHdpbGwKIAkgICAgIHJlc3Vt ZSkuICAqLworCisJICBpZiAoZ2RiX2lzX3JldmVyc2UgfHwgZ2RiX2lzX3Jl Y29yZGluZykKKwkgICAgeworCSAgICAgIHJlY29yZF9yZXN1bWVfc3RlcCA9 IDE7CisJICAgICAga2VlcF9nb2luZyAoZWNzKTsKKwkgICAgICByZWNvcmRf cmVzdW1lX3N0ZXAgPSAwOworCSAgICAgIHJldHVybjsKKwkgICAgfQorCiAJ ICBpbnNlcnRfc3RlcF9yZXN1bWVfYnJlYWtwb2ludF9hdF9jYWxsZXIgKGdl dF9jdXJyZW50X2ZyYW1lICgpKTsKIAkgIGtlZXBfZ29pbmcgKGVjcyk7CiAJ ICByZXR1cm47CkBAIC0yNTUxLDYgKzI1OTgsMTUgQEAgcHJvY2Vzc19ldmVu dF9zdG9wX3Rlc3Q6CiAJICByZXR1cm47CiAJfQogCisJaWYgKChnZGJfaXNf cmV2ZXJzZSB8fCBnZGJfaXNfcmVjb3JkaW5nKQorCSAgICAmJiBzdGVwX292 ZXJfY2FsbHMgPT0gU1RFUF9PVkVSX1VOREVCVUdHQUJMRSkKKwkgIHsKKwkg ICAgcmVjb3JkX3Jlc3VtZV9zdGVwID0gMTsKKwkgICAga2VlcF9nb2luZyAo ZWNzKTsKKwkgICAgcmVjb3JkX3Jlc3VtZV9zdGVwID0gMDsKKwkgICAgcmV0 dXJuOworCSAgfQorCiAgICAgICAvKiBTZXQgYSBicmVha3BvaW50IGF0IGNh bGxlZSdzIHJldHVybiBhZGRyZXNzICh0aGUgYWRkcmVzcyBhdAogICAgICAg ICAgd2hpY2ggdGhlIGNhbGxlciB3aWxsIHJlc3VtZSkuICAqLwogICAgICAg aW5zZXJ0X3N0ZXBfcmVzdW1lX2JyZWFrcG9pbnRfYXRfY2FsbGVyIChnZXRf Y3VycmVudF9mcmFtZSAoKSk7CkBAIC0yNjA1LDYgKzI2NjEsMTQgQEAgcHJv Y2Vzc19ldmVudF9zdG9wX3Rlc3Q6CiAgICAgICBpZiAoZGVidWdfaW5mcnVu KQogCSBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJpbmZydW46 IHN0ZXBwZWQgaW50byB1bmRlYnVnZ2FibGUgZnVuY3Rpb25cbiIpOwogCisg ICAgICBpZiAoZ2RiX2lzX3JldmVyc2UgfHwgZ2RiX2lzX3JlY29yZGluZykK Kwl7CisJICByZWNvcmRfcmVzdW1lX3N0ZXAgPSAxOworCSAga2VlcF9nb2lu ZyAoZWNzKTsKKwkgIHJlY29yZF9yZXN1bWVfc3RlcCA9IDA7CisJICByZXR1 cm47CisJfQorCiAgICAgICAvKiBUaGUgaW5mZXJpb3IganVzdCBzdGVwcGVk IGludG8sIG9yIHJldHVybmVkIHRvLCBhbgogICAgICAgICAgdW5kZWJ1Z2dh YmxlIGZ1bmN0aW9uICh3aGVyZSB0aGVyZSBpcyBubyBkZWJ1Z2dpbmcgaW5m b3JtYXRpb24KICAgICAgICAgIGFuZCBubyBsaW5lIG51bWJlciBjb3JyZXNw b25kaW5nIHRvIHRoZSBhZGRyZXNzIHdoZXJlIHRoZQpAQCAtMjY1NCwxNSAr MjcxOCw1OCBAQCBwcm9jZXNzX2V2ZW50X3N0b3BfdGVzdDoKICAgICAgICAg IG9yIGNhbiB0aGlzIGhhcHBlbiBhcyBhIHJlc3VsdCBvZiBhIHJldHVybiBv ciBsb25nam1wPykuICAqLwogICAgICAgaWYgKGRlYnVnX2luZnJ1bikKIAkg ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiaW5mcnVuOiBubyBs aW5lIG51bWJlciBpbmZvXG4iKTsKKworICAgICAgaWYgKChzdGVwX292ZXJf Y2FsbHMgPT0gU1RFUF9PVkVSX0FMTCAmJiBnZGJfaXNfcmV2ZXJzZSkKKwkg IHx8IGdkYl9pc19yZWNvcmRpbmcpCisJeworCSAgcmVjb3JkX3Jlc3VtZV9z dGVwID0gMTsKKwkgIGtlZXBfZ29pbmcgKGVjcyk7CisJICByZWNvcmRfcmVz dW1lX3N0ZXAgPSAwOworCSAgcmV0dXJuOworCX0KKwogICAgICAgc3RvcF9z dGVwID0gMTsKICAgICAgIHByaW50X3N0b3BfcmVhc29uIChFTkRfU1RFUFBJ TkdfUkFOR0UsIDApOwogICAgICAgc3RvcF9zdGVwcGluZyAoZWNzKTsKICAg ICAgIHJldHVybjsKICAgICB9CiAKLSAgaWYgKChzdG9wX3BjID09IGVjcy0+ c2FsLnBjKQotICAgICAgJiYgKGVjcy0+Y3VycmVudF9saW5lICE9IGVjcy0+ c2FsLmxpbmUKLQkgIHx8IGVjcy0+Y3VycmVudF9zeW10YWIgIT0gZWNzLT5z YWwuc3ltdGFiKSkKKyAgICBpZiAoZ2RiX2lzX3JldmVyc2UKKwkmJiBmcmFt ZV9pZF9lcSAoZ2V0X2ZyYW1lX2lkIChnZXRfY3VycmVudF9mcmFtZSAoKSks CisJCQlzdGVwX3ByZXZfZnJhbWVfaWQpKQorICAgICAgeworCWlmIChkZWJ1 Z19pbmZydW4pCisJICB7CisJICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri X3N0ZGxvZywKKwkJCQkiaW5mcnVuOiByZXR1cm4gdG8gdGhlIHByZXYgZnVu Y3Rpb25cbiIpOworCSAgfQorCXN0b3Bfc3RlcCA9IDE7CisJcHJpbnRfc3Rv cF9yZWFzb24gKEVORF9TVEVQUElOR19SQU5HRSwgMCk7CisJc3RvcF9zdGVw cGluZyAoZWNzKTsKKwlyZXR1cm47CisgICAgICB9CisKKyAgICBpZiAoIWZy YW1lX2lkX2VxIChnZXRfZnJhbWVfaWQgKGdldF9jdXJyZW50X2ZyYW1lICgp KSwgc3RlcF9mcmFtZV9pZCkKKwkmJiAoZ2RiX2lzX3JldmVyc2UgfHwgZ2Ri X2lzX3JlY29yZGluZykpCisgICAgICB7CisJaWYgKChzdG9wX3BjICE9IGVj cy0+c2FsLnBjICYmIGdkYl9pc19yZXZlcnNlKQorCSAgICB8fCAoc3RlcF9v dmVyX2NhbGxzID09IFNURVBfT1ZFUl9BTEwgJiYgZ2RiX2lzX3JlY29yZGlu ZykpCisJICB7CisJICAgIGlmIChkZWJ1Z19pbmZydW4pCisJICAgICAgZnBy aW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSAgImluZnJ1bjog bWF5YmUgc3RlcHBlZCBpbnRvIHN1YnJvdXRpbmVcbiIpOworCSAgICByZWNv cmRfcmVzdW1lX3N0ZXAgPSAxOworCSAgICBrZWVwX2dvaW5nIChlY3MpOwor CSAgICByZWNvcmRfcmVzdW1lX3N0ZXAgPSAwOworCSAgICByZXR1cm47CisJ ICB9CisgICAgICB9CisKKyAgICBpZiAoKChzdG9wX3BjID09IGVjcy0+c2Fs LnBjICYmICFnZGJfaXNfcmV2ZXJzZSkKKwkgfHwgKHN0b3BfcGMgPj0gZWNz LT5zYWwucGMgJiYgc3RvcF9wYyA8IGVjcy0+c2FsLmVuZAorCSAgICAgJiYg Z2RiX2lzX3JldmVyc2UpKSAmJiAoZWNzLT5jdXJyZW50X2xpbmUgIT0gZWNz LT5zYWwubGluZQorCQkJCSAgICAgfHwgZWNzLT5jdXJyZW50X3N5bXRhYiAh PQorCQkJCSAgICAgZWNzLT5zYWwuc3ltdGFiKSkKICAgICB7CiAgICAgICAv KiBXZSBhcmUgYXQgdGhlIHN0YXJ0IG9mIGEgZGlmZmVyZW50IGxpbmUuICBT byBzdG9wLiAgTm90ZSB0aGF0CiAgICAgICAgICB3ZSBkb24ndCBzdG9wIGlm IHdlIHN0ZXAgaW50byB0aGUgbWlkZGxlIG9mIGEgZGlmZmVyZW50IGxpbmUu CkBAIC0yNjcwLDYgKzI3NzcsNyBAQCBwcm9jZXNzX2V2ZW50X3N0b3BfdGVz dDoKICAgICAgICAgIGJldHRlci4gICovCiAgICAgICBpZiAoZGVidWdfaW5m cnVuKQogCSBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJpbmZy dW46IHN0ZXBwZWQgdG8gYSBkaWZmZXJlbnQgbGluZVxuIik7CisKICAgICAg IHN0b3Bfc3RlcCA9IDE7CiAgICAgICBwcmludF9zdG9wX3JlYXNvbiAoRU5E X1NURVBQSU5HX1JBTkdFLCAwKTsKICAgICAgIHN0b3Bfc3RlcHBpbmcgKGVj cyk7CkBAIC0yNzMwLDcgKzI4MzgsNyBAQCBjdXJyZW50bHlfc3RlcHBpbmcg KHN0cnVjdCBleGVjdXRpb25fY29uCiAJICAgJiYgKChzdGVwX3JhbmdlX2Vu ZCAmJiBzdGVwX3Jlc3VtZV9icmVha3BvaW50ID09IE5VTEwpCiAJICAgICAg IHx8IHN0ZXBwaW5nX292ZXJfYnJlYWtwb2ludCkpCiAJICB8fCBlY3MtPnN0 ZXBwaW5nX3Rocm91Z2hfc29saWJfYWZ0ZXJfY2F0Y2gKLQkgIHx8IGJwc3Rh dF9zaG91bGRfc3RlcCAoKSk7CisJICB8fCBicHN0YXRfc2hvdWxkX3N0ZXAg KCkgfHwgcmVjb3JkX3Jlc3VtZV9zdGVwKTsKIH0KIAogLyogU3Vicm91dGlu ZSBjYWxsIHdpdGggc291cmNlIGNvZGUgd2Ugc2hvdWxkIG5vdCBzdGVwIG92 ZXIuICBEbyBzdGVwCi0tLSBhL2dkYi9NYWtlZmlsZS5pbgorKysgYi9nZGIv TWFrZWZpbGUuaW4KQEAgLTYzMyw3ICs2MzMsOCBAQCBTRklMRVMgPSBhZGEt ZXhwLnkgYWRhLWxhbmcuYyBhZGEtdHlwZXByCiAJdXNlci1yZWdzLmMgXAog CXZhbGFyaXRoLmMgdmFsb3BzLmMgdmFscHJpbnQuYyB2YWx1ZS5jIHZhcm9i ai5jIHZlYy5jIFwKIAl3cmFwcGVyLmMgXAotCXhtbC10ZGVzYy5jIHhtbC1z dXBwb3J0LmMKKwl4bWwtdGRlc2MuYyB4bWwtc3VwcG9ydC5jIFwKKwlyZWNv cmQuYwogCiBMSU5URklMRVMgPSAkKFNGSUxFUykgJChZWUZJTEVTKSAkKENP TkZJR19TUkNTKSBpbml0LmMKIApAQCAtMTA3Miw3ICsxMDczLDggQEAgQ09N TU9OX09CUyA9ICQoREVQRklMRVMpICQoQ09ORklHX09CUykgJAogCXRyYW1w LWZyYW1lLm8gXAogCXNvbGliLm8gc29saWItbnVsbC5vIFwKIAlwcm9sb2d1 ZS12YWx1ZS5vIG1lbW9yeS1tYXAubyB4bWwtc3VwcG9ydC5vIFwKLQl0YXJn ZXQtZGVzY3JpcHRpb25zLm8gdGFyZ2V0LW1lbW9yeS5vIHhtbC10ZGVzYy5v IHhtbC1idWlsdGluLm8KKwl0YXJnZXQtZGVzY3JpcHRpb25zLm8gdGFyZ2V0 LW1lbW9yeS5vIHhtbC10ZGVzYy5vIHhtbC1idWlsdGluLm8gXAorCXJlY29y ZC5vCiAKIFRTT0JTID0gaW5mbG93Lm8KIAotLS0gYS9nZGIvbWlwcy10ZGVw LmMKKysrIGIvZ2RiL21pcHMtdGRlcC5jCkBAIC01OCw2ICs1OCw5IEBACiAj aW5jbHVkZSAiZHdhcmYyLWZyYW1lLmgiCiAjaW5jbHVkZSAidXNlci1yZWdz LmgiCiAKKyNpbmNsdWRlICJyZWNvcmQuaCIKKyNpbmNsdWRlIDxzdGRpbnQu aD4KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBvYmpmaWxlX2RhdGEgKm1pcHNf cGRyX2RhdGE7CiAKIHN0YXRpYyBzdHJ1Y3QgdHlwZSAqbWlwc19yZWdpc3Rl cl90eXBlIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgaW50IHJlZ251bSk7 CkBAIC01MjEzLDYgKzUyMTYsNzM0IEBAIHZhbHVlX29mX21pcHNfdXNlcl9y ZWcgKHN0cnVjdCBmcmFtZV9pbmYKICAgcmV0dXJuIHZhbHVlX29mX3JlZ2lz dGVyICgqcmVnX3AsIGZyYW1lKTsKIH0KIAorLyogV2hlbiAicmVjb3JkX2Rl bGF5X3Nsb3QiIGlzIHRydWUgKG1lYW4gdGhhdCB0aGUgcHJldiBpbnN0cnVj dGlvbiBoYXMgZGVsYXkKKyAgIHNsb3QpLCBHREIgIG5lZWQgdG8gZGVhbCB3 aXRoIGluc3RyY3Rpb24gaW4gdGhlIGRlbGF5IHNsb3QgdGhhdCBhZGRyZXNz IGlzCisgICAibWlwc19kZWxheV9zbG90X2FkZHIiIGFuZCB0aGUgaW5zdHJ1 Y3Rpb24gaW4gdGFyZ2V0IG9mIGRlbGF5IHNsb3QKKyAgIGluc3RydWN0aW9u IHRoYXQgYWRkcmVzcyBpcyAibWlwc190YXJnZXRfYWRkciIuICovCitzdGF0 aWMgQ09SRV9BRERSIG1pcHNfZGVsYXlfc2xvdF9hZGRyOworc3RhdGljIENP UkVfQUREUiBtaXBzX3RhcmdldF9hZGRyOworCisvKiBSZWNvcmQgdGhlIHZh bHVlIG9mIHRoZSBtZW1vcnkgdGhhdCB3aWxsYmUgY2hhbmdlZCBpbiBjdXJy ZW50IDMyIGJpdHMgaW5zdHJ1Y3Rpb24KKyAgIHRvICJyZWNvcmRfYXJjaF9s aXN0Ii4KKyAgIFJldHVybiAtMSBpZiBzb21ldGhpbmcgd3JvbmcuICovCitz dGF0aWMgaW50CittaXBzX3JlY29yZF8zMiAoc3RydWN0IGdkYmFyY2ggKmdk YmFyY2gsIENPUkVfQUREUiBwYykKK3sKKyAgdWludDMyX3QgaW5zbiA9ICh1 aW50MzJfdCkgbWlwc19mZXRjaF9pbnN0cnVjdGlvbiAocGMpOworICB1aW50 MzJfdCBvcGNvZGU7CisgIGNvbnN0IHN0cnVjdCBtaXBzX3JlZ251bSAqcmVn bnVtID0gbWlwc19yZWdudW0gKGdkYmFyY2gpOworICBpbnQgYWRkX3BjID0g MTsKKyAgdWludDMyX3QgdG1wdTMyOworCisgIGlmIChkZWJ1Z19yZWNvcmQp CisgICAgeworICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9n LAorCQkJICAicmVjb3JkOiBtaXBzX3JlY29yZF8zMiBpbnNuID0gMHglMDh4 XG4iLAorCQkJICAodW5zaWduZWQgaW50KSBpbnNuKTsKKyAgICB9CisKKyAg b3Bjb2RlID0gaW5zbiA+PiAyNjsKKyAgc3dpdGNoIChvcGNvZGUpCisgICAg eworICAgIGNhc2UgMHgwMDoKKyAgICAgIHN3aXRjaCAoKGluc24gPj4gMCkg JiAweDNmKQorCXsKKwkgIC8qIHNsbCAqLworCWNhc2UgMHgwMDoKKwkgIC8q IHNybCAqLworCWNhc2UgMHgwMjoKKwkgIC8qIHNyYSAqLworCWNhc2UgMHgw MzoKKwkgIC8qIHNsbHYgKi8KKwljYXNlIDB4MDQ6CisJICAvKiBzcmx2ICov CisJY2FzZSAweDA2OgorCSAgLyogc3JhdiAqLworCWNhc2UgMHgwNzoKKwkg IC8qIG1vdnogKi8KKwljYXNlIDB4MGE6CisJICAvKiBtb3ZuICovCisJY2Fz ZSAweDBiOgorCSAgLyogbWZoaSAqLworCWNhc2UgMHgxMDoKKwkgIC8qIG1m bG8gKi8KKwljYXNlIDB4MTI6CisJICAvKiBhZGQgKi8KKwljYXNlIDB4MjA6 CisJICAvKiBhZGR1ICovCisJY2FzZSAweDIxOgorCSAgLyogc3ViICovCisJ Y2FzZSAweDIyOgorCSAgLyogc3VidSAqLworCWNhc2UgMHgyMzoKKwkgIC8q IGFuZCAqLworCWNhc2UgMHgyNDoKKwkgIC8qIG9yICovCisJY2FzZSAweDI1 OgorCSAgLyogeG9yICovCisJY2FzZSAweDI2OgorCSAgLyogbm9yICovCisJ Y2FzZSAweDI3OgorCSAgLyogc2x0ICovCisJY2FzZSAweDJhOgorCSAgLyog c2x0dSAqLworCWNhc2UgMHgyYjoKKwkgIGdvdG8gc2V0X3JkOworCSAgYnJl YWs7CisJICAvKiBqciAqLworCWNhc2UgMHgwODoKKwkgIHJlZ2NhY2hlX3Jh d19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIChpbnNuID4+IDIxKSAmIDB4MWYs CisJCQkgICAgIChnZGJfYnl0ZSAqKSAmIG1pcHNfdGFyZ2V0X2FkZHIpOwor CSAgZ290byBzZXRfZGVsYXlfc2xvdF9wYzsKKwkgIGJyZWFrOworCSAgLyog amFsciAqLworCWNhc2UgMHgwOToKKwkgIHsKKwkgICAgdWludDMyX3QgcmQg PSAoaW5zbiA+PiAxMSkgJiAweDFmOworCSAgICBpZiAocmQgIT0gMCkKKwkg ICAgICB7CisJCWlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKHJkKSkK KwkJICB7CisJCSAgICByZXR1cm4gKC0xKTsKKwkJICB9CisJICAgICAgfQor CSAgICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCAoaW5z biA+PiAyMSkgJiAweDFmLAorCQkJICAgICAgIChnZGJfYnl0ZSAqKSAmIG1p cHNfdGFyZ2V0X2FkZHIpOworCSAgICBnb3RvIHNldF9kZWxheV9zbG90X3Bj OworCSAgfQorCSAgYnJlYWs7CisJICAvKiBzeW5jICovCisJY2FzZSAweDBm OgorCSAgYnJlYWs7CisJICAvKiBtdGhpICovCisJY2FzZSAweDExOgorCSAg aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAocmVnbnVtLT5oaSkpCisJ ICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCSAgYnJlYWs7 CisJICAvKiBtdGxvICovCisJY2FzZSAweDEzOgorCSAgaWYgKHJlY29yZF9h cmNoX2xpc3RfYWRkX3JlZyAocmVnbnVtLT5sbykpCisJICAgIHsKKwkgICAg ICByZXR1cm4gKC0xKTsKKwkgICAgfQorCSAgYnJlYWs7CisJICAvKiBtdWx0 ICovCisJY2FzZSAweDE4OgorCSAgLyogbXVsdHUgKi8KKwljYXNlIDB4MTk6 CisJICAvKiBkaXYgKi8KKwljYXNlIDB4MWE6CisJICAvKiBkaXZ1ICovCisJ Y2FzZSAweDFiOgorCSAgZ290byBzZXRfaGlfbG87CisJICBicmVhazsKKwlk ZWZhdWx0OgorCSAgZ290byBub19zdXBwb3J0OworCSAgYnJlYWs7CisJfQor ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDB4MDE6CisgICAgICBzd2l0Y2gg KChpbnNuID4+IDE2KSAmIDB4MWYpCisJeworCSAgLyogYmx0eiAqLworCWNh c2UgMHgwMDoKKwkgIHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2Fj aGUsIChpbnNuID4+IDIxKSAmIDB4MWYsCisJCQkgICAgIChnZGJfYnl0ZSAq KSAmIHRtcHUzMik7CisJICBpZiAodG1wdTMyIDwgMCkKKwkgICAgeworCSAg ICAgIGdvdG8gc2V0X2ltbV9kZWxheV9zbG90X3BjOworCSAgICB9CisJICBi cmVhazsKKwkgIC8qIGJnZXogKi8KKwljYXNlIDB4MDE6CisJICByZWdjYWNo ZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCAoaW5zbiA+PiAyMSkgJiAw eDFmLAorCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworCSAgaWYg KHRtcHUzMiA+PSAwKQorCSAgICB7CisJICAgICAgZ290byBzZXRfaW1tX2Rl bGF5X3Nsb3RfcGM7CisJICAgIH0KKwkgIGJyZWFrOworCSAgLyogYmx0emwg Ki8KKwljYXNlIDB4MDI6CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3Jk X3JlZ2NhY2hlLCAoaW5zbiA+PiAyMSkgJiAweDFmLAorCQkJICAgICAoZ2Ri X2J5dGUgKikgJiB0bXB1MzIpOworCSAgaWYgKHRtcHUzMiA8IDApCisJICAg IHsKKwkgICAgICBnb3RvIHNldF9pbW1fZGVsYXlfc2xvdF9wYzsKKwkgICAg fQorCSAgZWxzZQorCSAgICB7CisJICAgICAgZ290byBzZXRfcGM7CisJICAg IH0KKwkgIGJyZWFrOworCSAgLyogYmdlemwgKi8KKwljYXNlIDB4MDM6CisJ ICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCAoaW5zbiA+ PiAyMSkgJiAweDFmLAorCQkJICAgICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIp OworCSAgaWYgKHRtcHUzMiA+PSAwKQorCSAgICB7CisJICAgICAgZ290byBz ZXRfaW1tX2RlbGF5X3Nsb3RfcGM7CisJICAgIH0KKwkgIGVsc2UKKwkgICAg eworCSAgICAgIGdvdG8gc2V0X3BjOworCSAgICB9CisJICBicmVhazsKKwkg IC8qIGJsdHphbCAqLworCWNhc2UgMHgxMDoKKwkgIGlmIChyZWNvcmRfYXJj aF9saXN0X2FkZF9yZWcgKDMxKSkKKwkgICAgeworCSAgICAgIHJldHVybiAo LTEpOworCSAgICB9CisJICByZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3Jl Z2NhY2hlLCAoaW5zbiA+PiAyMSkgJiAweDFmLAorCQkJICAgICAoZ2RiX2J5 dGUgKikgJiB0bXB1MzIpOworCSAgaWYgKHRtcHUzMiA8IDApCisJICAgIHsK KwkgICAgICBnb3RvIHNldF9pbW1fZGVsYXlfc2xvdF9wYzsKKwkgICAgfQor CSAgYnJlYWs7CisJICAvKiBiZ2V6YWwgKi8KKwljYXNlIDB4MTE6CisJICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnICgzMSkpCisJICAgIHsKKwkg ICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCSAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlY29yZF9yZWdjYWNoZSwgKGluc24gPj4gMjEpICYgMHgxZiwKKwkJ CSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKwkgIGlmICh0bXB1MzIg Pj0gMCkKKwkgICAgeworCSAgICAgIGdvdG8gc2V0X2ltbV9kZWxheV9zbG90 X3BjOworCSAgICB9CisJICBicmVhazsKKwkgIC8qIGJsdHphbGwgKi8KKwlj YXNlIDB4MTI6CisJICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnICgz MSkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCSAg cmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgKGluc24gPj4g MjEpICYgMHgxZiwKKwkJCSAgICAgKGdkYl9ieXRlICopICYgdG1wdTMyKTsK KwkgIGlmICh0bXB1MzIgPCAwKQorCSAgICB7CisJICAgICAgZ290byBzZXRf aW1tX2RlbGF5X3Nsb3RfcGM7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgewor CSAgICAgIGdvdG8gc2V0X3BjOworCSAgICB9CisJICBicmVhazsKKwkgIC8q IGJnZXphbGwgKi8KKwljYXNlIDB4MTM6CisJICBpZiAocmVjb3JkX2FyY2hf bGlzdF9hZGRfcmVnICgzMSkpCisJICAgIHsKKwkgICAgICByZXR1cm4gKC0x KTsKKwkgICAgfQorCSAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdj YWNoZSwgKGluc24gPj4gMjEpICYgMHgxZiwKKwkJCSAgICAgKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKKwkgIGlmICh0bXB1MzIgPj0gMCkKKwkgICAgewor CSAgICAgIGdvdG8gc2V0X2ltbV9kZWxheV9zbG90X3BjOworCSAgICB9CisJ ICBlbHNlCisJICAgIHsKKwkgICAgICBnb3RvIHNldF9wYzsKKwkgICAgfQor CSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGdvdG8gbm9fc3VwcG9ydDsKKwkg IGJyZWFrOworCX0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBqICovCisg ICAgY2FzZSAweDAyOgorICAgICAgbWlwc190YXJnZXRfYWRkciA9CisJKHBj ICYgMHhmMDAwMDAwMCkgfCAoKChpbnNuID4+IDApICYgMHgwM2ZmZmZmZikg PDwgMik7CisgICAgICBnb3RvIHNldF9kZWxheV9zbG90X3BjOworICAgICAg YnJlYWs7CisKKyAgICAgIC8qIGJlcSAqLworICAgIGNhc2UgMHgwNDoKKyAg ICAgIHsKKwl1aW50MzJfdCB0bXA7CisJcmVnY2FjaGVfcmF3X3JlYWQgKHJl Y29yZF9yZWdjYWNoZSwgKGluc24gPj4gMjEpICYgMHgxZiksCisJICAoZ2Ri X2J5dGUgKikgJiB0bXB1MzIpOworCXJlZ2NhY2hlX3Jhd19yZWFkIChyZWNv cmRfcmVnY2FjaGUsIChpbnNuID4+IDE2KSAmIDB4MWYpLAorCSAgKGdkYl9i eXRlICopICYgdG1wKTsKKwlpZiAodG1wdTMyID09IHRtcCkKKwkgIHsKKwkg ICAgZ290byBzZXRfaW1tX2RlbGF5X3Nsb3RfcGM7CisJICB9CisgICAgICB9 CisgICAgICBicmVhazsKKworICAgICAgLyogYm5lICovCisgICAgY2FzZSAw eDA1OgorICAgICAgeworCXVpbnQzMl90IHRtcDsKKwlyZWdjYWNoZV9yYXdf cmVhZCAocmVjb3JkX3JlZ2NhY2hlLCAoaW5zbiA+PiAyMSkgJiAweDFmKSwK KwkgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJcmVnY2FjaGVfcmF3X3Jl YWQgKHJlY29yZF9yZWdjYWNoZSwgKGluc24gPj4gMTYpICYgMHgxZiksCisJ ICAoZ2RiX2J5dGUgKikgJiB0bXApOworCWlmICh0bXB1MzIgIT0gdG1wKQor CSAgeworCSAgICBnb3RvIHNldF9pbW1fZGVsYXlfc2xvdF9wYzsKKwkgIH0K KyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBibGV6ICovCisg ICAgY2FzZSAweDA2OgorICAgICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29y ZF9yZWdjYWNoZSwgKGluc24gPj4gMjEpICYgMHgxZiksCisJKGdkYl9ieXRl ICopICYgdG1wdTMyKTsKKyAgICAgIGlmICh0bXB1MzIgPD0gMCkKKwl7CisJ ICBnb3RvIHNldF9pbW1fZGVsYXlfc2xvdF9wYzsKKwl9CisgICAgICBicmVh azsKKworICAgICAgLyogYmd0eiAqLworICAgIGNhc2UgMHgwNzoKKyAgICAg IHJlZ2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIChpbnNuID4+ IDIxKSAmIDB4MWYpLAorCShnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisgICAg ICBpZiAodG1wdTMyID4gMCkKKwl7CisJICBnb3RvIHNldF9pbW1fZGVsYXlf c2xvdF9wYzsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogYmVxbCAq LworICAgIGNhc2UgMHgxNDoKKyAgICAgIHsKKwl1aW50MzJfdCB0bXA7CisJ cmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgKGluc24gPj4g MjEpICYgMHgxZiksCisJICAoZ2RiX2J5dGUgKikgJiB0bXB1MzIpOworCXJl Z2NhY2hlX3Jhd19yZWFkIChyZWNvcmRfcmVnY2FjaGUsIChpbnNuID4+IDE2 KSAmIDB4MWYpLAorCSAgKGdkYl9ieXRlICopICYgdG1wKTsKKwlpZiAodG1w dTMyID09IHRtcCkKKwkgIHsKKwkgICAgZ290byBzZXRfaW1tX2RlbGF5X3Ns b3RfcGM7CisJICB9CisJZWxzZQorCSAgeworCSAgICBnb3RvIHNldF9wYzsK KwkgIH0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBibmVs ICovCisgICAgY2FzZSAweDE1OgorICAgICAgeworCXVpbnQzMl90IHRtcDsK KwlyZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3JlZ2NhY2hlLCAoaW5zbiA+ PiAyMSkgJiAweDFmKSwKKwkgIChnZGJfYnl0ZSAqKSAmIHRtcHUzMik7CisJ cmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgKGluc24gPj4g MTYpICYgMHgxZiksCisJICAoZ2RiX2J5dGUgKikgJiB0bXApOworCWlmICh0 bXB1MzIgPT0gdG1wKQorCSAgeworCSAgICBnb3RvIHNldF9pbW1fZGVsYXlf c2xvdF9wYzsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGdvdG8gc2V0X3Bj OworCSAgfQorICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIGJs ZXpsICovCisgICAgY2FzZSAweDE2OgorICAgICAgcmVnY2FjaGVfcmF3X3Jl YWQgKHJlY29yZF9yZWdjYWNoZSwgKGluc24gPj4gMjEpICYgMHgxZiksCisJ KGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAgICAgIGlmICh0bXB1MzIgPD0g MCkKKwl7CisJICBnb3RvIHNldF9pbW1fZGVsYXlfc2xvdF9wYzsKKwl9Cisg ICAgICBlbHNlCisJeworCSAgZ290byBzZXRfcGM7CisJfQorICAgICAgYnJl YWs7CisKKyAgICAgIC8qIGJndHpsICovCisgICAgY2FzZSAweDE3OgorICAg ICAgcmVnY2FjaGVfcmF3X3JlYWQgKHJlY29yZF9yZWdjYWNoZSwgKGluc24g Pj4gMjEpICYgMHgxZiksCisJKGdkYl9ieXRlICopICYgdG1wdTMyKTsKKyAg ICAgIGlmICh0bXB1MzIgPiAwKQorCXsKKwkgIGdvdG8gc2V0X2ltbV9kZWxh eV9zbG90X3BjOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBnb3RvIHNldF9w YzsKKwl9CisgICAgICBicmVhazsKKworICAgICAgLyogamFsICovCisgICAg Y2FzZSAweDAzOgorICAgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3Jl ZyAoMzEpKQorCXsKKwkgIHJldHVybiAoLTEpOworCX0KKyAgICAgIG1pcHNf dGFyZ2V0X2FkZHIgPQorCShwYyAmIDB4ZjAwMDAwMDApIHwgKCgoaW5zbiA+ PiAwKSAmIDB4MDNmZmZmZmYpIDw8IDIpOworICAgICAgZ290byBzZXRfZGVs YXlfc2xvdF9wYzsKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBqYWx4ICov CisgICAgY2FzZSAweDFkOgorICAgICAgZ290byBub19zdXBwb3J0OworICAg ICAgYnJlYWs7CisKKyAgICAgIC8qIGFkZGkgKi8KKyAgICBjYXNlIDB4MDg6 CisgICAgICAvKiBhZGRpdSAqLworICAgIGNhc2UgMHgwOToKKyAgICAgIC8q IHNsdGkgKi8KKyAgICBjYXNlIDB4MGE6CisgICAgICAvKiBzbHRpdSAqLwor ICAgIGNhc2UgMHgwYjoKKyAgICAgIC8qIGFuZGkgKi8KKyAgICBjYXNlIDB4 MGM6CisgICAgICAvKiBvcmkgKi8KKyAgICBjYXNlIDB4MGQ6CisgICAgICAv KiB4b3JpICovCisgICAgY2FzZSAweDBlOgorICAgICAgLyogbHVpICovCisg ICAgY2FzZSAweDBmOgorICAgICAgZ290byBzZXRfcnQ7CisgICAgICBicmVh azsKKworICAgICAgLyogQ09QMCAqLworICAgIGNhc2UgMHgxMDoKKyAgICAg IGlmICgoaW5zbiA+PiAyNSkgJiAweDEpCisJeworCSAgc3dpdGNoICgoaW5z biA+PiAwKSAmIDB4M2YpCisJICAgIHsKKwkgICAgICAvKiBlcmV0ICovCisJ ICAgIGNhc2UgMHgxODoKKwkgICAgICBnb3RvIHNldF9wYzsKKwkgICAgICBi cmVhazsKKwkgICAgZGVmYXVsdDoKKwkgICAgICBnb3RvIG5vX3N1cHBvcnQ7 CisJICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJewor CSAgc3dpdGNoICgoaW5zbiA+PiAyMSkgJiAweDFmKQorCSAgICB7CisJICAg ICAgLyogbWZjMCAqLworCSAgICBjYXNlIDB4MDA6CisJICAgICAgZ290byBz ZXRfcnQ7CisJICAgICAgYnJlYWs7CisJICAgICAgLyogbXRjMCAqLworCSAg ICBjYXNlIDB4MDQ6CisJICAgICAgeworCQlzd2l0Y2ggKChpbnNuID4+IDEx KSAmIDB4MWYpCisJCSAgeworCQkgIGNhc2UgMTM6CisJCSAgICAvKiBDYXVz ZSAqLworCQkgICAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAocmVn bnVtLT5jYXVzZSkpCisJCSAgICAgIHsKKwkJCXJldHVybiAoLTEpOworCQkg ICAgICB9CisJCSAgY2FzZSA4OgorCQkgICAgLyogYmFkdmFkZHIgKi8KKwkJ ICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKHJlZ251bS0+YmFk dmFkZHIpKQorCQkgICAgICB7CisJCQlyZXR1cm4gKC0xKTsKKwkJICAgICAg fQorCQkgIH0KKwkgICAgICB9CisJICAgICAgYnJlYWs7CisJICAgIGRlZmF1 bHQ6CisJICAgICAgZ290byBub19zdXBwb3J0OworCSAgICAgIGJyZWFrOwor CSAgICB9CisJfQorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDB4MWM6Cisg ICAgICBzd2l0Y2ggKChpbnNuID4+IDApICYgMHgzZikKKwl7CisJICAvKiBt YWRkICovCisJY2FzZSAweDAwOgorCSAgLyogbWFkZHUgKi8KKwljYXNlIDB4 MDE6CisJICAvKiBtc3ViICovCisJY2FzZSAweDA0OgorCSAgLyogbXN1YnUg Ki8KKwljYXNlIDB4MDU6CisJICBnb3RvIHNldF9oaV9sbzsKKwkgIGJyZWFr OworCSAgLyogbXVsICovCisJY2FzZSAweDAyOgorCSAgeworCSAgICB1aW50 MzJfdCByZCA9IChpbnNuID4+IDExKSAmIDB4MWY7CisJICAgIGlmIChyZCAh PSAwKQorCSAgICAgIHsKKwkJaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3Jl ZyAocmQpKQorCQkgIHsKKwkJICAgIHJldHVybiAoLTEpOworCQkgIH0KKwkg ICAgICB9CisJICAgIGdvdG8gc2V0X2hpX2xvOworCSAgfQorCSAgYnJlYWs7 CisJICAvKiBjbG8gKi8KKwljYXNlIDB4MjE6CisJICAvKiBjbHogKi8KKwlj YXNlIDB4MjA6CisJICBnb3RvIHNldF9yZDsKKwkgIGJyZWFrOworCWRlZmF1 bHQ6CisJICBnb3RvIG5vX3N1cHBvcnQ7CisJICBicmVhazsKKwl9CisgICAg ICBicmVhazsKKworICAgICAgLyogbGIgKi8KKyAgICBjYXNlIDB4MjA6Cisg ICAgICAvKiBsaCAqLworICAgIGNhc2UgMHgyMToKKyAgICAgIC8qIGx3bCAq LworICAgIGNhc2UgMHgyMjoKKyAgICAgIC8qIGx3ICovCisgICAgY2FzZSAw eDIzOgorICAgICAgLyogbGJ1ICovCisgICAgY2FzZSAweDI0OgorICAgICAg LyogbGh1ICovCisgICAgY2FzZSAweDI1OgorICAgICAgLyogbHdyICovCisg ICAgY2FzZSAweDI2OgorICAgICAgLyogbGwgKi8KKyAgICBjYXNlIDB4MzA6 CisgICAgICBnb3RvIHNldF9ydDsKKyAgICAgIGJyZWFrOworCisgICAgICAv KiBzYiAqLworICAgIGNhc2UgMHgyODoKKyAgICAgIC8qIHNoICovCisgICAg Y2FzZSAweDI5OgorICAgICAgLyogc3dsICovCisgICAgY2FzZSAweDJhOgor ICAgICAgLyogc3cgKi8KKyAgICBjYXNlIDB4MmI6CisgICAgICAvKiBzd3Ig Ki8KKyAgICBjYXNlIDB4MmU6CisgICAgICAvKiBzYyAqLworICAgIGNhc2Ug MHgzODoKKyAgICAgIHsKKwl1aW50MzJfdCBhZGRyOworCisJLyogYWRkciAq LworCS8qIGJhc2UgKi8KKwlyZWdjYWNoZV9yYXdfcmVhZCAocmVjb3JkX3Jl Z2NhY2hlLCAoaW5zbiA+PiAyMSkgJiAweDFmLAorCQkJICAgKGdkYl9ieXRl ICopICYgYWRkcik7CisJLyogb2Zmc2V0ICovCisJYWRkciArPSAoaW5zbiA+ PiAwKSAmIDB4ZmZmZjsKKworCXN3aXRjaCAob3Bjb2RlKQorCSAgeworCSAg ICAvKiBzYiAqLworCSAgY2FzZSAweDI4OgorCSAgICBpZiAocmVjb3JkX2Fy Y2hfbGlzdF9hZGRfbWVtIChhZGRyLCAxKSkKKwkgICAgICB7CisJCXJldHVy biAoLTEpOworCSAgICAgIH0KKwkgICAgYnJlYWs7CisJICAgIC8qIHNoICov CisJICBjYXNlIDB4Mjk6CisJICAgIGlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9tZW0gKGFkZHIsIDIpKQorCSAgICAgIHsKKwkJcmV0dXJuICgtMSk7CisJ ICAgICAgfQorCSAgICBicmVhazsKKwkgICAgLyogc3dsICovCisJICBjYXNl IDB4MmE6CisJICAgIC8qIHN3ciAqLworCSAgY2FzZSAweDJlOgorCSAgICBp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhZGRyICYgMHhmZmZmZmYw MCwgMikpCisJICAgICAgeworCQlyZXR1cm4gKC0xKTsKKwkgICAgICB9CisJ ICAgIGJyZWFrOworCSAgICAvKiBzdyAqLworCSAgY2FzZSAweDJiOgorCSAg ICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChhZGRyLCA0KSkKKwkg ICAgICB7CisJCXJldHVybiAoLTEpOworCSAgICAgIH0KKwkgICAgYnJlYWs7 CisJICAgIC8qIHNjICovCisJICBjYXNlIDB4Mzg6CisJICAgIGlmIChyZWNv cmRfYXJjaF9saXN0X2FkZF9tZW0gKGFkZHIsIDQpKQorCSAgICAgIHsKKwkJ cmV0dXJuICgtMSk7CisJICAgICAgfQorCSAgICBnb3RvIHNldF9ydDsKKwkg ICAgYnJlYWs7CisJICB9CisgICAgICB9CisgICAgICBicmVhazsKKyAgICAg IC8qIHByZWYgKi8KKyAgICBjYXNlIDB4MzM6CisgICAgICBicmVhazsKKwor ICAgIGRlZmF1bHQ6CisgICAgICBnb3RvIG5vX3N1cHBvcnQ7CisgICAgICBi cmVhazsKKyAgICB9CisKK291dDoKKyAgaWYgKHJlY29yZF9kZWxheV9zbG90 KQorICAgIHsKKyAgICAgIGlmIChhZGRfcGMpCisJeworCSAgaWYgKHJlY29y ZF9hcmNoX2xpc3RfYWRkX3JlZyAocmVnbnVtLT5wYykpCisJICAgIHsKKwkg ICAgICByZXR1cm4gKC0xKTsKKwkgICAgfQorCSAgYWRkX3BjID0gMDsKKwl9 CisgICAgfQorICBpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfZW5kIChhZGRf cGMpKQorICAgIHsKKyAgICAgIHJldHVybiAoLTEpOworICAgIH0KKyAgcmV0 dXJuICgwKTsKKworbm9fc3VwcG9ydDoKKyAgcHJpbnRmX3VuZmlsdGVyZWQg KF8KKwkJICAgICAoInJlY29yZDogcmVjb3JkIGFuZCByZXZlcnNlIGZ1bmN0 aW9uIGRvbid0IHN1cHBvcnQgMzIgYml0cyBpbnN0cnVjdGlvbiAweCUwOHgu XG4iKSwKKwkJICAgICAodW5zaWduZWQgaW50KSBpbnNuKTsKKyAgcmV0dXJu ICgtMSk7CisKK3NldF9yZDoKKyAgeworICAgIHVpbnQzMl90IHJkID0gKGlu c24gPj4gMTEpICYgMHgxZjsKKyAgICBpZiAocmQgIT0gMCkKKyAgICAgIHsK KwlpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChyZCkpCisJICB7CisJ ICAgIHJldHVybiAoLTEpOworCSAgfQorICAgICAgfQorICB9CisgIGdvdG8g b3V0OworCitzZXRfcnQ6CisgIHsKKyAgICB1aW50MzJfdCBydCA9IChpbnNu ID4+IDE2KSAmIDB4MWY7CisgICAgaWYgKHJ0ICE9IDApCisgICAgICB7CisJ aWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAocnQpKQorCSAgeworCSAg ICByZXR1cm4gKC0xKTsKKwkgIH0KKyAgICAgIH0KKyAgfQorICBnb3RvIG91 dDsKKworc2V0X2ltbV9kZWxheV9zbG90X3BjOgorICB7CisgICAgdWludDMy X3QgaW1tID0gKGluc24gPj4gMCkgJiAweGZmZmY7CisgICAgaWYgKGltbSA+ PiAxNSkKKyAgICAgIHsKKwlpbW0gfD0gMHhmZmZmMDAwMDsKKyAgICAgIH0K KyAgICBpbW0gPDw9IDI7CisgICAgbWlwc190YXJnZXRfYWRkciA9IHBjICsg NCArIGltbTsKKyAgfQorICBnb3RvIHNldF9kZWxheV9zbG90X3BjOworCitz ZXRfZGVsYXlfc2xvdF9wYzoKKyAgbWlwc19kZWxheV9zbG90X2FkZHIgPSBw YyArIDQ7CisgIHJlY29yZF9kZWxheV9zbG90Kys7CisgIGdvdG8gc2V0X3Bj OworCitzZXRfcGM6CisgIGlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcg KHJlZ251bS0+cGMpKQorICAgIHsKKyAgICAgIHJldHVybiAoLTEpOworICAg IH0KKyAgYWRkX3BjID0gMDsKKyAgZ290byBvdXQ7CisKK3NldF9oaV9sbzoK KyAgaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAocmVnbnVtLT5oaSkp CisgICAgeworICAgICAgcmV0dXJuICgtMSk7CisgICAgfQorICBpZiAocmVj b3JkX2FyY2hfbGlzdF9hZGRfcmVnIChyZWdudW0tPmxvKSkKKyAgICB7Cisg ICAgICByZXR1cm4gKC0xKTsKKyAgICB9CisgIGdvdG8gb3V0OworfQorCisv KiBSZWNvcmQgdGhlIHZhbHVlIG9mIHRoZSBtZW1vcnkgdGhhdCB3aWxsYmUg Y2hhbmdlZCBpbiBjdXJyZW50IGluc3RydWN0aW9uCisgICB0byAicmVjb3Jk X2FyY2hfbGlzdCIuCisgICBSZXR1cm4gLTEgaWYgc29tZXRoaW5nIHdyb25n LiAqLworc3RhdGljIGludCBtaXBzX3JlY29yZCAoc3RydWN0IGdkYmFyY2gg KmdkYmFyY2gpCit7CisgIENPUkVfQUREUiBwYyA9IHJlYWRfcGMgKCk7CisK KyAgaWYgKGRlYnVnX3JlY29yZCkKKyAgICB7CisgICAgICBmcHJpbnRmX3Vu ZmlsdGVyZWQgKGdkYl9zdGRsb2csICJyZWNvcmQ6IG1pcHNfcmVjb3JkIHBj ID0gMHglc1xuIiwKKwkJCSAgcGFkZHJfbnogKHBjKSk7CisgICAgfQorCisg IGlmIChtaXBzX3BjX2lzX21pcHMxNiAocGMpKQorICAgIHsKKyAgICAgIHBy aW50Zl91bmZpbHRlcmVkIChfCisJCQkgKCJyZWNvcmQ6IHJlY29yZCBhbmQg cmV2ZXJzZSBmdW5jdGlvbiBkb24ndCBzdXBwb3J0IG1pcHMxNi5cbiIpKTsK KyAgICAgIHJldHVybiAoLTEpOworICAgIH0KKworICBpZiAocmVjb3JkX2Rl bGF5X3Nsb3QpCisgICAgeworICAgICAgaWYgKG1pcHNfcmVjb3JkXzMyICht aXBzX2RlbGF5X3Nsb3RfYWRkcikpCisJeworCSAgcmV0dXJuICgtMSk7CisJ fQorICAgICAgaWYgKG1pcHNfcmVjb3JkXzMyIChtaXBzX3RhcmdldF9hZGRy KSkKKwl7CisJICByZXR1cm4gKC0xKTsKKwl9CisgICAgICByZWNvcmRfZGVs YXlfc2xvdC0tOworICAgIH0KKyAgcmV0dXJuIChtaXBzX3JlY29yZF8zMiAo cGMpKTsKK30KKworc3RhdGljIHZvaWQgbWlwc19yZWNvcmRfZGFzbSAoc3Ry dWN0IGdkYmFyY2ggKmdkYmFyY2gpCit7CisgIGNvbnN0IHN0cnVjdCBtaXBz X3JlZ251bSAqcmVnbnVtOworICBVTE9OR0VTVCBwYzsKKworICBpZiAobWlw c19wY19pc19taXBzMTYgKHJlYWRfcGMgKCkpKQorICAgIHsKKyAgICAgIGVy cm9yIChfCisJICAgICAoInJlY29yZDogcmVjb3JkIGFuZCByZXZlcnNlIGZ1 bmN0aW9uIGRvbid0IHN1cHBvcnQgbWlwczE2LlxuIikpOworICAgIH0KKwor ICByZWdudW0gPSBtaXBzX3JlZ251bSAoZ2RiYXJjaCk7CisgIHJlZ2NhY2hl X2Nvb2tlZF9yZWFkX3Vuc2lnbmVkIChyZWNvcmRfcmVnY2FjaGUsIHJlZ251 bS0+cGMsICZwYyk7CisgIGlmIChnZGJfaXNfcmV2ZXJzZSkKKyAgICB7Cisg ICAgICBwYyAtPSA0OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHBj ICs9IDQ7CisgICAgfQorICByZWdjYWNoZV9jb29rZWRfd3JpdGVfdW5zaWdu ZWQgKHJlY29yZF9yZWdjYWNoZSwgcmVnbnVtLT5wYywgcGMpOworfQorCiBz dGF0aWMgc3RydWN0IGdkYmFyY2ggKgogbWlwc19nZGJhcmNoX2luaXQgKHN0 cnVjdCBnZGJhcmNoX2luZm8gaW5mbywgc3RydWN0IGdkYmFyY2hfbGlzdCAq YXJjaGVzKQogewpAQCAtNTg3Nyw2ICs2NjA4LDkgQEAgbWlwc19nZGJhcmNo X2luaXQgKHN0cnVjdCBnZGJhcmNoX2luZm8gaQogICAgIHVzZXJfcmVnX2Fk ZCAoZ2RiYXJjaCwgbWlwc19yZWdpc3Rlcl9hbGlhc2VzW2ldLm5hbWUsCiAJ CSAgdmFsdWVfb2ZfbWlwc191c2VyX3JlZywgJm1pcHNfcmVnaXN0ZXJfYWxp YXNlc1tpXS5yZWdudW0pOwogCisgIHNldF9nZGJhcmNoX3JlY29yZCAoZ2Ri YXJjaCwgbWlwc19yZWNvcmQpOworICBzZXRfZ2RiYXJjaF9yZWNvcmRfZGFz bSAoZ2RiYXJjaCwgbWlwc19yZWNvcmRfZGFzbSk7CisKICAgcmV0dXJuIGdk YmFyY2g7CiB9CiAKLS0tIGEvZ2RiL3JlY29yZC5jCisrKyBiL2dkYi9yZWNv cmQuYwpAQCAtMCwwICsxLDYwNiBAQAorLyogUmVjb3JkIHYwLjEuMiBmb3Ig R0RCLCB0aGUgR05VIGRlYnVnZ2VyLgorICAgV3JpdHRlbiBieSBIdWkgWmh1 IDx0ZWF3YXRlckBnbWFpbC5jb20+CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv cgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor ICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBz ZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyog QmVmb3JlIHRoZSBpbmZlcmlvciByZXN1bWUsIGlmIHRoZSByZWNvcmQgZnVu Y3Rpb24gaXMgb3BlbiBhbmQgaW5mZXJpb3Igd2lsbAorICAgcmVhbGx5IGV4 ZWN1dGUgKHdpbGwgbm90IGNhbGwgInJlY29yZF93YWl0IiksIHRoZSBHREIg d2lsbCBjYWxsCisgICBmdW5jdGlvbiAicmVjb3JkX21lc3NhZ2UiIHRvIHJl Y29yZCB0aGUgdmFsdWVzIG9mIHJlZ2lzdHJzIGFuZCBtZW1vcnkgdGhhdAor ICAgd2lsbCBiZSBjaGFuZ2VkIGluIG5leHQgaW5zdHJ1dGlvbiB0byAicmVj b3JkX2xpc3QiLgorICAgV2hlbiBHREIgaXMgaW4gcmV2ZXJzZSBkZWJ1ZyBt b2RlIGFuZCBpbmZlcmlvciBpcyBub3QgaW4gdGhlIGJlZ2luIG9mIAorICAg InJlY29yZF9saXN0IiBvciBHREIgaXMgaW4gbm9ybWFpbCBkZXViZyBtb2Rl IGFuZCBpbmZlcmlvciBpcyBub3QgaW4gdGhlCisgICBlbmQgb2YgInJlY29y ZF9saXN0IiwgR0RCIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIGluc3RlYWQg InRhcmdldF93YWl0Ii4gSW4KKyAgIHRoaXMgc3RhdHVzLCBmdW5jdGlvbiAi cmVzdW1lIiB3aWxsIGRpcmVjdGx5IHJldHVybi4gVGhlbiBpbmZlcmlvciB3 aWxsCisgICBpbnN0ZWFkIGV4ZWN1dGUgdG8gY2FsbCAicmVjb3JkX3dhaXQi LgorICAgInJlY29yZF93YWl0IiB3aWxsIHNldCB0aGUgcnVubmluZyBtZXNz YWdlIGluICJyZWNvcmRfbGlzdCIgdG8gaW5mZXJpb3IuCisgICBUaGVuIHRo ZSByZWdpc3RlcnMgYW5kIG1lbW9yeSBvZiAgaW5mZXJpb3Igd2lsbCBjaGFu Z2UgYmFjayB0byBiZWZvcmUuICovCisKKyNpbmNsdWRlICJkZWZzLmgiCisj aW5jbHVkZSAiaW5mZXJpb3IuaCIKKyNpbmNsdWRlICJiZmQuaCIKKyNpbmNs dWRlICJzeW1maWxlLmgiCisjaW5jbHVkZSAiZ2RiY21kLmgiCisjaW5jbHVk ZSAiZ2RiY29yZS5oIgorI2luY2x1ZGUgInNlcmlhbC5oIgorI2luY2x1ZGUg InRhcmdldC5oIgorI2luY2x1ZGUgImV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRl ICJnZGJfc3RyaW5nLmgiCisjaW5jbHVkZSAiZ2RiX3N0YXQuaCIKKyNpbmNs dWRlICJyZWdjYWNoZS5oIgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVk ZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAibWlwcy10ZGVwLmgiCisjaW5jbHVk ZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxz eXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy9maWxlLmg+CisjaW5jbHVkZSAi ZnJhbWUtdW53aW5kLmgiCisjaW5jbHVkZSAiZ2RidGhyZWFkLmgiCisjaW5j bHVkZSAiZXhjZXB0aW9ucy5oIgorI2luY2x1ZGUgImluZmNhbGwuaCIKKyNp bmNsdWRlICJzb3VyY2UuaCIKKyNpbmNsdWRlICJ0b3AuaCIKKyNpbmNsdWRl ICJyZWNvcmQuaCIKKworI2RlZmluZSBSRUNPUkRfUkVDX1BST01QVAkiKHJl YykgIgorI2RlZmluZSBSRUNPUkRfUkVWX1BST01QVAkiKHJldikgIgorCitl eHRlcm4gc3RydWN0IGJyZWFrcG9pbnQgKmJyZWFrcG9pbnRfY2hhaW47CisK K3JlY29yZF90ICpyZWNvcmRfbGlzdCA9IE5VTEw7CityZWNvcmRfdCAqcmVj b3JkX2FyY2hfbGlzdF9oZWFkID0gTlVMTDsKK3JlY29yZF90ICpyZWNvcmRf YXJjaF9saXN0X3RhaWwgPSBOVUxMOwordW5zaWduZWQgaW50IGdkYl9pc19y ZWNvcmRpbmcgPSAwOworaW50IGdkYl9pc19yZXZlcnNlID0gMDsKK2ludCBk ZWJ1Z19yZWNvcmQgPSAwOworaW50IHJlY29yZF93YWl0X3N0ZXAgPSAwOwor aW50IHJlY29yZF9kZWxheV9zbG90ID0gMDsKK3N0YXRpYyBzaWdzZXRfdCBy ZWNvcmRfbWFza2FsbDsKK3N0YXRpYyBpbnQgcmVjb3JkX2dldF9zaWcgPSAw Oworc3RydWN0IHJlZ2NhY2hlICpyZWNvcmRfcmVnY2FjaGU7CitzdGF0aWMg Y2hhciByZWNvcmRfZ2RiX3Byb21wdFsyMF07CisKK3N0YXRpYyB2b2lkCitz aG93X2RlYnVnX3JlY29yZCAoc3RydWN0IHVpX2ZpbGUgKmZpbGUsIGludCBm cm9tX3R0eSwKKwkJICAgc3RydWN0IGNtZF9saXN0X2VsZW1lbnQgKmMsIGNv bnN0IGNoYXIgKnZhbHVlKQoreworICBmcHJpbnRmX2ZpbHRlcmVkIChmaWxl LCBfKCJSZWNvcmQgZGVidWdnaW5nIGlzICVzLlxuIiksIHZhbHVlKTsKK30K Kworc3RhdGljIHZvaWQKK3JlY29yZF9saXN0X3JlbGVhc2UgKHJlY29yZF90 ICogcmVjKQoreworICByZWNvcmRfdCAqdG1wOworCisgIHdoaWxlIChyZWMp CisgICAgeworICAgICAgdG1wID0gcmVjOworICAgICAgcmVjID0gcmVjLT5w cmV2OworICAgICAgeGZyZWUgKHRtcCk7CisgICAgfQorfQorCisvKiBCZWZv cmUgaW5mZXJpb3Igc3RlcCAoV2hlbiBHREIgcmVjb3JkIHRoZSBydW5uaW5n IG1lc3NhZ2UsIGluZmVyaW9yIG9ubHkgY2FuCisgICBzdGVwLiksIEdEQiB3 aWxsIGNhbGwgdGhpcyBmdW5jdGlvbiB0byByZWNvcmQgdGhlIHZhbHVlcyB0 byAicmVjb3JkX2xpc3QiLgorICAgVGhpcyBmdW5jdGlvbiB3aWxsIGNhbGwg ImdkYmFyY2hfcmVjb3JkIiB0byByZWNvcmQgdGhlIHJ1bm5pbmcgbWVzc2Fn ZSBvZgorICAgaW5mZXJpb3IgYW5kIHNldCB0aGVtIHRvICJyZWNvcmRfYXJj aF9saXN0Ii4gQW5kIGFkZCBpdCB0byAicmVjb3JkX2xpc3QiLiAqLwordm9p ZAorcmVjb3JkX21lc3NhZ2UgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoKQor eworICBpbnQgcmV0OworCisgIHJlY29yZF9hcmNoX2xpc3RfaGVhZCA9IE5V TEw7CisgIHJlY29yZF9hcmNoX2xpc3RfdGFpbCA9IE5VTEw7CisgIHJlY29y ZF9yZWdjYWNoZSA9IGdldF9jdXJyZW50X3JlZ2NhY2hlICgpOworCisgIHJl dCA9IGdkYmFyY2hfcmVjb3JkIChnZGJhcmNoKTsKKyAgaWYgKHJldCA+IDAp CisgICAgeworICAgICAgcmVjb3JkX2xpc3RfcmVsZWFzZSAocmVjb3JkX2Fy Y2hfbGlzdF90YWlsKTsKKyAgICAgIGVycm9yIChfKCJyZWNvcmQ6IHJlY29y ZCBwYXVzZSB0aGUgcHJvZ3JhbS4iKSk7CisgICAgfQorICBpZiAocmV0IDwg MCkKKyAgICB7CisgICAgICByZWNvcmRfZGVsYXlfc2xvdCA9IDA7CisgICAg ICByZWNvcmRfbGlzdF9yZWxlYXNlIChyZWNvcmRfYXJjaF9saXN0X3RhaWwp OworICAgICAgZXJyb3IgKF8oInJlY29yZDogcmVjb3JkIG1lc3NhZ2UgZXJy b3IuIikpOworICAgIH0KKworICBpZiAocmVjb3JkX2xpc3QpCisgICAgewor ICAgICAgcmVjb3JkX2xpc3QtPm5leHQgPSByZWNvcmRfYXJjaF9saXN0X2hl YWQ7CisgICAgICByZWNvcmRfYXJjaF9saXN0X2hlYWQtPnByZXYgPSByZWNv cmRfbGlzdDsKKyAgICAgIHJlY29yZF9saXN0ID0gcmVjb3JkX2FyY2hfbGlz dF90YWlsOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHJlY29yZF9s aXN0ID0gcmVjb3JkX2FyY2hfbGlzdF90YWlsOworICAgIH0KK30KKworLyog QWRkIGEgcmVjb3JkX3QgdG8gInJlY29yZF9hcmNoX2xpc3QiLiAqLworc3Rh dGljIHZvaWQKK3JlY29yZF9hcmNoX2xpc3RfYWRkIChyZWNvcmRfdCAqIHJl YykKK3sKKyAgaWYgKHJlY29yZF9hcmNoX2xpc3RfdGFpbCkKKyAgICB7Cisg ICAgICByZWNvcmRfYXJjaF9saXN0X3RhaWwtPm5leHQgPSByZWM7CisgICAg ICByZWMtPnByZXYgPSByZWNvcmRfYXJjaF9saXN0X3RhaWw7CisgICAgICBy ZWNvcmRfYXJjaF9saXN0X3RhaWwgPSByZWM7CisgICAgfQorICBlbHNlCisg ICAgeworICAgICAgcmVjb3JkX2FyY2hfbGlzdF9oZWFkID0gcmVjOworICAg ICAgcmVjb3JkX2FyY2hfbGlzdF90YWlsID0gcmVjOworICAgIH0KK30KKwor LyogUmVjb3JkIHRoZSB2YWx1ZSBvZiBhIHJlZ2lzdGVyKCJudW0iKSB0byAi cmVjb3JkX2FyY2hfbGlzdCIuICovCitpbnQKK3JlY29yZF9hcmNoX2xpc3Rf YWRkX3JlZyAoaW50IG51bSkKK3sKKyAgcmVjb3JkX3QgKnJlYzsKKworICBp ZiAoZGVidWdfcmVjb3JkKQorICAgIHsKKyAgICAgIGZwcmludGZfdW5maWx0 ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCSAgInJlY29yZDogYWRkIHJlZyBudW0g PSAlZCB0byBhcmNoIGxpc3QuXG4iLCBudW0pOworICAgIH0KKworICByZWMg PSAocmVjb3JkX3QgKikgeG1hbGxvYyAoc2l6ZW9mIChyZWNvcmRfdCkpOwor ICBpZiAoIXJlYykKKyAgICB7CisgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQg KGdkYl9zdGRsb2csICJyZWNvcmQ6IGFsbG9jIG1lbW9yeSBlcnJvci5cbiIp OworICAgICAgcmV0dXJuICgtMSk7CisgICAgfQorICByZWMtPnUucmVnLnZh bCA9IChnZGJfYnl0ZSAqKSB4bWFsbG9jIChNQVhfUkVHSVNURVJfU0laRSk7 CisgIGlmICghcmVjLT51LnJlZy52YWwpCisgICAgeworICAgICAgZnByaW50 Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAicmVjb3JkOiBhbGxvYyBtZW1v cnkgZXJyb3IuXG4iKTsKKyAgICAgIHhmcmVlIChyZWMpOworICAgICAgcmV0 dXJuICgtMSk7CisgICAgfQorICByZWMtPnByZXYgPSBOVUxMOworICByZWMt Pm5leHQgPSBOVUxMOworICByZWMtPnR5cGUgPSByZWNvcmRfcmVnOworICBy ZWMtPnUucmVnLm51bSA9IG51bTsKKworICByZWdjYWNoZV9yYXdfcmVhZCAo cmVjb3JkX3JlZ2NhY2hlLCBudW0sIHJlYy0+dS5yZWcudmFsKTsKKworICBy ZWNvcmRfYXJjaF9saXN0X2FkZCAocmVjKTsKKworICByZXR1cm4gKDApOwor fQorCisvKiBSZWNvcmQgdGhlIHZhbHVlIG9mIGEgcGFydCBvZiBtZW1yb3kg dGhhdCBhZGRyZXNzIGlzICJhZGRyIiBhbmQgbGVuZ3RoIGlzCisgICAibGVu IiB0byAicmVjb3JkX2FyY2hfbGlzdCIuICovCitpbnQKK3JlY29yZF9hcmNo X2xpc3RfYWRkX21lbSAoQ09SRV9BRERSIGFkZHIsIGludCBsZW4pCit7Cisg IHJlY29yZF90ICpyZWM7CisKKyAgaWYgKGRlYnVnX3JlY29yZCkKKyAgICB7 CisgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csCisJCQkg ICJyZWNvcmQ6IGFkZCBtZW0gYWRkciA9IDB4JXMgbGVuID0gJWQgdG8gYXJj aCBsaXN0LlxuIiwKKwkJCSAgcGFkZHJfbnogKGFkZHIpLCBsZW4pOworICAg IH0KKworICByZWMgPSAocmVjb3JkX3QgKikgeG1hbGxvYyAoc2l6ZW9mIChy ZWNvcmRfdCkpOworICBpZiAoIXJlYykKKyAgICB7CisgICAgICBmcHJpbnRm X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJyZWNvcmQ6IGFsbG9jIG1lbW9y eSBlcnJvci5cbiIpOworICAgICAgcmV0dXJuICgtMSk7CisgICAgfQorICBy ZWMtPnUubWVtLnZhbCA9IChnZGJfYnl0ZSAqKSB4bWFsbG9jIChsZW4pOwor ICBpZiAoIXJlYy0+dS5tZW0udmFsKQorICAgIHsKKyAgICAgIGZwcmludGZf dW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgInJlY29yZDogYWxsb2MgbWVtb3J5 IGVycm9yLlxuIik7CisgICAgICB4ZnJlZSAocmVjKTsKKyAgICAgIHJldHVy biAoLTEpOworICAgIH0KKyAgcmVjLT5wcmV2ID0gTlVMTDsKKyAgcmVjLT5u ZXh0ID0gTlVMTDsKKyAgcmVjLT50eXBlID0gcmVjb3JkX21lbTsKKyAgcmVj LT51Lm1lbS5hZGRyID0gYWRkcjsKKyAgcmVjLT51Lm1lbS5sZW4gPSBsZW47 CisKKyAgaWYgKHRhcmdldF9yZWFkX21lbW9yeSAoYWRkciwgcmVjLT51Lm1l bS52YWwsIGxlbikpCisgICAgeworICAgICAgZnByaW50Zl91bmZpbHRlcmVk IChnZGJfc3RkbG9nLAorCQkJICAicmVjb3JkOiByZWFkIG1lbW9yeSBhZGRy ID0gMHglcyBsZW4gPSAlZCBlcnJvci5cbiIsCisJCQkgIHBhZGRyX256IChh ZGRyKSwgbGVuKTsKKyAgICAgIHhmcmVlIChyZWMtPnUubWVtLnZhbCk7Cisg ICAgICB4ZnJlZSAocmVjKTsKKyAgICAgIHJldHVybiAoLTEpOworICAgIH0K KworICByZWNvcmRfYXJjaF9saXN0X2FkZCAocmVjKTsKKworICByZXR1cm4g KDApOworfQorCisvKiBBZGQgYSAicmVjb3JkX2VuZCIgdHlwZSByZWNvcmRf dCB0byAicmVjb3JkX2FyY2hfbGlzdCIuICovCitpbnQKK3JlY29yZF9hcmNo X2xpc3RfYWRkX2VuZCAoaW50IG5lZWRfZGFzbSkKK3sKKyAgcmVjb3JkX3Qg KnJlYzsKKworICBpZiAoZGVidWdfcmVjb3JkKQorICAgIHsKKyAgICAgIGZw cmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCSAgInJlY29yZDog YWRkIGVuZCBuZWVkX2Rhc20gPSAlZCB0byBhcmNoIGxpc3QuXG4iLAorCQkJ ICBuZWVkX2Rhc20pOworICAgIH0KKworICByZWMgPSAocmVjb3JkX3QgKikg eG1hbGxvYyAoc2l6ZW9mIChyZWNvcmRfdCkpOworICBpZiAoIXJlYykKKyAg ICB7CisgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJy ZWNvcmQ6IGFsbG9jIG1lbW9yeSBlcnJvci5cbiIpOworICAgICAgcmV0dXJu ICgtMSk7CisgICAgfQorICByZWMtPnByZXYgPSBOVUxMOworICByZWMtPm5l eHQgPSBOVUxMOworICByZWMtPnR5cGUgPSByZWNvcmRfZW5kOworCisgIHJl Yy0+dS5uZWVkX2Rhc20gPSBuZWVkX2Rhc207CisKKyAgcmVjb3JkX2FyY2hf bGlzdF9hZGQgKHJlYyk7CisKKyAgcmV0dXJuICgwKTsKK30KKworc3RhdGlj IHZvaWQKK3JlY29yZF9zaWdfaGFuZGxlciAoaW50IHNpZ25vKQoreworICBp ZiAoZGVidWdfcmVjb3JkKQorICAgIHsKKyAgICAgIGZwcmludGZfdW5maWx0 ZXJlZCAoZ2RiX3N0ZGxvZywgInJlY29yZDogZ2V0IGEgc2lnbmFsXG4iKTsK KyAgICB9CisgIHJlY29yZF93YWl0X3N0ZXAgPSAxOworICByZWNvcmRfZ2V0 X3NpZyA9IDE7Cit9CisKKy8qIFdoZW4gR0RCIGlzIGluIHJldmVyc2UgZGVi dWcgbW9kZSBhbmQgaW5mZXJpb3IgaXMgbm90IGluIHRoZSBiZWdpbiBvZiAK KyAgICJyZWNvcmRfbGlzdCIgb3IgR0RCIGlzIGluIG5vcm1haWwgZGV1Ymcg bW9kZSBhbmQgaW5mZXJpb3IgaXMgbm90IGluIHRoZQorICAgZW5kIG9mICJy ZWNvcmRfbGlzdCIsIEdEQiB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbiBpbnN0 ZWFkICJ0YXJnZXRfd2FpdCIuIEluCisgICB0aGlzIHN0YXR1cywgZnVuY3Rp b24gInJlc3VtZSIgd2lsbCBkaXJlY3RseSByZXR1cm4uIFRoZW4gaW5mZXJp b3Igd2lsbAorICAgaW5zdGVhZCBleGVjdXRlIHRvIGNhbGwgInJlY29yZF93 YWl0Ii4KKyAgICJyZWNvcmRfd2FpdCIgd2lsbCBzZXQgdGhlIHJ1bm5pbmcg bWVzc2FnZSBpbiAicmVjb3JkX2xpc3QiIHRvIGluZmVyaW9yLgorICAgVGhl biB0aGUgcmVnaXN0ZXJzIGFuZCBtZW1vcnkgb2YgIGluZmVyaW9yIHdpbGwg Y2hhbmdlIGJhY2sgdG8gYmVmb3JlLiAqLworcHRpZF90CityZWNvcmRfd2Fp dCAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIHB0aWRfdCBwdGlkLCBzdHJ1 Y3QgdGFyZ2V0X3dhaXRzdGF0dXMgKnN0YXR1cykKK3sKKyAgc3RydWN0IHNp Z2FjdGlvbiBhY3QsIG9sZF9hY3Q7CisgIHN0YXRpYyBpbnQgc3RhdGUgPSAw OwkJLyogMCBub3JtYWwgMSB0byB0aGUgZW5kIDIgdG8gdGhlIGJlZ2luICov CisgIGludCBjb24gPSAxOworICBpbnQgaW5zbl9lbmQgPSAwOworICBpbnQg bmVlZF9kYXNtID0gMDsKKyAgc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSA9 IGdldF9jdXJyZW50X3JlZ2NhY2hlICgpOworCisgIGlmIChkZWJ1Z19yZWNv cmQpCisgICAgeworICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3Rk bG9nLCAicmVjb3JkOiByZWNvcmRfd2FpdCBzdGVwID0gJWRcbiIsCisJCQkg IHJlY29yZF93YWl0X3N0ZXApOworICAgIH0KKworICByZWNvcmRfZ2V0X3Np ZyA9IDA7CisgIGFjdC5zYV9oYW5kbGVyID0gcmVjb3JkX3NpZ19oYW5kbGVy OworICBhY3Quc2FfbWFzayA9IHJlY29yZF9tYXNrYWxsOworICBhY3Quc2Ff ZmxhZ3MgPSBTQV9SRVNUQVJUOworICBpZiAoc2lnYWN0aW9uIChTSUdJTlQs ICZhY3QsICZvbGRfYWN0KSkKKyAgICB7CisgICAgICBwZXJyb3Jfd2l0aF9u YW1lIChfKCJzaWdhY3Rpb24iKSk7CisgICAgfQorCisgIGRvCisgICAgewor ICAgICAgLyogY2hlY2sgc3RhdGUgKi8KKyAgICAgIGlmICgoZ2RiX2lzX3Jl dmVyc2UgJiYgIXJlY29yZF9saXN0LT5wcmV2ICYmIHN0YXRlID09IDIpCisJ ICB8fCAoIWdkYl9pc19yZXZlcnNlICYmICFyZWNvcmRfbGlzdC0+bmV4dCAm JiBzdGF0ZSA9PSAxKSkKKwl7CisJICBpZiAoc3RhdGUgPT0gMSkKKwkgICAg eworCSAgICAgIGZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJ CQkgICJyZWNvcmQ6IHJ1bm5pbmcgdG8gdGhlIGVuZCBvZiByZWNvcmQgbGlz dC5cbiIpOworCSAgICB9CisJICBlbHNlIGlmIChzdGF0ZSA9PSAyKQorCSAg ICB7CisJICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAor CQkJCSAgInJlY29yZDogcnVubmluZyB0byB0aGUgYmVnaW4gb2YgcmVjb3Jk IGxpc3QuXG4iKTsKKwkgICAgfQorCSAgc3RvcF9zb29uID0gU1RPUF9RVUlF VExZOworCSAgYnJlYWs7CisJfQorICAgICAgc3RhdGUgPSAwOworCisgICAg ICAvKiBzZXQgcmVnaXN0ZXIgYW5kIG1lbW9yeSBhY2NvcmRpbmcgdG8gcmVj b3JkX2xpc3QgKi8KKyAgICAgIGlmIChyZWNvcmRfbGlzdC0+dHlwZSA9PSBy ZWNvcmRfcmVnKQorCXsKKwkgIC8qIHJlZyAqLworCSAgZ2RiX2J5dGUgcmVn W01BWF9SRUdJU1RFUl9TSVpFXTsKKwkgIGlmIChkZWJ1Z19yZWNvcmQpCisJ ICAgIHsKKwkgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2cs CisJCQkJICAicmVjb3JkOiByZWNvcmRfbGlzdCByZWcgbnVtID0gJWQgdG8g YXJjaCBsaXN0LlxuIiwKKwkJCQkgIHJlY29yZF9saXN0LT51LnJlZy5udW0p OworCSAgICB9CisJICByZWdjYWNoZV9jb29rZWRfcmVhZCAocmVnY2FjaGUs IHJlY29yZF9saXN0LT51LnJlZy5udW0sIHJlZyk7CisJICByZWdjYWNoZV9j b29rZWRfd3JpdGUgKHJlZ2NhY2hlLCByZWNvcmRfbGlzdC0+dS5yZWcubnVt LAorCQkJCSByZWNvcmRfbGlzdC0+dS5yZWcudmFsKTsKKwkgIG1lbWNweSAo cmVjb3JkX2xpc3QtPnUucmVnLnZhbCwgcmVnLCBNQVhfUkVHSVNURVJfU0la RSk7CisJfQorICAgICAgZWxzZSBpZiAocmVjb3JkX2xpc3QtPnR5cGUgPT0g cmVjb3JkX21lbSkKKwl7CisJICAvKiBtZW0gKi8KKwkgIGdkYl9ieXRlIG1l bVtyZWNvcmRfbGlzdC0+dS5tZW0ubGVuXTsKKwkgIGlmIChkZWJ1Z19yZWNv cmQpCisJICAgIHsKKwkgICAgICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9z dGRsb2csCisJCQkJICAicmVjb3JkOiByZWNvcmRfbGlzdCBtZW0gYWRkciA9 IDB4JXMgbGVuID0gJWQgdG8gY3VycmVudC5cbiIsCisJCQkJICBwYWRkcl9u eiAocmVjb3JkX2xpc3QtPnUubWVtLmFkZHIpLAorCQkJCSAgcmVjb3JkX2xp c3QtPnUubWVtLmxlbik7CisJICAgIH0KKwkgIGlmICh0YXJnZXRfcmVhZF9t ZW1vcnkKKwkgICAgICAocmVjb3JkX2xpc3QtPnUubWVtLmFkZHIsIG1lbSwg cmVjb3JkX2xpc3QtPnUubWVtLmxlbikpCisJICAgIHsKKwkgICAgICBlcnJv ciAoXygicmVjb3JkOiByZWFkIG1lbW9yeSBhZGRyID0gMHglcyBsZW4gPSAl ZCBlcnJvci4iKSwKKwkJICAgICBwYWRkcl9ueiAocmVjb3JkX2xpc3QtPnUu bWVtLmFkZHIpLAorCQkgICAgIHJlY29yZF9saXN0LT51Lm1lbS5sZW4pOwor CSAgICB9CisJICBpZiAodGFyZ2V0X3dyaXRlX21lbW9yeQorCSAgICAgIChy ZWNvcmRfbGlzdC0+dS5tZW0uYWRkciwgcmVjb3JkX2xpc3QtPnUubWVtLnZh bCwKKwkgICAgICAgcmVjb3JkX2xpc3QtPnUubWVtLmxlbikpCisJICAgIHsK KwkgICAgICBlcnJvciAoXygicmVjb3JkOiB3cml0ZSBtZW1vcnkgYWRkciA9 IDB4JXMgbGVuID0gJWQgZXJyb3IuIiksCisJCSAgICAgcGFkZHJfbnogKHJl Y29yZF9saXN0LT51Lm1lbS5hZGRyKSwKKwkJICAgICByZWNvcmRfbGlzdC0+ dS5tZW0ubGVuKTsKKwkgICAgfQorCSAgbWVtY3B5IChyZWNvcmRfbGlzdC0+ dS5tZW0udmFsLCBtZW0sIHJlY29yZF9saXN0LT51Lm1lbS5sZW4pOworCX0K KyAgICAgIGVsc2UKKwl7CisJICBpZiAoZGVidWdfcmVjb3JkKQorCSAgICB7 CisJICAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJ CSAgInJlY29yZDogcmVjb3JkX2xpc3QgZW5kIG5lZWRfZGFzbSA9ICVkIHRv IGN1cnJlbnQuXG4iLAorCQkJCSAgcmVjb3JkX2xpc3QtPnUubmVlZF9kYXNt KTsKKwkgICAgfQorCisJICBuZWVkX2Rhc20gPSByZWNvcmRfbGlzdC0+dS5u ZWVkX2Rhc207CisJICBpZiAoIWdkYl9pc19yZXZlcnNlKQorCSAgICB7CisJ ICAgICAgaW5zbl9lbmQgPSAxOworCSAgICB9CisJfQorCisgICAgICBpZiAo Z2RiX2lzX3JldmVyc2UpCisJeworCSAgaWYgKHJlY29yZF9saXN0LT5wcmV2 KQorCSAgICB7CisJICAgICAgcmVjb3JkX2xpc3QgPSByZWNvcmRfbGlzdC0+ cHJldjsKKwkgICAgICBpZiAoIXJlY29yZF9saXN0LT50eXBlKQorCQl7CisJ CSAgaW5zbl9lbmQgPSAxOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAg eworCSAgICAgIHN0YXRlID0gMjsKKwkgICAgICBpbnNuX2VuZCA9IDE7CisJ ICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKHJlY29yZF9saXN0 LT5uZXh0KQorCSAgICB7CisJICAgICAgcmVjb3JkX2xpc3QgPSByZWNvcmRf bGlzdC0+bmV4dDsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAg c3RhdGUgPSAxOworCSAgICB9CisJfQorCisgICAgICBpZiAoaW5zbl9lbmQp CisJeworCSAgc3RydWN0IGJyZWFrcG9pbnQgKmI7CisJICBDT1JFX0FERFIg dG1wX3BjOworCisJICBpZiAoZGVidWdfcmVjb3JkKQorCSAgICB7CisJICAg ICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJCSAgInJl Y29yZDogaW5zbiBlbmQgbmVlZF9kYXNtID0gJWQgdG8gY3VycmVudC5cbiIs CisJCQkJICBuZWVkX2Rhc20pOworCSAgICB9CisKKwkgIGlmIChuZWVkX2Rh c20pCisJICAgIHsKKwkgICAgICBnZGJhcmNoX3JlY29yZF9kYXNtIChnZGJh cmNoKTsKKwkgICAgfQorCisJICAvL3JlZ2lzdGVyc19jaGFuZ2VkICgpOwor CSAgdG1wX3BjID0gcmVhZF9wYyAoKTsKKworCSAgLyogZW5kICovCisJICBp ZiAocmVjb3JkX3dhaXRfc3RlcCkKKwkgICAgeworCSAgICAgIGlmIChkZWJ1 Z19yZWNvcmQpCisJCXsKKwkJICBmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9z dGRsb2csICJyZWNvcmQ6IHN0ZXAuXG4iKTsKKwkJfQorCSAgICAgIGNvbiA9 IDA7CisJICAgIH0KKworCSAgLyogY2hlY2sgYnJlYWtwb2ludCAqLworCSAg Zm9yIChiID0gYnJlYWtwb2ludF9jaGFpbjsgYjsgYiA9IGItPm5leHQpCisJ ICAgIHsKKwkgICAgICBpZiAoYi0+bG9jLT5pbnNlcnRlZCkKKwkJeworCQkg IGlmIChiLT5sb2MtPnRhcmdldF9pbmZvLnBsYWNlZF9hZGRyZXNzID09IHRt cF9wYykKKwkJICAgIHsKKwkJICAgICAgaWYgKGRlYnVnX3JlY29yZCkKKwkJ CXsKKwkJCSAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLAorCQkJ CQkgICAgICAicmVjb3JkOiBicmVhayBhdCAweCVzLlxuIiwKKwkJCQkJICAg ICAgcGFkZHJfbnogKHRtcF9wYykpOworCQkJfQorCQkgICAgICBjb24gPSAw OworCQkgICAgICBicmVhazsKKwkJICAgIH0KKwkJfQorCSAgICB9CisKKwkg IGluc25fZW5kID0gMDsKKwl9CisgICAgfQorICB3aGlsZSAoY29uKTsKKwor ICBpZiAoc2lnYWN0aW9uIChTSUdBTFJNLCAmb2xkX2FjdCwgTlVMTCkpCisg ICAgeworICAgICAgcGVycm9yX3dpdGhfbmFtZSAoXygic2lnYWN0aW9uIikp OworICAgIH0KKworICBzdGF0dXMtPmtpbmQgPSBUQVJHRVRfV0FJVEtJTkRf U1RPUFBFRDsKKyAgaWYgKHJlY29yZF9nZXRfc2lnKQorICAgIHsKKyAgICAg IHN0YXR1cy0+dmFsdWUuc2lnID0gVEFSR0VUX1NJR05BTF9JTlQ7CisgICAg fQorICBlbHNlCisgICAgeworICAgICAgc3RhdHVzLT52YWx1ZS5zaWcgPSBU QVJHRVRfU0lHTkFMX1RSQVA7CisgICAgfQorCisgIHJldHVybiAoaW5mZXJp b3JfcHRpZCk7Cit9CisKK3ZvaWQKK3JlY29yZF9jbG9zZSAodm9pZCkKK3sK KyAgZ2RiX2lzX3JlY29yZGluZyA9IDA7CisgIGdkYl9pc19yZXZlcnNlID0g MDsKKyAgcmVjb3JkX2xpc3RfcmVsZWFzZSAocmVjb3JkX2xpc3QpOworICBy ZWNvcmRfbGlzdCA9IE5VTEw7CisgIHJlY29yZF9kZWxheV9zbG90ID0gMDsK KyAgcHJpbnRmX3VuZmlsdGVyZWQgKF8oInJlY29yZDogcmVjb3JkIGFuZCBy ZXZlcnNlIGZ1bmN0aW9uIGlzIHN0b3BwZWQuXG4iKSk7Cit9CisKK3N0YXRp YyB2b2lkCitjbWRfcmVjb3JkX3N0YXJ0IChjaGFyICphcmdzLCBpbnQgZnJv bV90dHkpCit7CisgIC8qIGNoZWNrIGV4ZWMgKi8KKyAgaWYgKCF0YXJnZXRf aGFzX2V4ZWN1dGlvbikKKyAgICB7CisgICAgICBlcnJvciAoXygicmVjb3Jk OiB0aGUgcHJvZ3JhbSBpcyBub3QgYmVpbmcgcnVuLiIpKTsKKyAgICB9CisK KyAgaWYgKCFnZGJhcmNoX3JlY29yZF9wIChjdXJyZW50X2dkYmFyY2gpKQor ICAgIHsKKyAgICAgIGVycm9yIChfKCJyZWNvcmQ6IHRoZSBjdXJyZW50IGdk YmFyY2ggZG9uJ3Qgc3VwcG9ydCByZWNvcmQgZnVuY3Rpb24uIikpOworICAg IH0KKworICBpZiAoZ2RiX2lzX3JlY29yZGluZykKKyAgICB7CisgICAgICBw cmludGZfdW5maWx0ZXJlZCAoXworCQkJICgicmVjb3JkOiByZWNvcmQgYW5k IHJldmVyc2UgZnVuY3Rpb24gaGFzIGFscmVhZHkgYmVlbiBzdGFydGVkLlxu IikpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGNoYXIgKnRtcDsK KworICAgICAgZ2RiX2lzX3JlY29yZGluZyA9IDE7CisgICAgICBwcmludGZf dW5maWx0ZXJlZCAoXworCQkJICgicmVjb3JkOiByZWNvcmQgYW5kIHJldmVy c2UgZnVuY3Rpb24gaXMgc3RhcnRlZC5cbiIpKTsKKworICAgICAgdG1wID0g Z2V0X3Byb21wdCAoKTsKKyAgICAgIHNucHJpbnRmIChyZWNvcmRfZ2RiX3By b21wdCwgMjAsICIlcyIsIHRtcCk7CisgICAgICBzZXRfcHJvbXB0IChSRUNP UkRfUkVDX1BST01QVCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorY21k X3JlY29yZF9zdG9wIChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpCit7Cisg IC8qIGNoZWNrIGV4ZWMgKi8KKyAgaWYgKCF0YXJnZXRfaGFzX2V4ZWN1dGlv bikKKyAgICB7CisgICAgICBlcnJvciAoXygicmVjb3JkOiB0aGUgcHJvZ3Jh bSBpcyBub3QgYmVpbmcgcnVuLiIpKTsKKyAgICB9CisKKyAgaWYgKCFnZGJh cmNoX3JlY29yZF9wIChjdXJyZW50X2dkYmFyY2gpKQorICAgIHsKKyAgICAg IGVycm9yIChfKCJyZWNvcmQ6IHRoZSBjdXJyZW50IGdkYmFyY2ggZG9uJ3Qg c3VwcG9ydCByZWNvcmQgZnVuY3Rpb24uIikpOworICAgIH0KKworICBpZiAo Z2RiX2lzX3JlY29yZGluZykKKyAgICB7CisgICAgICByZWNvcmRfY2xvc2Ug KCk7CisgICAgICBzZXRfcHJvbXB0IChyZWNvcmRfZ2RiX3Byb21wdCk7Cisg ICAgfQorICBlbHNlCisgICAgeworICAgICAgcHJpbnRmX3VuZmlsdGVyZWQg KF8KKwkJCSAoInJlY29yZDogcmVjb3JkIGFuZCByZXZlcnNlIGZ1bmN0aW9u IGlzIG5vdCBzdGFydGVkLlxuIikpOworICAgIH0KK30KKworc3RhdGljIHZv aWQKK2NtZF9yZXZlcnNlIChjaGFyICphcmdzLCBpbnQgZnJvbV90dHkpCit7 CisgIGlmIChnZGJfaXNfcmV2ZXJzZSkKKyAgICB7CisgICAgICBnZGJfaXNf cmV2ZXJzZSA9IDA7CisgICAgICBwcmludGZfdW5maWx0ZXJlZCAoXygicmVj b3JkOiBHREIgaXMgc2V0IHRvIG5vcm1hbCBkZWJ1ZyBtb2RlLlxuIikpOwor ICAgICAgc2V0X3Byb21wdCAoUkVDT1JEX1JFQ19QUk9NUFQpOworICAgIH0K KyAgZWxzZQorICAgIHsKKyAgICAgIGlmICghcmVjb3JkX2xpc3QpCisJewor CSAgZXJyb3IgKF8oInJlY29yZDogcmVjb3JkIGFuZCByZXZlcnNlIGZ1bmN0 aW9uIGlzIG5vdCBzdGFydGVkLiIpKTsKKwl9CisgICAgICBnZGJfaXNfcmV2 ZXJzZSA9IDE7CisgICAgICBwcmludGZfdW5maWx0ZXJlZCAoXygicmVjb3Jk OiBHREIgaXMgc2V0IHRvIHJldmVyc2UgZGVidWcgbW9kZS5cbiIpKTsKKyAg ICAgIHNldF9wcm9tcHQgKFJFQ09SRF9SRVZfUFJPTVBUKTsKKyAgICB9Cit9 CisKK3ZvaWQKK19pbml0aWFsaXplX3JlY29yZCAodm9pZCkKK3sKKyAgLyog IGluaXQgcmVjb3JkX21hc2thbGwgKi8KKyAgaWYgKHNpZ2ZpbGxzZXQgKCZy ZWNvcmRfbWFza2FsbCkgPT0gLTEpCisgICAgeworICAgICAgcGVycm9yX3dp dGhfbmFtZSAoXygic2lnZmlsbHNldCIpKTsKKyAgICB9CisKKyAgYWRkX3Nl dHNob3dfemludGVnZXJfY21kICgicmVjb3JkIiwgY2xhc3NfbWFpbnRlbmFu Y2UsICZkZWJ1Z19yZWNvcmQsCisJCQkgICAgXygiU2V0IHJlY29yZCBkZWJ1 Z2dpbmcuIiksCisJCQkgICAgXygiU2hvdyByZWNvcmQgZGVidWdnaW5nLiIp LAorCQkJICAgIF8KKwkJCSAgICAoIldoZW4gbm9uLXplcm8sIHJlY29yZCBz cGVjaWZpYyBkZWJ1Z2dpbmcgaXMgZW5hYmxlZC4iKSwKKwkJCSAgICBOVUxM LCBzaG93X2RlYnVnX3JlY29yZCwgJnNldGRlYnVnbGlzdCwKKwkJCSAgICAm c2hvd2RlYnVnbGlzdCk7CisgIGFkZF9jb20gKCJyZWNvcmQiLCBjbGFzc19v YnNjdXJlLCBjbWRfcmVjb3JkX3N0YXJ0LAorCSAgIF8oIlN0YXJ0IHRoZSBy ZWNvcmQgYW5kIHJldmVyc2UgZnVuY3Rpb24uIikpOworICBhZGRfY29tX2Fs aWFzICgicmVjIiwgInJlY29yZCIsIGNsYXNzX29ic2N1cmUsIDEpOworICBh ZGRfY29tICgic3RvcHJlY29yZCIsIGNsYXNzX29ic2N1cmUsIGNtZF9yZWNv cmRfc3RvcCwKKwkgICBfKCJTdG9wIHRoZSByZWNvcmQgYW5kIHJldmVyc2Ug ZnVuY3Rpb24uIikpOworICBhZGRfY29tX2FsaWFzICgic3JlYyIsICJzdG9w cmVjb3JkIiwgY2xhc3Nfb2JzY3VyZSwgMSk7CisgIGFkZF9jb20gKCJyZXZl cnNlIiwgY2xhc3Nfb2JzY3VyZSwgY21kX3JldmVyc2UsCisJICAgXygiU2V0 IEdEQiB0byB0aGUgcmV2ZXJzZSBkZWJ1ZyBtb2RlIG9yIHRoZSBub3JtYWwg ZGVidWcgbW9kZS4iKSk7CisgIGFkZF9jb21fYWxpYXMgKCJyZXYiLCAicmV2 ZXJzZSIsIGNsYXNzX29ic2N1cmUsIDEpOworfQotLS0gYS9nZGIvcmVjb3Jk LmgKKysrIGIvZ2RiL3JlY29yZC5oCkBAIC0wLDAgKzEsODEgQEAKKy8qIFJl Y29yZCB2MC4xLjIgZm9yIEdEQiwgdGhlIEdOVSBkZWJ1Z2dlci4KKyAgIFdy aXR0ZW4gYnkgSHVpIFpodSA8dGVhd2F0ZXJAZ21haWwuY29tPgorCisgICBU aGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBv ZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4gICovCisKKyNpZm5kZWYgX1JFQ09SRF9IXworI2RlZmluZSBfUkVD T1JEX0hfCisKK3R5cGVkZWYgc3RydWN0IHJlY29yZF9yZWdfcworeworICBp bnQgbnVtOworICBnZGJfYnl0ZSAqdmFsOworfSByZWNvcmRfcmVnX3Q7CisK K3R5cGVkZWYgc3RydWN0IHJlY29yZF9tZW1fcworeworICBDT1JFX0FERFIg YWRkcjsKKyAgaW50IGxlbjsKKyAgZ2RiX2J5dGUgKnZhbDsKK30gcmVjb3Jk X21lbV90OworCitlbnVtIHJlY29yZF90eXBlIHsKKyAgcmVjb3JkX2VuZCA9 IDAsCisgIHJlY29yZF9yZWcsCisgIHJlY29yZF9tZW0KK307CisKKy8qIFRo aXMgaXMgdGhlIGNvcmUgc3RydWN0IG9mIHJlY29yZCBmdW5jdGlvbi4KKyAg IEFuIGVudGl0eSBvZiByZWNvcmRfdCBpcyBhIHJlY29yZCBvZiB0aGUgdmFs dWUgY2hhbmdlIG9mIGEgcmVnaXN0ZXIKKyAgICgicmVjb3JkX3JlZyIpIG9y IGEgcGFydCBvZiBtZW1vcnkgKCJyZWNvcmRfbWVtIikuIEFuZCBFYWNoIGlu c3RydWN0aW9uIG11c3QKKyAgIGhhcyBhIHJlY29yZF90ICgicmVjb3JkX2Vu ZCIpIHRoYXQgcG9pbnQgb3V0IHRoaXMgaXMgdGhlIGxhc3QgcmVjb3JkX3Qg b2YKKyAgIHRoaXMgaW5zdHJ1Y3Rpb24uCisgICBFYWNoIHJlY29yZF90IGlz IGxpbmtlZCB0byAicmVjb3JkX2xpc3QiIGJ5ICJwcmV2IiBhbmQgIm5leHQi LiAKKyAqLwordHlwZWRlZiBzdHJ1Y3QgcmVjb3JkX3MKK3sKKyAgc3RydWN0 IHJlY29yZF9zICpwcmV2OworICBzdHJ1Y3QgcmVjb3JkX3MgKm5leHQ7Cisg IGVudW0gcmVjb3JkX3R5cGUgdHlwZTsKKyAgdW5pb24KKyAgeworICAgIC8q IHJlZyAqLworICAgIHJlY29yZF9yZWdfdCByZWc7CisgICAgLyogbWVtICov CisgICAgcmVjb3JkX21lbV90IG1lbTsKKyAgICAvKiBlbmQgKi8KKyAgICBp bnQgbmVlZF9kYXNtOworICB9IHU7Cit9IHJlY29yZF90OworCitleHRlcm4g cmVjb3JkX3QgKnJlY29yZF9saXN0OworZXh0ZXJuIHJlY29yZF90ICpyZWNv cmRfYXJjaF9saXN0X2hlYWQ7CitleHRlcm4gcmVjb3JkX3QgKnJlY29yZF9h cmNoX2xpc3RfdGFpbDsKK2V4dGVybiBpbnQgcmVjb3JkX2FyY2hfbmVlZF9k YXNtOworZXh0ZXJuIHVuc2lnbmVkIGludCBnZGJfaXNfcmVjb3JkaW5nOwor ZXh0ZXJuIGludCBnZGJfaXNfcmV2ZXJzZTsKK2V4dGVybiBpbnQgZGVidWdf cmVjb3JkOworZXh0ZXJuIGludCByZWNvcmRfd2FpdF9zdGVwOworZXh0ZXJu IGludCByZWNvcmRfZGVsYXlfc2xvdDsKK2V4dGVybiBzdHJ1Y3QgcmVnY2Fj aGUgKnJlY29yZF9yZWdjYWNoZTsKKworZXh0ZXJuIHZvaWQgcmVjb3JkX21l c3NhZ2UgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoKTsKK2V4dGVybiBpbnQg cmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChpbnQgbnVtKTsKK2V4dGVybiBp bnQgcmVjb3JkX2FyY2hfbGlzdF9hZGRfbWVtIChDT1JFX0FERFIgYWRkciwg aW50IGxlbik7CitleHRlcm4gaW50IHJlY29yZF9hcmNoX2xpc3RfYWRkX2Vu ZCAoaW50IG5lZWRfZGFzbSk7CitleHRlcm4gcHRpZF90IHJlY29yZF93YWl0 IChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwgcHRpZF90IHB0aWQsIHN0cnVj dCB0YXJnZXRfd2FpdHN0YXR1cyAqc3RhdHVzKTsKK2V4dGVybiB2b2lkIHJl Y29yZF9jbG9zZSAodm9pZCk7CisjZW5kaWYgLy9fUkVDT1JEX0hfCi0tLSBh L2dkYi90YXJnZXQuYworKysgYi9nZGIvdGFyZ2V0LmMKQEAgLTM5LDYgKzM5 LDcgQEAKICNpbmNsdWRlICJnZGJjb3JlLmgiCiAjaW5jbHVkZSAiZXhjZXB0 aW9ucy5oIgogI2luY2x1ZGUgInRhcmdldC1kZXNjcmlwdGlvbnMuaCIKKyNp bmNsdWRlICJyZWNvcmQuaCIKIAogc3RhdGljIHZvaWQgdGFyZ2V0X2luZm8g KGNoYXIgKiwgaW50KTsKIApAQCAtMTcwMiw2ICsxNzAzLDE2IEBAIHRhcmdl dF9mb2xsb3dfZm9yayAoaW50IGZvbGxvd19jaGlsZCkKIAkJICAiY291bGQg bm90IGZpbmQgYSB0YXJnZXQgdG8gZm9sbG93IGZvcmsiKTsKIH0KIAordm9p ZAordGFyZ2V0X21vdXJuX2luZmVyaW9yICh2b2lkKQoreworICBpZiAoZ2Ri X2lzX3JlY29yZGluZykKKyAgICB7CisgICAgICByZWNvcmRfY2xvc2UgKCk7 CisgICAgfQorICAoKmN1cnJlbnRfdGFyZ2V0LnRvX21vdXJuX2luZmVyaW9y KSAoKTsKK30KKwogLyogTG9vayBmb3IgYSB0YXJnZXQgd2hpY2ggY2FuIGRl c2NyaWJlIGFyY2hpdGVjdHVyYWwgZmVhdHVyZXMsIHN0YXJ0aW5nCiAgICBm cm9tIFRBUkdFVC4gIElmIHdlIGZpbmQgb25lLCByZXR1cm4gaXRzIGRlc2Ny aXB0aW9uLiAgKi8KIApAQCAtMjA2NSw2ICsyMDc2LDEwIEBAIGRlYnVnX3Rv X2Nsb3NlIChpbnQgcXVpdHRpbmcpCiB2b2lkCiB0YXJnZXRfY2xvc2UgKHN0 cnVjdCB0YXJnZXRfb3BzICp0YXJnLCBpbnQgcXVpdHRpbmcpCiB7CisgIGlm IChnZGJfaXNfcmVjb3JkaW5nKQorICAgIHsKKyAgICAgIHJlY29yZF9jbG9z ZSAoKTsKKyAgICB9CiAgIGlmICh0YXJnLT50b194Y2xvc2UgIT0gTlVMTCkK ICAgICB0YXJnLT50b194Y2xvc2UgKHRhcmcsIHF1aXR0aW5nKTsKICAgZWxz ZSBpZiAodGFyZy0+dG9fY2xvc2UgIT0gTlVMTCkKLS0tIGEvZ2RiL3Rhcmdl dC5oCisrKyBiL2dkYi90YXJnZXQuaApAQCAtODYxLDggKzg2MSw3IEBAIGlu dCB0YXJnZXRfZm9sbG93X2ZvcmsgKGludCBmb2xsb3dfY2hpbGQKIAogLyog VGhlIGluZmVyaW9yIHByb2Nlc3MgaGFzIGRpZWQuICBEbyB3aGF0IGlzIHJp Z2h0LiAgKi8KIAotI2RlZmluZQl0YXJnZXRfbW91cm5faW5mZXJpb3IoKQlc Ci0gICAgICgqY3VycmVudF90YXJnZXQudG9fbW91cm5faW5mZXJpb3IpICgp CitleHRlcm4gdm9pZCB0YXJnZXRfbW91cm5faW5mZXJpb3IgKHZvaWQpOwog CiAvKiBEb2VzIHRhcmdldCBoYXZlIGVub3VnaCBkYXRhIHRvIGRvIGEgcnVu IG9yIGF0dGFjaCBjb21tYW5kPyAqLwogCg== ------=_Part_4705_28736715.1208931369182--