From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 13D4C8870A for ; Thu, 11 Apr 2019 13:49:37 +0000 (UTC) From: Stanislav Lisovskiy Date: Thu, 11 Apr 2019 16:49:31 +0300 Message-Id: <20190411134931.23399-1-stanislav.lisovskiy@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v8] 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, juha-pekka.heikkila@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 ZCB3cm9uZyBpbmRleCBmb3IgY3Vyc29yIEZCKGN1cnNvciBGQiBpcyBvbmUgcGVyIHBpcGUpCgpT aWduZWQtb2ZmLWJ5OiBTdGFuaXNsYXYgTGlzb3Zza2l5IDxzdGFuaXNsYXYubGlzb3Zza2l5QGlu dGVsLmNvbT4KLS0tCiB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzICAgfCAgIDEgKwogdGVzdHMva21z X3BsYW5lX3N0cmVzcy5jIHwgNjc3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogdGVzdHMvbWVzb24uYnVpbGQgICAgICAgIHwgICAxICsKIDMgZmlsZXMgY2hhbmdlZCwg Njc5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9rbXNfcGxhbmVfc3Ry ZXNzLmMKCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZp bGUuc291cmNlcwppbmRleCA3MWNjZjAwYS4uOWQwNGQ4ODggMTAwNjQ0Ci0tLSBhL3Rlc3RzL01h a2VmaWxlLnNvdXJjZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwpAQCAtNTksNiArNTks NyBAQCBURVNUU19wcm9ncyA9IFwKIAlrbXNfcGxhbmVfbG93cmVzIFwKIAlrbXNfcGxhbmVfbXVs dGlwbGUgXAogCWttc19wbGFuZV9zY2FsaW5nIFwKKwlrbXNfcGxhbmVfc3RyZXNzIFwKIAlrbXNf cHJvcF9ibG9iIFwKIAlrbXNfcHJvcGVydGllcyBcCiAJa21zX3BzciBcCmRpZmYgLS1naXQgYS90 ZXN0cy9rbXNfcGxhbmVfc3RyZXNzLmMgYi90ZXN0cy9rbXNfcGxhbmVfc3RyZXNzLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmI2MTUwMWVkCi0tLSAvZGV2L251bGwKKysr IGIvdGVzdHMva21zX3BsYW5lX3N0cmVzcy5jCkBAIC0wLDAgKzEsNjc3IEBACisgLyoKKyAqIENv cHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRo ZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRI RSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H UworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJpZ3QuaCIKKyNpbmNsdWRl ICJpZ3RfcmFuZC5oIgorI2luY2x1ZGUgImRybXRlc3QuaCIKKyNpbmNsdWRlICJzd19zeW5jLmgi CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c3Rk Ym9vbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVk ZSA8dGltZS5oPgorI2luY2x1ZGUgPHBvbGwuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKKyNp Zm5kZWYgRFJNX0NBUF9DVVJTT1JfV0lEVEgKKyNkZWZpbmUgRFJNX0NBUF9DVVJTT1JfV0lEVEgg MHg4CisjZW5kaWYKKyNpZm5kZWYgRFJNX0NBUF9DVVJTT1JfSEVJR0hUCisjZGVmaW5lIERSTV9D QVBfQ1VSU09SX0hFSUdIVCAweDkKKyNlbmRpZgorCisKK2RybU1vZGVNb2RlSW5mbyB1aGRfbW9k ZV82MGh6ID0geworCS5uYW1lID0gIjM4NDB4MjE2MEA2MGh6IiwKKwkudnJlZnJlc2ggPSA2MCwK KwkuY2xvY2sgPSAxNDI2NjcqMiwKKwkuaGRpc3BsYXkgPSAzODQwLAorCS5oc3luY19zdGFydCA9 IDE5MzYqMiwKKwkuaHN5bmNfZW5kID0gMTk1MioyLAorCS5odG90YWwgPSAyMTA0KjIsCisJLnZk aXNwbGF5ID0gMjE2MCwKKwkudnN5bmNfc3RhcnQgPSAxMDgzKjIsCisJLnZzeW5jX2VuZCA9IDEw OTcqMiwKKwkudnRvdGFsID0gMTEyOCoyLAorCS5mbGFncyA9IDB4YSwKK307CisKKyNkZWZpbmUg Tl9GT1JNQVRTIDMKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBmb3JtYXRzW05fRk9STUFUU10gPSB7 CisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX1JHQjU2NSwKKwlEUk1fRk9STUFU X1hSR0IyMTAxMDEwLAorfTsKKworI2RlZmluZSBOX1RJTElOR19NRVRIT0RTIDMKK3N0YXRpYyBj b25zdCB1aW50NjRfdCB0aWxpbmdzW05fVElMSU5HX01FVEhPRFNdID0geworCURSTV9GT1JNQVRf TU9EX0xJTkVBUiwKKwlJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKKwlJOTE1X0ZPUk1BVF9NT0Rf WV9USUxFRCwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfc3RyKGludCBmb3JtYXRf aW5kZXgpCit7CisJc3dpdGNoIChmb3JtYXRzW2Zvcm1hdF9pbmRleF0pIHsKKwljYXNlIERSTV9G T1JNQVRfUkdCNTY1OgorCQlyZXR1cm4gInJnYjU2NSI7CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4 ODg4OgorCQlyZXR1cm4gInhyZ2I4ODg4IjsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6 CisJCXJldHVybiAieHJnYjIxMDEwMTAiOworCWRlZmF1bHQ6CisJCWlndF9hc3NlcnQoZmFsc2Up OworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnRpbGluZ19zdHIoaW50IHRpbGluZ19pbmRl eCkKK3sKKwlzd2l0Y2ggKHRpbGluZ3NbdGlsaW5nX2luZGV4XSkgeworCWNhc2UgRFJNX0ZPUk1B VF9NT0RfTElORUFSOgorCQlyZXR1cm4gInVudGlsZWQiOworCWNhc2UgSTkxNV9GT1JNQVRfTU9E X1hfVElMRUQ6CisJCXJldHVybiAieHRpbGVkIjsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJ TEVEOgorCQlyZXR1cm4gInl0aWxlZCI7CisJZGVmYXVsdDoKKwkJaWd0X2Fzc2VydChmYWxzZSk7 CisJfQorfQorCisKKyNkZWZpbmUgTUFYX0NPUkVTIDgKKyNkZWZpbmUgTUFYX1BMQU5FUyAxNgor CitzdHJ1Y3QgZGF0YTsKKworc3RydWN0IHRocmVhZF9jb250ZXh0IHsKKwlzdHJ1Y3QgZGF0YSAq ZGF0YTsKKwlpbnQgaWQ7CisJdm9pZCAqYnVmMTsKKwl2b2lkICpidWYyOworfTsKKworc3RydWN0 IHJlY3QgeworCWludCB4OworCWludCB5OworCWludCB3OworCWludCBoOworfTsKKworc3RydWN0 IGdwdV9jb250ZXh0IHsKKwlzdHJ1Y3QgZGF0YSAqZGF0YTsKKwlpbnQgcGlwZTsKKwlpbnQgY29s b3I7CisJc3RydWN0IHJlY3QgYmx0X3JlY3Q7Cit9OworCitzdHJ1Y3QgZGF0YSB7CisJaW50IGRy bV9mZDsKKwlpZ3RfZGlzcGxheV90IGRpc3BsYXk7CisJaW50IG51bV9wbGFuZXNbSUdUX01BWF9Q SVBFU107CisJdWludDMyX3QgZm9ybWF0OworCXVpbnQ2NF90IG1vZGlmaWVyOworCXVpbnQzMl90 IGRldmlkOworCWRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncjsKKwlkcm1Nb2RlTW9kZUluZm8gKmxh c3RfbW9kZVtJR1RfTUFYX1BJUEVTXTsKKwlzdHJ1Y3QgaWd0X2ZiIGZiW0lHVF9NQVhfUElQRVMg KiBNQVhfUExBTkVTXTsKKwlzdHJ1Y3QgaWd0X2ZiIGN1cnNvcl9mYltJR1RfTUFYX1BJUEVTXTsK KwlwdGhyZWFkX3QgY3B1X3RocmVhZFtNQVhfQ09SRVNdOworCWJvb2wgY3B1X3RocmVhZF9zdG9w W01BWF9DT1JFU107CisJc3RydWN0IHRocmVhZF9jb250ZXh0IGNwdV9jb250ZXh0W01BWF9DT1JF U107CisJc3RydWN0IGdwdV9jb250ZXh0IGdwdV9jb250ZXh0W0lHVF9NQVhfUElQRVNdOworfTsK KworCitzdHJ1Y3QgYmFzZV9jcmMgeworCWJvb2wgc2V0OworCWlndF9jcmNfdCBjcmM7Cit9Owor CitpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmM7CisKKyNkZWZpbmUgQlVGX1NJWkUgMTI4KjEwMjQq MTAyNAorCitzdGF0aWMgdm9pZCAqY3B1X2xvYWQodm9pZCAqZCkKK3sKKwljaGFyICpidWYxLCAq YnVmMjsKKwlzdHJ1Y3QgdGhyZWFkX2NvbnRleHQgKmNvbnRleHQgPSAoc3RydWN0IHRocmVhZF9j b250ZXh0ICopZDsKKwlzdHJ1Y3QgZGF0YSAqZGF0YSA9IGNvbnRleHQtPmRhdGE7CisKKwlidWYx ID0gY29udGV4dC0+YnVmMTsKKwlidWYyID0gY29udGV4dC0+YnVmMjsKKworCWRhdGEtPmNwdV90 aHJlYWRfc3RvcFtjb250ZXh0LT5pZF0gPSBmYWxzZTsKKworCXdoaWxlKCFkYXRhLT5jcHVfdGhy ZWFkX3N0b3BbY29udGV4dC0+aWRdKSB7CisJCW1lbWNweShidWYxLCBidWYyLCBCVUZfU0laRSk7 CisJCW1lbWNweShidWYyLCBidWYxLCBCVUZfU0laRSk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9 CisKKworc3RhdGljIHZvaWQgc2NyYXRjaF9idWZfaW5pdChzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAor CQkJZHJtX2ludGVsX2JvICpibywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3RyaWRlLCBp bnQgdGlsaW5nLCBpbnQgYnBwKQoreworCWJ1Zi0+Ym8gPSBibzsKKwlidWYtPnN0cmlkZSA9IHN0 cmlkZTsKKwlidWYtPnRpbGluZyA9IHRpbGluZzsKKwlidWYtPnNpemUgPSB3aWR0aCAqIGhlaWdo dCAqIGJwcCAvIDg7CisJYnVmLT5icHAgPSBicHA7Cit9CisKKworc3RhdGljIHZvaWQgZ3B1X2xv YWQoc3RydWN0IGdwdV9jb250ZXh0ICpncHVfY29udGV4dCwgaW50IHBsYW5lX2luZGV4KQorewor CXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2ggPSBOVUxMOworCXN0cnVjdCBpZ3RfYnVm IGRzdDsKKwlzdHJ1Y3QgZGF0YSAqZGF0YSA9IGdwdV9jb250ZXh0LT5kYXRhOworCWludCBwaXBl ID0gZ3B1X2NvbnRleHQtPnBpcGU7CisJaWd0X2ZpbGxmdW5jX3QgZ3BncHVfZmlsbCA9IE5VTEw7 CisJZHJtX2ludGVsX2JvICpibzsKKwlzdHJ1Y3QgaWd0X2ZiICpmYiA9ICZkYXRhLT5mYltwaXBl ICogTUFYX1BMQU5FUyArIHBsYW5lX2luZGV4XTsKKwlpbnQgcmVjdF9kaXZpc29yOworCWludCBy ZWN0X3dpZHRoOworCWludCByZWN0X2hlaWdodDsKKwlpbnQgZnJhbWVfd2lkdGggPSBmYi0+d2lk dGg7CisJaW50IGZyYW1lX2hlaWdodCA9IGZiLT5oZWlnaHQgLyAyOworCWludCBieXRlc19wZXJf cGl4ZWwgPSBmYi0+cGxhbmVfYnBwWzBdIC8gODsKKworCWlmICghZGF0YS0+ZGV2aWQpIHsKKwkJ ZGF0YS0+ZGV2aWQgPSBpbnRlbF9nZXRfZHJtX2RldmlkKGRhdGEtPmRybV9mZCk7CisJCWlndF9y ZXF1aXJlX2dlbShkYXRhLT5kcm1fZmQpOworCisJCWRhdGEtPmJ1Zm1nciA9IGRybV9pbnRlbF9i dWZtZ3JfZ2VtX2luaXQoZGF0YS0+ZHJtX2ZkLCA0MDk2KTsKKwkJaWd0X2Fzc2VydChkYXRhLT5i dWZtZ3IpOworCX0KKworCWdwZ3B1X2ZpbGwgPSBpZ3RfZ2V0X2dwZ3B1X2ZpbGxmdW5jKGRhdGEt PmRldmlkKTsKKworCWlndF9yZXF1aXJlX2YoZ3BncHVfZmlsbCwKKwkgICAgICAibm8gZ3BncHUt ZmlsbCBmdW5jdGlvblxuIik7CisKKwliYXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGRh dGEtPmJ1Zm1nciwgZGF0YS0+ZGV2aWQpOworCWlndF9hc3NlcnQoYmF0Y2gpOworCisJYm8gPSBn ZW1faGFuZGxlX3RvX2xpYmRybV9ibyhkYXRhLT5idWZtZ3IsIGRhdGEtPmRybV9mZCwgIiIsIGZi LT5nZW1faGFuZGxlKTsKKworCXNjcmF0Y2hfYnVmX2luaXQoJmRzdCwgYm8sIGZyYW1lX3dpZHRo LCBmcmFtZV9oZWlnaHQsIGZiLT5zdHJpZGVzWzBdLCBmYi0+bW9kaWZpZXIsIGZiLT5wbGFuZV9i cHBbMF0pOworCisJZ3BncHVfZmlsbChiYXRjaCwKKwkgICAmZHN0LCAwLCAwLCAoZnJhbWVfd2lk dGggKiBieXRlc19wZXJfcGl4ZWwpLCBmcmFtZV9oZWlnaHQsCisJICAgZ3B1X2NvbnRleHQtPmNv bG9yKTsKKworCWdwdV9jb250ZXh0LT5jb2xvciArPSAweDEwOworCisJaW50ZWxfYmF0Y2hidWZm ZXJfZmx1c2goYmF0Y2gpOworCWludGVsX2JhdGNoYnVmZmVyX2ZyZWUoYmF0Y2gpOworCWRybV9p bnRlbF9ib191bnJlZmVyZW5jZShibyk7CisKKwkvKiBkaXZpZGUgYXQgbGVhc3QgYnkgMiBhbmQg dXAgdG8gOCAqLworCXJlY3RfZGl2aXNvciA9IDEgPDwgKGhhcnNfcGV0cnVza2FfZjU0XzFfcmFu ZG9tX3Vuc2FmZV9tYXgoMykgKyAxKTsKKworCXJlY3Rfd2lkdGggPSBmcmFtZV93aWR0aCAvIHJl Y3RfZGl2aXNvcjsKKwlyZWN0X2hlaWdodCA9IGZyYW1lX2hlaWdodCAvIHJlY3RfZGl2aXNvcjsK KworCWdwdV9jb250ZXh0LT5ibHRfcmVjdC54ID0gKGdwdV9jb250ZXh0LT5ibHRfcmVjdC54ICsg cmVjdF93aWR0aCkgJSAoZnJhbWVfd2lkdGggLSByZWN0X3dpZHRoKTsKKwlncHVfY29udGV4dC0+ Ymx0X3JlY3QueSA9IChncHVfY29udGV4dC0+Ymx0X3JlY3QueSArIHJlY3RfaGVpZ2h0KSAlIChm cmFtZV9oZWlnaHQgLSByZWN0X2hlaWdodCk7CisKKwlpZ3RfZHJhd19yZWN0KGRhdGEtPmRybV9m ZCwgZGF0YS0+YnVmbWdyLCBOVUxMLAorCQkgICBmYi0+Z2VtX2hhbmRsZSwgZnJhbWVfd2lkdGgg KiBmcmFtZV9oZWlnaHQgKiBieXRlc19wZXJfcGl4ZWwsIGZiLT53aWR0aCAqIGJ5dGVzX3Blcl9w aXhlbCwKKwkJICAgSUdUX0RSQVdfQkxULCBncHVfY29udGV4dC0+Ymx0X3JlY3QueCwgZ3B1X2Nv bnRleHQtPmJsdF9yZWN0LnksCisJCSAgIHJlY3Rfd2lkdGgsIHJlY3RfaGVpZ2h0LCAweGZmLCBm Yi0+cGxhbmVfYnBwWzBdKTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBwaXBlX3NlbGVj dChlbnVtIHBpcGUgcGlwZSkKK3sKKwlpZiAocGlwZSA+IDEpCisJCXJldHVybiBwaXBlIDw8IERS TV9WQkxBTktfSElHSF9DUlRDX1NISUZUOworCWVsc2UgaWYgKHBpcGUgPiAwKQorCQlyZXR1cm4g RFJNX1ZCTEFOS19TRUNPTkRBUlk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIHVu c2lnbmVkIGdldF92YmxhbmsoaW50IGZkLCBlbnVtIHBpcGUgcGlwZSwgdW5zaWduZWQgZmxhZ3Mp Cit7CisJdW5pb24gZHJtX3dhaXRfdmJsYW5rIHZibDsKKworCW1lbXNldCgmdmJsLCAwLCBzaXpl b2YodmJsKSk7CisJdmJsLnJlcXVlc3QudHlwZSA9IERSTV9WQkxBTktfUkVMQVRJVkUgfCBwaXBl X3NlbGVjdChwaXBlKSB8IGZsYWdzOworCWlmIChkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1dBSVRf VkJMQU5LLCAmdmJsKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gdmJsLnJlcGx5LnNlcXVlbmNl OworfQorCisKK3N0YXRpYyBpbnQgcGxhbmVfc3RyZXNzKHN0cnVjdCBkYXRhICpkYXRhLCBpZ3Rf b3V0cHV0X3QgKm91dHB1dCwgZW51bSBwaXBlIHBpcGUsIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwg Ym9vbCBncHUpCit7CisJaWd0X3BsYW5lX3QgKnBsYW5lOworCXVpbnQ2NF90IGN1cnNvcl93aWR0 aCwgY3Vyc29yX2hlaWdodDsKKwlpbnQgaTsKKwlpbnQgcmV0OworCWlndF9jcmNfdCBjcmMsIGNy YzI7CisJYm9vbCBuZXdfbW9kZSA9IGZhbHNlOworCisJaWYgKGRhdGEtPmxhc3RfbW9kZVtwaXBl XSAhPSBtb2RlKSB7CisJCWlndF9vdXRwdXRfb3ZlcnJpZGVfbW9kZShvdXRwdXQsIG1vZGUpOwor CQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZSk7CisKKwkJcmV0ID0gaWd0X2Rpc3Bs YXlfdHJ5X2NvbW1pdF9hdG9taWMoJmRhdGEtPmRpc3BsYXksCisJCQkJRFJNX01PREVfQVRPTUlD X1RFU1RfT05MWSB8IERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VULCBOVUxMKTsKKwkJaWYg KHJldCkgeworCQkJaWd0X3dhcm4oIkNvdWxkIG5vdCBjb21taXQgbW9kZTogXG4iKTsKKwkJCWtt c3Rlc3RfZHVtcF9tb2RlKG1vZGUpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWlndF9kaXNw bGF5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCQlkYXRhLT5sYXN0 X21vZGVbcGlwZV0gPSBtb2RlOworCQluZXdfbW9kZSA9IHRydWU7CisJfQorCisJLyoKKwkgKiBM b29rcyBsaWtlIHdlIGNhbid0IGhhdmUgcGxhbmVzIG9uIHRoYXQgcGlwZSBhdCBhbGwKKwkgKi8K KwlpZiAoIWRhdGEtPm51bV9wbGFuZXNbcGlwZV0pCisJCXJldHVybiAwOworCisJbW9kZSA9IGln dF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKKworCWRvX29yX2RpZShkcm1HZXRDYXAoZGF0YS0+ ZHJtX2ZkLCBEUk1fQ0FQX0NVUlNPUl9XSURUSCwgJmN1cnNvcl93aWR0aCkpOworCWRvX29yX2Rp ZShkcm1HZXRDYXAoZGF0YS0+ZHJtX2ZkLCBEUk1fQ0FQX0NVUlNPUl9IRUlHSFQsICZjdXJzb3Jf aGVpZ2h0KSk7CisKKwlpZiAoIWRhdGEtPmN1cnNvcl9mYltwaXBlXS5mYl9pZCkgeworCQlpZ3Rf Y3JlYXRlX2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0 LAorCQkJCURSTV9GT1JNQVRfQVJHQjg4ODgsCisJCQkJTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9O RSwKKwkJCQkJMS4wLDAuMCwwLjAsCisJCQkJCSZkYXRhLT5jdXJzb3JfZmJbcGlwZV0pOworCX0K KworCisJZm9yIChpID0gMDtpIDwgZGF0YS0+bnVtX3BsYW5lc1twaXBlXTtpKyspIHsKKwkJaWYg KCFkYXRhLT5mYltwaXBlICogTUFYX1BMQU5FUyArIGldLmZiX2lkKSB7CisJCQlpZ3RfY3JlYXRl X2NvbG9yX3BhdHRlcm5fZmIoZGF0YS0+ZHJtX2ZkLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRp c3BsYXksCisJCQkgICAgZGF0YS0+Zm9ybWF0LAorCQkJICAgIGRhdGEtPm1vZGlmaWVyLAorCQkJ ICAgIDAuMCwgMS4wLCAwLjAsICZkYXRhLT5mYltwaXBlICogTUFYX1BMQU5FUyArIGldKTsKKwkJ fQorCX0KKworCWlmIChuZXdfbW9kZSkgeworCQlpID0gMDsKKwkJZm9yX2VhY2hfcGxhbmVfb25f cGlwZSgmZGF0YS0+ZGlzcGxheSwgcGlwZSwgcGxhbmUpIHsKKwkJCWludCBwbGFuZV93aWR0aCwg cGxhbmVfaGVpZ2h0OworCQkJaWYgKHBsYW5lLT50eXBlID09IERSTV9QTEFORV9UWVBFX0NVUlNP UikgeworCQkJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5jdXJzb3JfZmJbcGlwZV0p OworCQkJCWlndF9mYl9zZXRfc2l6ZSgmZGF0YS0+Y3Vyc29yX2ZiW3BpcGVdLCBwbGFuZSwgY3Vy c29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0KTsKKwkJCQlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUs IGN1cnNvcl93aWR0aCwgY3Vyc29yX2hlaWdodCk7CisJCQkJcGxhbmVfd2lkdGggPSBjdXJzb3Jf d2lkdGg7CisJCQkJcGxhbmVfaGVpZ2h0ID0gY3Vyc29yX2hlaWdodDsKKwkJCX0gZWxzZSB7CisJ CQkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPmZiW3BpcGUgKiBNQVhfUExBTkVTICsg aV0pOworCQkJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24ocGxhbmUsIDAsIDApOworCQkJCWlndF9m Yl9zZXRfc2l6ZSgmZGF0YS0+ZmJbcGlwZSAqIE1BWF9QTEFORVMgKyBpXSwgcGxhbmUsIG1vZGUt PmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSk7CisJCQkJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5l LCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkpOworCQkJCXBsYW5lX3dpZHRoID0gbW9k ZS0+aGRpc3BsYXk7CisJCQkJcGxhbmVfaGVpZ2h0ID0gbW9kZS0+dmRpc3BsYXk7CisJCQl9CisK KwkJCXJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21taXRfYXRvbWljKCZkYXRhLT5kaXNwbGF5LCBE Uk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZIHwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQs IE5VTEwpOworCQkJd2hpbGUgKHJldCkgeworCQkJCWlmIChwbGFuZV93aWR0aCA8PSBjdXJzb3Jf d2lkdGggfHwgcGxhbmVfaGVpZ2h0IDw9IGN1cnNvcl9oZWlnaHQpCisJCQkJCWJyZWFrOworCQkJ CXBsYW5lX3dpZHRoIC89IDI7CisJCQkJcGxhbmVfaGVpZ2h0IC89IDI7CisJCQkJaWd0X3BsYW5l X3NldF9zaXplKHBsYW5lLCBwbGFuZV93aWR0aCwgcGxhbmVfaGVpZ2h0KTsKKwkJCQlpZ3RfaW5m bygiUmVkdWNlZCBwbGFuZSAlZCBzaXplIHRvICVkeCVkXG4iLCBwbGFuZS0+aW5kZXgsIHBsYW5l X3dpZHRoLCBwbGFuZV9oZWlnaHQpOworCQkJCXJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21taXRf YXRvbWljKCZkYXRhLT5kaXNwbGF5LCBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZIHwgRFJNX01P REVfQVRPTUlDX0FMTE9XX01PREVTRVQsIE5VTEwpOworCQkJfQorCQkJaWYgKHJldCkgeworCQkJ CWlndF9pbmZvKCJQbGFuZSAlZCBwaXBlICVkIHRyeSBjb21taXQgZmFpbGVkLCBleGl0aW5nXG4i LCBpLCBwaXBlKTsKKwkJCQlkYXRhLT5udW1fcGxhbmVzW3BpcGVdID0gaTsKKwkJCQkvKgorCQkJ CSAqIFdlIGhhdmUgbm93IGRldGVybWluZWQgbWF4IGFtb3VudCBvZiBmdWxsIHNpemVkIHBsYW5l cywgd2Ugd2lsbCBqdXN0CisJCQkJICoga2VlcCBpdCBpbiBtaW5kIGFuZCBiZSBzbWFydGVyIG5l eHQgdGltZS4gQWxzbyBsZXRzIHJlbW92ZSB1bm5lZWRlZCBmYnMuCisJCQkJICogRG9uJ3QgZGVz dHJveSBjdXJzb3JfZmIgYXMgd2lsbCB0YWtlIGNhcmUgYWJvdXQgaXQgYXQgdGhlIGVuZC4KKwkJ CQkgKi8KKwkJCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5lLCBOVUxMKTsKKwkJCQl3aGlsZSAoaSA8 IE1BWF9QTEFORVMpIHsKKwkJCQkJaWd0X3JlbW92ZV9mYihkYXRhLT5kaXNwbGF5LmRybV9mZCwg JmRhdGEtPmZiW3BpcGUgKiBNQVhfUExBTkVTICsgaV0pOworCQkJCQlkYXRhLT5mYltwaXBlICog TUFYX1BMQU5FUyArIGldLmZiX2lkID0gMDsKKwkJCQkJaSsrOworCQkJCX0KKwkJCQlpID0gZGF0 YS0+bnVtX3BsYW5lc1twaXBlXTsKKwkJCX0KKworCQkJaWYgKCsraSA+PSBkYXRhLT5udW1fcGxh bmVzW3BpcGVdKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0 YS0+ZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGRhdGEt Pm51bV9wbGFuZXNbcGlwZV07IGkrKykgeworCQlpZiAoZ3B1KSB7CisJCQlncHVfbG9hZCgmZGF0 YS0+Z3B1X2NvbnRleHRbcGlwZV0sIGkpOworCQl9CisJfQorCisJZ2V0X3ZibGFuayhkYXRhLT5k aXNwbGF5LmRybV9mZCwgcGlwZSwgRFJNX1ZCTEFOS19ORVhUT05NSVNTKTsKKworCWlndF9waXBl X2NyY19jb2xsZWN0X2NyYyhwaXBlX2NyYywgJmNyYyk7CisKKwlnZXRfdmJsYW5rKGRhdGEtPmRp c3BsYXkuZHJtX2ZkLCBwaXBlLCBEUk1fVkJMQU5LX05FWFRPTk1JU1MpOworCisJaWd0X3BpcGVf Y3JjX2NvbGxlY3RfY3JjKHBpcGVfY3JjLCAmY3JjMik7CisJaWd0X2Fzc2VydF9jcmNfZXF1YWwo JmNyYywgJmNyYzIpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGRybU1vZGVNb2RlSW5m byAqIGZpbmRfaGlnaGVzdF9tb2RlKGRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlk cm1Nb2RlTW9kZUluZm8gKmhpZ2hlc3RfbW9kZSA9IE5VTEw7CisJaW50IGo7CisKKwlmb3IgKGog PSAwOyBqIDwgY29ubmVjdG9yLT5jb3VudF9tb2RlczsgaisrKSB7CisJCWlmICghaGlnaGVzdF9t b2RlKSB7CisJCQloaWdoZXN0X21vZGUgPSAmY29ubmVjdG9yLT5tb2Rlc1tqXTsKKwkJfQorCQll bHNlIGlmIChjb25uZWN0b3ItPm1vZGVzW2pdLnZkaXNwbGF5ICYmIGNvbm5lY3Rvci0+bW9kZXNb al0uaGRpc3BsYXkpIHsKKwkJCWlmIChoaWdoZXN0X21vZGUtPmhkaXNwbGF5IDwgY29ubmVjdG9y LT5tb2Rlc1tqXS5oZGlzcGxheSkKKwkJCQloaWdoZXN0X21vZGUgPSAmY29ubmVjdG9yLT5tb2Rl c1tqXTsKKwkJCX0KKwl9CisKKwlyZXR1cm4gaGlnaGVzdF9tb2RlOworfQorCit0eXBlZGVmIGRy bU1vZGVDb25uZWN0b3IgKiBkcm1Nb2RlQ29ubmVjdG9yUHRyOworCitzdGF0aWMgdm9pZCBmaWxs X2Nvbm5lY3Rvcl90b19waXBlX2FycmF5KHN0cnVjdCBkYXRhICpkYXRhLCBkcm1Nb2RlUmVzICpt b2RlX3Jlc291cmNlcywgZHJtTW9kZUNvbm5lY3RvclB0ciAqY29ubmVjdG9ycykKK3sKKwlpbnQg cGlwZSA9IDAsIGNydGNfaWQ7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisJaW50IGk7CisKKwlt ZW1zZXQoY29ubmVjdG9ycywgMCwgc2l6ZW9mKGRybU1vZGVDb25uZWN0b3JQdHIpICogSUdUX01B WF9QSVBFUyk7CisKKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KCZkYXRhLT5kaXNwbGF5LCBv dXRwdXQpIHsKKwkJY3J0Y19pZCA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBtb2RlX3Jlc291cmNl cy0+Y291bnRfY29ubmVjdG9yczsgaSsrKSB7CisJCQlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0 b3I7CisKKwkJCWNvbm5lY3RvciA9IGRybU1vZGVHZXRDb25uZWN0b3JDdXJyZW50KGRhdGEtPmRy bV9mZCwKKwkJCQkgICAgICAgbW9kZV9yZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0pOworCisJCQlp ZiAoIWNvbm5lY3RvcikgeworCQkJCWlndF93YXJuKCJjb3VsZCBub3QgZ2V0IGNvbm5lY3RvciAl aTogJXNcbiIsCisJCQkJCW1vZGVfcmVzb3VyY2VzLT5jb25uZWN0b3JzW2ldLCBzdHJlcnJvcihl cnJubykpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoY29ubmVjdG9yLT5jb25uZWN0 aW9uID09IERSTV9NT0RFX0NPTk5FQ1RFRCkgeworCQkJCWlmIChjcnRjX2lkID09IHBpcGUpIHsK KwkJCQkJY29ubmVjdG9yc1twaXBlXSA9IChkcm1Nb2RlQ29ubmVjdG9yUHRyKWNvbm5lY3RvcjsK KwkJCQl9CisJCQkJY3J0Y19pZCsrOworCQkJfQorCQkJZWxzZQorCQkJCWRybU1vZGVGcmVlQ29u bmVjdG9yKGNvbm5lY3Rvcik7CisJCX0KKwkJaWYgKCgrK3BpcGUpID09IElHVF9NQVhfUElQRVMp CisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfY29ubmVjdG9ycyhkcm1N b2RlQ29ubmVjdG9yUHRyICpjb25uZWN0b3JzKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkg PCBJR1RfTUFYX1BJUEVTOyBpKyspIHsKKwkJaWYgKGNvbm5lY3RvcnNbaV0pCisJCQlkcm1Nb2Rl RnJlZUNvbm5lY3Rvcihjb25uZWN0b3JzW2ldKTsKKwl9Cit9CisKKyNkZWZpbmUgTUlOX0RVUkFU SU9OX1NFQyA1LjAwCisjZGVmaW5lIE1JTl9JVEVSQVRJT05TIDIwCisKK3N0YXRpYyB2b2lkIHN0 cmVzcyhzdHJ1Y3QgZGF0YSAqZGF0YSwgYm9vbCBvdmVycmlkZSwgYm9vbCBncHUsIGludCBmb3Jt YXRfaWR4LCBpbnQgdGlsaW5nX2lkeCkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgc3RhcnQsIGVuZDsK KwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKwlpbnQgcmV0OworCWludCBwaXBlOworCWludCBpdGVy YXRpb25zID0gMDsKKwlib29sIG5lZWRfY29udGludWU7CisJZHJtTW9kZU1vZGVJbmZvICpoaWdo ZXN0X21vZGVbSUdUX01BWF9QSVBFU107CisJZHJtTW9kZUNvbm5lY3RvclB0ciBjb25uZWN0b3Jz W0lHVF9NQVhfUElQRVNdOworCWRybU1vZGVSZXMgKm1vZGVfcmVzb3VyY2VzID0gZHJtTW9kZUdl dFJlc291cmNlcyhkYXRhLT5kcm1fZmQpOworCisJaWYgKCFtb2RlX3Jlc291cmNlcykgeworCQlp Z3Rfd2FybigiZHJtTW9kZUdldFJlc291cmNlcyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJu bykpOworCQlyZXR1cm47CisJfQorCisJbWVtc2V0KGhpZ2hlc3RfbW9kZSwgMCwgc2l6ZW9mKGRy bU1vZGVNb2RlSW5mbyAqKSAqIElHVF9NQVhfUElQRVMpOworCisJZmlsbF9jb25uZWN0b3JfdG9f cGlwZV9hcnJheShkYXRhLCBtb2RlX3Jlc291cmNlcywgY29ubmVjdG9ycyk7CisKKwlpZ3RfZ2V0 dGltZSgmc3RhcnQpOworCisJZG8geworCQkvKgorCQkgKiBJbmNyZW1lbnQgcGlwZSBvbmx5IGZv ciBjb25uZWN0ZWQgb3V0cHV0cywKKwkJICogZm9yIGVhY2ggY29ubmVjdGVkIG91dHB1dCB3ZSBz aG91bGQgYXNzaWduIGEKKwkJICogZGlmZmVyZW50IHBpcGUuCisJCSAqLworCQlwaXBlID0gMDsK KwkJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dCgmZGF0YS0+ZGlzcGxheSwgb3V0cHV0KSB7CisJ CQlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3IgPSAoZHJtTW9kZUNvbm5lY3RvciAqKWNvbm5l Y3RvcnNbcGlwZV07CisKKwkJCWlmICghaGlnaGVzdF9tb2RlW3BpcGVdKSB7CisJCQkJaWYgKCFv dmVycmlkZSAmJiBjb25uZWN0b3ItPmNvdW50X21vZGVzKSB7CisJCQkJCWhpZ2hlc3RfbW9kZVtw aXBlXSA9IGZpbmRfaGlnaGVzdF9tb2RlKGNvbm5lY3Rvcik7CisJCQkJfQorCQkJCWVsc2UKKwkJ CQkJaGlnaGVzdF9tb2RlW3BpcGVdID0gJnVoZF9tb2RlXzYwaHo7CisJCQl9CisKKwkJCWRhdGEt PmZvcm1hdCA9IGZvcm1hdHNbZm9ybWF0X2lkeF07CisJCQlkYXRhLT5tb2RpZmllciA9IHRpbGlu Z3NbdGlsaW5nX2lkeF07CisKKwkJCS8qCisJCQkgKiBVbnRpbCB3ZSBmaWd1cmUgb3V0IG1heGlt dW0gYW1vdW50IG9mIHBsYW5lcywKKwkJCSAqIHVzZSB0aGUgb25lIGRlY2xhcmVkIGJ5IGtlcm5l bC4KKwkJCSAqLworCQkJaWYgKGRhdGEtPm51bV9wbGFuZXNbcGlwZV0gPT0gLTEpCisJCQkJZGF0 YS0+bnVtX3BsYW5lc1twaXBlXSA9IGRhdGEtPmRpc3BsYXkucGlwZXNbcGlwZV0ubl9wbGFuZXM7 CisKKwkJCWlndF9hc3NlcnRfZihkYXRhLT5kaXNwbGF5LnBpcGVzW3BpcGVdLm5fcGxhbmVzIDwg TUFYX1BMQU5FUywKKwkJCQkiQ3VycmVudGx5IHdlIGRvbid0IHN1cHBvcnQgbW9yZSB0aGFuICVk IHBsYW5lcyEiLCBNQVhfUExBTkVTKTsKKworCQkJaWd0X2luZm8oIlBpcGUgJXMgJWQgcGxhbmVz LCB1c2luZyBtb2RlOiIsIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpLAorCQkJCQlkYXRhLT5udW1f cGxhbmVzW3BpcGVdKTsKKworCQkJa21zdGVzdF9kdW1wX21vZGUoaGlnaGVzdF9tb2RlW3BpcGVd KTsKKworCQkJcGlwZV9jcmMgPSBpZ3RfcGlwZV9jcmNfbmV3KGRhdGEtPmRybV9mZCwgcGlwZSwK KwkJCQlJTlRFTF9QSVBFX0NSQ19TT1VSQ0VfQVVUTyk7CisKKwkJCXJldCA9IHBsYW5lX3N0cmVz cyhkYXRhLCBvdXRwdXQsIHBpcGUsIGhpZ2hlc3RfbW9kZVtwaXBlXSwgZ3B1KTsKKworCQkJaWd0 X3BpcGVfY3JjX2ZyZWUocGlwZV9jcmMpOworCisJCQlpZiAoKytwaXBlID09IElHVF9NQVhfUElQ RVMpCisJCQkJYnJlYWs7CisJCX0KKwkJaWd0X2dldHRpbWUoJmVuZCk7CisJCWl0ZXJhdGlvbnMr KzsKKwkJbmVlZF9jb250aW51ZSA9IGlndF90aW1lX2VsYXBzZWQoJnN0YXJ0LCAmZW5kKSA8IE1J Tl9EVVJBVElPTl9TRUMgfHwgaXRlcmF0aW9ucyA8IE1JTl9JVEVSQVRJT05TOworCX0gd2hpbGUg KG5lZWRfY29udGludWUgJiYgIXJldCk7CisKKwlyZWxlYXNlX2Nvbm5lY3RvcnMoY29ubmVjdG9y cyk7CisKKwlkcm1Nb2RlRnJlZVJlc291cmNlcyhtb2RlX3Jlc291cmNlcyk7Cit9CisKKworc3Rh dGljIHZvaWQgdGVzdChzdHJ1Y3QgZGF0YSAqZGF0YSwgYm9vbCBvdmVycmlkZSwgYm9vbCBjcHUs IGJvb2wgZ3B1KQoreworCWludCBpLCBqOworCWludCBudW1iZXJfb2ZfY29yZXMgPSBtaW4oc3lz Y29uZihfU0NfTlBST0NFU1NPUlNfT05MTiksIE1BWF9DT1JFUyk7CisJaW50IGZvcm1hdF9pZHgs IHRpbGluZ19pZHg7CisKKwlpZ3RfZml4dHVyZSB7CisJCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFY X1BJUEVTOyBpKyspIHsKKwkJCWZvciAoaiA9IDA7aiA8IE1BWF9QTEFORVM7IGorKykKKwkJCQlk YXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpdLmZiX2lkID0gMDsKKwkJCWRhdGEtPmN1cnNvcl9m YltpXS5mYl9pZCA9IDA7CisJCQlkYXRhLT5udW1fcGxhbmVzW2ldID0gLTE7CisJCQlkYXRhLT5s YXN0X21vZGVbaV0gPSBOVUxMOworCQl9CisJCWlmIChncHUpIHsKKwkJCWZvciAoaSA9IDA7IGkg PCBJR1RfTUFYX1BJUEVTOyBpKyspIHsKKwkJCQlkYXRhLT5ncHVfY29udGV4dFtpXS5kYXRhID0g ZGF0YTsKKwkJCQlkYXRhLT5ncHVfY29udGV4dFtpXS5waXBlID0gaTsKKwkJCQlkYXRhLT5ncHVf Y29udGV4dFtpXS5ibHRfcmVjdC54ID0gMDsKKwkJCQlkYXRhLT5ncHVfY29udGV4dFtpXS5ibHRf cmVjdC55ID0gMDsKKwkJCQlkYXRhLT5ncHVfY29udGV4dFtpXS5ibHRfcmVjdC53ID0gMDsKKwkJ CQlkYXRhLT5ncHVfY29udGV4dFtpXS5ibHRfcmVjdC5oID0gMDsKKwkJCX0KKwkJfQorCisJCWlm IChjcHUpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBudW1iZXJfb2ZfY29yZXM7aSsrKSB7CisJCQkJ ZGF0YS0+Y3B1X2NvbnRleHRbaV0uYnVmMSA9IG1hbGxvYyhCVUZfU0laRSk7CisJCQkJZGF0YS0+ Y3B1X2NvbnRleHRbaV0uYnVmMiA9IG1hbGxvYyhCVUZfU0laRSk7CisJCQkJZGF0YS0+Y3B1X2Nv bnRleHRbaV0uaWQgPSBpOworCQkJCWRhdGEtPmNwdV9jb250ZXh0W2ldLmRhdGEgPSBkYXRhOwor CQkJCXB0aHJlYWRfY3JlYXRlKCZkYXRhLT5jcHVfdGhyZWFkW2ldLCBOVUxMLCBjcHVfbG9hZCwg KHZvaWQqKSZkYXRhLT5jcHVfY29udGV4dFtpXSk7CisJCQl9CisJCX0KKwl9CisKKwlmb3IgKGZv cm1hdF9pZHggPSAwOyBmb3JtYXRfaWR4IDwgTl9GT1JNQVRTOyBmb3JtYXRfaWR4KyspIHsKKwkJ Zm9yICh0aWxpbmdfaWR4ID0gMDsgdGlsaW5nX2lkeCA8IE5fVElMSU5HX01FVEhPRFM7IHRpbGlu Z19pZHgrKykgeworCQkJaWd0X3N1YnRlc3RfZigic3RyZXNzJXMlcyVzLSVzLSVzIiwKKwkJCQkg ICAgICBvdmVycmlkZSA9PSBmYWxzZSA/ICIiIDogIi1tb2RlLW92ZXJyaWRlIiwKKwkJCQkgICAg ICBjcHUgPT0gZmFsc2UgPyAiIiA6ICItY3B1LWxvYWQiLAorCQkJCSAgICAgIGdwdSA9PSBmYWxz ZSA/ICIiIDogIi1ncHUtbG9hZCIsCisJCQkJICAgICAgZm9ybWF0X3N0cihmb3JtYXRfaWR4KSwK KwkJCQkgICAgICB0aWxpbmdfc3RyKHRpbGluZ19pZHgpKSB7CisKKwkJCQlzdHJlc3MoZGF0YSwg b3ZlcnJpZGUsIGdwdSwgZm9ybWF0X2lkeCwgdGlsaW5nX2lkeCk7CisKKwkJCX0KKworCQkJaWd0 X2ZpeHR1cmUgeworCQkJCS8qCisJCQkJICogQXMgd2UgY2hhbmdlIHRpbGluZy9mb3JtYXQgd2Ug bmVlZCBhIG5ldyBGQgorCQkJCSAqLworCQkJCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFYX1BJUEVT OyBpKyspIHsKKwkJCQkJZGF0YS0+bGFzdF9tb2RlW2ldID0gTlVMTDsKKwkJCQkJZm9yIChqID0g MDtqIDwgTUFYX1BMQU5FUzsgaisrKSB7CisJCQkJCQlpZiAoZGF0YS0+ZmJbaSAqIE1BWF9QTEFO RVMgKyBqXS5mYl9pZCkgeworCQkJCQkJCWlndF9wbGFuZV9zZXRfZmIoJmRhdGEtPmRpc3BsYXku cGlwZXNbaV0ucGxhbmVzW2pdLCBOVUxMKTsKKwkJCQkJCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRp c3BsYXkuZHJtX2ZkLCAmZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXSk7CisJCQkJCQkJZGF0 YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXS5mYl9pZCA9IDA7CisJCQkJCQl9CisJCQkJCX0KKwkJ CQkJZGF0YS0+bnVtX3BsYW5lc1tpXSA9IC0xOworCQkJCQlpZiAoZGF0YS0+Y3Vyc29yX2ZiW2ld LmZiX2lkKSB7CisJCQkJCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCAmZGF0 YS0+Y3Vyc29yX2ZiW2ldKTsKKwkJCQkJCWRhdGEtPmN1cnNvcl9mYltpXS5mYl9pZCA9IDA7CisJ CQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZ3RfZml4dHVyZSB7CisJCWlmIChjcHUp IHsKKwkJCWZvciAoaSA9IDA7IGkgPCBudW1iZXJfb2ZfY29yZXM7aSsrKSB7CisJCQkJZGF0YS0+ Y3B1X3RocmVhZF9zdG9wW2ldID0gdHJ1ZTsKKwkJCQlwdGhyZWFkX2pvaW4oZGF0YS0+Y3B1X3Ro cmVhZFtpXSwgTlVMTCk7CisJCQl9CisJCQlmb3IgKGkgPSAwO2kgPCBudW1iZXJfb2ZfY29yZXM7 IGkrKykgeworCQkJCWZyZWUoZGF0YS0+Y3B1X2NvbnRleHRbaV0uYnVmMSk7CisJCQkJZnJlZShk YXRhLT5jcHVfY29udGV4dFtpXS5idWYyKTsKKwkJCX0KKwkJfQorCX0KK30KKworCitzdHJ1Y3Qg ZGF0YSBkYXRhID0geworCS5mb3JtYXQgPSBEUk1fRk9STUFUX1hSR0I4ODg4LAorCS5tb2RpZmll ciA9IERSTV9GT1JNQVRfTU9EX0xJTkVBUiwKKwkuZGV2aWQgPSAwLAorfTsKKworCitpZ3RfbWFp bgoreworCWJvb2wgbW9kZV9vdmVycmlkZSA9IGZhbHNlOworCWJvb2wgY3B1X2xvYWQgPSBmYWxz ZTsKKwlib29sIGdwdV9sb2FkID0gZmFsc2U7CisKKwlpZ3RfZml4dHVyZSB7CisJCWRhdGEuZHJt X2ZkID0gZGF0YS5kaXNwbGF5LmRybV9mZCA9IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIoRFJJVkVS X0FOWSk7CisKKwkJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOworCisJCWlndF9kaXNw bGF5X3JlcXVpcmUoJmRhdGEuZGlzcGxheSwgZGF0YS5kaXNwbGF5LmRybV9mZCk7CisJCWlndF9y ZXF1aXJlKGRhdGEuZGlzcGxheS5pc19hdG9taWMpOworCQlpZ3RfZGlzcGxheV9yZXF1aXJlX291 dHB1dCgmZGF0YS5kaXNwbGF5KTsKKwl9CisKKwl0ZXN0KCZkYXRhLCBtb2RlX292ZXJyaWRlLCBj cHVfbG9hZCwgZ3B1X2xvYWQpOworCisJY3B1X2xvYWQgPSB0cnVlOworCWdwdV9sb2FkID0gdHJ1 ZTsKKworCXRlc3QoJmRhdGEsIG1vZGVfb3ZlcnJpZGUsIGNwdV9sb2FkLCBncHVfbG9hZCk7CisK Kwltb2RlX292ZXJyaWRlID0gdHJ1ZTsKKwljcHVfbG9hZCA9IGZhbHNlOworCWdwdV9sb2FkID0g ZmFsc2U7CisKKwl0ZXN0KCZkYXRhLCBtb2RlX292ZXJyaWRlLCBjcHVfbG9hZCwgZ3B1X2xvYWQp OworCisJY3B1X2xvYWQgPSB0cnVlOworCWdwdV9sb2FkID0gdHJ1ZTsKKworCXRlc3QoJmRhdGEs IG1vZGVfb3ZlcnJpZGUsIGNwdV9sb2FkLCBncHVfbG9hZCk7CisKKwlpZ3RfZml4dHVyZSB7CisJ CWlndF9kaXNwbGF5X2ZpbmkoJmRhdGEuZGlzcGxheSk7CisJfQorfQpcIE5vIG5ld2xpbmUgYXQg ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24u YnVpbGQKaW5kZXggOTAxNWY4MDkuLmM1ODY2NDJjIDEwMDY0NAotLS0gYS90ZXN0cy9tZXNvbi5i dWlsZAorKysgYi90ZXN0cy9tZXNvbi5idWlsZApAQCAtNDYsNiArNDYsNyBAQCB0ZXN0X3Byb2dz ID0gWwogCSdrbXNfcGxhbmVfbG93cmVzJywKIAkna21zX3BsYW5lX211bHRpcGxlJywKIAkna21z X3BsYW5lX3NjYWxpbmcnLAorCSdrbXNfcGxhbmVfc3RyZXNzJywKIAkna21zX3Byb3BfYmxvYics CiAJJ2ttc19wcm9wZXJ0aWVzJywKIAkna21zX3BzcicsCi0tIAoyLjE3LjEKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0 CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==