From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0853A88E2B for ; Tue, 20 Aug 2019 08:09:29 +0000 (UTC) From: Stanislav Lisovskiy Date: Tue, 20 Aug 2019 11:07:24 +0300 Message-Id: <20190820080724.32230-1-stanislav.lisovskiy@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v10] 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 IC0gUmViYXNlZAoKU2lnbmVkLW9mZi1ieTogU3RhbmlzbGF2IExpc292c2tpeSA8c3RhbmlzbGF2 Lmxpc292c2tpeUBpbnRlbC5jb20+Ci0tLQogbGliL2dwdV9jbWRzLmMgICAgICAgICAgIHwgICA0 ICstCiB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzICAgfCAgIDEgKwogdGVzdHMva21zX3BsYW5lX3N0 cmVzcy5jIHwgODg3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogdGVz dHMvbWVzb24uYnVpbGQgICAgICAgIHwgICAxICsKIDQgZmlsZXMgY2hhbmdlZCwgODkxIGluc2Vy dGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zX3Bs YW5lX3N0cmVzcy5jCgpkaWZmIC0tZ2l0IGEvbGliL2dwdV9jbWRzLmMgYi9saWIvZ3B1X2NtZHMu YwppbmRleCA4ZDI3MGVlOC4uNDhkZGZhMGMgMTAwNjQ0Ci0tLSBhL2xpYi9ncHVfY21kcy5jCisr KyBiL2xpYi9ncHVfY21kcy5jCkBAIC02ODEsMTIgKzY4MSwxMiBAQCBnZW44X2VtaXRfZ3BncHVf d2FsayhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogCQkgIDApOyAvKiB3aWR0aDox ICovCiAKIAkvKiB0aHJlYWQgZ3JvdXAgWCAqLwotCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0go eCk7CiAJT1VUX0JBVENIKDApOwogCU9VVF9CQVRDSCh4X2RpbSk7CiAKIAkvKiB0aHJlYWQgZ3Jv dXAgWSAqLwotCU9VVF9CQVRDSCgwKTsKKwlPVVRfQkFUQ0goeSk7CiAJT1VUX0JBVENIKDApOwog CU9VVF9CQVRDSCh5X2RpbSk7CiAKZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMg Yi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IGMwMmU0ZDk0Li5hNzM3MDc3MyAxMDA2NDQK LS0tIGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcworKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2Vz CkBAIC02NSw2ICs2NSw3IEBAIFRFU1RTX3Byb2dzID0gXAogCWttc19wbGFuZV9tdWx0aXBsZSBc CiAJa21zX3BsYW5lX3NjYWxpbmcgXAogCWttc19wcmltZSBcCisJa21zX3BsYW5lX3N0cmVzcyBc CiAJa21zX3Byb3BfYmxvYiBcCiAJa21zX3Byb3BlcnRpZXMgXAogCWttc19wc3IgXApkaWZmIC0t Z2l0IGEvdGVzdHMva21zX3BsYW5lX3N0cmVzcy5jIGIvdGVzdHMva21zX3BsYW5lX3N0cmVzcy5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4yM2IzZjk2ZgotLS0gL2Rldi9u dWxsCisrKyBiL3Rlc3RzL2ttc19wbGFuZV9zdHJlc3MuYwpAQCAtMCwwICsxLDg4NyBAQAorLyoK KyAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE RUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJpZ3QuaCIKKyNp bmNsdWRlICJpZ3RfcmFuZC5oIgorI2luY2x1ZGUgImdwZ3B1X2ZpbGwuaCIKKyNpbmNsdWRlICJk cm10ZXN0LmgiCisjaW5jbHVkZSAic3dfc3luYy5oIgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5j bHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpby5o PgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxwb2xs Lmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgorCisjaWZu ZGVmIERSTV9DQVBfQ1VSU09SX1dJRFRICisjZGVmaW5lIERSTV9DQVBfQ1VSU09SX1dJRFRIIDB4 OAorI2VuZGlmCisjaWZuZGVmIERSTV9DQVBfQ1VSU09SX0hFSUdIVAorI2RlZmluZSBEUk1fQ0FQ X0NVUlNPUl9IRUlHSFQgMHg5CisjZW5kaWYKKworCitkcm1Nb2RlTW9kZUluZm8gdWhkX21vZGVf NjBoeiA9IHsKKwkubmFtZSA9ICIzODQweDIxNjBANjBoeiIsCisJLnZyZWZyZXNoID0gNjAsCisJ LmNsb2NrID0gMTQyNjY3KjIsCisJLmhkaXNwbGF5ID0gMzg0MCwKKwkuaHN5bmNfc3RhcnQgPSAx OTM2KjIsCisJLmhzeW5jX2VuZCA9IDE5NTIqMiwKKwkuaHRvdGFsID0gMjEwNCoyLAorCS52ZGlz cGxheSA9IDIxNjAsCisJLnZzeW5jX3N0YXJ0ID0gMTA4MyoyLAorCS52c3luY19lbmQgPSAxMDk3 KjIsCisJLnZ0b3RhbCA9IDExMjgqMiwKKwkuZmxhZ3MgPSAweGEsCit9OworCisjZGVmaW5lIE5f Rk9STUFUUyAzCitzdGF0aWMgY29uc3QgdWludDMyX3QgZm9ybWF0c1tOX0ZPUk1BVFNdID0gewor CURSTV9GT1JNQVRfWFJHQjg4ODgsCisJRFJNX0ZPUk1BVF9SR0I1NjUsCisJRFJNX0ZPUk1BVF9Y UkdCMjEwMTAxMCwKK307CisKKyNkZWZpbmUgTl9USUxJTkdfTUVUSE9EUyAzCitzdGF0aWMgY29u c3QgdWludDY0X3QgdGlsaW5nc1tOX1RJTElOR19NRVRIT0RTXSA9IHsKKwlEUk1fRk9STUFUX01P RF9MSU5FQVIsCisJSTkxNV9GT1JNQVRfTU9EX1hfVElMRUQsCisJSTkxNV9GT1JNQVRfTU9EX1lf VElMRUQsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqZm9ybWF0X3N0cihpbnQgZm9ybWF0X2lu ZGV4KQoreworCXN3aXRjaCAoZm9ybWF0c1tmb3JtYXRfaW5kZXhdKSB7CisJY2FzZSBEUk1fRk9S TUFUX1JHQjU2NToKKwkJcmV0dXJuICJyZ2I1NjUiOworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4 ODoKKwkJcmV0dXJuICJ4cmdiODg4OCI7CisJY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgor CQlyZXR1cm4gInhyZ2IyMTAxMDEwIjsKKwlkZWZhdWx0OgorCQlpZ3RfYXNzZXJ0KGZhbHNlKTsK Kwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp0aWxpbmdfc3RyKGludCB0aWxpbmdfaW5kZXgp Cit7CisJc3dpdGNoICh0aWxpbmdzW3RpbGluZ19pbmRleF0pIHsKKwljYXNlIERSTV9GT1JNQVRf TU9EX0xJTkVBUjoKKwkJcmV0dXJuICJ1bnRpbGVkIjsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9Y X1RJTEVEOgorCQlyZXR1cm4gInh0aWxlZCI7CisJY2FzZSBJOTE1X0ZPUk1BVF9NT0RfWV9USUxF RDoKKwkJcmV0dXJuICJ5dGlsZWQiOworCWRlZmF1bHQ6CisJCWlndF9hc3NlcnQoZmFsc2UpOwor CX0KK30KKworCisjZGVmaW5lIE1BWF9DT1JFUyA4CisjZGVmaW5lIE1BWF9QTEFORVMgMTYKKwor c3RydWN0IGRhdGE7CisKK3N0cnVjdCB0aHJlYWRfY29udGV4dCB7CisJc3RydWN0IGRhdGEgKmRh dGE7CisJaW50IGlkOworCXZvaWQgKmJ1ZjE7CisJdm9pZCAqYnVmMjsKK307CisKK3N0cnVjdCBy ZWN0IHsKKwlpbnQgeDsKKwlpbnQgeTsKKwlpbnQgdzsKKwlpbnQgaDsKK307CisKK3N0cnVjdCBn cHVfY29udGV4dCB7CisJc3RydWN0IGRhdGEgKmRhdGE7CisJaW50IHBpcGU7CisJaW50IGNvbG9y OworCXN0cnVjdCBpZ3RfZmIgKmZiX3B0cjsKKwlzdHJ1Y3QgcmVjdCBibHRfcmVjdDsKKwlzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoOworfTsKKworZW51bSB7CisJUlVOTklORywKKwlT VE9QUEVELAorCVBBVVNFRCwKK30gdGhyZWFkX3N0YXRlOworCitzdHJ1Y3QgZGF0YSB7CisJaW50 IGRybV9mZDsKKwlpZ3RfZGlzcGxheV90IGRpc3BsYXk7CisJaW50IG51bV9wbGFuZXNbSUdUX01B WF9QSVBFU107CisJdWludDMyX3QgZm9ybWF0OworCXVpbnQ2NF90IG1vZGlmaWVyOworCXVpbnQz Ml90IGRldmlkOworCWRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncjsKKwlkcm1Nb2RlTW9kZUluZm8g Kmxhc3RfbW9kZVtJR1RfTUFYX1BJUEVTXTsKKwlzdHJ1Y3QgaWd0X2ZiIGZiW0lHVF9NQVhfUElQ RVMgKiBNQVhfUExBTkVTXTsKKwlzdHJ1Y3QgaWd0X2ZiIGN1cnNvcl9mYltJR1RfTUFYX1BJUEVT XTsKKwlwdGhyZWFkX3QgY3B1X3RocmVhZFtNQVhfQ09SRVNdOworCXB0aHJlYWRfdCBncHVfdGhy ZWFkW0lHVF9NQVhfUElQRVNdOworCWJvb2wgY3B1X3RocmVhZF9zdG9wW01BWF9DT1JFU107CisJ aW50IGdwdV90aHJlYWRfc3RhdGVbSUdUX01BWF9QSVBFU107CisJc2VtX3QgZ3B1X3RocmVhZF9w YXVzZV9hY2tbSUdUX01BWF9QSVBFU107CisJc3RydWN0IHRocmVhZF9jb250ZXh0IGNwdV9jb250 ZXh0W01BWF9DT1JFU107CisJc3RydWN0IGdwdV9jb250ZXh0IGdwdV9jb250ZXh0W0lHVF9NQVhf UElQRVNdOworCWRybU1vZGVNb2RlSW5mbyAqaGlnaGVzdF9tb2RlW0lHVF9NQVhfUElQRVNdOwor CWRybU1vZGVDb25uZWN0b3JQdHIgY29ubmVjdG9yc1tJR1RfTUFYX1BJUEVTXTsKKwlkcm1Nb2Rl UmVzICptb2RlX3Jlc291cmNlczsKKwlpbnQgbnVtYmVyX29mX2NvcmVzOworfTsKKworCitzdGF0 aWMgdm9pZCBwYXVzZV9ncHVfdGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSk7CisKK3N0YXRpYyB2 b2lkIHJlc3VtZV9ncHVfdGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSk7CisKK3N0YXRpYyB2b2lk IHN0b3BfZ3B1X3RocmVhZHMoc3RydWN0IGRhdGEgKmRhdGEpOworCitzdGF0aWMgdm9pZCBzdGFy dF9ncHVfdGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSk7CisKK3N0cnVjdCBiYXNlX2NyYyB7CisJ Ym9vbCBzZXQ7CisJaWd0X2NyY190IGNyYzsKK307CisKK2lndF9waXBlX2NyY190ICpwaXBlX2Ny YzsKKworI2RlZmluZSBCVUZfU0laRSAxMjgqMTAyNCoxMDI0CisKK3N0YXRpYyB2b2lkICpjcHVf bG9hZCh2b2lkICpkKQoreworCWNoYXIgKmJ1ZjEsICpidWYyOworCXN0cnVjdCB0aHJlYWRfY29u dGV4dCAqY29udGV4dCA9IChzdHJ1Y3QgdGhyZWFkX2NvbnRleHQgKilkOworCXN0cnVjdCBkYXRh ICpkYXRhID0gY29udGV4dC0+ZGF0YTsKKworCWJ1ZjEgPSBjb250ZXh0LT5idWYxOworCWJ1ZjIg PSBjb250ZXh0LT5idWYyOworCisJZGF0YS0+Y3B1X3RocmVhZF9zdG9wW2NvbnRleHQtPmlkXSA9 IGZhbHNlOworCisJaWd0X2luZm8oIkNQVSB0aHJlYWQgY3B1IGlkICVkIHN0YXJ0XG4iLCBjb250 ZXh0LT5pZCk7CisKKwkvKiBKdXN0IHRvIG1ha2UgQ1BVIGJ1c3kuLi4gKi8KKwl3aGlsZSghZGF0 YS0+Y3B1X3RocmVhZF9zdG9wW2NvbnRleHQtPmlkXSkgeworCQltZW1jcHkoYnVmMSwgYnVmMiwg QlVGX1NJWkUpOworCQltZW1jcHkoYnVmMiwgYnVmMSwgQlVGX1NJWkUpOworCX0KKworCWlndF9p bmZvKCJDUFUgdGhyZWFkIGNwdSBpZCAlZCBzdG9wXG4iLCBjb250ZXh0LT5pZCk7CisKKwlyZXR1 cm4gTlVMTDsKK30KKworCitzdGF0aWMgdm9pZCBzY3JhdGNoX2J1Zl9pbml0KHN0cnVjdCBpZ3Rf YnVmICpidWYsCisJCQlkcm1faW50ZWxfYm8gKmJvLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGlu dCBzdHJpZGUsIGludCB0aWxpbmcsIGludCBicHApCit7CisJYnVmLT5ibyA9IGJvOworCWJ1Zi0+ c3RyaWRlID0gc3RyaWRlOworCWJ1Zi0+dGlsaW5nID0gdGlsaW5nOworCWJ1Zi0+c2l6ZSA9IHdp ZHRoICogaGVpZ2h0ICogYnBwIC8gODsKKwlidWYtPmJwcCA9IGJwcDsKK30KKworc3RhdGljIHZv aWQgKmdwdV9sb2FkKHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgZ3B1X2NvbnRleHQgKmNvbnRleHQg PSAoc3RydWN0IGdwdV9jb250ZXh0ICopcHRyOworCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2ggPSBOVUxMOworCXN0cnVjdCBpZ3RfYnVmIGRzdDsKKwlzdHJ1Y3QgZGF0YSAqZGF0YSA9 IGNvbnRleHQtPmRhdGE7CisJaW50IHBpcGUgPSBjb250ZXh0LT5waXBlOworCWlndF9maWxsZnVu Y190IGdwZ3B1X2ZpbGwgPSBOVUxMOworCWRybV9pbnRlbF9ibyAqYm8gPSBOVUxMOworCXN0cnVj dCBpZ3RfZmIgZmIsICpmYl9wdHIgPSBOVUxMLCAqbGFzdF9mYl9wdHIgPSBOVUxMOworCWludCBy ZWN0X2Rpdmlzb3I7CisJaW50IHJlY3Rfd2lkdGg7CisJaW50IHJlY3RfaGVpZ2h0OworCWludCBm cmFtZV93aWR0aDsKKwlpbnQgZnJhbWVfaGVpZ2h0OworCWludCBieXRlc19wZXJfcGl4ZWw7CisJ ZHJtTW9kZU1vZGVJbmZvICptb2RlOworCWludCBmcmFtZSA9IDA7CisJaW50IHgsIHk7CisJaW50 IGxhc3Rfc3RhdGU7CisKKwlncGdwdV9maWxsID0gaWd0X2dldF9ncGdwdV9maWxsZnVuYyhkYXRh LT5kZXZpZCk7CisKKwlpZ3RfcmVxdWlyZV9mKGdwZ3B1X2ZpbGwsCisJICAgICAgIm5vIGdwZ3B1 LWZpbGwgZnVuY3Rpb25cbiIpOworCisJYmF0Y2ggPSBjb250ZXh0LT5iYXRjaDsKKwlpZ3RfYXNz ZXJ0KGJhdGNoKTsKKworCW1vZGUgPSBkYXRhLT5oaWdoZXN0X21vZGVbcGlwZV07CisJaWd0X2Fz c2VydChtb2RlKTsKKworCWlndF9jcmVhdGVfY29sb3JfcGF0dGVybl9mYihkYXRhLT5kcm1fZmQs IG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKKwkJICAgIGRhdGEtPmZvcm1hdCwKKwkJ ICAgIGRhdGEtPm1vZGlmaWVyLAorCQkgICAgMC4wLCAxLjAsIDAuMCwgJmZiKTsKKworCWlndF9p bmZvKCJHUFUgdGhyZWFkIHBpcGUgJWQgc3RhcnRcbiIsIHBpcGUpOworCisJbGFzdF9zdGF0ZSA9 IFJVTk5JTkc7CisKKwl3aGlsZSAoZGF0YS0+Z3B1X3RocmVhZF9zdGF0ZVtwaXBlXSAhPSBTVE9Q UEVEKSB7CisJCWlmIChsYXN0X3N0YXRlICE9IGRhdGEtPmdwdV90aHJlYWRfc3RhdGVbcGlwZV0p IHsKKwkJCWxhc3Rfc3RhdGUgPSBkYXRhLT5ncHVfdGhyZWFkX3N0YXRlW3BpcGVdOworCQkJc2Vt X3Bvc3QoJmRhdGEtPmdwdV90aHJlYWRfcGF1c2VfYWNrW3BpcGVdKTsKKwkJfQorCQlpZiAoZGF0 YS0+Z3B1X3RocmVhZF9zdGF0ZVtwaXBlXSA9PSBQQVVTRUQpCisJCQljb250aW51ZTsKKworCQlp ZiAoIWNvbnRleHQtPmZiX3B0cikgeworCQkJZmJfcHRyID0gJmZiOworCQl9CisJCWVsc2Ugewor CQkJZmJfcHRyID0gY29udGV4dC0+ZmJfcHRyOworCQl9CisKKwkJaWYgKGxhc3RfZmJfcHRyICE9 IGZiX3B0cikgeworCQkJaWd0X2luZm8oIkdQVSB0aHJlYWQgcGlwZSAlZDogQ2hhbmdlIGZyb20g RkIgJXggdG8gRkIgJXhcbiIsIHBpcGUsIGxhc3RfZmJfcHRyLCBmYl9wdHIpOworCQkJZnJhbWVf d2lkdGggPSBmYl9wdHItPndpZHRoOworCQkJZnJhbWVfaGVpZ2h0ID0gZmJfcHRyLT5oZWlnaHQ7 CisJCQlieXRlc19wZXJfcGl4ZWwgPSBmYl9wdHItPnBsYW5lX2JwcFswXSAvIDg7CisJCQlibyA9 IGdlbV9oYW5kbGVfdG9fbGliZHJtX2JvKGRhdGEtPmJ1Zm1nciwgZGF0YS0+ZHJtX2ZkLCAiIiwg ZmJfcHRyLT5nZW1faGFuZGxlKTsKKwkJCWlndF9hc3NlcnQoYm8pOworCisJCQlzY3JhdGNoX2J1 Zl9pbml0KCZkc3QsIGJvLCBmcmFtZV93aWR0aCwgZnJhbWVfaGVpZ2h0LCBmYl9wdHItPnN0cmlk ZXNbMF0sIGZiX3B0ci0+bW9kaWZpZXIsIGZiX3B0ci0+cGxhbmVfYnBwWzBdKTsKKwkJfQorCQls YXN0X2ZiX3B0ciA9IGZiX3B0cjsKKworCQkvKiBkaXZpZGUgYXQgbGVhc3QgYnkgMiBhbmQgdXAg dG8gOCAqLworCQlyZWN0X2Rpdmlzb3IgPSAxIDw8IChoYXJzX3BldHJ1c2thX2Y1NF8xX3JhbmRv bV91bnNhZmVfbWF4KDMpICsgMSk7CisKKwkJcmVjdF93aWR0aCA9IGZyYW1lX3dpZHRoIC8gcmVj dF9kaXZpc29yOworCQlyZWN0X2hlaWdodCA9IGZyYW1lX2hlaWdodCAvIHJlY3RfZGl2aXNvcjsK KworCQkvKiBGaWxsIHRoZSBmcmFtZWJ1ZmZlciB1c2luZyBzaGFkZXIgKi8KKwkJeCA9IDA7CisJ CXkgPSBmcmFtZV9oZWlnaHQgLyAyOworCisJCWdwZ3B1X2ZpbGwoYmF0Y2gsCisJCSAgICZkc3Qs IHgsIHksIChmcmFtZV93aWR0aCAqIGJ5dGVzX3Blcl9waXhlbCksIGZyYW1lX2hlaWdodCwKKwkJ ICAgY29udGV4dC0+Y29sb3IpOworCisJCWNvbnRleHQtPmJsdF9yZWN0LnggPSB4ICsgKGNvbnRl eHQtPmJsdF9yZWN0LnggKyByZWN0X3dpZHRoKSAlIChmcmFtZV93aWR0aCAtIHJlY3Rfd2lkdGgp OworCQljb250ZXh0LT5ibHRfcmVjdC55ID0geSArIChjb250ZXh0LT5ibHRfcmVjdC55ICsgcmVj dF9oZWlnaHQpICUgKGZyYW1lX2hlaWdodCAtIHJlY3RfaGVpZ2h0KTsKKworCQkvKiBCbGl0IHJh bmRvbSBzaXplZCBhbmQgcG9zaXRpb25lZCByZWN0YW5nbGUgKi8KKworCQlncGdwdV9maWxsKGJh dGNoLAorCQkgICAmZHN0LCBjb250ZXh0LT5ibHRfcmVjdC54LCBjb250ZXh0LT5ibHRfcmVjdC55 LCAoKGNvbnRleHQtPmJsdF9yZWN0LnggKyByZWN0X3dpZHRoKSAqIGJ5dGVzX3Blcl9waXhlbCks IGNvbnRleHQtPmJsdF9yZWN0LnkgKyByZWN0X2hlaWdodCwKKwkJICAgY29udGV4dC0+Y29sb3Ig KyAweDgwKTsKKworCQljb250ZXh0LT5jb2xvciArPSA0OworCisJCWZyYW1lKys7CisJfQorCisJ ZHJtX2ludGVsX2JvX3VucmVmZXJlbmNlKGJvKTsKKworCWlndF9yZW1vdmVfZmIoZGF0YS0+ZGlz cGxheS5kcm1fZmQsICZmYik7CisKKwlpZ3RfaW5mbygiR1BVIHRocmVhZCBwaXBlICVkIHN0b3Au IEZyYW1lcyByZW5kZXJlZDogJWRcbiIsIHBpcGUsIGZyYW1lKTsKKworCXJldHVybiBOVUxMOwor fQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IHBpcGVfc2VsZWN0KGVudW0gcGlwZSBwaXBlKQor eworCWlmIChwaXBlID4gMSkKKwkJcmV0dXJuIHBpcGUgPDwgRFJNX1ZCTEFOS19ISUdIX0NSVENf U0hJRlQ7CisJZWxzZSBpZiAocGlwZSA+IDApCisJCXJldHVybiBEUk1fVkJMQU5LX1NFQ09OREFS WTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgZ2V0X3ZibGFuayhp bnQgZmQsIGVudW0gcGlwZSBwaXBlLCB1bnNpZ25lZCBmbGFncykKK3sKKwl1bmlvbiBkcm1fd2Fp dF92YmxhbmsgdmJsOworCisJbWVtc2V0KCZ2YmwsIDAsIHNpemVvZih2YmwpKTsKKwl2YmwucmVx dWVzdC50eXBlID0gRFJNX1ZCTEFOS19SRUxBVElWRSB8IHBpcGVfc2VsZWN0KHBpcGUpIHwgZmxh Z3M7CisJaWYgKGRybUlvY3RsKGZkLCBEUk1fSU9DVExfV0FJVF9WQkxBTkssICZ2YmwpKQorCQly ZXR1cm4gMDsKKworCXJldHVybiB2YmwucmVwbHkuc2VxdWVuY2U7Cit9CisKKworc3RhdGljIGlu dCBwbGFuZV9zdHJlc3Moc3RydWN0IGRhdGEgKmRhdGEsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCBl bnVtIHBpcGUgcGlwZSwgZHJtTW9kZU1vZGVJbmZvICptb2RlKQoreworCWlndF9wbGFuZV90ICpw bGFuZTsKKwlpbnQgaTsKKwlpbnQgcmV0OworCWludCBsYXN0X3BsYW5lOworCWJvb2wgbmV3X21v ZGUgPSBmYWxzZTsKKwl1aW50NjRfdCBjdXJzb3Jfd2lkdGgsIGN1cnNvcl9oZWlnaHQ7CisKKwlk b19vcl9kaWUoZHJtR2V0Q2FwKGRhdGEtPmRybV9mZCwgRFJNX0NBUF9DVVJTT1JfV0lEVEgsICZj dXJzb3Jfd2lkdGgpKTsKKwlkb19vcl9kaWUoZHJtR2V0Q2FwKGRhdGEtPmRybV9mZCwgRFJNX0NB UF9DVVJTT1JfSEVJR0hULCAmY3Vyc29yX2hlaWdodCkpOworCisJaWYgKGRhdGEtPmxhc3RfbW9k ZVtwaXBlXSAhPSBtb2RlKSB7CisJCWlndF9vdXRwdXRfb3ZlcnJpZGVfbW9kZShvdXRwdXQsIG1v ZGUpOworCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZSk7CisKKwkJcmV0ID0gaWd0 X2Rpc3BsYXlfdHJ5X2NvbW1pdF9hdG9taWMoJmRhdGEtPmRpc3BsYXksCisJCQkJRFJNX01PREVf QVRPTUlDX1RFU1RfT05MWSB8IERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VULCBOVUxMKTsK KwkJaWYgKHJldCkgeworCQkJaWd0X3dhcm4oIkNvdWxkIG5vdCBjb21taXQgbW9kZTogXG4iKTsK KwkJCWttc3Rlc3RfZHVtcF9tb2RlKG1vZGUpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWln dF9kaXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCQlkYXRh LT5sYXN0X21vZGVbcGlwZV0gPSBtb2RlOworCQluZXdfbW9kZSA9IHRydWU7CisJfQorCisJLyoK KwkgKiBMb29rcyBsaWtlIHdlIGNhbid0IGhhdmUgcGxhbmVzIG9uIHRoYXQgcGlwZSBhdCBhbGwK KwkgKi8KKwlpZiAoIWRhdGEtPm51bV9wbGFuZXNbcGlwZV0pCisJCXJldHVybiAwOworCisJbW9k ZSA9IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKKworCWlmIChuZXdfbW9kZSkgeworCQlp ID0gMDsKKwkJZm9yX2VhY2hfcGxhbmVfb25fcGlwZSgmZGF0YS0+ZGlzcGxheSwgcGlwZSwgcGxh bmUpIHsKKwkJCWludCBwbGFuZV93aWR0aCwgcGxhbmVfaGVpZ2h0OworCQkJaWYgKHBsYW5lLT50 eXBlID09IERSTV9QTEFORV9UWVBFX0NVUlNPUikgeworCQkJCWlndF9wbGFuZV9zZXRfZmIocGxh bmUsICZkYXRhLT5jdXJzb3JfZmJbcGlwZV0pOworCQkJCWlndF9mYl9zZXRfc2l6ZSgmZGF0YS0+ Y3Vyc29yX2ZiW3BpcGVdLCBwbGFuZSwgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0KTsKKwkJ CQlpZ3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIGN1cnNvcl93aWR0aCwgY3Vyc29yX2hlaWdodCk7 CisJCQkJcGxhbmVfd2lkdGggPSBjdXJzb3Jfd2lkdGg7CisJCQkJcGxhbmVfaGVpZ2h0ID0gY3Vy c29yX2hlaWdodDsKKwkJCX0gZWxzZSB7CisJCQkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRh dGEtPmZiW3BpcGUgKiBNQVhfUExBTkVTICsgaV0pOworCQkJCWlndF9wbGFuZV9zZXRfcG9zaXRp b24ocGxhbmUsIDAsIDApOworCQkJCWlndF9mYl9zZXRfc2l6ZSgmZGF0YS0+ZmJbcGlwZSAqIE1B WF9QTEFORVMgKyBpXSwgcGxhbmUsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSk7CisJ CQkJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3Bs YXkpOworCQkJCXBsYW5lX3dpZHRoID0gbW9kZS0+aGRpc3BsYXk7CisJCQkJcGxhbmVfaGVpZ2h0 ID0gbW9kZS0+dmRpc3BsYXk7CisJCQl9CisKKwkJCXJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21t aXRfYXRvbWljKCZkYXRhLT5kaXNwbGF5LCBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZIHwgRFJN X01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIE5VTEwpOworCQkJd2hpbGUgKHJldCkgeworCQkJ CWlmIChwbGFuZV93aWR0aCA8PSBjdXJzb3Jfd2lkdGggfHwgcGxhbmVfaGVpZ2h0IDw9IGN1cnNv cl9oZWlnaHQpCisJCQkJCWJyZWFrOworCQkJCXBsYW5lX3dpZHRoIC89IDI7CisJCQkJcGxhbmVf aGVpZ2h0IC89IDI7CisJCQkJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCBwbGFuZV93aWR0aCwg cGxhbmVfaGVpZ2h0KTsKKwkJCQlpZ3RfaW5mbygiUmVkdWNlZCBwbGFuZSAlZCBzaXplIHRvICVk eCVkXG4iLCBwbGFuZS0+aW5kZXgsIHBsYW5lX3dpZHRoLCBwbGFuZV9oZWlnaHQpOworCQkJCXJl dCA9IGlndF9kaXNwbGF5X3RyeV9jb21taXRfYXRvbWljKCZkYXRhLT5kaXNwbGF5LCBEUk1fTU9E RV9BVE9NSUNfVEVTVF9PTkxZIHwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIE5VTEwp OworCQkJfQorCQkJaWYgKHJldCkgeworCQkJCWlndF9pbmZvKCJQbGFuZSAlZCBwaXBlICVkIHRy eSBjb21taXQgZmFpbGVkLCBleGl0aW5nXG4iLCBpLCBwaXBlKTsKKwkJCQlkYXRhLT5udW1fcGxh bmVzW3BpcGVdID0gaTsKKwkJCQkvKgorCQkJCSAqIFdlIGhhdmUgbm93IGRldGVybWluZWQgbWF4 IGFtb3VudCBvZiBmdWxsIHNpemVkIHBsYW5lcywgd2Ugd2lsbCBqdXN0CisJCQkJICoga2VlcCBp dCBpbiBtaW5kIGFuZCBiZSBzbWFydGVyIG5leHQgdGltZS4gQWxzbyBsZXRzIHJlbW92ZSB1bm5l ZWRlZCBmYnMuCisJCQkJICogRG9uJ3QgZGVzdHJveSBjdXJzb3JfZmIgYXMgd2lsbCB0YWtlIGNh cmUgYWJvdXQgaXQgYXQgdGhlIGVuZC4KKwkJCQkgKi8KKwkJCQlpZ3RfcGxhbmVfc2V0X2ZiKHBs YW5lLCBOVUxMKTsKKwkJCQl3aGlsZSAoaSA8IE1BWF9QTEFORVMpIHsKKwkJCQkJaWd0X3JlbW92 ZV9mYihkYXRhLT5kaXNwbGF5LmRybV9mZCwgJmRhdGEtPmZiW3BpcGUgKiBNQVhfUExBTkVTICsg aV0pOworCQkJCQlkYXRhLT5mYltwaXBlICogTUFYX1BMQU5FUyArIGldLmZiX2lkID0gMDsKKwkJ CQkJaSsrOworCQkJCX0KKwkJCQlpID0gZGF0YS0+bnVtX3BsYW5lc1twaXBlXTsKKwkJCX0KKwkJ CWlmICgrK2kgPj0gZGF0YS0+bnVtX3BsYW5lc1twaXBlXSkKKwkJCQlicmVhazsKKwkJfQorCQlp Z3RfZGlzcGxheV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBDT01NSVRfQVRPTUlDKTsKKwl9CisK KwlsYXN0X3BsYW5lID0gZGF0YS0+bnVtX3BsYW5lc1twaXBlXSAtIDE7CisJaWYgKGxhc3RfcGxh bmUgPj0gNykKKwkJbGFzdF9wbGFuZSA9IDY7CisKKwlpZiAoZGF0YS0+Z3B1X2NvbnRleHRbcGlw ZV0uZmJfcHRyICE9ICZkYXRhLT5mYltwaXBlICogTUFYX1BMQU5FUyArIGxhc3RfcGxhbmVdKSB7 CisJCWRhdGEtPmdwdV9jb250ZXh0W3BpcGVdLmZiX3B0ciA9ICZkYXRhLT5mYltwaXBlICogTUFY X1BMQU5FUyArIGxhc3RfcGxhbmVdOworCQlpZ3RfaW5mbygiUGxhbmUgc3RyZXNzIGZvciBwaXBl ICVkOiBTZXQgY29udGV4dCBmYiBwdHIgJXhcbiIsIHBpcGUsIGRhdGEtPmdwdV9jb250ZXh0W3Bp cGVdLmZiX3B0cik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGRybU1vZGVNb2Rl SW5mbyAqIGZpbmRfaGlnaGVzdF9tb2RlKGRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3RvcikKK3sK Kwlkcm1Nb2RlTW9kZUluZm8gKmhpZ2hlc3RfbW9kZSA9IE5VTEw7CisJaW50IGo7CisKKwlmb3Ig KGogPSAwOyBqIDwgY29ubmVjdG9yLT5jb3VudF9tb2RlczsgaisrKSB7CisJCWlmICghaGlnaGVz dF9tb2RlKSB7CisJCQloaWdoZXN0X21vZGUgPSAmY29ubmVjdG9yLT5tb2Rlc1tqXTsKKwkJfQor CQllbHNlIGlmIChjb25uZWN0b3ItPm1vZGVzW2pdLnZkaXNwbGF5ICYmIGNvbm5lY3Rvci0+bW9k ZXNbal0uaGRpc3BsYXkpIHsKKwkJCWlmIChoaWdoZXN0X21vZGUtPmhkaXNwbGF5IDwgY29ubmVj dG9yLT5tb2Rlc1tqXS5oZGlzcGxheSkKKwkJCQloaWdoZXN0X21vZGUgPSAmY29ubmVjdG9yLT5t b2Rlc1tqXTsKKwkJCX0KKwl9CisKKwlyZXR1cm4gaGlnaGVzdF9tb2RlOworfQorCit0eXBlZGVm IGRybU1vZGVDb25uZWN0b3IgKiBkcm1Nb2RlQ29ubmVjdG9yUHRyOworCitzdGF0aWMgdm9pZCBm aWxsX2Nvbm5lY3Rvcl90b19waXBlX2FycmF5KHN0cnVjdCBkYXRhICpkYXRhLCBkcm1Nb2RlUmVz ICptb2RlX3Jlc291cmNlcywgZHJtTW9kZUNvbm5lY3RvclB0ciAqY29ubmVjdG9ycykKK3sKKwlp bnQgcGlwZSA9IDAsIGNydGNfaWQ7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisJaW50IGk7CisK KwltZW1zZXQoY29ubmVjdG9ycywgMCwgc2l6ZW9mKGRybU1vZGVDb25uZWN0b3JQdHIpICogSUdU X01BWF9QSVBFUyk7CisKKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KCZkYXRhLT5kaXNwbGF5 LCBvdXRwdXQpIHsKKwkJY3J0Y19pZCA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBtb2RlX3Jlc291 cmNlcy0+Y291bnRfY29ubmVjdG9yczsgaSsrKSB7CisJCQlkcm1Nb2RlQ29ubmVjdG9yICpjb25u ZWN0b3I7CisKKwkJCWNvbm5lY3RvciA9IGRybU1vZGVHZXRDb25uZWN0b3JDdXJyZW50KGRhdGEt PmRybV9mZCwKKwkJCQkgICAgICAgbW9kZV9yZXNvdXJjZXMtPmNvbm5lY3RvcnNbaV0pOworCisJ CQlpZiAoIWNvbm5lY3RvcikgeworCQkJCWlndF93YXJuKCJjb3VsZCBub3QgZ2V0IGNvbm5lY3Rv ciAlaTogJXNcbiIsCisJCQkJCW1vZGVfcmVzb3VyY2VzLT5jb25uZWN0b3JzW2ldLCBzdHJlcnJv cihlcnJubykpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoY29ubmVjdG9yLT5jb25u ZWN0aW9uID09IERSTV9NT0RFX0NPTk5FQ1RFRCkgeworCQkJCWlmIChjcnRjX2lkID09IHBpcGUp IHsKKwkJCQkJY29ubmVjdG9yc1twaXBlXSA9IChkcm1Nb2RlQ29ubmVjdG9yUHRyKWNvbm5lY3Rv cjsKKwkJCQl9CisJCQkJY3J0Y19pZCsrOworCQkJfQorCQkJZWxzZQorCQkJCWRybU1vZGVGcmVl Q29ubmVjdG9yKGNvbm5lY3Rvcik7CisJCX0KKwkJaWYgKCgrK3BpcGUpID09IElHVF9NQVhfUElQ RVMpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfY29ubmVjdG9ycyhk cm1Nb2RlQ29ubmVjdG9yUHRyICpjb25uZWN0b3JzKQoreworCWludCBpOworCWZvciAoaSA9IDA7 IGkgPCBJR1RfTUFYX1BJUEVTOyBpKyspIHsKKwkJaWYgKGNvbm5lY3RvcnNbaV0pCisJCQlkcm1N b2RlRnJlZUNvbm5lY3Rvcihjb25uZWN0b3JzW2ldKTsKKwl9Cit9CisKKyNkZWZpbmUgTUlOX0RV UkFUSU9OX1NFQyA1LjAwCisjZGVmaW5lIE1JTl9JVEVSQVRJT05TIDIwCisKK3N0YXRpYyB2b2lk IHN0cmVzcyhzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgc3RhcnQsIGVu ZDsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKwlpbnQgcmV0OworCWludCBwaXBlOworCWludCBp dGVyYXRpb25zID0gMDsKKwlib29sIG5lZWRfY29udGludWU7CisJaWd0X2NyY190IGNyYywgY3Jj MjsKKworCWlndF9nZXR0aW1lKCZzdGFydCk7CisKKwlkbyB7CisJCS8qCisJCSAqIEluY3JlbWVu dCBwaXBlIG9ubHkgZm9yIGNvbm5lY3RlZCBvdXRwdXRzLAorCQkgKiBmb3IgZWFjaCBjb25uZWN0 ZWQgb3V0cHV0IHdlIHNob3VsZCBhc3NpZ24gYQorCQkgKiBkaWZmZXJlbnQgcGlwZS4KKwkJICov CisJCXBpcGUgPSAwOworCQlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KCZkYXRhLT5kaXNwbGF5 LCBvdXRwdXQpIHsKKwkJCWlndF9hc3NlcnRfZihkYXRhLT5kaXNwbGF5LnBpcGVzW3BpcGVdLm5f cGxhbmVzIDwgTUFYX1BMQU5FUywKKwkJCQkiQ3VycmVudGx5IHdlIGRvbid0IHN1cHBvcnQgbW9y ZSB0aGFuICVkIHBsYW5lcyEiLCBNQVhfUExBTkVTKTsKKworCQkJcGlwZV9jcmMgPSBpZ3RfcGlw ZV9jcmNfbmV3KGRhdGEtPmRybV9mZCwgcGlwZSwKKwkJCQlJTlRFTF9QSVBFX0NSQ19TT1VSQ0Vf QVVUTyk7CisKKwkJCXJldCA9IHBsYW5lX3N0cmVzcyhkYXRhLCBvdXRwdXQsIHBpcGUsIGRhdGEt PmhpZ2hlc3RfbW9kZVtwaXBlXSk7CisKKwkJCWlmICghKChpbnQpaWd0X3RpbWVfZWxhcHNlZCgm c3RhcnQsICZlbmQpICUgKChpbnQpTUlOX0RVUkFUSU9OX1NFQy80KSkpIHsKKwkJCQlwYXVzZV9n cHVfdGhyZWFkcyhkYXRhKTsKKwkJCQlnZXRfdmJsYW5rKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCBw aXBlLCBEUk1fVkJMQU5LX05FWFRPTk1JU1MpOworCisJCQkJaWd0X3BpcGVfY3JjX2NvbGxlY3Rf Y3JjKHBpcGVfY3JjLCAmY3JjKTsKKworCQkJCWdldF92YmxhbmsoZGF0YS0+ZGlzcGxheS5kcm1f ZmQsIHBpcGUsIERSTV9WQkxBTktfTkVYVE9OTUlTUyk7CisKKwkJCQlpZ3RfcGlwZV9jcmNfY29s bGVjdF9jcmMocGlwZV9jcmMsICZjcmMyKTsKKwkJCQlyZXN1bWVfZ3B1X3RocmVhZHMoZGF0YSk7 CisJCQkJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJmNyYywgJmNyYzIpOworCQkJfQorCisJCQlpZ3Rf cGlwZV9jcmNfZnJlZShwaXBlX2NyYyk7CisKKwkJCWlmIChyZXQgfHwgKCsrcGlwZSA9PSBJR1Rf TUFYX1BJUEVTKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZ3RfZ2V0dGltZSgmZW5kKTsKKwkJaXRl cmF0aW9ucysrOworCQluZWVkX2NvbnRpbnVlID0gaWd0X3RpbWVfZWxhcHNlZCgmc3RhcnQsICZl bmQpIDwgTUlOX0RVUkFUSU9OX1NFQzsKKwl9IHdoaWxlICgobmVlZF9jb250aW51ZSB8fCBpdGVy YXRpb25zIDwgTUlOX0lURVJBVElPTlMpKTsKKworCit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X2dw dV90aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRhKQoreworCWludCBpID0gMDsKKwlpZ3Rfb3V0cHV0 X3QgKm91dHB1dDsKKworCWlmICghZGF0YS0+ZGV2aWQpIHsKKwkJZGF0YS0+ZGV2aWQgPSBpbnRl bF9nZXRfZHJtX2RldmlkKGRhdGEtPmRybV9mZCk7CisJCWlndF9yZXF1aXJlX2dlbShkYXRhLT5k cm1fZmQpOworCisJCWRhdGEtPmJ1Zm1nciA9IGRybV9pbnRlbF9idWZtZ3JfZ2VtX2luaXQoZGF0 YS0+ZHJtX2ZkLCA0MDk2KTsKKwkJaWd0X2Fzc2VydChkYXRhLT5idWZtZ3IpOworCX0KKworCWZv cl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRhdGEtPmRpc3BsYXksIG91dHB1dCkgeworCQlkYXRh LT5ncHVfY29udGV4dFtpXS5kYXRhID0gZGF0YTsKKwkJZGF0YS0+Z3B1X2NvbnRleHRbaV0ucGlw ZSA9IGk7CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmZiX3B0ciA9IE5VTEw7CisJCWRhdGEtPmdw dV9jb250ZXh0W2ldLmJsdF9yZWN0LnggPSAwOworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5ibHRf cmVjdC55ID0gMDsKKwkJZGF0YS0+Z3B1X2NvbnRleHRbaV0uYmx0X3JlY3QudyA9IDA7CisJCWRh dGEtPmdwdV9jb250ZXh0W2ldLmJsdF9yZWN0LmggPSAwOworCQlkYXRhLT5ncHVfdGhyZWFkX3N0 YXRlW2ldID0gUlVOTklORzsKKwkJaWd0X2luZm8oIlN0YXJ0aW5nIEdQVSB0aHJlYWQgJWRcbiIs IGkpOworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5iYXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2Fs bG9jKGRhdGEtPmJ1Zm1nciwgZGF0YS0+ZGV2aWQpOworCQlwdGhyZWFkX2NyZWF0ZSgmZGF0YS0+ Z3B1X3RocmVhZFtpXSwgTlVMTCwgZ3B1X2xvYWQsICh2b2lkKikmZGF0YS0+Z3B1X2NvbnRleHRb aV0pOworCQlpZiAoKytpID09IElHVF9NQVhfUElQRVMpCisJCQlicmVhazsKKwl9Cit9CisKKwor c3RhdGljIHZvaWQgcGF1c2VfZ3B1X3RocmVhZHMoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJaW50 IGkgPSAwOworCWlndF9vdXRwdXRfdCAqb3V0cHV0OworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRw dXQoJmRhdGEtPmRpc3BsYXksIG91dHB1dCkgeworCQlpZiAoZGF0YS0+Z3B1X3RocmVhZF9zdGF0 ZVtpXSAhPSBSVU5OSU5HKSB7CisJCQkrK2k7CisJCQljb250aW51ZTsKKwkJfQorCQlpZ3RfaW5m bygiUGF1c2luZyBHUFUgdGhyZWFkICVkXG4iLCBpKTsKKwkJZGF0YS0+Z3B1X3RocmVhZF9zdGF0 ZVtpXSA9IFBBVVNFRDsKKwkJc2VtX3dhaXQoJmRhdGEtPmdwdV90aHJlYWRfcGF1c2VfYWNrW2ld KTsKKwkJaWd0X2luZm8oIkdQVSB0aHJlYWQgJWQgcGF1c2VkXG4iLCBpKTsKKwkJaWYgKCsraSA9 PSBJR1RfTUFYX1BJUEVTKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCByZXN1bWVf Z3B1X3RocmVhZHMoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJaW50IGkgPSAwOworCWlndF9vdXRw dXRfdCAqb3V0cHV0OworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRhdGEtPmRpc3BsYXks IG91dHB1dCkgeworCQlpZiAoZGF0YS0+Z3B1X3RocmVhZF9zdGF0ZVtpXSAhPSBQQVVTRUQpIHsK KwkJCSsraTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWRhdGEtPmdwdV90aHJlYWRfc3RhdGVbaV0g PSBSVU5OSU5HOworCQlpZ3RfaW5mbygiUmVzdW1pbmcgR1BVIHRocmVhZCAlZFxuIiwgaSk7CisJ CXNlbV93YWl0KCZkYXRhLT5ncHVfdGhyZWFkX3BhdXNlX2Fja1tpXSk7CisJCWlndF9pbmZvKCJH UFUgdGhyZWFkICVkIHJlc3VtZWRcbiIsIGkpOworCQlpZiAoKytpID09IElHVF9NQVhfUElQRVMp CisJCQlicmVhazsKKwl9Cit9CisKKworc3RhdGljIHZvaWQgc3RvcF9ncHVfdGhyZWFkcyhzdHJ1 Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaSA9IDA7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisJ Zm9yX2VhY2hfY29ubmVjdGVkX291dHB1dCgmZGF0YS0+ZGlzcGxheSwgb3V0cHV0KSB7CisJCWRh dGEtPmdwdV90aHJlYWRfc3RhdGVbaV0gPSBTVE9QUEVEOworCQlpZ3RfaW5mbygiU3RvcGluZyBH UFUgdGhyZWFkICVkXG4iLCBpKTsKKwkJcHRocmVhZF9qb2luKGRhdGEtPmdwdV90aHJlYWRbaV0s IE5VTEwpOworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5mYl9wdHIgPSBOVUxMOworCQlpbnRlbF9i YXRjaGJ1ZmZlcl9mcmVlKGRhdGEtPmdwdV9jb250ZXh0W2ldLmJhdGNoKTsKKwkJaWYgKCsraSA9 PSBJR1RfTUFYX1BJUEVTKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdGFydF9j cHVfdGhyZWFkcyhzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBp IDwgZGF0YS0+bnVtYmVyX29mX2NvcmVzO2krKykgeworCQlkYXRhLT5jcHVfY29udGV4dFtpXS5i dWYxID0gbWFsbG9jKEJVRl9TSVpFKTsKKwkJZGF0YS0+Y3B1X2NvbnRleHRbaV0uYnVmMiA9IG1h bGxvYyhCVUZfU0laRSk7CisJCWRhdGEtPmNwdV9jb250ZXh0W2ldLmlkID0gaTsKKwkJZGF0YS0+ Y3B1X2NvbnRleHRbaV0uZGF0YSA9IGRhdGE7CisJCXB0aHJlYWRfY3JlYXRlKCZkYXRhLT5jcHVf dGhyZWFkW2ldLCBOVUxMLCBjcHVfbG9hZCwgKHZvaWQqKSZkYXRhLT5jcHVfY29udGV4dFtpXSk7 CisJfQorfQorCitzdGF0aWMgdm9pZCBzdG9wX2NwdV90aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRh KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5udW1iZXJfb2ZfY29yZXM7aSsr KSB7CisJCWRhdGEtPmNwdV90aHJlYWRfc3RvcFtpXSA9IHRydWU7CisJCXB0aHJlYWRfam9pbihk YXRhLT5jcHVfdGhyZWFkW2ldLCBOVUxMKTsKKwkJZnJlZShkYXRhLT5jcHVfY29udGV4dFtpXS5i dWYxKTsKKwkJZnJlZShkYXRhLT5jcHVfY29udGV4dFtpXS5idWYyKTsKKwl9Cit9CisKK3N0YXRp YyB2b2lkIGNyZWF0ZV9mcmFtZWJ1ZmZlcnMoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJaW50IGks IGo7CisJdWludDY0X3QgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0OworCWlndF9vdXRwdXRf dCAqb3V0cHV0OworCisJZG9fb3JfZGllKGRybUdldENhcChkYXRhLT5kcm1fZmQsIERSTV9DQVBf Q1VSU09SX1dJRFRILCAmY3Vyc29yX3dpZHRoKSk7CisJZG9fb3JfZGllKGRybUdldENhcChkYXRh LT5kcm1fZmQsIERSTV9DQVBfQ1VSU09SX0hFSUdIVCwgJmN1cnNvcl9oZWlnaHQpKTsKKworCWkg PSAwOworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRhdGEtPmRpc3BsYXksIG91dHB1dCkg eworCQlpZiAoIWRhdGEtPmN1cnNvcl9mYltpXS5mYl9pZCkgeworCQkJaWd0X2NyZWF0ZV9jb2xv cl9mYihkYXRhLT5kcm1fZmQsIGN1cnNvcl93aWR0aCwgY3Vyc29yX2hlaWdodCwKKwkJCQkJRFJN X0ZPUk1BVF9BUkdCODg4OCwKKwkJCQkJTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKKwkJCQkJ MS4wLDAuMCwwLjAsCisJCQkJCSZkYXRhLT5jdXJzb3JfZmJbaV0pOworCQl9CisJCWZvciAoaiA9 IDA7IGogPCBkYXRhLT5udW1fcGxhbmVzW2ldO2orKykgeworCQkJaWYgKCFkYXRhLT5mYltpICog TUFYX1BMQU5FUyArIGpdLmZiX2lkKSB7CisJCQkJaWd0X2NyZWF0ZV9jb2xvcl9wYXR0ZXJuX2Zi KGRhdGEtPmRybV9mZCwKKwkJCQkgICAgZGF0YS0+aGlnaGVzdF9tb2RlW2ldLT5oZGlzcGxheSwK KwkJCQkgICAgZGF0YS0+aGlnaGVzdF9tb2RlW2ldLT52ZGlzcGxheSwKKwkJCQkgICAgZGF0YS0+ Zm9ybWF0LAorCQkJCSAgICBkYXRhLT5tb2RpZmllciwKKwkJCQkgICAgMC4wLCAxLjAsIDAuMCwg JmRhdGEtPmZiW2kgKiBNQVhfUExBTkVTICsgal0pOworCQkJfQorCQl9CisJCWlmICgrK2kgPT0g SUdUX01BWF9QSVBFUykKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgZGVzdHJveV9m cmFtZWJ1ZmZlcnMoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJaW50IGksIGo7CisJaWd0X291dHB1 dF90ICpvdXRwdXQ7CisKKwlpID0gMDsKKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KCZkYXRh LT5kaXNwbGF5LCBvdXRwdXQpIHsKKwkJZm9yIChqID0gMDtqIDwgTUFYX1BMQU5FUzsgaisrKSB7 CisJCQlpZiAoZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXS5mYl9pZCkgeworCQkJCWlndF9w bGFuZV9zZXRfZmIoJmRhdGEtPmRpc3BsYXkucGlwZXNbaV0ucGxhbmVzW2pdLCBOVUxMKTsKKwkJ CQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCAmZGF0YS0+ZmJbaSAqIE1BWF9Q TEFORVMgKyBqXSk7CisJCQkJZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXS5mYl9pZCA9IDA7 CisJCQl9CisJCX0KKwkJaWYgKGRhdGEtPmN1cnNvcl9mYltpXS5mYl9pZCkgeworCQkJaWd0X3Jl bW92ZV9mYihkYXRhLT5kaXNwbGF5LmRybV9mZCwgJmRhdGEtPmN1cnNvcl9mYltpXSk7CisJCQlk YXRhLT5jdXJzb3JfZmJbaV0uZmJfaWQgPSAwOworCQl9CisJCWlmICgrK2kgPT0gSUdUX01BWF9Q SVBFUykKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV90ZXN0KHN0cnVj dCBkYXRhICpkYXRhLCBib29sIG92ZXJyaWRlLCBib29sIGNwdSwgYm9vbCBncHUpCit7CisJaW50 IGksajsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKworCWRhdGEtPm51bWJlcl9vZl9jb3JlcyA9 IG1pbihzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKSwgTUFYX0NPUkVTKTsKKworCWZvciAo aSA9IDA7IGkgPCBJR1RfTUFYX1BJUEVTOyBpKyspIHsKKwkJZm9yIChqID0gMDtqIDwgTUFYX1BM QU5FUzsgaisrKQorCQkJZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXS5mYl9pZCA9IDA7CisJ CWRhdGEtPmN1cnNvcl9mYltpXS5mYl9pZCA9IDA7CisJCWRhdGEtPm51bV9wbGFuZXNbaV0gPSAt MTsKKwkJZGF0YS0+bGFzdF9tb2RlW2ldID0gTlVMTDsKKwkJc2VtX2luaXQoJmRhdGEtPmdwdV90 aHJlYWRfcGF1c2VfYWNrW2ldLCAwLCAwKTsKKwl9CisJaWYgKGNwdSkgeworCQlzdGFydF9jcHVf dGhyZWFkcyhkYXRhKTsKKwl9CisKKwlkYXRhLT5tb2RlX3Jlc291cmNlcyA9IGRybU1vZGVHZXRS ZXNvdXJjZXMoZGF0YS0+ZHJtX2ZkKTsKKwlpZiAoIWRhdGEtPm1vZGVfcmVzb3VyY2VzKSB7CisJ CWlndF93YXJuKCJkcm1Nb2RlR2V0UmVzb3VyY2VzIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVy cm5vKSk7CisJCXJldHVybjsKKwl9CisKKwltZW1zZXQoZGF0YS0+aGlnaGVzdF9tb2RlLCAwLCBz aXplb2YoZHJtTW9kZU1vZGVJbmZvICopICogSUdUX01BWF9QSVBFUyk7CisKKwlmaWxsX2Nvbm5l Y3Rvcl90b19waXBlX2FycmF5KGRhdGEsIGRhdGEtPm1vZGVfcmVzb3VyY2VzLCBkYXRhLT5jb25u ZWN0b3JzKTsKKworCWkgPSAwOworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRhdGEtPmRp c3BsYXksIG91dHB1dCkgeworCQlkcm1Nb2RlQ29ubmVjdG9yICpjb25uZWN0b3IgPSAoZHJtTW9k ZUNvbm5lY3RvciAqKWRhdGEtPmNvbm5lY3RvcnNbaV07CisJCWlmICghY29ubmVjdG9yKQorCQkJ Y29udGludWU7CisJCWlmICghZGF0YS0+aGlnaGVzdF9tb2RlW2ldKSB7CisJCQlpZiAoIW92ZXJy aWRlICYmIGNvbm5lY3Rvci0+Y291bnRfbW9kZXMpIHsKKwkJCQlkYXRhLT5oaWdoZXN0X21vZGVb aV0gPSBmaW5kX2hpZ2hlc3RfbW9kZShjb25uZWN0b3IpOworCQkJfQorCQkJZWxzZQorCQkJCWRh dGEtPmhpZ2hlc3RfbW9kZVtpXSA9ICZ1aGRfbW9kZV82MGh6OworCQl9CisJCWlmICgrK2kgPT0g SUdUX01BWF9QSVBFUykKKwkJCWJyZWFrOworCX0KKworCS8qCisJICogVW50aWwgd2UgZmlndXJl IG91dCBtYXhpbXVtIGFtb3VudCBvZiBwbGFuZXMsCisJICogdXNlIHRoZSBvbmUgZGVjbGFyZWQg Ynkga2VybmVsLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFYX1BJUEVTOyBpKyspIHsK KwkJaWYgKGRhdGEtPm51bV9wbGFuZXNbaV0gPT0gLTEpCisJCQlkYXRhLT5udW1fcGxhbmVzW2ld ID0gZGF0YS0+ZGlzcGxheS5waXBlc1tpXS5uX3BsYW5lczsKKwl9CisJY3JlYXRlX2ZyYW1lYnVm ZmVycyhkYXRhKTsKKwlpZiAoZ3B1KSB7CisJCXN0YXJ0X2dwdV90aHJlYWRzKGRhdGEpOworCX0K K30KKworc3RhdGljIHZvaWQgZmluaXNoX3Rlc3Qoc3RydWN0IGRhdGEgKmRhdGEsIGJvb2wgb3Zl cnJpZGUsIGJvb2wgY3B1LCBib29sIGdwdSkKK3sKKwlpbnQgaTsKKworCWlmIChncHUpIHsKKwkJ c3RvcF9ncHVfdGhyZWFkcyhkYXRhKTsKKwl9CisJLyoKKwkgKiBBcyB3ZSBjaGFuZ2UgdGlsaW5n L2Zvcm1hdCB3ZSBuZWVkIGEgbmV3IEZCCisJICovCisJZGVzdHJveV9mcmFtZWJ1ZmZlcnMoZGF0 YSk7CisJZm9yIChpID0gMDsgaSA8IElHVF9NQVhfUElQRVM7IGkrKykgeworCQlkYXRhLT5udW1f cGxhbmVzW2ldID0gLTE7CisJCWRhdGEtPmxhc3RfbW9kZVtpXSA9IE5VTEw7CisJfQorCWlmIChj cHUpIHsKKwkJc3RvcF9jcHVfdGhyZWFkcyhkYXRhKTsKKwl9CisJcmVsZWFzZV9jb25uZWN0b3Jz KGRhdGEtPmNvbm5lY3RvcnMpOworCisJZHJtTW9kZUZyZWVSZXNvdXJjZXMoZGF0YS0+bW9kZV9y ZXNvdXJjZXMpOworfQorCitzdHJ1Y3QgZGF0YSBkYXRhID0geworCS5mb3JtYXQgPSBEUk1fRk9S TUFUX1hSR0I4ODg4LAorCS5tb2RpZmllciA9IERSTV9GT1JNQVRfTU9EX0xJTkVBUiwKKwkuZGV2 aWQgPSAwLAorfTsKKworZW51bSB7CisgICAgUExBTkVTX09OTFkgPSAwLAorICAgIENQVV9MT0FE LAorICAgIEdQVV9MT0FELAorICAgIE1PREVfT1ZFUlJJREUsCit9IHRlc3RfYml0czsKKworc3Rh dGljIHZvaWQgc2V0X3BhcmFtcyh1aW50OF90IGJpdHMsIGJvb2wgKm1vZGVfb3ZlcnJpZGUsIGJv b2wgKmNwdV9sb2FkLCBib29sICpncHVfbG9hZCkKK3sKKwkqY3B1X2xvYWQgPSAoYml0cyAmICgx IDw8IENQVV9MT0FEKSkgIT0gMCA/IHRydWUgOiBmYWxzZTsKKwkqZ3B1X2xvYWQgPSAoYml0cyAm ICgxIDw8IEdQVV9MT0FEKSkgIT0gMCA/IHRydWUgOiBmYWxzZTsKKwkqbW9kZV9vdmVycmlkZSA9 IChiaXRzICYgKDEgPDwgTU9ERV9PVkVSUklERSkpICE9IDAgPyB0cnVlIDogZmFsc2U7Cit9CisK KworaWd0X21haW4KK3sKKwlib29sIG1vZGVfb3ZlcnJpZGU7CisJYm9vbCBjcHVfbG9hZDsKKwli b29sIGdwdV9sb2FkOworCXVpbnQ4X3QgZm9ybWF0X2lkeCA9IDAsIHRpbGluZ19pZHggPSAwOwor CXVpbnQ2NF90IG1heF9jb21iaW5hdGlvbnMgPSAxIDw8IChNT0RFX09WRVJSSURFICsgMSk7CisJ aW50OF90IHRlc3RfY29tYiA9IG1heF9jb21iaW5hdGlvbnMgLSAxOworCisJaWd0X2ZpeHR1cmUg eworCQlkYXRhLmRybV9mZCA9IGRhdGEuZGlzcGxheS5kcm1fZmQgPSBkcm1fb3Blbl9kcml2ZXJf bWFzdGVyKERSSVZFUl9BTlkpOworCisJCWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsK KworCQlpZ3RfZGlzcGxheV9yZXF1aXJlKCZkYXRhLmRpc3BsYXksIGRhdGEuZGlzcGxheS5kcm1f ZmQpOworCQlpZ3RfcmVxdWlyZShkYXRhLmRpc3BsYXkuaXNfYXRvbWljKTsKKwkJaWd0X2Rpc3Bs YXlfcmVxdWlyZV9vdXRwdXQoJmRhdGEuZGlzcGxheSk7CisJfQorCisJZG8geworCQlzZXRfcGFy YW1zKHRlc3RfY29tYiwgJm1vZGVfb3ZlcnJpZGUsICZjcHVfbG9hZCwgJmdwdV9sb2FkKTsKKwkJ LyoKKwkJICogRG8gYWxsIGNvbWJpbmF0aW9ucyBvZiBtb2RlX292ZXJyaWRlLCBjcHVfbG9hZCwg Z3B1X2xvYWQgYW5kCisJCSAqIGFsbCBmb3JtYXQgYW5kIHRpbGluZyBmb3IgZWFjaCBvZiB0aG9z ZS4KKwkJICovCisJCWZvciAoZm9ybWF0X2lkeCA9IDA7IGZvcm1hdF9pZHggPCBOX0ZPUk1BVFM7 IGZvcm1hdF9pZHgrKykKKwkJCWZvciAodGlsaW5nX2lkeCA9IDA7IHRpbGluZ19pZHggPCBOX1RJ TElOR19NRVRIT0RTOyB0aWxpbmdfaWR4KyspIHsKKwkJCQlkYXRhLmZvcm1hdCA9IGZvcm1hdHNb Zm9ybWF0X2lkeF07CisJCQkJZGF0YS5tb2RpZmllciA9IHRpbGluZ3NbdGlsaW5nX2lkeF07CisK KwkJCQlpZ3RfZml4dHVyZSB7CisJCQkJCXByZXBhcmVfdGVzdCgmZGF0YSwgbW9kZV9vdmVycmlk ZSwgY3B1X2xvYWQsIGdwdV9sb2FkKTsKKwkJCQl9CisKKwkJCQlpZ3Rfc3VidGVzdF9mKCJzdHJl c3MlcyVzJXMtJXMtJXMiLAorCQkJCSAgICAgIG1vZGVfb3ZlcnJpZGUgPT0gZmFsc2UgPyAiIiA6 ICItbW9kZS1vdmVycmlkZSIsCisJCQkJICAgICAgY3B1X2xvYWQgPT0gZmFsc2UgPyAiIiA6ICIt Y3B1LWxvYWQiLAorCQkJCSAgICAgIGdwdV9sb2FkID09IGZhbHNlID8gIiIgOiAiLWdwdS1sb2Fk IiwKKwkJCQkgICAgICBmb3JtYXRfc3RyKGZvcm1hdF9pZHgpLAorCQkJCSAgICAgIHRpbGluZ19z dHIodGlsaW5nX2lkeCkpIHsKKworCQkJCQlzdHJlc3MoJmRhdGEpOworCisJCQkJfQorCisJCQkJ aWd0X2ZpeHR1cmUgeworCQkJCQlmaW5pc2hfdGVzdCgmZGF0YSwgbW9kZV9vdmVycmlkZSwgY3B1 X2xvYWQsIGdwdV9sb2FkKTsKKwkJCQl9CisJCQl9CisJfSB3aGlsZSAoLS10ZXN0X2NvbWIgPiAw ICk7CisKKwlpZ3RfZml4dHVyZSB7CisKKwkJaWd0X2Rpc3BsYXlfZmluaSgmZGF0YS5kaXNwbGF5 KTsKKwl9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMv bWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5idWlsZAppbmRleCBhN2IyYjMyMi4uYjZkN2VkNDUg MTAwNjQ0Ci0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCisrKyBiL3Rlc3RzL21lc29uLmJ1aWxkCkBA IC01MCw2ICs1MCw3IEBAIHRlc3RfcHJvZ3MgPSBbCiAJJ2ttc19wbGFuZV9tdWx0aXBsZScsCiAJ J2ttc19wbGFuZV9zY2FsaW5nJywKIAkna21zX3ByaW1lJywKKwkna21zX3BsYW5lX3N0cmVzcycs CiAJJ2ttc19wcm9wX2Jsb2InLAogCSdrbXNfcHJvcGVydGllcycsCiAJJ2ttc19wc3InLAotLSAK Mi4xNy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpp Z3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXY=