From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0B0F56EB56 for ; Thu, 22 Aug 2019 14:20:57 +0000 (UTC) From: Stanislav Lisovskiy Date: Thu, 22 Aug 2019 12:04:11 +0300 Message-Id: <20190822090411.17374-1-stanislav.lisovskiy@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v11] igt/tests: kms_plane_stress: Add plane stress test List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: stanislav.lisovskiy@intel.com, ville.syrjala@intel.com, martin.peres@intel.com List-ID: VGhpcyB0ZXN0IGF0dGVtcHRzIHRvIHV0aWxpemUgYWxsIGNvbm5lY3RlZApvdXRwdXRzIGF0IHRo ZSBzYW1lIHRpbWUsIHVzaW5nIG1heGltdW0gcG9zc2libGUKcmVzb2x1dGlvbiBhbmQgYW1vdW50 IG9mIHBsYW5lcywgdG8gY2hlY2sgd2hldGhlcgp3ZSBhcmUgaGl0aW5nIGFueSBraW5kIG9mIGJh bmR3aWR0aCwgd2F0ZXJtYXJrIG9yCm90aGVyIGxpbWl0YXRpb25zLgoKdjI6IEFkZGVkIGNwdSBh bmQgZ3B1IGxvYWQgdGhyZWFkcywgd2hpY2ggY29uc3VtZQogICAgYWRkaXRpb25hbCBiYW5kd2lk dGguCgp2MzogUmVtb3ZlZCBiaW5hcnkgcGljdHVyZSBmaWxlLCB1c2luZyBwYXR0ZXJuIGZiCiAg ICBpbnN0ZWFkLgoKdjQ6IE1vdmVkIEZCIGNyZWF0aW9uL3JlbW92YWwgdG8gYmV0dGVyIHBsYWNl LgoKdjU6IEZpeGVkIHJlYmFzZSBjb25mbGljdCBhbmQgY2hhbmdlZCAiZmItPnRpbGluZyIKICAg IHRvICJmYi0+bW9kaWZpZXIiLgoKdjY6IFJlbW92ZWQgdW5uZWNlc3NhcnkgbmV3IG1hY3JvIGZv ciBpdGVyYXRpbmcgb24KICAgIHBpcGVzLiBUYWtlbiBpbnRvIHVzZSBpZ3RfZ2V0dGltZSBpbnN0 ZWFkIG9mCiAgICBjbG9ja19nZXR0aW1lLgoKdjc6IFB1dCBmYiByZWluaXQgaW50byBpZ3RfZml4 dHVyZSB0byBhdm9pZCBwcm9ibGVtcy4KICAgIE1vdmUgc3RyZXNzIGZ1bmN0aW9uIHVuZGVyIGln dF9zdWJ0ZXN0LiBSZWxlYXNlIHBsYW5lcywKICAgIHJlbW92ZSByZWR1bmRhbnQgY29tbWl0LCBh c3NlcnQgaWYgbm8gcGxhbmVzIGNhbiBiZSB1c2VkLgoKdjg6IC0gQWRkIGJsaXR0aW5nIGFsc28s IHRvIGhhdmUgbW9yZSBmdW4KICAgIC0gTm93IHVzaW5nIHNlcGFyYXRlIGZyYW1lYnVmZmVyIHBl ciBlYWNoIHBsYW5lLgogICAgLSBGaXhlZCBtYWdpYyBudW1iZXIgZm9yIGJwcCB2YWx1ZShub3cg YmFzZWQgb24gZm9ybWF0KQogICAgLSBTb21lIG9wdGltaXphdGlvbnMsIGxpa2Ugbm90IGFwcGx5 aW5nIHNhbWUgbW9kZSBpZiBpdAogICAgICBoYXNuJ3QgY2hhbmdlLCBhbHNvIGRvbid0IGRvIGhp Z2hlc3QgbW9kZSBzZWFyY2ggb24KICAgICAgZWFjaCBpdGVyYXRpb24sIGp1c3QgY2FsY3VsYXRl IG9uY2UgYW5kIHVzZSBpdC4KICAgIC0gU29tZSBjb2RlIHJlZmFjdG9yaW5nOiBleHRyYWN0ZWQg c29tZSBsZW5ndGh5IGNvZGUKICAgICAgdG8gc2VwYXJhdGUgZnVuY3Rpb25zLgogICAgLSBGaXhl ZCB3cm9uZyBpbmRleCBmb3IgY3Vyc29yIEZCKGN1cnNvciBGQiBpcyBvbmUgcGVyIHBpcGUpCgp2 OToKICAgIC0gTW9yZSBoZWxwZXIgZnVuY3Rpb25zKHN0YXJ0L3N0b3AgdGhyZWFkcywgdGVzdCBp bml0KQogICAgLSBOb3cgZG9pbmcgR1BVIHdvcmsgaW4gcHRocmVhZHMgYWxzbwogICAgLSBEbyBH UFUgd29yayBpbiBhIHNlcGFyYXRlIGZyYW1lYnVmZmVyKG5vdCBkaXNwbGF5ZWQpCgp2MTA6CiAg ICAtIEZpeCBpc3N1ZSBpbiBtYWluIHRlc3RpbmcgY3ljbGUsIGNvZGUgcmVmYWN0b3JpbmcKICAg IC0gUmViYXNlZAoKdjExOgogICAgLSBGaXhlZCBpc3N1ZSB3aXRoIHN1c3BlbmRpbmcvcmVzdW1p bmcgR1BVIHRocmVhZHMKICAgICAgdG8gZ2V0IGNyYy4gQWRkZWQgbnVtX3JlY3RhbmdsZXMgdG8g YmUgYWJsZSB0byBjdXN0b21pemUKICAgICAgbnVtYmVyIG9mIGdwZ3B1X2ZpbGwgY2FsbHMuCgpT aWduZWQtb2ZmLWJ5OiBTdGFuaXNsYXYgTGlzb3Zza2l5IDxzdGFuaXNsYXYubGlzb3Zza2l5QGlu dGVsLmNvbT4KLS0tCiBsaWIvZ3B1X2NtZHMuYyAgICAgICAgICAgfCAgIDQgKy0KIHRlc3RzL01h a2VmaWxlLnNvdXJjZXMgICB8ICAgMSArCiB0ZXN0cy9rbXNfcGxhbmVfc3RyZXNzLmMgfCA5MDIg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9tZXNvbi5idWls ZCAgICAgICAgfCAgIDEgKwogNCBmaWxlcyBjaGFuZ2VkLCA5MDYgaW5zZXJ0aW9ucygrKSwgMiBk ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9rbXNfcGxhbmVfc3RyZXNzLmMK CmRpZmYgLS1naXQgYS9saWIvZ3B1X2NtZHMuYyBiL2xpYi9ncHVfY21kcy5jCmluZGV4IDhkMjcw ZWU4Li40OGRkZmEwYyAxMDA2NDQKLS0tIGEvbGliL2dwdV9jbWRzLmMKKysrIGIvbGliL2dwdV9j bWRzLmMKQEAgLTY4MSwxMiArNjgxLDEyIEBAIGdlbjhfZW1pdF9ncGdwdV93YWxrKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJCSAgMCk7IC8qIHdpZHRoOjEgKi8KIAogCS8qIHRo cmVhZCBncm91cCBYICovCi0JT1VUX0JBVENIKDApOworCU9VVF9CQVRDSCh4KTsKIAlPVVRfQkFU Q0goMCk7CiAJT1VUX0JBVENIKHhfZGltKTsKIAogCS8qIHRocmVhZCBncm91cCBZICovCi0JT1VU X0JBVENIKDApOworCU9VVF9CQVRDSCh5KTsKIAlPVVRfQkFUQ0goMCk7CiAJT1VUX0JBVENIKHlf ZGltKTsKIApkaWZmIC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2Vm aWxlLnNvdXJjZXMKaW5kZXggYzAyZTRkOTQuLmE3MzcwNzczIDEwMDY0NAotLS0gYS90ZXN0cy9N YWtlZmlsZS5zb3VyY2VzCisrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKQEAgLTY1LDYgKzY1 LDcgQEAgVEVTVFNfcHJvZ3MgPSBcCiAJa21zX3BsYW5lX211bHRpcGxlIFwKIAlrbXNfcGxhbmVf c2NhbGluZyBcCiAJa21zX3ByaW1lIFwKKwlrbXNfcGxhbmVfc3RyZXNzIFwKIAlrbXNfcHJvcF9i bG9iIFwKIAlrbXNfcHJvcGVydGllcyBcCiAJa21zX3BzciBcCmRpZmYgLS1naXQgYS90ZXN0cy9r bXNfcGxhbmVfc3RyZXNzLmMgYi90ZXN0cy9rbXNfcGxhbmVfc3RyZXNzLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjg3MzE4MDcwCi0tLSAvZGV2L251bGwKKysrIGIvdGVz dHMva21zX3BsYW5lX3N0cmVzcy5jCkBAIC0wLDAgKzEsOTAyIEBACisvKgorICogQ29weXJpZ2h0 IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAor ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQK KyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhP UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJ TiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUgImlndF9y YW5kLmgiCisjaW5jbHVkZSAiZ3BncHVfZmlsbC5oIgorI2luY2x1ZGUgImRybXRlc3QuaCIKKyNp bmNsdWRlICJzd19zeW5jLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxwdGhyZWFk Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8 c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHBvbGwuaD4KKyNpbmNsdWRl IDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c2VtYXBob3JlLmg+CisKKyNpZm5kZWYgRFJNX0NBUF9D VVJTT1JfV0lEVEgKKyNkZWZpbmUgRFJNX0NBUF9DVVJTT1JfV0lEVEggMHg4CisjZW5kaWYKKyNp Zm5kZWYgRFJNX0NBUF9DVVJTT1JfSEVJR0hUCisjZGVmaW5lIERSTV9DQVBfQ1VSU09SX0hFSUdI VCAweDkKKyNlbmRpZgorCisKK2RybU1vZGVNb2RlSW5mbyB1aGRfbW9kZV82MGh6ID0geworCS5u YW1lID0gIjM4NDB4MjE2MEA2MGh6IiwKKwkudnJlZnJlc2ggPSA2MCwKKwkuY2xvY2sgPSAxNDI2 NjcqMiwKKwkuaGRpc3BsYXkgPSAzODQwLAorCS5oc3luY19zdGFydCA9IDE5MzYqMiwKKwkuaHN5 bmNfZW5kID0gMTk1MioyLAorCS5odG90YWwgPSAyMTA0KjIsCisJLnZkaXNwbGF5ID0gMjE2MCwK KwkudnN5bmNfc3RhcnQgPSAxMDgzKjIsCisJLnZzeW5jX2VuZCA9IDEwOTcqMiwKKwkudnRvdGFs ID0gMTEyOCoyLAorCS5mbGFncyA9IDB4YSwKK307CisKKyNkZWZpbmUgTl9CTElUUyAxMAorCisj ZGVmaW5lIE5fRk9STUFUUyAzCitzdGF0aWMgY29uc3QgdWludDMyX3QgZm9ybWF0c1tOX0ZPUk1B VFNdID0geworCURSTV9GT1JNQVRfWFJHQjg4ODgsCisJRFJNX0ZPUk1BVF9SR0I1NjUsCisJRFJN X0ZPUk1BVF9YUkdCMjEwMTAxMCwKK307CisKKyNkZWZpbmUgTl9USUxJTkdfTUVUSE9EUyAzCitz dGF0aWMgY29uc3QgdWludDY0X3QgdGlsaW5nc1tOX1RJTElOR19NRVRIT0RTXSA9IHsKKwlEUk1f Rk9STUFUX01PRF9MSU5FQVIsCisJSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCisJSTkxNV9GT1JN QVRfTU9EX1lfVElMRUQsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqZm9ybWF0X3N0cihpbnQg Zm9ybWF0X2luZGV4KQoreworCXN3aXRjaCAoZm9ybWF0c1tmb3JtYXRfaW5kZXhdKSB7CisJY2Fz ZSBEUk1fRk9STUFUX1JHQjU2NToKKwkJcmV0dXJuICJyZ2I1NjUiOworCWNhc2UgRFJNX0ZPUk1B VF9YUkdCODg4ODoKKwkJcmV0dXJuICJ4cmdiODg4OCI7CisJY2FzZSBEUk1fRk9STUFUX1hSR0Iy MTAxMDEwOgorCQlyZXR1cm4gInhyZ2IyMTAxMDEwIjsKKwlkZWZhdWx0OgorCQlpZ3RfYXNzZXJ0 KGZhbHNlKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp0aWxpbmdfc3RyKGludCB0aWxp bmdfaW5kZXgpCit7CisJc3dpdGNoICh0aWxpbmdzW3RpbGluZ19pbmRleF0pIHsKKwljYXNlIERS TV9GT1JNQVRfTU9EX0xJTkVBUjoKKwkJcmV0dXJuICJ1bnRpbGVkIjsKKwljYXNlIEk5MTVfRk9S TUFUX01PRF9YX1RJTEVEOgorCQlyZXR1cm4gInh0aWxlZCI7CisJY2FzZSBJOTE1X0ZPUk1BVF9N T0RfWV9USUxFRDoKKwkJcmV0dXJuICJ5dGlsZWQiOworCWRlZmF1bHQ6CisJCWlndF9hc3NlcnQo ZmFsc2UpOworCX0KK30KKworCisjZGVmaW5lIE1BWF9DT1JFUyA4CisjZGVmaW5lIE1BWF9QTEFO RVMgMTYKKworc3RydWN0IGRhdGE7CisKK3N0cnVjdCB0aHJlYWRfY29udGV4dCB7CisJc3RydWN0 IGRhdGEgKmRhdGE7CisJaW50IGlkOworCXZvaWQgKmJ1ZjE7CisJdm9pZCAqYnVmMjsKK307CisK K3N0cnVjdCByZWN0IHsKKwlpbnQgeDsKKwlpbnQgeTsKKwlpbnQgdzsKKwlpbnQgaDsKK307CisK K3N0cnVjdCBncHVfY29udGV4dCB7CisJc3RydWN0IGRhdGEgKmRhdGE7CisJaW50IHBpcGU7CisJ aW50IGNvbG9yOworCWludCBudW1fcmVjdGFuZ2xlczsKKwlzdHJ1Y3QgaWd0X2ZiICpmYl9wdHI7 CisJc3RydWN0IHJlY3QgYmx0X3JlY3Q7CisJc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aDsKK307CisKK2VudW0geworCVJVTk5JTkcsCisJU1RPUFBFRCwKKwlQQVVTRUQsCit9IHRocmVh ZF9zdGF0ZTsKKworc3RydWN0IGRhdGEgeworCWludCBkcm1fZmQ7CisJaWd0X2Rpc3BsYXlfdCBk aXNwbGF5OworCWludCBudW1fcGxhbmVzW0lHVF9NQVhfUElQRVNdOworCXVpbnQzMl90IGZvcm1h dDsKKwl1aW50NjRfdCBtb2RpZmllcjsKKwl1aW50MzJfdCBkZXZpZDsKKwlkcm1faW50ZWxfYnVm bWdyICpidWZtZ3I7CisJZHJtTW9kZU1vZGVJbmZvICpsYXN0X21vZGVbSUdUX01BWF9QSVBFU107 CisJc3RydWN0IGlndF9mYiBmYltJR1RfTUFYX1BJUEVTICogTUFYX1BMQU5FU107CisJc3RydWN0 IGlndF9mYiBjdXJzb3JfZmJbSUdUX01BWF9QSVBFU107CisJcHRocmVhZF90IGNwdV90aHJlYWRb TUFYX0NPUkVTXTsKKwlwdGhyZWFkX3QgZ3B1X3RocmVhZFtJR1RfTUFYX1BJUEVTXTsKKwlib29s IGNwdV90aHJlYWRfc3RvcFtNQVhfQ09SRVNdOworCWludCBncHVfdGhyZWFkX3N0YXRlW0lHVF9N QVhfUElQRVNdOworCXNlbV90IGdwdV90aHJlYWRfcGF1c2VfYWNrW0lHVF9NQVhfUElQRVNdOwor CXN0cnVjdCB0aHJlYWRfY29udGV4dCBjcHVfY29udGV4dFtNQVhfQ09SRVNdOworCXN0cnVjdCBn cHVfY29udGV4dCBncHVfY29udGV4dFtJR1RfTUFYX1BJUEVTXTsKKwlkcm1Nb2RlTW9kZUluZm8g KmhpZ2hlc3RfbW9kZVtJR1RfTUFYX1BJUEVTXTsKKwlkcm1Nb2RlQ29ubmVjdG9yUHRyIGNvbm5l Y3RvcnNbSUdUX01BWF9QSVBFU107CisJZHJtTW9kZVJlcyAqbW9kZV9yZXNvdXJjZXM7CisJaW50 IG51bWJlcl9vZl9jb3JlczsKK307CisKKworc3RhdGljIHZvaWQgcGF1c2VfZ3B1X3RocmVhZHMo c3RydWN0IGRhdGEgKmRhdGEpOworCitzdGF0aWMgdm9pZCByZXN1bWVfZ3B1X3RocmVhZHMoc3Ry dWN0IGRhdGEgKmRhdGEpOworCitzdGF0aWMgdm9pZCBzdG9wX2dwdV90aHJlYWRzKHN0cnVjdCBk YXRhICpkYXRhKTsKKworc3RhdGljIHZvaWQgc3RhcnRfZ3B1X3RocmVhZHMoc3RydWN0IGRhdGEg KmRhdGEpOworCitzdHJ1Y3QgYmFzZV9jcmMgeworCWJvb2wgc2V0OworCWlndF9jcmNfdCBjcmM7 Cit9OworCitpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmM7CisKKyNkZWZpbmUgQlVGX1NJWkUgMTI4 KjEwMjQqMTAyNAorCitzdGF0aWMgdm9pZCAqY3B1X2xvYWQodm9pZCAqZCkKK3sKKwljaGFyICpi dWYxLCAqYnVmMjsKKwlzdHJ1Y3QgdGhyZWFkX2NvbnRleHQgKmNvbnRleHQgPSAoc3RydWN0IHRo cmVhZF9jb250ZXh0ICopZDsKKwlzdHJ1Y3QgZGF0YSAqZGF0YSA9IGNvbnRleHQtPmRhdGE7CisK KwlidWYxID0gY29udGV4dC0+YnVmMTsKKwlidWYyID0gY29udGV4dC0+YnVmMjsKKworCWRhdGEt PmNwdV90aHJlYWRfc3RvcFtjb250ZXh0LT5pZF0gPSBmYWxzZTsKKworCWlndF9pbmZvKCJDUFUg dGhyZWFkIGNwdSBpZCAlZCBzdGFydFxuIiwgY29udGV4dC0+aWQpOworCisJLyogSnVzdCB0byBt YWtlIENQVSBidXN5Li4uICovCisJd2hpbGUoIWRhdGEtPmNwdV90aHJlYWRfc3RvcFtjb250ZXh0 LT5pZF0pIHsKKwkJbWVtY3B5KGJ1ZjEsIGJ1ZjIsIEJVRl9TSVpFKTsKKwkJbWVtY3B5KGJ1ZjIs IGJ1ZjEsIEJVRl9TSVpFKTsKKwl9CisKKwlpZ3RfaW5mbygiQ1BVIHRocmVhZCBjcHUgaWQgJWQg c3RvcFxuIiwgY29udGV4dC0+aWQpOworCisJcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIHZv aWQgc2NyYXRjaF9idWZfaW5pdChzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAorCQkJZHJtX2ludGVsX2Jv ICpibywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3RyaWRlLCBpbnQgdGlsaW5nLCBpbnQg YnBwKQoreworCWJ1Zi0+Ym8gPSBibzsKKwlidWYtPnN0cmlkZSA9IHN0cmlkZTsKKwlidWYtPnRp bGluZyA9IHRpbGluZzsKKwlidWYtPnNpemUgPSB3aWR0aCAqIGhlaWdodCAqIGJwcCAvIDg7CisJ YnVmLT5icHAgPSBicHA7Cit9CisKK3N0YXRpYyB2b2lkICpncHVfbG9hZCh2b2lkICpwdHIpCit7 CisJc3RydWN0IGdwdV9jb250ZXh0ICpjb250ZXh0ID0gKHN0cnVjdCBncHVfY29udGV4dCAqKXB0 cjsKKwlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoID0gTlVMTDsKKwlzdHJ1Y3QgaWd0 X2J1ZiBkc3Q7CisJc3RydWN0IGRhdGEgKmRhdGEgPSBjb250ZXh0LT5kYXRhOworCWludCBwaXBl ID0gY29udGV4dC0+cGlwZTsKKwlpZ3RfZmlsbGZ1bmNfdCBncGdwdV9maWxsID0gTlVMTDsKKwlk cm1faW50ZWxfYm8gKmJvID0gTlVMTDsKKwlzdHJ1Y3QgaWd0X2ZiIGZiLCAqZmJfcHRyID0gTlVM TCwgKmxhc3RfZmJfcHRyID0gTlVMTDsKKwlpbnQgcmVjdF9kaXZpc29yOworCWludCByZWN0X3dp ZHRoOworCWludCByZWN0X2hlaWdodDsKKwlpbnQgZnJhbWVfd2lkdGg7CisJaW50IGZyYW1lX2hl aWdodDsKKwlpbnQgYnl0ZXNfcGVyX3BpeGVsOworCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsKKwlp bnQgZnJhbWUgPSAwOworCWludCB4LCB5OworCWludCBsYXN0X3N0YXRlID0gLTE7CisJaW50IHJl Y3Q7CisKKwlncGdwdV9maWxsID0gaWd0X2dldF9ncGdwdV9maWxsZnVuYyhkYXRhLT5kZXZpZCk7 CisKKwlpZ3RfcmVxdWlyZV9mKGdwZ3B1X2ZpbGwsCisJICAgICAgIm5vIGdwZ3B1LWZpbGwgZnVu Y3Rpb25cbiIpOworCisJYmF0Y2ggPSBjb250ZXh0LT5iYXRjaDsKKwlpZ3RfYXNzZXJ0KGJhdGNo KTsKKworCW1vZGUgPSBkYXRhLT5oaWdoZXN0X21vZGVbcGlwZV07CisJaWd0X2Fzc2VydChtb2Rl KTsKKworCWlndF9jcmVhdGVfY29sb3JfcGF0dGVybl9mYihkYXRhLT5kcm1fZmQsIG1vZGUtPmhk aXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKKwkJICAgIGRhdGEtPmZvcm1hdCwKKwkJICAgIGRhdGEt Pm1vZGlmaWVyLAorCQkgICAgMC4wLCAxLjAsIDAuMCwgJmZiKTsKKworCWlndF9pbmZvKCJHUFUg dGhyZWFkIHBpcGUgJWQgc3RhcnRcbiIsIHBpcGUpOworCXdoaWxlIChkYXRhLT5ncHVfdGhyZWFk X3N0YXRlW3BpcGVdICE9IFNUT1BQRUQpIHsKKwkJaWYgKGxhc3Rfc3RhdGUgIT0gZGF0YS0+Z3B1 X3RocmVhZF9zdGF0ZVtwaXBlXSkgeworCQkJbGFzdF9zdGF0ZSA9IGRhdGEtPmdwdV90aHJlYWRf c3RhdGVbcGlwZV07CisJCQlzZW1fcG9zdCgmZGF0YS0+Z3B1X3RocmVhZF9wYXVzZV9hY2tbcGlw ZV0pOworCQl9CisJCWlmIChkYXRhLT5ncHVfdGhyZWFkX3N0YXRlW3BpcGVdID09IFBBVVNFRCkK KwkJCWNvbnRpbnVlOworCisJCWlmICghY29udGV4dC0+ZmJfcHRyKSB7CisJCQlmYl9wdHIgPSAm ZmI7CisJCX0KKwkJZWxzZSB7CisJCQlmYl9wdHIgPSBjb250ZXh0LT5mYl9wdHI7CisJCX0KKwor CQlpZiAobGFzdF9mYl9wdHIgIT0gZmJfcHRyKSB7CisJCQlpZ3RfaW5mbygiR1BVIHRocmVhZCBw aXBlICVkOiBDaGFuZ2UgZnJvbSBGQiAleCB0byBGQiAleFxuIiwgcGlwZSwgbGFzdF9mYl9wdHIs IGZiX3B0cik7CisJCQlmcmFtZV93aWR0aCA9IGZiX3B0ci0+d2lkdGg7CisJCQlmcmFtZV9oZWln aHQgPSBmYl9wdHItPmhlaWdodDsKKwkJCWJ5dGVzX3Blcl9waXhlbCA9IGZiX3B0ci0+cGxhbmVf YnBwWzBdIC8gODsKKwkJCWJvID0gZ2VtX2hhbmRsZV90b19saWJkcm1fYm8oZGF0YS0+YnVmbWdy LCBkYXRhLT5kcm1fZmQsICIiLCBmYl9wdHItPmdlbV9oYW5kbGUpOworCQkJaWd0X2Fzc2VydChi byk7CisKKwkJCXNjcmF0Y2hfYnVmX2luaXQoJmRzdCwgYm8sIGZyYW1lX3dpZHRoLCBmcmFtZV9o ZWlnaHQsIGZiX3B0ci0+c3RyaWRlc1swXSwgZmJfcHRyLT5tb2RpZmllciwgZmJfcHRyLT5wbGFu ZV9icHBbMF0pOworCQl9CisJCWxhc3RfZmJfcHRyID0gZmJfcHRyOworCisJCS8qIEZpbGwgdGhl IGZyYW1lYnVmZmVyIHVzaW5nIHNoYWRlciAqLworCQl4ID0gMDsKKwkJeSA9IGZyYW1lX2hlaWdo dCAvIDI7CisKKwkJZ3BncHVfZmlsbChiYXRjaCwKKwkJICAgJmRzdCwgeCwgeSwgKGZyYW1lX3dp ZHRoICogYnl0ZXNfcGVyX3BpeGVsKSwgZnJhbWVfaGVpZ2h0LAorCQkgICBjb250ZXh0LT5jb2xv cik7CisKKwkJcmVjdCA9IDA7CisKKwkJd2hpbGUgKHJlY3QgPCBjb250ZXh0LT5udW1fcmVjdGFu Z2xlcykgeworCQkJLyogZGl2aWRlIGF0IGxlYXN0IGJ5IDIgYW5kIHVwIHRvIDggKi8KKwkJCXJl Y3RfZGl2aXNvciA9IDEgPDwgKGhhcnNfcGV0cnVza2FfZjU0XzFfcmFuZG9tX3Vuc2FmZV9tYXgo MykgKyAxKTsKKworCQkJcmVjdF93aWR0aCA9IGZyYW1lX3dpZHRoIC8gcmVjdF9kaXZpc29yOwor CQkJcmVjdF9oZWlnaHQgPSBmcmFtZV9oZWlnaHQgLyByZWN0X2Rpdmlzb3I7CisKKwkJCWNvbnRl eHQtPmJsdF9yZWN0LnggPSB4ICsgaGFyc19wZXRydXNrYV9mNTRfMV9yYW5kb21fdW5zYWZlX21h eChmcmFtZV93aWR0aCAtIHJlY3Rfd2lkdGgpOworCQkJY29udGV4dC0+Ymx0X3JlY3QueSA9IHkg KyBoYXJzX3BldHJ1c2thX2Y1NF8xX3JhbmRvbV91bnNhZmVfbWF4KGZyYW1lX2hlaWdodC8yIC0g cmVjdF9oZWlnaHQpOworCisJCQkvKiBGaWxsIHJhbmRvbWx5IHNpemVkIGFuZCBwb3NpdGlvbmVk IHJlY3RhbmdsZXMgKi8KKwkJCWdwZ3B1X2ZpbGwoYmF0Y2gsCisJCQkgICAmZHN0LCBjb250ZXh0 LT5ibHRfcmVjdC54LCBjb250ZXh0LT5ibHRfcmVjdC55LCAoKGNvbnRleHQtPmJsdF9yZWN0Lngg KyByZWN0X3dpZHRoKSAqIGJ5dGVzX3Blcl9waXhlbCksCisJCQkgICBjb250ZXh0LT5ibHRfcmVj dC55ICsgcmVjdF9oZWlnaHQsCisJCQkgICBjb250ZXh0LT5jb2xvciArIDB4ODApOworCisJCQlj b250ZXh0LT5jb2xvciArPSA0OworCisJCQkrK3JlY3Q7CisJCX0KKworCQlmcmFtZSsrOworCX0K KworCXNlbV9wb3N0KCZkYXRhLT5ncHVfdGhyZWFkX3BhdXNlX2Fja1twaXBlXSk7CisKKwlkcm1f aW50ZWxfYm9fdW5yZWZlcmVuY2UoYm8pOworCisJaWd0X3JlbW92ZV9mYihkYXRhLT5kaXNwbGF5 LmRybV9mZCwgJmZiKTsKKworCWlndF9pbmZvKCJHUFUgdGhyZWFkIHBpcGUgJWQgc3RvcC4gRnJh bWVzIHJlbmRlcmVkOiAlZFxuIiwgcGlwZSwgZnJhbWUpOworCisJcmV0dXJuIE5VTEw7Cit9CisK K3N0YXRpYyBpbmxpbmUgdWludDMyX3QgcGlwZV9zZWxlY3QoZW51bSBwaXBlIHBpcGUpCit7CisJ aWYgKHBpcGUgPiAxKQorCQlyZXR1cm4gcGlwZSA8PCBEUk1fVkJMQU5LX0hJR0hfQ1JUQ19TSElG VDsKKwllbHNlIGlmIChwaXBlID4gMCkKKwkJcmV0dXJuIERSTV9WQkxBTktfU0VDT05EQVJZOwor CWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBnZXRfdmJsYW5rKGludCBm ZCwgZW51bSBwaXBlIHBpcGUsIHVuc2lnbmVkIGZsYWdzKQoreworCXVuaW9uIGRybV93YWl0X3Zi bGFuayB2Ymw7CisKKwltZW1zZXQoJnZibCwgMCwgc2l6ZW9mKHZibCkpOworCXZibC5yZXF1ZXN0 LnR5cGUgPSBEUk1fVkJMQU5LX1JFTEFUSVZFIHwgcGlwZV9zZWxlY3QocGlwZSkgfCBmbGFnczsK KwlpZiAoZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9XQUlUX1ZCTEFOSywgJnZibCkpCisJCXJldHVy biAwOworCisJcmV0dXJuIHZibC5yZXBseS5zZXF1ZW5jZTsKK30KKworCitzdGF0aWMgaW50IHBs YW5lX3N0cmVzcyhzdHJ1Y3QgZGF0YSAqZGF0YSwgaWd0X291dHB1dF90ICpvdXRwdXQsIGVudW0g cGlwZSBwaXBlLCBkcm1Nb2RlTW9kZUluZm8gKm1vZGUpCit7CisJaWd0X3BsYW5lX3QgKnBsYW5l OworCWludCBpOworCWludCByZXQ7CisJaW50IGxhc3RfcGxhbmU7CisJYm9vbCBuZXdfbW9kZSA9 IGZhbHNlOworCXVpbnQ2NF90IGN1cnNvcl93aWR0aCwgY3Vyc29yX2hlaWdodDsKKworCWRvX29y X2RpZShkcm1HZXRDYXAoZGF0YS0+ZHJtX2ZkLCBEUk1fQ0FQX0NVUlNPUl9XSURUSCwgJmN1cnNv cl93aWR0aCkpOworCWRvX29yX2RpZShkcm1HZXRDYXAoZGF0YS0+ZHJtX2ZkLCBEUk1fQ0FQX0NV UlNPUl9IRUlHSFQsICZjdXJzb3JfaGVpZ2h0KSk7CisKKwlpZiAoZGF0YS0+bGFzdF9tb2RlW3Bp cGVdICE9IG1vZGUpIHsKKwkJaWd0X291dHB1dF9vdmVycmlkZV9tb2RlKG91dHB1dCwgbW9kZSk7 CisJCWlndF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlKTsKKworCQlyZXQgPSBpZ3RfZGlz cGxheV90cnlfY29tbWl0X2F0b21pYygmZGF0YS0+ZGlzcGxheSwKKwkJCQlEUk1fTU9ERV9BVE9N SUNfVEVTVF9PTkxZIHwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIE5VTEwpOworCQlp ZiAocmV0KSB7CisJCQlpZ3Rfd2FybigiQ291bGQgbm90IGNvbW1pdCBtb2RlOiBcbiIpOworCQkJ a21zdGVzdF9kdW1wX21vZGUobW9kZSk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJaWd0X2Rp c3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJCWRhdGEtPmxh c3RfbW9kZVtwaXBlXSA9IG1vZGU7CisJCW5ld19tb2RlID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAq IExvb2tzIGxpa2Ugd2UgY2FuJ3QgaGF2ZSBwbGFuZXMgb24gdGhhdCBwaXBlIGF0IGFsbAorCSAq LworCWlmICghZGF0YS0+bnVtX3BsYW5lc1twaXBlXSkKKwkJcmV0dXJuIDA7CisKKwltb2RlID0g aWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOworCisJaWYgKG5ld19tb2RlKSB7CisJCWkgPSAw OworCQlmb3JfZWFjaF9wbGFuZV9vbl9waXBlKCZkYXRhLT5kaXNwbGF5LCBwaXBlLCBwbGFuZSkg eworCQkJaW50IHBsYW5lX3dpZHRoLCBwbGFuZV9oZWlnaHQ7CisJCQlpZiAocGxhbmUtPnR5cGUg PT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKSB7CisJCQkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwg JmRhdGEtPmN1cnNvcl9mYltwaXBlXSk7CisJCQkJaWd0X2ZiX3NldF9zaXplKCZkYXRhLT5jdXJz b3JfZmJbcGlwZV0sIHBsYW5lLCBjdXJzb3Jfd2lkdGgsIGN1cnNvcl9oZWlnaHQpOworCQkJCWln dF9wbGFuZV9zZXRfc2l6ZShwbGFuZSwgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0KTsKKwkJ CQlwbGFuZV93aWR0aCA9IGN1cnNvcl93aWR0aDsKKwkJCQlwbGFuZV9oZWlnaHQgPSBjdXJzb3Jf aGVpZ2h0OworCQkJfSBlbHNlIHsKKwkJCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCAmZGF0YS0+ ZmJbcGlwZSAqIE1BWF9QTEFORVMgKyBpXSk7CisJCQkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihw bGFuZSwgMCwgMCk7CisJCQkJaWd0X2ZiX3NldF9zaXplKCZkYXRhLT5mYltwaXBlICogTUFYX1BM QU5FUyArIGldLCBwbGFuZSwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5KTsKKwkJCQlp Z3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSk7 CisJCQkJcGxhbmVfd2lkdGggPSBtb2RlLT5oZGlzcGxheTsKKwkJCQlwbGFuZV9oZWlnaHQgPSBt b2RlLT52ZGlzcGxheTsKKwkJCX0KKworCQkJcmV0ID0gaWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdF9h dG9taWMoJmRhdGEtPmRpc3BsYXksIERSTV9NT0RFX0FUT01JQ19URVNUX09OTFkgfCBEUk1fTU9E RV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVMTCk7CisJCQl3aGlsZSAocmV0KSB7CisJCQkJaWYg KHBsYW5lX3dpZHRoIDw9IGN1cnNvcl93aWR0aCB8fCBwbGFuZV9oZWlnaHQgPD0gY3Vyc29yX2hl aWdodCkKKwkJCQkJYnJlYWs7CisJCQkJcGxhbmVfd2lkdGggLz0gMjsKKwkJCQlwbGFuZV9oZWln aHQgLz0gMjsKKwkJCQlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIHBsYW5lX3dpZHRoLCBwbGFu ZV9oZWlnaHQpOworCQkJCWlndF9pbmZvKCJSZWR1Y2VkIHBsYW5lICVkIHNpemUgdG8gJWR4JWRc biIsIHBsYW5lLT5pbmRleCwgcGxhbmVfd2lkdGgsIHBsYW5lX2hlaWdodCk7CisJCQkJcmV0ID0g aWd0X2Rpc3BsYXlfdHJ5X2NvbW1pdF9hdG9taWMoJmRhdGEtPmRpc3BsYXksIERSTV9NT0RFX0FU T01JQ19URVNUX09OTFkgfCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgTlVMTCk7CisJ CQl9CisJCQlpZiAocmV0KSB7CisJCQkJaWd0X2luZm8oIlBsYW5lICVkIHBpcGUgJWQgdHJ5IGNv bW1pdCBmYWlsZWQsIGV4aXRpbmdcbiIsIGksIHBpcGUpOworCQkJCWRhdGEtPm51bV9wbGFuZXNb cGlwZV0gPSBpOworCQkJCWlndF9pbmZvKCJNYXggbnVtIHBsYW5lcyBmb3IgcGlwZSAlZCBzZXQg dG8gJWRcbiIsIHBpcGUsIGkpOworCQkJCS8qCisJCQkJICogV2UgaGF2ZSBub3cgZGV0ZXJtaW5l ZCBtYXggYW1vdW50IG9mIGZ1bGwgc2l6ZWQgcGxhbmVzLCB3ZSB3aWxsIGp1c3QKKwkJCQkgKiBr ZWVwIGl0IGluIG1pbmQgYW5kIGJlIHNtYXJ0ZXIgbmV4dCB0aW1lLiBBbHNvIGxldHMgcmVtb3Zl IHVubmVlZGVkIGZicy4KKwkJCQkgKiBEb24ndCBkZXN0cm95IGN1cnNvcl9mYiBhcyB3aWxsIHRh a2UgY2FyZSBhYm91dCBpdCBhdCB0aGUgZW5kLgorCQkJCSAqLworCQkJCWlndF9wbGFuZV9zZXRf ZmIocGxhbmUsIE5VTEwpOworCQkJCXdoaWxlIChpIDwgTUFYX1BMQU5FUykgeworCQkJCQlpZ3Rf cmVtb3ZlX2ZiKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCAmZGF0YS0+ZmJbcGlwZSAqIE1BWF9QTEFO RVMgKyBpXSk7CisJCQkJCWRhdGEtPmZiW3BpcGUgKiBNQVhfUExBTkVTICsgaV0uZmJfaWQgPSAw OworCQkJCQlpKys7CisJCQkJfQorCQkJCWkgPSBkYXRhLT5udW1fcGxhbmVzW3BpcGVdOworCQkJ fQorCQkJaWYgKCsraSA+PSBkYXRhLT5udW1fcGxhbmVzW3BpcGVdKQorCQkJCWJyZWFrOworCQl9 CisJCWlndF9kaXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIENPTU1JVF9BVE9NSUMpOwor CX0KKworCWxhc3RfcGxhbmUgPSBkYXRhLT5udW1fcGxhbmVzW3BpcGVdIC0gMTsKKwlpZiAobGFz dF9wbGFuZSA+PSA3KQorCQlsYXN0X3BsYW5lID0gNjsKKworCWlmIChkYXRhLT5ncHVfY29udGV4 dFtwaXBlXS5mYl9wdHIgIT0gJmRhdGEtPmZiW3BpcGUgKiBNQVhfUExBTkVTICsgbGFzdF9wbGFu ZV0pIHsKKwkJZGF0YS0+Z3B1X2NvbnRleHRbcGlwZV0uZmJfcHRyID0gJmRhdGEtPmZiW3BpcGUg KiBNQVhfUExBTkVTICsgbGFzdF9wbGFuZV07CisJCWlndF9pbmZvKCJQbGFuZSBzdHJlc3MgZm9y IHBpcGUgJWQ6IFNldCBjb250ZXh0IGZiIHB0ciAleFxuIiwgcGlwZSwgZGF0YS0+Z3B1X2NvbnRl eHRbcGlwZV0uZmJfcHRyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgZHJtTW9k ZU1vZGVJbmZvICogZmluZF9oaWdoZXN0X21vZGUoZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9y KQoreworCWRybU1vZGVNb2RlSW5mbyAqaGlnaGVzdF9tb2RlID0gTlVMTDsKKwlpbnQgajsKKwor CWZvciAoaiA9IDA7IGogPCBjb25uZWN0b3ItPmNvdW50X21vZGVzOyBqKyspIHsKKwkJaWYgKCFo aWdoZXN0X21vZGUpIHsKKwkJCWhpZ2hlc3RfbW9kZSA9ICZjb25uZWN0b3ItPm1vZGVzW2pdOwor CQl9CisJCWVsc2UgaWYgKGNvbm5lY3Rvci0+bW9kZXNbal0udmRpc3BsYXkgJiYgY29ubmVjdG9y LT5tb2Rlc1tqXS5oZGlzcGxheSkgeworCQkJaWYgKGhpZ2hlc3RfbW9kZS0+aGRpc3BsYXkgPCBj b25uZWN0b3ItPm1vZGVzW2pdLmhkaXNwbGF5KQorCQkJCWhpZ2hlc3RfbW9kZSA9ICZjb25uZWN0 b3ItPm1vZGVzW2pdOworCQkJfQorCX0KKworCXJldHVybiBoaWdoZXN0X21vZGU7Cit9CisKK3R5 cGVkZWYgZHJtTW9kZUNvbm5lY3RvciAqIGRybU1vZGVDb25uZWN0b3JQdHI7CisKK3N0YXRpYyB2 b2lkIGZpbGxfY29ubmVjdG9yX3RvX3BpcGVfYXJyYXkoc3RydWN0IGRhdGEgKmRhdGEsIGRybU1v ZGVSZXMgKm1vZGVfcmVzb3VyY2VzLCBkcm1Nb2RlQ29ubmVjdG9yUHRyICpjb25uZWN0b3JzKQor eworCWludCBwaXBlID0gMCwgY3J0Y19pZDsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKwlpbnQg aTsKKworCW1lbXNldChjb25uZWN0b3JzLCAwLCBzaXplb2YoZHJtTW9kZUNvbm5lY3RvclB0cikg KiBJR1RfTUFYX1BJUEVTKTsKKworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRhdGEtPmRp c3BsYXksIG91dHB1dCkgeworCQljcnRjX2lkID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IG1vZGVf cmVzb3VyY2VzLT5jb3VudF9jb25uZWN0b3JzOyBpKyspIHsKKwkJCWRybU1vZGVDb25uZWN0b3Ig KmNvbm5lY3RvcjsKKworCQkJY29ubmVjdG9yID0gZHJtTW9kZUdldENvbm5lY3RvckN1cnJlbnQo ZGF0YS0+ZHJtX2ZkLAorCQkJCSAgICAgICBtb2RlX3Jlc291cmNlcy0+Y29ubmVjdG9yc1tpXSk7 CisKKwkJCWlmICghY29ubmVjdG9yKSB7CisJCQkJaWd0X3dhcm4oImNvdWxkIG5vdCBnZXQgY29u bmVjdG9yICVpOiAlc1xuIiwKKwkJCQkJbW9kZV9yZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0sIHN0 cmVycm9yKGVycm5vKSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChjb25uZWN0b3It PmNvbm5lY3Rpb24gPT0gRFJNX01PREVfQ09OTkVDVEVEKSB7CisJCQkJaWYgKGNydGNfaWQgPT0g cGlwZSkgeworCQkJCQljb25uZWN0b3JzW3BpcGVdID0gKGRybU1vZGVDb25uZWN0b3JQdHIpY29u bmVjdG9yOworCQkJCX0KKwkJCQljcnRjX2lkKys7CisJCQl9CisJCQllbHNlCisJCQkJZHJtTW9k ZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsKKwkJfQorCQlpZiAoKCsrcGlwZSkgPT0gSUdUX01B WF9QSVBFUykKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV9jb25uZWN0 b3JzKGRybU1vZGVDb25uZWN0b3JQdHIgKmNvbm5lY3RvcnMpCit7CisJaW50IGk7CisJZm9yIChp ID0gMDsgaSA8IElHVF9NQVhfUElQRVM7IGkrKykgeworCQlpZiAoY29ubmVjdG9yc1tpXSkKKwkJ CWRybU1vZGVGcmVlQ29ubmVjdG9yKGNvbm5lY3RvcnNbaV0pOworCX0KK30KKworI2RlZmluZSBN SU5fRFVSQVRJT05fU0VDIDUuMDAKKyNkZWZpbmUgTUlOX0lURVJBVElPTlMgMjAKKworc3RhdGlj IHZvaWQgc3RyZXNzKHN0cnVjdCBkYXRhICpkYXRhKQoreworCXN0cnVjdCB0aW1lc3BlYyBzdGFy dCwgZW5kOworCWlndF9vdXRwdXRfdCAqb3V0cHV0OworCWludCByZXQ7CisJaW50IHBpcGU7CisJ aW50IGl0ZXJhdGlvbnMgPSAwOworCWJvb2wgbmVlZF9jb250aW51ZTsKKwlpZ3RfY3JjX3QgY3Jj LCBjcmMyOworCisJaWd0X2dldHRpbWUoJnN0YXJ0KTsKKworCWRvIHsKKwkJLyoKKwkJICogSW5j cmVtZW50IHBpcGUgb25seSBmb3IgY29ubmVjdGVkIG91dHB1dHMsCisJCSAqIGZvciBlYWNoIGNv bm5lY3RlZCBvdXRwdXQgd2Ugc2hvdWxkIGFzc2lnbiBhCisJCSAqIGRpZmZlcmVudCBwaXBlLgor CQkgKi8KKwkJcGlwZSA9IDA7CisJCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRhdGEtPmRp c3BsYXksIG91dHB1dCkgeworCQkJaWd0X2Fzc2VydF9mKGRhdGEtPmRpc3BsYXkucGlwZXNbcGlw ZV0ubl9wbGFuZXMgPCBNQVhfUExBTkVTLAorCQkJCSJDdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9y dCBtb3JlIHRoYW4gJWQgcGxhbmVzISIsIE1BWF9QTEFORVMpOworCisJCQlwaXBlX2NyYyA9IGln dF9waXBlX2NyY19uZXcoZGF0YS0+ZHJtX2ZkLCBwaXBlLAorCQkJCUlOVEVMX1BJUEVfQ1JDX1NP VVJDRV9BVVRPKTsKKworCQkJcmV0ID0gcGxhbmVfc3RyZXNzKGRhdGEsIG91dHB1dCwgcGlwZSwg ZGF0YS0+aGlnaGVzdF9tb2RlW3BpcGVdKTsKKworCQkJaWYgKCEoKGludClpZ3RfdGltZV9lbGFw c2VkKCZzdGFydCwgJmVuZCkgJSAoKGludClNSU5fRFVSQVRJT05fU0VDLzQpKSkgeworCQkJCXBh dXNlX2dwdV90aHJlYWRzKGRhdGEpOworCQkJCWlndF9pbmZvKCJDaGVja2luZyBjcmMuLi5cbiIp OworCQkJCWdldF92YmxhbmsoZGF0YS0+ZGlzcGxheS5kcm1fZmQsIHBpcGUsIERSTV9WQkxBTktf TkVYVE9OTUlTUyk7CisKKwkJCQlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMocGlwZV9jcmMsICZj cmMpOworCisJCQkJZ2V0X3ZibGFuayhkYXRhLT5kaXNwbGF5LmRybV9mZCwgcGlwZSwgRFJNX1ZC TEFOS19ORVhUT05NSVNTKTsKKworCQkJCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhwaXBlX2Ny YywgJmNyYzIpOworCisJCQkJcmVzdW1lX2dwdV90aHJlYWRzKGRhdGEpOworCQkJCWlndF9hc3Nl cnRfY3JjX2VxdWFsKCZjcmMsICZjcmMyKTsKKwkJCX0KKworCQkJaWd0X3BpcGVfY3JjX2ZyZWUo cGlwZV9jcmMpOworCisJCQlpZiAocmV0IHx8ICgrK3BpcGUgPT0gSUdUX01BWF9QSVBFUykpCisJ CQkJYnJlYWs7CisJCX0KKwkJaWd0X2dldHRpbWUoJmVuZCk7CisJCWl0ZXJhdGlvbnMrKzsKKwkJ bmVlZF9jb250aW51ZSA9IGlndF90aW1lX2VsYXBzZWQoJnN0YXJ0LCAmZW5kKSA8IE1JTl9EVVJB VElPTl9TRUM7CisJfSB3aGlsZSAoKG5lZWRfY29udGludWUgfHwgaXRlcmF0aW9ucyA8IE1JTl9J VEVSQVRJT05TKSk7CisKKworfQorCitzdGF0aWMgdm9pZCBzdGFydF9ncHVfdGhyZWFkcyhzdHJ1 Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaSA9IDA7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisK KwlpZiAoIWRhdGEtPmRldmlkKSB7CisJCWRhdGEtPmRldmlkID0gaW50ZWxfZ2V0X2RybV9kZXZp ZChkYXRhLT5kcm1fZmQpOworCQlpZ3RfcmVxdWlyZV9nZW0oZGF0YS0+ZHJtX2ZkKTsKKworCQlk YXRhLT5idWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGRhdGEtPmRybV9mZCwgNDA5 Nik7CisJCWlndF9hc3NlcnQoZGF0YS0+YnVmbWdyKTsKKwl9CisKKwlmb3JfZWFjaF9jb25uZWN0 ZWRfb3V0cHV0KCZkYXRhLT5kaXNwbGF5LCBvdXRwdXQpIHsKKwkJZGF0YS0+Z3B1X2NvbnRleHRb aV0uZGF0YSA9IGRhdGE7CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLnBpcGUgPSBpOworCQlkYXRh LT5ncHVfY29udGV4dFtpXS5mYl9wdHIgPSBOVUxMOworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5i bHRfcmVjdC54ID0gMDsKKwkJZGF0YS0+Z3B1X2NvbnRleHRbaV0uYmx0X3JlY3QueSA9IDA7CisJ CWRhdGEtPmdwdV9jb250ZXh0W2ldLmJsdF9yZWN0LncgPSAwOworCQlkYXRhLT5ncHVfY29udGV4 dFtpXS5ibHRfcmVjdC5oID0gMDsKKwkJZGF0YS0+Z3B1X2NvbnRleHRbaV0ubnVtX3JlY3Rhbmds ZXMgPSBOX0JMSVRTOworCQlkYXRhLT5ncHVfdGhyZWFkX3N0YXRlW2ldID0gUlVOTklORzsKKwkJ aWd0X2luZm8oIlN0YXJ0aW5nIEdQVSB0aHJlYWQgJWRcbiIsIGkpOworCQlkYXRhLT5ncHVfY29u dGV4dFtpXS5iYXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGRhdGEtPmJ1Zm1nciwgZGF0 YS0+ZGV2aWQpOworCQlwdGhyZWFkX2NyZWF0ZSgmZGF0YS0+Z3B1X3RocmVhZFtpXSwgTlVMTCwg Z3B1X2xvYWQsICh2b2lkKikmZGF0YS0+Z3B1X2NvbnRleHRbaV0pOworCQlzZW1fd2FpdCgmZGF0 YS0+Z3B1X3RocmVhZF9wYXVzZV9hY2tbaV0pOworCQlpZ3RfaW5mbygiR1BVIHRocmVhZCAlZCBz dGFydGVkXG4iLCBpKTsKKwkJaWYgKCsraSA9PSBJR1RfTUFYX1BJUEVTKQorCQkJYnJlYWs7CisJ fQorfQorCisKK3N0YXRpYyB2b2lkIHBhdXNlX2dwdV90aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRh KQoreworCWludCBpID0gMDsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKwlmb3JfZWFjaF9jb25u ZWN0ZWRfb3V0cHV0KCZkYXRhLT5kaXNwbGF5LCBvdXRwdXQpIHsKKwkJaWYgKGRhdGEtPmdwdV90 aHJlYWRfc3RhdGVbaV0gIT0gUlVOTklORykgeworCQkJKytpOworCQkJY29udGludWU7CisJCX0K KwkJaWd0X2luZm8oIlBhdXNpbmcgR1BVIHRocmVhZCAlZCBcbiIsIGkpOworCQlkYXRhLT5ncHVf dGhyZWFkX3N0YXRlW2ldID0gUEFVU0VEOworCQlzZW1fd2FpdCgmZGF0YS0+Z3B1X3RocmVhZF9w YXVzZV9hY2tbaV0pOworCQlpZ3RfaW5mbygiR1BVIHRocmVhZCAlZCBwYXVzZWRcbiIsIGkpOwor CQlpZiAoKytpID09IElHVF9NQVhfUElQRVMpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2 b2lkIHJlc3VtZV9ncHVfdGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaSA9IDA7 CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dCgmZGF0 YS0+ZGlzcGxheSwgb3V0cHV0KSB7CisJCWlmIChkYXRhLT5ncHVfdGhyZWFkX3N0YXRlW2ldICE9 IFBBVVNFRCkgeworCQkJKytpOworCQkJY29udGludWU7CisJCX0KKwkJaWd0X2luZm8oIlJlc3Vt aW5nIEdQVSB0aHJlYWQgJWRcbiIsIGkpOworCQlkYXRhLT5ncHVfdGhyZWFkX3N0YXRlW2ldID0g UlVOTklORzsKKwkJc2VtX3dhaXQoJmRhdGEtPmdwdV90aHJlYWRfcGF1c2VfYWNrW2ldKTsKKwkJ aWd0X2luZm8oIkdQVSB0aHJlYWQgJWQgcmVzdW1lZFxuIiwgaSk7CisJCWlmICgrK2kgPT0gSUdU X01BWF9QSVBFUykKKwkJCWJyZWFrOworCX0KK30KKworCitzdGF0aWMgdm9pZCBzdG9wX2dwdV90 aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRhKQoreworCWludCBpID0gMDsKKwlpZ3Rfb3V0cHV0X3Qg Km91dHB1dDsKKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KCZkYXRhLT5kaXNwbGF5LCBvdXRw dXQpIHsKKwkJaWd0X2luZm8oIlN0b3BpbmcgR1BVIHRocmVhZCAlZFxuIiwgaSk7CisJCWRhdGEt PmdwdV90aHJlYWRfc3RhdGVbaV0gPSBTVE9QUEVEOworCQlwdGhyZWFkX2pvaW4oZGF0YS0+Z3B1 X3RocmVhZFtpXSwgTlVMTCk7CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmZiX3B0ciA9IE5VTEw7 CisJCWludGVsX2JhdGNoYnVmZmVyX2ZyZWUoZGF0YS0+Z3B1X2NvbnRleHRbaV0uYmF0Y2gpOwor CQlpZiAoKytpID09IElHVF9NQVhfUElQRVMpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2 b2lkIHN0YXJ0X2NwdV90aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRhKQoreworCWludCBpOworCWZv ciAoaSA9IDA7IGkgPCBkYXRhLT5udW1iZXJfb2ZfY29yZXM7aSsrKSB7CisJCWRhdGEtPmNwdV9j b250ZXh0W2ldLmJ1ZjEgPSBtYWxsb2MoQlVGX1NJWkUpOworCQlkYXRhLT5jcHVfY29udGV4dFtp XS5idWYyID0gbWFsbG9jKEJVRl9TSVpFKTsKKwkJZGF0YS0+Y3B1X2NvbnRleHRbaV0uaWQgPSBp OworCQlkYXRhLT5jcHVfY29udGV4dFtpXS5kYXRhID0gZGF0YTsKKwkJcHRocmVhZF9jcmVhdGUo JmRhdGEtPmNwdV90aHJlYWRbaV0sIE5VTEwsIGNwdV9sb2FkLCAodm9pZCopJmRhdGEtPmNwdV9j b250ZXh0W2ldKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0b3BfY3B1X3RocmVhZHMoc3RydWN0 IGRhdGEgKmRhdGEpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGRhdGEtPm51bWJlcl9v Zl9jb3JlcztpKyspIHsKKwkJZGF0YS0+Y3B1X3RocmVhZF9zdG9wW2ldID0gdHJ1ZTsKKwkJcHRo cmVhZF9qb2luKGRhdGEtPmNwdV90aHJlYWRbaV0sIE5VTEwpOworCQlmcmVlKGRhdGEtPmNwdV9j b250ZXh0W2ldLmJ1ZjEpOworCQlmcmVlKGRhdGEtPmNwdV9jb250ZXh0W2ldLmJ1ZjIpOworCX0K K30KKworc3RhdGljIHZvaWQgY3JlYXRlX2ZyYW1lYnVmZmVycyhzdHJ1Y3QgZGF0YSAqZGF0YSkK K3sKKwlpbnQgaSwgajsKKwl1aW50NjRfdCBjdXJzb3Jfd2lkdGgsIGN1cnNvcl9oZWlnaHQ7CisJ aWd0X291dHB1dF90ICpvdXRwdXQ7CisKKwlkb19vcl9kaWUoZHJtR2V0Q2FwKGRhdGEtPmRybV9m ZCwgRFJNX0NBUF9DVVJTT1JfV0lEVEgsICZjdXJzb3Jfd2lkdGgpKTsKKwlkb19vcl9kaWUoZHJt R2V0Q2FwKGRhdGEtPmRybV9mZCwgRFJNX0NBUF9DVVJTT1JfSEVJR0hULCAmY3Vyc29yX2hlaWdo dCkpOworCisJaSA9IDA7CisJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dCgmZGF0YS0+ZGlzcGxh eSwgb3V0cHV0KSB7CisJCWlmICghZGF0YS0+Y3Vyc29yX2ZiW2ldLmZiX2lkKSB7CisJCQlpZ3Rf Y3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0 LAorCQkJCQlEUk1fRk9STUFUX0FSR0I4ODg4LAorCQkJCQlMT0NBTF9EUk1fRk9STUFUX01PRF9O T05FLAorCQkJCQkxLjAsMC4wLDAuMCwKKwkJCQkJJmRhdGEtPmN1cnNvcl9mYltpXSk7CisJCX0K KwkJZm9yIChqID0gMDsgaiA8IGRhdGEtPm51bV9wbGFuZXNbaV07aisrKSB7CisJCQlpZiAoIWRh dGEtPmZiW2kgKiBNQVhfUExBTkVTICsgal0uZmJfaWQpIHsKKwkJCQlpZ3RfY3JlYXRlX2NvbG9y X3BhdHRlcm5fZmIoZGF0YS0+ZHJtX2ZkLAorCQkJCSAgICBkYXRhLT5oaWdoZXN0X21vZGVbaV0t PmhkaXNwbGF5LAorCQkJCSAgICBkYXRhLT5oaWdoZXN0X21vZGVbaV0tPnZkaXNwbGF5LAorCQkJ CSAgICBkYXRhLT5mb3JtYXQsCisJCQkJICAgIGRhdGEtPm1vZGlmaWVyLAorCQkJCSAgICAwLjAs IDEuMCwgMC4wLCAmZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXSk7CisJCQl9CisJCX0KKwkJ aWYgKCsraSA9PSBJR1RfTUFYX1BJUEVTKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9p ZCBkZXN0cm95X2ZyYW1lYnVmZmVycyhzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaSwgajsK KwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKworCWkgPSAwOworCWZvcl9lYWNoX2Nvbm5lY3RlZF9v dXRwdXQoJmRhdGEtPmRpc3BsYXksIG91dHB1dCkgeworCQlmb3IgKGogPSAwO2ogPCBNQVhfUExB TkVTOyBqKyspIHsKKwkJCWlmIChkYXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpdLmZiX2lkKSB7 CisJCQkJaWd0X3BsYW5lX3NldF9mYigmZGF0YS0+ZGlzcGxheS5waXBlc1tpXS5wbGFuZXNbal0s IE5VTEwpOworCQkJCWlndF9yZW1vdmVfZmIoZGF0YS0+ZGlzcGxheS5kcm1fZmQsICZkYXRhLT5m YltpICogTUFYX1BMQU5FUyArIGpdKTsKKwkJCQlkYXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpd LmZiX2lkID0gMDsKKwkJCX0KKwkJfQorCQlpZiAoZGF0YS0+Y3Vyc29yX2ZiW2ldLmZiX2lkKSB7 CisJCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCAmZGF0YS0+Y3Vyc29yX2Zi W2ldKTsKKwkJCWRhdGEtPmN1cnNvcl9mYltpXS5mYl9pZCA9IDA7CisJCX0KKwkJaWYgKCsraSA9 PSBJR1RfTUFYX1BJUEVTKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcmVwYXJl X3Rlc3Qoc3RydWN0IGRhdGEgKmRhdGEsIGJvb2wgb3ZlcnJpZGUsIGJvb2wgY3B1LCBib29sIGdw dSkKK3sKKwlpbnQgaSxqOworCWlndF9vdXRwdXRfdCAqb3V0cHV0OworCisJZGF0YS0+bnVtYmVy X29mX2NvcmVzID0gbWluKHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pLCBNQVhfQ09SRVMp OworCisJZm9yIChpID0gMDsgaSA8IElHVF9NQVhfUElQRVM7IGkrKykgeworCQlmb3IgKGogPSAw O2ogPCBNQVhfUExBTkVTOyBqKyspCisJCQlkYXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpdLmZi X2lkID0gMDsKKwkJZGF0YS0+Y3Vyc29yX2ZiW2ldLmZiX2lkID0gMDsKKwkJZGF0YS0+bnVtX3Bs YW5lc1tpXSA9IC0xOworCQlkYXRhLT5sYXN0X21vZGVbaV0gPSBOVUxMOworCQlzZW1faW5pdCgm ZGF0YS0+Z3B1X3RocmVhZF9wYXVzZV9hY2tbaV0sIDAsIDApOworCX0KKwlpZiAoY3B1KSB7CisJ CXN0YXJ0X2NwdV90aHJlYWRzKGRhdGEpOworCX0KKworCWRhdGEtPm1vZGVfcmVzb3VyY2VzID0g ZHJtTW9kZUdldFJlc291cmNlcyhkYXRhLT5kcm1fZmQpOworCWlmICghZGF0YS0+bW9kZV9yZXNv dXJjZXMpIHsKKwkJaWd0X3dhcm4oImRybU1vZGVHZXRSZXNvdXJjZXMgZmFpbGVkOiAlc1xuIiwg c3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuOworCX0KKworCW1lbXNldChkYXRhLT5oaWdoZXN0 X21vZGUsIDAsIHNpemVvZihkcm1Nb2RlTW9kZUluZm8gKikgKiBJR1RfTUFYX1BJUEVTKTsKKwor CWZpbGxfY29ubmVjdG9yX3RvX3BpcGVfYXJyYXkoZGF0YSwgZGF0YS0+bW9kZV9yZXNvdXJjZXMs IGRhdGEtPmNvbm5lY3RvcnMpOworCisJaSA9IDA7CisJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1 dCgmZGF0YS0+ZGlzcGxheSwgb3V0cHV0KSB7CisJCWRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3Rv ciA9IChkcm1Nb2RlQ29ubmVjdG9yICopZGF0YS0+Y29ubmVjdG9yc1tpXTsKKwkJaWYgKCFjb25u ZWN0b3IpCisJCQljb250aW51ZTsKKwkJaWYgKCFkYXRhLT5oaWdoZXN0X21vZGVbaV0pIHsKKwkJ CWlmICghb3ZlcnJpZGUgJiYgY29ubmVjdG9yLT5jb3VudF9tb2RlcykgeworCQkJCWRhdGEtPmhp Z2hlc3RfbW9kZVtpXSA9IGZpbmRfaGlnaGVzdF9tb2RlKGNvbm5lY3Rvcik7CisJCQl9CisJCQll bHNlCisJCQkJZGF0YS0+aGlnaGVzdF9tb2RlW2ldID0gJnVoZF9tb2RlXzYwaHo7CisJCX0KKwkJ aWd0X2luZm8oIlVzaW5nIG1vZGU6IFxuIik7CisJCWttc3Rlc3RfZHVtcF9tb2RlKGRhdGEtPmhp Z2hlc3RfbW9kZVtpXSk7CisKKwkJaWYgKGRhdGEtPm51bV9wbGFuZXNbaV0gPT0gLTEpCisJCQlk YXRhLT5udW1fcGxhbmVzW2ldID0gZGF0YS0+ZGlzcGxheS5waXBlc1tpXS5uX3BsYW5lczsKKwor CQlpZ3RfaW5mbygiTWF4IG51bWJlciBvZiBwbGFuZXMgaXMgJWQgZm9yIHBpcGUgJWRcbiIsIGRh dGEtPm51bV9wbGFuZXNbaV0sIGkpOworCisJCWlmICgrK2kgPT0gSUdUX01BWF9QSVBFUykKKwkJ CWJyZWFrOworCX0KKworCWNyZWF0ZV9mcmFtZWJ1ZmZlcnMoZGF0YSk7CisJaWYgKGdwdSkgewor CQlzdGFydF9ncHVfdGhyZWFkcyhkYXRhKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaF90 ZXN0KHN0cnVjdCBkYXRhICpkYXRhLCBib29sIG92ZXJyaWRlLCBib29sIGNwdSwgYm9vbCBncHUp Cit7CisJaW50IGk7CisKKwlpZiAoZ3B1KSB7CisJCXN0b3BfZ3B1X3RocmVhZHMoZGF0YSk7CisJ fQorCS8qCisJICogQXMgd2UgY2hhbmdlIHRpbGluZy9mb3JtYXQgd2UgbmVlZCBhIG5ldyBGQgor CSAqLworCWRlc3Ryb3lfZnJhbWVidWZmZXJzKGRhdGEpOworCWZvciAoaSA9IDA7IGkgPCBJR1Rf TUFYX1BJUEVTOyBpKyspIHsKKwkJZGF0YS0+bnVtX3BsYW5lc1tpXSA9IC0xOworCQlkYXRhLT5s YXN0X21vZGVbaV0gPSBOVUxMOworCX0KKwlpZiAoY3B1KSB7CisJCXN0b3BfY3B1X3RocmVhZHMo ZGF0YSk7CisJfQorCXJlbGVhc2VfY29ubmVjdG9ycyhkYXRhLT5jb25uZWN0b3JzKTsKKworCWRy bU1vZGVGcmVlUmVzb3VyY2VzKGRhdGEtPm1vZGVfcmVzb3VyY2VzKTsKK30KKworc3RydWN0IGRh dGEgZGF0YSA9IHsKKwkuZm9ybWF0ID0gRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwkubW9kaWZpZXIg PSBEUk1fRk9STUFUX01PRF9MSU5FQVIsCisJLmRldmlkID0gMCwKK307CisKK2VudW0geworICAg IFBMQU5FU19PTkxZID0gMCwKKyAgICBDUFVfTE9BRCwKKyAgICBHUFVfTE9BRCwKKyAgICBNT0RF X09WRVJSSURFLAorfSB0ZXN0X2JpdHM7CisKK3N0YXRpYyB2b2lkIHNldF9wYXJhbXModWludDhf dCBiaXRzLCBib29sICptb2RlX292ZXJyaWRlLCBib29sICpjcHVfbG9hZCwgYm9vbCAqZ3B1X2xv YWQpCit7CisJKmNwdV9sb2FkID0gKGJpdHMgJiAoMSA8PCBDUFVfTE9BRCkpICE9IDAgPyB0cnVl IDogZmFsc2U7CisJKmdwdV9sb2FkID0gKGJpdHMgJiAoMSA8PCBHUFVfTE9BRCkpICE9IDAgPyB0 cnVlIDogZmFsc2U7CisJKm1vZGVfb3ZlcnJpZGUgPSAoYml0cyAmICgxIDw8IE1PREVfT1ZFUlJJ REUpKSAhPSAwID8gdHJ1ZSA6IGZhbHNlOworfQorCisKK2lndF9tYWluCit7CisJYm9vbCBtb2Rl X292ZXJyaWRlOworCWJvb2wgY3B1X2xvYWQ7CisJYm9vbCBncHVfbG9hZDsKKwl1aW50OF90IGZv cm1hdF9pZHggPSAwLCB0aWxpbmdfaWR4ID0gMDsKKwl1aW50NjRfdCBtYXhfY29tYmluYXRpb25z ID0gMSA8PCAoTU9ERV9PVkVSUklERSArIDEpOworCWludDhfdCB0ZXN0X2NvbWIgPSBtYXhfY29t YmluYXRpb25zIC0gMTsKKworCWlndF9maXh0dXJlIHsKKwkJZGF0YS5kcm1fZmQgPSBkYXRhLmRp c3BsYXkuZHJtX2ZkID0gZHJtX29wZW5fZHJpdmVyX21hc3RlcihEUklWRVJfQU5ZKTsKKworCQlr bXN0ZXN0X3NldF92dF9ncmFwaGljc19tb2RlKCk7CisKKwkJaWd0X2Rpc3BsYXlfcmVxdWlyZSgm ZGF0YS5kaXNwbGF5LCBkYXRhLmRpc3BsYXkuZHJtX2ZkKTsKKwkJaWd0X3JlcXVpcmUoZGF0YS5k aXNwbGF5LmlzX2F0b21pYyk7CisJCWlndF9kaXNwbGF5X3JlcXVpcmVfb3V0cHV0KCZkYXRhLmRp c3BsYXkpOworCX0KKworCWRvIHsKKwkJc2V0X3BhcmFtcyh0ZXN0X2NvbWIsICZtb2RlX292ZXJy aWRlLCAmY3B1X2xvYWQsICZncHVfbG9hZCk7CisJCS8qCisJCSAqIERvIGFsbCBjb21iaW5hdGlv bnMgb2YgbW9kZV9vdmVycmlkZSwgY3B1X2xvYWQsIGdwdV9sb2FkIGFuZAorCQkgKiBhbGwgZm9y bWF0IGFuZCB0aWxpbmcgZm9yIGVhY2ggb2YgdGhvc2UuCisJCSAqLworCQlmb3IgKGZvcm1hdF9p ZHggPSAwOyBmb3JtYXRfaWR4IDwgTl9GT1JNQVRTOyBmb3JtYXRfaWR4KyspCisJCQlmb3IgKHRp bGluZ19pZHggPSAwOyB0aWxpbmdfaWR4IDwgTl9USUxJTkdfTUVUSE9EUzsgdGlsaW5nX2lkeCsr KSB7CisJCQkJZGF0YS5mb3JtYXQgPSBmb3JtYXRzW2Zvcm1hdF9pZHhdOworCQkJCWRhdGEubW9k aWZpZXIgPSB0aWxpbmdzW3RpbGluZ19pZHhdOworCisJCQkJaWd0X2ZpeHR1cmUgeworCQkJCQlw cmVwYXJlX3Rlc3QoJmRhdGEsIG1vZGVfb3ZlcnJpZGUsIGNwdV9sb2FkLCBncHVfbG9hZCk7CisJ CQkJfQorCisJCQkJaWd0X3N1YnRlc3RfZigic3RyZXNzJXMlcyVzLSVzLSVzIiwKKwkJCQkgICAg ICBtb2RlX292ZXJyaWRlID09IGZhbHNlID8gIiIgOiAiLW1vZGUtb3ZlcnJpZGUiLAorCQkJCSAg ICAgIGNwdV9sb2FkID09IGZhbHNlID8gIiIgOiAiLWNwdS1sb2FkIiwKKwkJCQkgICAgICBncHVf bG9hZCA9PSBmYWxzZSA/ICIiIDogIi1ncHUtbG9hZCIsCisJCQkJICAgICAgZm9ybWF0X3N0cihm b3JtYXRfaWR4KSwKKwkJCQkgICAgICB0aWxpbmdfc3RyKHRpbGluZ19pZHgpKSB7CisKKwkJCQkJ c3RyZXNzKCZkYXRhKTsKKworCQkJCX0KKworCQkJCWlndF9maXh0dXJlIHsKKwkJCQkJZmluaXNo X3Rlc3QoJmRhdGEsIG1vZGVfb3ZlcnJpZGUsIGNwdV9sb2FkLCBncHVfbG9hZCk7CisJCQkJfQor CQkJfQorCX0gd2hpbGUgKC0tdGVzdF9jb21iID4gMCApOworCisJaWd0X2ZpeHR1cmUgeworCisJ CWlndF9kaXNwbGF5X2ZpbmkoJmRhdGEuZGlzcGxheSk7CisJfQorfQpcIE5vIG5ld2xpbmUgYXQg ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24u YnVpbGQKaW5kZXggYTdiMmIzMjIuLmI2ZDdlZDQ1IDEwMDY0NAotLS0gYS90ZXN0cy9tZXNvbi5i dWlsZAorKysgYi90ZXN0cy9tZXNvbi5idWlsZApAQCAtNTAsNiArNTAsNyBAQCB0ZXN0X3Byb2dz ID0gWwogCSdrbXNfcGxhbmVfbXVsdGlwbGUnLAogCSdrbXNfcGxhbmVfc2NhbGluZycsCiAJJ2tt c19wcmltZScsCisJJ2ttc19wbGFuZV9zdHJlc3MnLAogCSdrbXNfcHJvcF9ibG9iJywKIAkna21z X3Byb3BlcnRpZXMnLAogCSdrbXNfcHNyJywKLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRl dkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pZ3QtZGV2