From mboxrd@z Thu Jan 1 00:00:00 1970 From: Simon Waterman Subject: [PATCH RFC 3/6] qemu-xen-trad: sasl: implement SASL auth Date: Tue, 16 May 2017 00:03:40 +0100 Message-ID: <1494889423-4212-4-git-send-email-watermansrdev@gmail.com> References: <1494889423-4212-1-git-send-email-watermansrdev@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1494889423-4212-1-git-send-email-watermansrdev@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: dunlapg@umich.edu, ian.jackson@eu.citrix.com, Simon Waterman List-Id: xen-devel@lists.xenproject.org VGFrZW4gYWxtb3N0IGRpcmVjdGx5IGZyb20gdXBzdHJlYW0gUUVNVSB3aXRoIG1pbm9yIGNoYW5n ZXM6CjEuIFJlcGxhY2UgZ19mcmVlIGV0Yy4gd2l0aCBzdGFuZGFyZCBlcXVpdmFsZW50cwoyLiBS ZW1vdmUgQUNMIHN1cHBvcnQsIHdoaWNoIGlzIG5vdCBpbiBxZW11LXhlbi10cmFkaXRpb25hbCB5 ZXQuCgpTaWduZWQtb2ZmLWJ5OiBTaW1vbiBXYXRlcm1hbiA8d2F0ZXJtYW5zcmRldkBnbWFpbC5j b20+Ci0tLQogdm5jLWF1dGgtc2FzbC5jIHwgNjEzICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNjEzIGluc2Vy dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB2bmMtYXV0aC1zYXNsLmMKCmRpZmYgLS1naXQg YS92bmMtYXV0aC1zYXNsLmMgYi92bmMtYXV0aC1zYXNsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uZTNkMmVmYgotLS0gL2Rldi9udWxsCisrKyBiL3ZuYy1hdXRoLXNhc2wu YwpAQCAtMCwwICsxLDYxMyBAQAorLyoKKyAqIFFFTVUgVk5DIGRpc3BsYXkgZHJpdmVyOiBTQVNM IGF1dGggcHJvdG9jb2wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jCisg KgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu eSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1p dGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz aCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwor ICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u czoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS CisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNP RlRXQVJFLgorICovCisKKyNpbmNsdWRlICJ2bmMuaCIKKworLyogTWF4IGFtb3VudCBvZiBkYXRh IHdlIHNlbmQvcmVjdiBmb3IgU0FTTCBzdGVwcyB0byBwcmV2ZW50IERPUyAqLworI2RlZmluZSBT QVNMX0RBVEFfTUFYX0xFTiAoMTAyNCAqIDEwMjQpCisKKwordm9pZCB2bmNfc2FzbF9jbGllbnRf Y2xlYW51cChWbmNTdGF0ZSAqdnMpCit7CisgICAgaWYgKHZzLT5zYXNsLmNvbm4pIHsKKyAgICAg ICAgdnMtPnNhc2wucnVuU1NGID0gZmFsc2U7CisgICAgICAgIHZzLT5zYXNsLndhbnRTU0YgPSBm YWxzZTsKKyAgICAgICAgdnMtPnNhc2wud2FpdFdyaXRlU1NGID0gMDsKKyAgICAgICAgdnMtPnNh c2wuZW5jb2RlZExlbmd0aCA9IHZzLT5zYXNsLmVuY29kZWRPZmZzZXQgPSAwOworICAgICAgICB2 cy0+c2FzbC5lbmNvZGVkID0gTlVMTDsKKyAgICAgICAgZnJlZSh2cy0+c2FzbC51c2VybmFtZSk7 CisgICAgICAgIGZyZWUodnMtPnNhc2wubWVjaGxpc3QpOworICAgICAgICB2cy0+c2FzbC51c2Vy bmFtZSA9IHZzLT5zYXNsLm1lY2hsaXN0ID0gTlVMTDsKKyAgICAgICAgc2FzbF9kaXNwb3NlKCZ2 cy0+c2FzbC5jb25uKTsKKyAgICAgICAgdnMtPnNhc2wuY29ubiA9IE5VTEw7CisgICAgfQorfQor CisKK2xvbmcgdm5jX2NsaWVudF93cml0ZV9zYXNsKFZuY1N0YXRlICp2cykKK3sKKyAgICBsb25n IHJldDsKKworICAgIFZOQ19ERUJVRygiV3JpdGUgU0FTTDogUGVuZGluZyBvdXRwdXQgJXAgc2l6 ZSAlemQgb2Zmc2V0ICV6ZCAiCisgICAgICAgICAgICAgICJFbmNvZGVkOiAlcCBzaXplICVkIG9m ZnNldCAlZFxuIiwKKyAgICAgICAgICAgICAgdnMtPm91dHB1dC5idWZmZXIsIHZzLT5vdXRwdXQu Y2FwYWNpdHksIHZzLT5vdXRwdXQub2Zmc2V0LAorICAgICAgICAgICAgICB2cy0+c2FzbC5lbmNv ZGVkLCB2cy0+c2FzbC5lbmNvZGVkTGVuZ3RoLCB2cy0+c2FzbC5lbmNvZGVkT2Zmc2V0KTsKKwor ICAgIGlmICghdnMtPnNhc2wuZW5jb2RlZCkgeworICAgICAgICBpbnQgZXJyOworICAgICAgICBl cnIgPSBzYXNsX2VuY29kZSh2cy0+c2FzbC5jb25uLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAoY2hhciAqKXZzLT5vdXRwdXQuYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2 cy0+b3V0cHV0Lm9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIg KiopJnZzLT5zYXNsLmVuY29kZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZ2cy0+c2Fz bC5lbmNvZGVkTGVuZ3RoKTsKKyAgICAgICAgaWYgKGVyciAhPSBTQVNMX09LKQorICAgICAgICAg ICAgcmV0dXJuIHZuY19jbGllbnRfaW9fZXJyb3IodnMsIC0xLCBFSU8pOworCisgICAgICAgIHZz LT5zYXNsLmVuY29kZWRPZmZzZXQgPSAwOworICAgIH0KKworICAgIHJldCA9IHZuY19jbGllbnRf d3JpdGVfYnVmKHZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzLT5zYXNsLmVu Y29kZWQgKyB2cy0+c2FzbC5lbmNvZGVkT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZzLT5zYXNsLmVuY29kZWRMZW5ndGggLSB2cy0+c2FzbC5lbmNvZGVkT2Zmc2V0KTsK KyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB2cy0+c2FzbC5lbmNvZGVk T2Zmc2V0ICs9IHJldDsKKyAgICBpZiAodnMtPnNhc2wuZW5jb2RlZE9mZnNldCA9PSB2cy0+c2Fz bC5lbmNvZGVkTGVuZ3RoKSB7CisgICAgICAgIHZzLT5vdXRwdXQub2Zmc2V0ID0gMDsKKyAgICAg ICAgdnMtPnNhc2wuZW5jb2RlZCA9IE5VTEw7CisgICAgICAgIHZzLT5zYXNsLmVuY29kZWRPZmZz ZXQgPSB2cy0+c2FzbC5lbmNvZGVkTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICAvKiBDYW4ndCBt ZXJnZSB0aGlzIGJsb2NrIHdpdGggb25lIGFib3ZlLCBiZWNhdXNlCisgICAgICogc29tZW9uZSBt aWdodCBoYXZlIHdyaXR0ZW4gbW9yZSB1bmVuY3J5cHRlZAorICAgICAqIGRhdGEgaW4gdnMtPm91 dHB1dCB3aGlsZSB3ZSB3ZXJlIHByb2Nlc3NpbmcKKyAgICAgKiBTQVNMIGVuY29kZWQgb3V0cHV0 CisgICAgICovCisgICAgaWYgKHZzLT5vdXRwdXQub2Zmc2V0ID09IDApIHsKKyAgICAgICAgcWVt dV9zZXRfZmRfaGFuZGxlcih2cy0+Y3NvY2ssIHZuY19jbGllbnRfcmVhZCwgTlVMTCwgdnMpOwor ICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKworbG9uZyB2bmNfY2xpZW50X3JlYWRfc2Fz bChWbmNTdGF0ZSAqdnMpCit7CisgICAgbG9uZyByZXQ7CisgICAgdWludDhfdCBlbmNvZGVkWzQw OTZdOworICAgIGNvbnN0IGNoYXIgKmRlY29kZWQ7CisgICAgdW5zaWduZWQgaW50IGRlY29kZWRM ZW47CisgICAgaW50IGVycjsKKworICAgIHJldCA9IHZuY19jbGllbnRfcmVhZF9idWYodnMsIGVu Y29kZWQsIHNpemVvZihlbmNvZGVkKSk7CisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiAw OworCisgICAgZXJyID0gc2FzbF9kZWNvZGUodnMtPnNhc2wuY29ubiwKKyAgICAgICAgICAgICAg ICAgICAgICAoY2hhciAqKWVuY29kZWQsIHJldCwKKyAgICAgICAgICAgICAgICAgICAgICAmZGVj b2RlZCwgJmRlY29kZWRMZW4pOworCisgICAgaWYgKGVyciAhPSBTQVNMX09LKQorICAgICAgICBy ZXR1cm4gdm5jX2NsaWVudF9pb19lcnJvcih2cywgLTEsIC1FSU8pOworICAgIFZOQ19ERUJVRygi UmVhZCBTQVNMIEVuY29kZWQgJXAgc2l6ZSAlbGQgRGVjb2RlZCAlcCBzaXplICVkXG4iLAorICAg ICAgICAgICAgICBlbmNvZGVkLCByZXQsIGRlY29kZWQsIGRlY29kZWRMZW4pOworICAgIGJ1ZmZl cl9yZXNlcnZlKCZ2cy0+aW5wdXQsIGRlY29kZWRMZW4pOworICAgIGJ1ZmZlcl9hcHBlbmQoJnZz LT5pbnB1dCwgZGVjb2RlZCwgZGVjb2RlZExlbik7CisgICAgcmV0dXJuIGRlY29kZWRMZW47Cit9 CisKKworc3RhdGljIGludCB2bmNfYXV0aF9zYXNsX2NoZWNrX2FjY2VzcyhWbmNTdGF0ZSAqdnMp Cit7CisgICAgY29uc3Qgdm9pZCAqdmFsOworICAgIGludCBlcnI7CisgICAgaW50IGFsbG93Owor CisgICAgZXJyID0gc2FzbF9nZXRwcm9wKHZzLT5zYXNsLmNvbm4sIFNBU0xfVVNFUk5BTUUsICZ2 YWwpOworICAgIGlmIChlcnIgIT0gU0FTTF9PSykgeworICAgICAgICBWTkNfREVCVUcoImNhbm5v dCBxdWVyeSBTQVNMIHVzZXJuYW1lIG9uIGNvbm5lY3Rpb24gJWQgKCVzKSwgZGVueWluZyBhY2Nl c3NcbiIsCisgICAgICAgICAgICAgICAgICBlcnIsIHNhc2xfZXJyc3RyaW5nKGVyciwgTlVMTCwg TlVMTCkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICh2YWwgPT0gTlVMTCkg eworICAgICAgICBWTkNfREVCVUcoIm5vIGNsaWVudCB1c2VybmFtZSB3YXMgZm91bmQsIGRlbnlp bmcgYWNjZXNzXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBWTkNfREVCVUco IlNBU0wgY2xpZW50IHVzZXJuYW1lICVzXG4iLCAoY29uc3QgY2hhciAqKXZhbCk7CisKKyAgICB2 cy0+c2FzbC51c2VybmFtZSA9IHN0cmR1cCgoY29uc3QgY2hhciopdmFsKTsKKworICAgIHJldHVy biAwOworfQorCitzdGF0aWMgaW50IHZuY19hdXRoX3Nhc2xfY2hlY2tfc3NmKFZuY1N0YXRlICp2 cykKK3sKKyAgICBjb25zdCB2b2lkICp2YWw7CisgICAgaW50IGVyciwgc3NmOworCisgICAgaWYg KCF2cy0+c2FzbC53YW50U1NGKQorICAgICAgICByZXR1cm4gMTsKKworICAgIGVyciA9IHNhc2xf Z2V0cHJvcCh2cy0+c2FzbC5jb25uLCBTQVNMX1NTRiwgJnZhbCk7CisgICAgaWYgKGVyciAhPSBT QVNMX09LKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHNzZiA9ICooY29uc3QgaW50ICopdmFs OworICAgIFZOQ19ERUJVRygibmVnb3RpYXRlZCBhbiBTU0Ygb2YgJWRcbiIsIHNzZik7CisgICAg aWYgKHNzZiA8IDU2KQorICAgICAgICByZXR1cm4gMDsgLyogNTYgaXMgZ29vZCBmb3IgS2VyYmVy b3MgKi8KKworICAgIC8qIE9ubHkgc2V0dXAgZm9yIHJlYWQgaW5pdGlhbGx5LCBiZWNhdXNlIHdl J3JlIGFib3V0IHRvIHNlbmQgYW4gUlBDCisgICAgICogcmVwbHkgd2hpY2ggbXVzdCBiZSBpbiBw bGFpbiB0ZXh0LiBXaGVuIHRoZSBuZXh0IGluY29taW5nIFJQQworICAgICAqIGFycml2ZXMsIHdl J2xsIHN3aXRjaCBvbiB3cml0ZXMgdG9vCisgICAgICoKKyAgICAgKiBjZiBxZW11ZENsaWVudFJl YWRTQVNMICBpbiBxZW11ZC5jCisgICAgICovCisgICAgdnMtPnNhc2wucnVuU1NGID0gMTsKKwor ICAgIC8qIFdlIGhhdmUgYSBTU0YgdGhhdCdzIGdvb2QgZW5vdWdoICovCisgICAgcmV0dXJuIDE7 Cit9CisKKy8qCisgKiBTdGVwIE1zZworICoKKyAqIElucHV0IGZyb20gY2xpZW50OgorICoKKyAq IHUzMiBjbGllbnRpbi1sZW5ndGgKKyAqIHU4LWFycmF5IGNsaWVudGluLXN0cmluZworICoKKyAq IE91dHB1dCB0byBjbGllbnQ6CisgKgorICogdTMyIHNlcnZlcm91dC1sZW5ndGgKKyAqIHU4LWFy cmF5IHNlcnZlcm91dC1zdHJpbgorICogdTggY29udGludWUKKyAqLworCitzdGF0aWMgaW50IHBy b3RvY29sX2NsaWVudF9hdXRoX3Nhc2xfc3RlcF9sZW4oVm5jU3RhdGUgKnZzLCB1aW50OF90ICpk YXRhLCBzaXplX3QgbGVuKTsKKworc3RhdGljIGludCBwcm90b2NvbF9jbGllbnRfYXV0aF9zYXNs X3N0ZXAoVm5jU3RhdGUgKnZzLCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVuKQoreworICAgIHVp bnQzMl90IGRhdGFsZW4gPSBsZW47CisgICAgY29uc3QgY2hhciAqc2VydmVyb3V0OworICAgIHVu c2lnbmVkIGludCBzZXJ2ZXJvdXRsZW47CisgICAgaW50IGVycjsKKyAgICBjaGFyICpjbGllbnRk YXRhID0gTlVMTDsKKworICAgIC8qIE5CLCBkaXN0aW5jdGlvbiBvZiBOVUxMIHZzICIiIGlzICpj cml0aWNhbCogaW4gU0FTTCAqLworICAgIGlmIChkYXRhbGVuKSB7CisgICAgICAgIGNsaWVudGRh dGEgPSAoY2hhciopZGF0YTsKKyAgICAgICAgY2xpZW50ZGF0YVtkYXRhbGVuLTFdID0gJ1wwJzsg LyogV2lyZSBpbmNsdWRlcyAnXDAnLCBidXQgbWFrZSBzdXJlICovCisgICAgICAgIGRhdGFsZW4t LTsgLyogRG9uJ3QgY291bnQgTlVMTCBieXRlIHdoZW4gcGFzc2luZyB0byBfc3RhcnQoKSAqLwor ICAgIH0KKworICAgIFZOQ19ERUJVRygiU3RlcCB1c2luZyBTQVNMIERhdGEgJXAgKCVkIGJ5dGVz KVxuIiwKKyAgICAgICAgICAgICAgY2xpZW50ZGF0YSwgZGF0YWxlbik7CisgICAgZXJyID0gc2Fz bF9zZXJ2ZXJfc3RlcCh2cy0+c2FzbC5jb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2xpZW50ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFsZW4sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAmc2VydmVyb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnNlcnZlcm91dGxlbik7CisgICAgaWYgKGVyciAhPSBTQVNMX09LICYmCisgICAgICAgIGVy ciAhPSBTQVNMX0NPTlRJTlVFKSB7CisgICAgICAgIFZOQ19ERUJVRygic2FzbCBzdGVwIGZhaWxl ZCAlZCAoJXMpXG4iLAorICAgICAgICAgICAgICAgICAgZXJyLCBzYXNsX2VycmRldGFpbCh2cy0+ c2FzbC5jb25uKSk7CisgICAgICAgIHNhc2xfZGlzcG9zZSgmdnMtPnNhc2wuY29ubik7CisgICAg ICAgIHZzLT5zYXNsLmNvbm4gPSBOVUxMOworICAgICAgICBnb3RvIGF1dGhhYm9ydDsKKyAgICB9 CisKKyAgICBpZiAoc2VydmVyb3V0bGVuID4gU0FTTF9EQVRBX01BWF9MRU4pIHsKKyAgICAgICAg Vk5DX0RFQlVHKCJzYXNsIHN0ZXAgcmVwbHkgZGF0YSB0b28gbG9uZyAlZFxuIiwKKyAgICAgICAg ICAgICAgICAgIHNlcnZlcm91dGxlbik7CisgICAgICAgIHNhc2xfZGlzcG9zZSgmdnMtPnNhc2wu Y29ubik7CisgICAgICAgIHZzLT5zYXNsLmNvbm4gPSBOVUxMOworICAgICAgICBnb3RvIGF1dGhh Ym9ydDsKKyAgICB9CisKKyAgICBWTkNfREVCVUcoIlNBU0wgcmV0dXJuIGRhdGEgJWQgYnl0ZXMs IG5pbDsgJWRcbiIsCisgICAgICAgICAgICAgIHNlcnZlcm91dGxlbiwgc2VydmVyb3V0ID8gMCA6 IDEpOworCisgICAgaWYgKHNlcnZlcm91dGxlbikgeworICAgICAgICB2bmNfd3JpdGVfdTMyKHZz LCBzZXJ2ZXJvdXRsZW4gKyAxKTsKKyAgICAgICAgdm5jX3dyaXRlKHZzLCBzZXJ2ZXJvdXQsIHNl cnZlcm91dGxlbiArIDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZuY193cml0ZV91MzIodnMs IDApOworICAgIH0KKworICAgIC8qIFdoZXRoZXIgYXV0aCBpcyBjb21wbGV0ZSAqLworICAgIHZu Y193cml0ZV91OCh2cywgZXJyID09IFNBU0xfQ09OVElOVUUgPyAwIDogMSk7CisKKyAgICBpZiAo ZXJyID09IFNBU0xfQ09OVElOVUUpIHsKKyAgICAgICAgVk5DX0RFQlVHKCIlcyIsICJBdXRoZW50 aWNhdGlvbiBtdXN0IGNvbnRpbnVlXG4iKTsKKyAgICAgICAgLyogV2FpdCBmb3Igc3RlcCBsZW5n dGggKi8KKyAgICAgICAgdm5jX3JlYWRfd2hlbih2cywgcHJvdG9jb2xfY2xpZW50X2F1dGhfc2Fz bF9zdGVwX2xlbiwgNCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF2bmNfYXV0aF9zYXNs X2NoZWNrX3NzZih2cykpIHsKKyAgICAgICAgICAgIFZOQ19ERUJVRygiQXV0aGVudGljYXRpb24g cmVqZWN0ZWQgZm9yIHdlYWsgU1NGICVkXG4iLCB2cy0+Y3NvY2spOworICAgICAgICAgICAgZ290 byBhdXRocmVqZWN0OworICAgICAgICB9CisKKyAgICAgICAgLyogQ2hlY2sgdXNlcm5hbWUgd2hp dGVsaXN0IEFDTCAqLworICAgICAgICBpZiAodm5jX2F1dGhfc2FzbF9jaGVja19hY2Nlc3ModnMp IDwgMCkgeworICAgICAgICAgICAgVk5DX0RFQlVHKCJBdXRoZW50aWNhdGlvbiByZWplY3RlZCBm b3IgQUNMICVkXG4iLCB2cy0+Y3NvY2spOworICAgICAgICAgICAgZ290byBhdXRocmVqZWN0Owor ICAgICAgICB9CisKKyAgICAgICAgVk5DX0RFQlVHKCJBdXRoZW50aWNhdGlvbiBzdWNjZXNzZnVs ICVkXG4iLCB2cy0+Y3NvY2spOworICAgICAgICB2bmNfd3JpdGVfdTMyKHZzLCAwKTsgLyogQWNj ZXB0IGF1dGggKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogRGVsYXkgd3JpdGluZyBpbiBTU0Yg ZW5jb2RlZCBtb2RlIHVudGlsIHBlbmRpbmcgb3V0cHV0CisgICAgICAgICAqIGJ1ZmZlciBpcyB3 cml0dGVuCisgICAgICAgICAqLworICAgICAgICBpZiAodnMtPnNhc2wucnVuU1NGKQorICAgICAg ICAgICAgdnMtPnNhc2wud2FpdFdyaXRlU1NGID0gdnMtPm91dHB1dC5vZmZzZXQ7CisgICAgICAg IHN0YXJ0X2NsaWVudF9pbml0KHZzKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKworIGF1dGhy ZWplY3Q6CisgICAgdm5jX3dyaXRlX3UzMih2cywgMSk7IC8qIFJlamVjdCBhdXRoICovCisgICAg dm5jX3dyaXRlX3UzMih2cywgc2l6ZW9mKCJBdXRoZW50aWNhdGlvbiBmYWlsZWQiKSk7CisgICAg dm5jX3dyaXRlKHZzLCAiQXV0aGVudGljYXRpb24gZmFpbGVkIiwgc2l6ZW9mKCJBdXRoZW50aWNh dGlvbiBmYWlsZWQiKSk7CisgICAgdm5jX2ZsdXNoKHZzKTsKKyAgICB2bmNfY2xpZW50X2Vycm9y KHZzKTsKKyAgICByZXR1cm4gLTE7CisKKyBhdXRoYWJvcnQ6CisgICAgdm5jX2NsaWVudF9lcnJv cih2cyk7CisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHByb3RvY29sX2NsaWVudF9h dXRoX3Nhc2xfc3RlcF9sZW4oVm5jU3RhdGUgKnZzLCB1aW50OF90ICpkYXRhLCBzaXplX3QgbGVu KQoreworICAgIHVpbnQzMl90IHN0ZXBsZW4gPSByZWFkX3UzMihkYXRhLCAwKTsKKyAgICBWTkNf REVCVUcoIkdvdCBjbGllbnQgc3RlcCBsZW4gJWRcbiIsIHN0ZXBsZW4pOworICAgIGlmIChzdGVw bGVuID4gU0FTTF9EQVRBX01BWF9MRU4pIHsKKyAgICAgICAgVk5DX0RFQlVHKCJUb28gbXVjaCBT QVNMIGRhdGEgJWRcbiIsIHN0ZXBsZW4pOworICAgICAgICB2bmNfY2xpZW50X2Vycm9yKHZzKTsK KyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChzdGVwbGVuID09IDApCisgICAg ICAgIHJldHVybiBwcm90b2NvbF9jbGllbnRfYXV0aF9zYXNsX3N0ZXAodnMsIE5VTEwsIDApOwor ICAgIGVsc2UKKyAgICAgICAgdm5jX3JlYWRfd2hlbih2cywgcHJvdG9jb2xfY2xpZW50X2F1dGhf c2FzbF9zdGVwLCBzdGVwbGVuKTsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIFN0YXJ0IE1z ZworICoKKyAqIElucHV0IGZyb20gY2xpZW50OgorICoKKyAqIHUzMiBjbGllbnRpbi1sZW5ndGgK KyAqIHU4LWFycmF5IGNsaWVudGluLXN0cmluZworICoKKyAqIE91dHB1dCB0byBjbGllbnQ6Cisg KgorICogdTMyIHNlcnZlcm91dC1sZW5ndGgKKyAqIHU4LWFycmF5IHNlcnZlcm91dC1zdHJpbgor ICogdTggY29udGludWUKKyAqLworCisjZGVmaW5lIFNBU0xfREFUQV9NQVhfTEVOICgxMDI0ICog MTAyNCkKKworc3RhdGljIGludCBwcm90b2NvbF9jbGllbnRfYXV0aF9zYXNsX3N0YXJ0KFZuY1N0 YXRlICp2cywgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKyAgICB1aW50MzJfdCBkYXRh bGVuID0gbGVuOworICAgIGNvbnN0IGNoYXIgKnNlcnZlcm91dDsKKyAgICB1bnNpZ25lZCBpbnQg c2VydmVyb3V0bGVuOworICAgIGludCBlcnI7CisgICAgY2hhciAqY2xpZW50ZGF0YSA9IE5VTEw7 CisKKyAgICAvKiBOQiwgZGlzdGluY3Rpb24gb2YgTlVMTCB2cyAiIiBpcyAqY3JpdGljYWwqIGlu IFNBU0wgKi8KKyAgICBpZiAoZGF0YWxlbikgeworICAgICAgICBjbGllbnRkYXRhID0gKGNoYXIq KWRhdGE7CisgICAgICAgIGNsaWVudGRhdGFbZGF0YWxlbi0xXSA9ICdcMCc7IC8qIFNob3VsZCBi ZSBvbiB3aXJlLCBidXQgbWFrZSBzdXJlICovCisgICAgICAgIGRhdGFsZW4tLTsgLyogRG9uJ3Qg Y291bnQgTlVMTCBieXRlIHdoZW4gcGFzc2luZyB0byBfc3RhcnQoKSAqLworICAgIH0KKworICAg IFZOQ19ERUJVRygiU3RhcnQgU0FTTCBhdXRoIHdpdGggbWVjaGFuaXNtICVzLiBEYXRhICVwICgl ZCBieXRlcylcbiIsCisgICAgICAgICAgICAgIHZzLT5zYXNsLm1lY2hsaXN0LCBjbGllbnRkYXRh LCBkYXRhbGVuKTsKKyAgICBlcnIgPSBzYXNsX3NlcnZlcl9zdGFydCh2cy0+c2FzbC5jb25uLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzLT5zYXNsLm1lY2hsaXN0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNsaWVudGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGF0YWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2VydmVyb3V0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZzZXJ2ZXJvdXRsZW4pOworICAgIGlmIChlcnIgIT0g U0FTTF9PSyAmJgorICAgICAgICBlcnIgIT0gU0FTTF9DT05USU5VRSkgeworICAgICAgICBWTkNf REVCVUcoInNhc2wgc3RhcnQgZmFpbGVkICVkICglcylcbiIsCisgICAgICAgICAgICAgICAgICBl cnIsIHNhc2xfZXJyZGV0YWlsKHZzLT5zYXNsLmNvbm4pKTsKKyAgICAgICAgc2FzbF9kaXNwb3Nl KCZ2cy0+c2FzbC5jb25uKTsKKyAgICAgICAgdnMtPnNhc2wuY29ubiA9IE5VTEw7CisgICAgICAg IGdvdG8gYXV0aGFib3J0OworICAgIH0KKyAgICBpZiAoc2VydmVyb3V0bGVuID4gU0FTTF9EQVRB X01BWF9MRU4pIHsKKyAgICAgICAgVk5DX0RFQlVHKCJzYXNsIHN0YXJ0IHJlcGx5IGRhdGEgdG9v IGxvbmcgJWRcbiIsCisgICAgICAgICAgICAgICAgICBzZXJ2ZXJvdXRsZW4pOworICAgICAgICBz YXNsX2Rpc3Bvc2UoJnZzLT5zYXNsLmNvbm4pOworICAgICAgICB2cy0+c2FzbC5jb25uID0gTlVM TDsKKyAgICAgICAgZ290byBhdXRoYWJvcnQ7CisgICAgfQorCisgICAgVk5DX0RFQlVHKCJTQVNM IHJldHVybiBkYXRhICVkIGJ5dGVzLCBuaWw7ICVkXG4iLAorICAgICAgICAgICAgICBzZXJ2ZXJv dXRsZW4sIHNlcnZlcm91dCA/IDAgOiAxKTsKKworICAgIGlmIChzZXJ2ZXJvdXRsZW4pIHsKKyAg ICAgICAgdm5jX3dyaXRlX3UzMih2cywgc2VydmVyb3V0bGVuICsgMSk7CisgICAgICAgIHZuY193 cml0ZSh2cywgc2VydmVyb3V0LCBzZXJ2ZXJvdXRsZW4gKyAxKTsKKyAgICB9IGVsc2UgeworICAg ICAgICB2bmNfd3JpdGVfdTMyKHZzLCAwKTsKKyAgICB9CisKKyAgICAvKiBXaGV0aGVyIGF1dGgg aXMgY29tcGxldGUgKi8KKyAgICB2bmNfd3JpdGVfdTgodnMsIGVyciA9PSBTQVNMX0NPTlRJTlVF ID8gMCA6IDEpOworCisgICAgaWYgKGVyciA9PSBTQVNMX0NPTlRJTlVFKSB7CisgICAgICAgIFZO Q19ERUJVRygiJXMiLCAiQXV0aGVudGljYXRpb24gbXVzdCBjb250aW51ZVxuIik7CisgICAgICAg IC8qIFdhaXQgZm9yIHN0ZXAgbGVuZ3RoICovCisgICAgICAgIHZuY19yZWFkX3doZW4odnMsIHBy b3RvY29sX2NsaWVudF9hdXRoX3Nhc2xfc3RlcF9sZW4sIDQpOworICAgIH0gZWxzZSB7CisgICAg ICAgIGlmICghdm5jX2F1dGhfc2FzbF9jaGVja19zc2YodnMpKSB7CisgICAgICAgICAgICBWTkNf REVCVUcoIkF1dGhlbnRpY2F0aW9uIHJlamVjdGVkIGZvciB3ZWFrIFNTRiAlZFxuIiwgdnMtPmNz b2NrKTsKKyAgICAgICAgICAgIGdvdG8gYXV0aHJlamVjdDsKKyAgICAgICAgfQorCisgICAgICAg IC8qIENoZWNrIHVzZXJuYW1lIHdoaXRlbGlzdCBBQ0wgKi8KKyAgICAgICAgaWYgKHZuY19hdXRo X3Nhc2xfY2hlY2tfYWNjZXNzKHZzKSA8IDApIHsKKyAgICAgICAgICAgIFZOQ19ERUJVRygiQXV0 aGVudGljYXRpb24gcmVqZWN0ZWQgZm9yIEFDTCAlZFxuIiwgdnMtPmNzb2NrKTsKKyAgICAgICAg ICAgIGdvdG8gYXV0aHJlamVjdDsKKyAgICAgICAgfQorCisgICAgICAgIFZOQ19ERUJVRygiQXV0 aGVudGljYXRpb24gc3VjY2Vzc2Z1bCAlZFxuIiwgdnMtPmNzb2NrKTsKKyAgICAgICAgdm5jX3dy aXRlX3UzMih2cywgMCk7IC8qIEFjY2VwdCBhdXRoICovCisgICAgICAgIHN0YXJ0X2NsaWVudF9p bml0KHZzKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKKworIGF1dGhyZWplY3Q6CisgICAgdm5j X3dyaXRlX3UzMih2cywgMSk7IC8qIFJlamVjdCBhdXRoICovCisgICAgdm5jX3dyaXRlX3UzMih2 cywgc2l6ZW9mKCJBdXRoZW50aWNhdGlvbiBmYWlsZWQiKSk7CisgICAgdm5jX3dyaXRlKHZzLCAi QXV0aGVudGljYXRpb24gZmFpbGVkIiwgc2l6ZW9mKCJBdXRoZW50aWNhdGlvbiBmYWlsZWQiKSk7 CisgICAgdm5jX2ZsdXNoKHZzKTsKKyAgICB2bmNfY2xpZW50X2Vycm9yKHZzKTsKKyAgICByZXR1 cm4gLTE7CisKKyBhdXRoYWJvcnQ6CisgICAgdm5jX2NsaWVudF9lcnJvcih2cyk7CisgICAgcmV0 dXJuIC0xOworfQorCitzdGF0aWMgaW50IHByb3RvY29sX2NsaWVudF9hdXRoX3Nhc2xfc3RhcnRf bGVuKFZuY1N0YXRlICp2cywgdWludDhfdCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKyAgICB1aW50 MzJfdCBzdGFydGxlbiA9IHJlYWRfdTMyKGRhdGEsIDApOworICAgIFZOQ19ERUJVRygiR290IGNs aWVudCBzdGFydCBsZW4gJWRcbiIsIHN0YXJ0bGVuKTsKKyAgICBpZiAoc3RhcnRsZW4gPiBTQVNM X0RBVEFfTUFYX0xFTikgeworICAgICAgICBWTkNfREVCVUcoIlRvbyBtdWNoIFNBU0wgZGF0YSAl ZFxuIiwgc3RhcnRsZW4pOworICAgICAgICB2bmNfY2xpZW50X2Vycm9yKHZzKTsKKyAgICAgICAg cmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChzdGFydGxlbiA9PSAwKQorICAgICAgICByZXR1 cm4gcHJvdG9jb2xfY2xpZW50X2F1dGhfc2FzbF9zdGFydCh2cywgTlVMTCwgMCk7CisKKyAgICB2 bmNfcmVhZF93aGVuKHZzLCBwcm90b2NvbF9jbGllbnRfYXV0aF9zYXNsX3N0YXJ0LCBzdGFydGxl bik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvdG9jb2xfY2xpZW50X2F1dGhf c2FzbF9tZWNobmFtZShWbmNTdGF0ZSAqdnMsIHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBsZW4pCit7 CisgICAgY2hhciAqbWVjaG5hbWUgPSBzdHJuZHVwKChjb25zdCBjaGFyICopIGRhdGEsIGxlbik7 CisgICAgVk5DX0RFQlVHKCJHb3QgY2xpZW50IG1lY2huYW1lICclcycgY2hlY2sgYWdhaW5zdCAn JXMnXG4iLAorICAgICAgICAgICAgICBtZWNobmFtZSwgdnMtPnNhc2wubWVjaGxpc3QpOworCisg ICAgaWYgKHN0cm5jbXAodnMtPnNhc2wubWVjaGxpc3QsIG1lY2huYW1lLCBsZW4pID09IDApIHsK KyAgICAgICAgaWYgKHZzLT5zYXNsLm1lY2hsaXN0W2xlbl0gIT0gJ1wwJyAmJgorICAgICAgICAg ICAgdnMtPnNhc2wubWVjaGxpc3RbbGVuXSAhPSAnLCcpIHsKKyAgICAgICAgICAgIFZOQ19ERUJV RygiT25lICVkIiwgdnMtPnNhc2wubWVjaGxpc3RbbGVuXSk7CisgICAgICAgICAgICBnb3RvIGZh aWw7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBjaGFyICpvZmZzZXQgPSBzdHJz dHIodnMtPnNhc2wubWVjaGxpc3QsIG1lY2huYW1lKTsKKyAgICAgICAgVk5DX0RFQlVHKCJUd28g JXBcbiIsIG9mZnNldCk7CisgICAgICAgIGlmICghb2Zmc2V0KSB7CisgICAgICAgICAgICBnb3Rv IGZhaWw7CisgICAgICAgIH0KKyAgICAgICAgVk5DX0RFQlVHKCJUd28gJyVzJ1xuIiwgb2Zmc2V0 KTsKKyAgICAgICAgaWYgKG9mZnNldFstMV0gIT0gJywnIHx8CisgICAgICAgICAgICAob2Zmc2V0 W2xlbl0gIT0gJ1wwJyYmCisgICAgICAgICAgICAgb2Zmc2V0W2xlbl0gIT0gJywnKSkgeworICAg ICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgfQorCisgICAgZnJlZSh2cy0+c2Fz bC5tZWNobGlzdCk7CisgICAgdnMtPnNhc2wubWVjaGxpc3QgPSBtZWNobmFtZTsKKworICAgIFZO Q19ERUJVRygiVmFsaWRhdGVkIG1lY2huYW1lICclcydcbiIsIG1lY2huYW1lKTsKKyAgICB2bmNf cmVhZF93aGVuKHZzLCBwcm90b2NvbF9jbGllbnRfYXV0aF9zYXNsX3N0YXJ0X2xlbiwgNCk7Cisg ICAgcmV0dXJuIDA7CisKKyBmYWlsOgorICAgIHZuY19jbGllbnRfZXJyb3IodnMpOworICAgIGZy ZWUobWVjaG5hbWUpOworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGludCBwcm90b2NvbF9j bGllbnRfYXV0aF9zYXNsX21lY2huYW1lX2xlbihWbmNTdGF0ZSAqdnMsIHVpbnQ4X3QgKmRhdGEs IHNpemVfdCBsZW4pCit7CisgICAgdWludDMyX3QgbWVjaGxlbiA9IHJlYWRfdTMyKGRhdGEsIDAp OworICAgIFZOQ19ERUJVRygiR290IGNsaWVudCBtZWNobmFtZSBsZW4gJWRcbiIsIG1lY2hsZW4p OworICAgIGlmIChtZWNobGVuID4gMTAwKSB7CisgICAgICAgIFZOQ19ERUJVRygiVG9vIGxvbmcg U0FTTCBtZWNobmFtZSBkYXRhICVkXG4iLCBtZWNobGVuKTsKKyAgICAgICAgdm5jX2NsaWVudF9l cnJvcih2cyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKG1lY2hsZW4gPCAx KSB7CisgICAgICAgIFZOQ19ERUJVRygiVG9vIHNob3J0IFNBU0wgbWVjaG5hbWUgJWRcbiIsIG1l Y2hsZW4pOworICAgICAgICB2bmNfY2xpZW50X2Vycm9yKHZzKTsKKyAgICAgICAgcmV0dXJuIC0x OworICAgIH0KKyAgICB2bmNfcmVhZF93aGVuKHZzLCBwcm90b2NvbF9jbGllbnRfYXV0aF9zYXNs X21lY2huYW1lLG1lY2hsZW4pOworICAgIHJldHVybiAwOworfQorCit2b2lkIHN0YXJ0X2F1dGhf c2FzbChWbmNTdGF0ZSAqdnMpCit7CisgICAgY29uc3QgY2hhciAqbWVjaGxpc3QgPSBOVUxMOwor ICAgIHNhc2xfc2VjdXJpdHlfcHJvcGVydGllc190IHNlY3Byb3BzOworICAgIGludCBlcnI7Cisg ICAgY2hhciAqbG9jYWxBZGRyLCAqcmVtb3RlQWRkcjsKKyAgICBpbnQgbWVjaGxpc3RsZW47CisK KyAgICBWTkNfREVCVUcoIkluaXRpYWxpemUgU0FTTCBhdXRoICVkXG4iLCB2cy0+Y3NvY2spOwor CisgICAgLyogR2V0IGxvY2FsICYgcmVtb3RlIGNsaWVudCBhZGRyZXNzZXMgaW4gZm9ybSAgSVBB RERSO1BPUlQgKi8KKyAgICBpZiAoIShsb2NhbEFkZHIgPSB2bmNfc29ja2V0X2xvY2FsX2FkZHIo IiVzOyVzIiwgdnMtPmNzb2NrKSkpCisgICAgICAgIGdvdG8gYXV0aGFib3J0OworCisgICAgaWYg KCEocmVtb3RlQWRkciA9IHZuY19zb2NrZXRfcmVtb3RlX2FkZHIoIiVzOyVzIiwgdnMtPmNzb2Nr KSkpIHsKKyAgICAgICAgZnJlZShsb2NhbEFkZHIpOworICAgICAgICBnb3RvIGF1dGhhYm9ydDsK KyAgICB9CisKKyAgICBlcnIgPSBzYXNsX3NlcnZlcl9uZXcoInZuYyIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwsIC8qIEZRRE4gLSBqdXN0IGRlbGVnYXRlcyB0byBnZXRob3N0bmFt ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAvKiBVc2VyIHJlYWxtICovCisg ICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsQWRkciwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgcmVtb3RlQWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogQ2Fs bGJhY2tzLCBub3QgbmVlZGVkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIFNBU0xfU1VD Q0VTU19EQVRBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmdnMtPnNhc2wuY29ubik7Cisg ICAgZnJlZShsb2NhbEFkZHIpOworICAgIGZyZWUocmVtb3RlQWRkcik7CisgICAgbG9jYWxBZGRy ID0gcmVtb3RlQWRkciA9IE5VTEw7CisKKyAgICBpZiAoZXJyICE9IFNBU0xfT0spIHsKKyAgICAg ICAgVk5DX0RFQlVHKCJzYXNsIGNvbnRleHQgc2V0dXAgZmFpbGVkICVkICglcykiLAorICAgICAg ICAgICAgICAgICAgZXJyLCBzYXNsX2VycnN0cmluZyhlcnIsIE5VTEwsIE5VTEwpKTsKKyAgICAg ICAgdnMtPnNhc2wuY29ubiA9IE5VTEw7CisgICAgICAgIGdvdG8gYXV0aGFib3J0OworICAgIH0K KworI2lmZGVmIENPTkZJR19WTkNfVExTCisgICAgLyogSW5mb3JtIFNBU0wgdGhhdCB3ZSd2ZSBn b3QgYW4gZXh0ZXJuYWwgU1NGIGxheWVyIGZyb20gVExTL3g1MDkgKi8KKyAgICBpZiAodnMtPmF1 dGggPT0gVk5DX0FVVEhfVkVOQ1JZUFQgJiYKKyAgICAgICAgdnMtPnN1YmF1dGggPT0gVk5DX0FV VEhfVkVOQ1JZUFRfWDUwOVNBU0wpIHsKKyAgICAgICAgZ251dGxzX2NpcGhlcl9hbGdvcml0aG1f dCBjaXBoZXI7CisgICAgICAgIHNhc2xfc3NmX3Qgc3NmOworCisgICAgICAgIGNpcGhlciA9IGdu dXRsc19jaXBoZXJfZ2V0KHZzLT50bHNfc2Vzc2lvbik7CisgICAgICAgIGlmICghKHNzZiA9IChz YXNsX3NzZl90KWdudXRsc19jaXBoZXJfZ2V0X2tleV9zaXplKGNpcGhlcikpKSB7CisgICAgICAg ICAgICBWTkNfREVCVUcoIiVzIiwgImNhbm5vdCBUTFMgZ2V0IGNpcGhlciBzaXplXG4iKTsKKyAg ICAgICAgICAgIHNhc2xfZGlzcG9zZSgmdnMtPnNhc2wuY29ubik7CisgICAgICAgICAgICB2cy0+ c2FzbC5jb25uID0gTlVMTDsKKyAgICAgICAgICAgIGdvdG8gYXV0aGFib3J0OworICAgICAgICB9 CisgICAgICAgIHNzZiAqPSA4OyAvKiB0bHMga2V5IHNpemUgaXMgYnl0ZXMsIHNhc2wgd2FudHMg Yml0cyAqLworCisgICAgICAgIGVyciA9IHNhc2xfc2V0cHJvcCh2cy0+c2FzbC5jb25uLCBTQVNM X1NTRl9FWFRFUk5BTCwgJnNzZik7CisgICAgICAgIGlmIChlcnIgIT0gU0FTTF9PSykgeworICAg ICAgICAgICAgVk5DX0RFQlVHKCJjYW5ub3Qgc2V0IFNBU0wgZXh0ZXJuYWwgU1NGICVkICglcylc biIsCisgICAgICAgICAgICAgICAgICAgICAgZXJyLCBzYXNsX2VycnN0cmluZyhlcnIsIE5VTEws IE5VTEwpKTsKKyAgICAgICAgICAgIHNhc2xfZGlzcG9zZSgmdnMtPnNhc2wuY29ubik7CisgICAg ICAgICAgICB2cy0+c2FzbC5jb25uID0gTlVMTDsKKyAgICAgICAgICAgIGdvdG8gYXV0aGFib3J0 OworICAgICAgICB9CisgICAgfSBlbHNlCisjZW5kaWYgLyogQ09ORklHX1ZOQ19UTFMgKi8KKyAg ICAgICAgdnMtPnNhc2wud2FudFNTRiA9IDE7CisKKyAgICBtZW1zZXQgKCZzZWNwcm9wcywgMCwg c2l6ZW9mIHNlY3Byb3BzKTsKKyAgICAvKiBJbmZvcm0gU0FTTCB0aGF0IHdlJ3ZlIGdvdCBhbiBl eHRlcm5hbCBTU0YgbGF5ZXIgZnJvbSBUTFMgKi8KKyAgICBpZiAoc3RybmNtcCh2cy0+ZGlzcGxh eSwgInVuaXg6IiwgNSkgPT0gMAorI2lmZGVmIENPTkZJR19WTkNfVExTCisgICAgICAgIC8qIERp c2FibGUgU1NGLCBpZiB1c2luZyBUTFMreDUwOStTQVNMIG9ubHkuIFRMUyB3aXRob3V0IHg1MDkK KyAgICAgICAgICAgaXMgbm90IHN1ZmZpY2llbnRseSBzdHJvbmcgKi8KKyAgICAgICAgfHwgKHZz LT5hdXRoID09IFZOQ19BVVRIX1ZFTkNSWVBUICYmCisgICAgICAgICAgICB2cy0+c3ViYXV0aCA9 PSBWTkNfQVVUSF9WRU5DUllQVF9YNTA5U0FTTCkKKyNlbmRpZiAvKiBDT05GSUdfVk5DX1RMUyAq LworICAgICAgICApIHsKKyAgICAgICAgLyogSWYgd2UndmUgZ290IFRMUyBvciBVTklYIGRvbWFp biBzb2NrLCB3ZSBkb24ndCBjYXJlIGFib3V0IFNTRiAqLworICAgICAgICBzZWNwcm9wcy5taW5f c3NmID0gMDsKKyAgICAgICAgc2VjcHJvcHMubWF4X3NzZiA9IDA7CisgICAgICAgIHNlY3Byb3Bz Lm1heGJ1ZnNpemUgPSA4MTkyOworICAgICAgICBzZWNwcm9wcy5zZWN1cml0eV9mbGFncyA9IDA7 CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogUGxhaW4gVENQLCBiZXR0ZXIgZ2V0IGFuIFNTRiBs YXllciAqLworICAgICAgICBzZWNwcm9wcy5taW5fc3NmID0gNTY7IC8qIEdvb2QgZW5vdWdoIHRv IHJlcXVpcmUga2VyYmVyb3MgKi8KKyAgICAgICAgc2VjcHJvcHMubWF4X3NzZiA9IDEwMDAwMDsg LyogQXJiaXRyYXJ5IGJpZyBudW1iZXIgKi8KKyAgICAgICAgc2VjcHJvcHMubWF4YnVmc2l6ZSA9 IDgxOTI7CisgICAgICAgIC8qIEZvcmJpZCBhbnkgYW5vbnltb3VzIG9yIHRyaXZpYWxseSBjcmFj a2FibGUgYXV0aCAqLworICAgICAgICBzZWNwcm9wcy5zZWN1cml0eV9mbGFncyA9CisgICAgICAg ICAgICBTQVNMX1NFQ19OT0FOT05ZTU9VUyB8IFNBU0xfU0VDX05PUExBSU5URVhUOworICAgIH0K KworICAgIGVyciA9IHNhc2xfc2V0cHJvcCh2cy0+c2FzbC5jb25uLCBTQVNMX1NFQ19QUk9QUywg JnNlY3Byb3BzKTsKKyAgICBpZiAoZXJyICE9IFNBU0xfT0spIHsKKyAgICAgICAgVk5DX0RFQlVH KCJjYW5ub3Qgc2V0IFNBU0wgc2VjdXJpdHkgcHJvcHMgJWQgKCVzKVxuIiwKKyAgICAgICAgICAg ICAgICAgIGVyciwgc2FzbF9lcnJzdHJpbmcoZXJyLCBOVUxMLCBOVUxMKSk7CisgICAgICAgIHNh c2xfZGlzcG9zZSgmdnMtPnNhc2wuY29ubik7CisgICAgICAgIHZzLT5zYXNsLmNvbm4gPSBOVUxM OworICAgICAgICBnb3RvIGF1dGhhYm9ydDsKKyAgICB9CisKKyAgICBlcnIgPSBzYXNsX2xpc3Rt ZWNoKHZzLT5zYXNsLmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAvKiBEb24n dCBuZWVkIHRvIHNldCB1c2VyICovCisgICAgICAgICAgICAgICAgICAgICAgICAiIiwgLyogUHJl Zml4ICovCisgICAgICAgICAgICAgICAgICAgICAgICAiLCIsIC8qIFNlcGFyYXRvciAqLworICAg ICAgICAgICAgICAgICAgICAgICAgIiIsIC8qIFN1ZmZpeCAqLworICAgICAgICAgICAgICAgICAg ICAgICAgJm1lY2hsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwpOworICAgIGlmIChlcnIgIT0gU0FTTF9PSykgeworICAgICAg ICBWTkNfREVCVUcoImNhbm5vdCBsaXN0IFNBU0wgbWVjaGFuaXNtcyAlZCAoJXMpXG4iLAorICAg ICAgICAgICAgICAgICAgZXJyLCBzYXNsX2VycmRldGFpbCh2cy0+c2FzbC5jb25uKSk7CisgICAg ICAgIHNhc2xfZGlzcG9zZSgmdnMtPnNhc2wuY29ubik7CisgICAgICAgIHZzLT5zYXNsLmNvbm4g PSBOVUxMOworICAgICAgICBnb3RvIGF1dGhhYm9ydDsKKyAgICB9CisgICAgVk5DX0RFQlVHKCJB dmFpbGFibGUgbWVjaGFuaXNtcyBmb3IgY2xpZW50OiAnJXMnXG4iLCBtZWNobGlzdCk7CisKKyAg ICB2cy0+c2FzbC5tZWNobGlzdCA9IHN0cmR1cChtZWNobGlzdCk7CisgICAgbWVjaGxpc3RsZW4g PSBzdHJsZW4obWVjaGxpc3QpOworICAgIHZuY193cml0ZV91MzIodnMsIG1lY2hsaXN0bGVuKTsK KyAgICB2bmNfd3JpdGUodnMsIG1lY2hsaXN0LCBtZWNobGlzdGxlbik7CisgICAgdm5jX2ZsdXNo KHZzKTsKKworICAgIFZOQ19ERUJVRygiV2FpdCBmb3IgY2xpZW50IG1lY2huYW1lIGxlbmd0aFxu Iik7CisgICAgdm5jX3JlYWRfd2hlbih2cywgcHJvdG9jb2xfY2xpZW50X2F1dGhfc2FzbF9tZWNo bmFtZV9sZW4sIDQpOworCisgICAgcmV0dXJuOworCisgYXV0aGFib3J0OgorICAgIHZuY19jbGll bnRfZXJyb3IodnMpOworfQorCisKLS0gCjIuNy40CgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxA bGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==