From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dhanya Pillai Subject: [PATCH i-g-t] tests/kms_color:Color i-g-t Date: Tue, 29 Dec 2015 09:29:12 +0530 Message-ID: <1451361552-8685-1-git-send-email-dhanya.p.r@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 8C837899C4 for ; Mon, 28 Dec 2015 19:57:41 -0800 (PST) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: jesse.barnes@intel.com, Dhanya List-Id: intel-gfx@lists.freedesktop.org RnJvbTogRGhhbnlhIDxkaGFueWEucC5yQGludGVsLmNvbT4KCglUaGlzIHBhdGNoIHdpbGwgdmVy aWZ5IGNvbG9yIGNvcnJlY3Rpb24gY2FwYWJpbGl0eSBvZiBhIGRpc3BsYXkgZHJpdmVyLgoJR2Ft bWEvQ1NDL0RlLWdhbW1hIGZvciBTS0wvQlhUIHN1cHBvcnRlZC4KClNpZ25lZC1vZmYtYnk6IERo YW55YSA8ZGhhbnlhLnAuckBpbnRlbC5jb20+Ci0tLQogdGVzdHMvLmdpdGlnbm9yZSAgICAgICB8 ICAgIDEgKwogdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAgIDEgKwogdGVzdHMva21zX2NvbG9y LmMgICAgICB8IDEwMzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDEwNDEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHRlc3RzL2ttc19jb2xvci5jCgpkaWZmIC0tZ2l0IGEvdGVzdHMvLmdpdGlnbm9yZSBi L3Rlc3RzLy5naXRpZ25vcmUKaW5kZXggN2YyMGYyYi4uNmZjNDc4MiAxMDA2NDQKLS0tIGEvdGVz dHMvLmdpdGlnbm9yZQorKysgYi90ZXN0cy8uZ2l0aWdub3JlCkBAIC0xMzAsNiArMTMwLDcgQEAg Z2VuN19mb3JjZXdha2VfbXQKIGttc18zZAoga21zX2FkZGZiX2Jhc2ljCiBrbXNfYXRvbWljCitr bXNfY29sb3IKIGttc19jcnRjX2JhY2tncm91bmRfY29sb3IKIGttc19jdXJzb3JfY3JjCiBrbXNf ZHJhd19jcmMKZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtl ZmlsZS5zb3VyY2VzCmluZGV4IGQ1OTQwMzguLmYyYWY2NDggMTAwNjQ0Ci0tLSBhL3Rlc3RzL01h a2VmaWxlLnNvdXJjZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwpAQCAtNjgsNiArNjgs NyBAQCBURVNUU19wcm9nc19NID0gXAogCWdlbV93cml0ZV9yZWFkX3Jpbmdfc3dpdGNoIFwKIAlr bXNfYWRkZmJfYmFzaWMgXAogCWttc19hdG9taWMgXAorCWttc19jb2xvciBcCiAJa21zX2N1cnNv cl9jcmMgXAogCWttc19kcmF3X2NyYyBcCiAJa21zX2ZiY19jcmMgXApkaWZmIC0tZ2l0IGEvdGVz dHMva21zX2NvbG9yLmMgYi90ZXN0cy9rbXNfY29sb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5iMWI2NGU3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMva21zX2NvbG9y LmMKQEAgLTAsMCArMSwxMDM5IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTUgSW50ZWwgQ29y cG9yYXRpb24KKyAqCisgICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQor ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNo YWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgor ICoKKyAqIEF1dGhvcnM6CisgKiAgIERoYW55YSBQaWxsYWkgPGRoYW55YS5wLnJAaW50ZWwuY29t PgorICovCisKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5o PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPG1h dGguaD4KKyNpbmNsdWRlICJkcm10ZXN0LmgiCisjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAi aWd0X2RlYnVnZnMuaCIKKyNpbmNsdWRlICJpZ3Rfa21zLmgiCisjaW5jbHVkZSAiaWd0X2NvcmUu aCIKKyNpbmNsdWRlICJpbnRlbF9pby5oIgorI2luY2x1ZGUgImludGVsX2NoaXBzZXQuaCIKKyNp bmNsdWRlICJpZ3RfYXV4LmgiCisKKworSUdUX1RFU1RfREVTQ1JJUFRJT04oIlRlc3QgQ29sb3Ig RmVhdHVyZXMgYXQgUGlwZSBsZXZlbCIpOworLyoKKworVGhpcyB0b29sIHRlc3RzIHRoZSBmb2xs b3dpbmcgY29sb3IgZmVhdHVyZXM6CisJQ1RNLCBHQU1NQSg4LzEwLzEyL3NwbGl0L2xlZ2FjeSkg YW5kIERlLWdhbW1hLgorRmV3IG5lZ2F0aXZlIHRlc3QgY2FzZXMgYXJlIGFsc28gaW5jbHVkZWQK KworVGVzdHMgd2lsbGwgZW5hYmxlIG9uZSBwcmltYXJ5IGFuZCBvbmUgc3ByaXRlIHBsYW5lIGFu ZCBhcHBseQordGhlIHNwZWNpZmljIGNvbG9yIGZlYXR1cmUgYW5kIGRvIHRoZSB2ZXJpZmljYXRp b24gYnkgQ1JDIGNoZWNrcy4KKyovCisKKyNkZWZpbmUgQ1NDX01BWF9WQUxTICAgIDkKKyNkZWZp bmUgQkRXX1NQTElUR0FNTUFfTUFYX1ZBTFMgICAgICAgICAgICAgICAgNTEyCisjZGVmaW5lIEJE V184QklUX0dBTU1BX01BWF9WQUxTICAgICAgICAgICAgICAgIDI1NgorI2RlZmluZSBCRFdfMTBC SVRfR0FNTUFfTUFYX1ZBTFMgICAgICAgICAgICAgICAxMDI0CisjZGVmaW5lIEJEV18xMkJJVF9H QU1NQV9NQVhfVkFMUyAgICAgICAgICAgICAgIDUxMworI2RlZmluZSBCRFdfTUFYX0dBTU1BICAg ICAgICAgICAgICAgICAgICAgICAgICgoMSA8PCAyNCkgLSAxKQorI2RlZmluZSBCRFdfTUlOX0dB TU1BCQkJCTAKKworI2RlZmluZSBSRURfRkIgMAorI2RlZmluZSBHUkVFTl9GQiAxCisjZGVmaW5l IEJMVUVfRkIgMgorCisjaWZuZGVmIGRybV9yMzJnMzJiMzIKK3N0cnVjdCBkcm1fcjMyZzMyYjMy IHsKKwlfX3UzMiByMzI7CisJX191MzIgZzMyOworCV9fdTMyIGIzMjsKKwlfX3UzMiByZXNlcnZl ZDsKK307CisjZW5kaWYKKyNpZm5kZWYgZHJtX3BhbGV0dGUKK3N0cnVjdCBkcm1fcGFsZXR0ZSB7 CisJc3RydWN0IGRybV9yMzJnMzJiMzIgbHV0WzBdOworfTsKKyNlbmRpZgorI2lmbmRlZiBkcm1f Y3RtCisJc3RydWN0IGRybV9jdG0geworCV9fczY0IGN0bV9jb2VmZls5XTsKK307CisjZW5kaWYK KyNpZm5kZWYgZHJtX3BhbGV0dGVfY2Fwcworc3RydWN0IGRybV9wYWxldHRlX2NhcHMgeworCV9f dTMyIHZlcnNpb247CisJX191MzIgcmVzZXJ2ZWQ7CisJX191MzIgbnVtX3NhbXBsZXNfYmVmb3Jl X2N0bTsKKwlfX3UzMiBudW1fc2FtcGxlc19hZnRlcl9jdG07Cit9OworI2VuZGlmCisKK2VudW0g Y3RtX2NvbG9yIHsKKwlSRUQsCisJR1JFRU4sCisJQkxVRSwKKwlSRVZFUlNFLAorCU5FR0FUSVZF LAorCUZSQUNUSU9OCit9OworCitlbnVtIGJsb2IgeworCUlOVkFMSURfQkxPQl9JRCwKKwlJTlZB TElEX0JMT0JfREFUQSwKKwlJTlZBTElEX0JMT0JfTEVOR1RILAorCUlOVkFMSURfQkxPQl9JRF9T TUFMTCwKKwlJTlZBTElEX0JMT0JfTlVMTAorfTsKKworZW51bSBjb2xvcl9wcm9wZXJ0eSB7CisJ Y3RtX3Byb3BlcnR5LAorCWxlZ2FjeV9nYW1tYSwKKwlnYW1tYV9wcm9wZXJ0eV84Yml0LAorCWdh bW1hX3Byb3BlcnR5XzEwYml0LAorCWdhbW1hX3Byb3BlcnR5XzEyYml0LAorCWdhbW1hX3Byb3Bl cnR5X3NwbGl0Cit9Oworc3RhdGljIGNvbnN0IGZsb2F0IGN0bV9yZWRbOV0gPSB7MSwgMSwgMSwg MCwgMCwgMCwgMCwgMCwgMH07CitzdGF0aWMgY29uc3QgZmxvYXQgY3RtX2dyZWVuWzldID0gezAs IDAsIDAsIDEsIDEsIDEsIDAsIDAsIDB9Oworc3RhdGljIGNvbnN0IGZsb2F0IGN0bV9ibHVlWzld ID0gezAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDF9Oworc3RhdGljIGNvbnN0IGZsb2F0IGN0bV9p ZGVudGl0eVs5XSA9IHsxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxfTsKK3N0YXRpYyBjb25zdCBm bG9hdCBjdG1fcmV2ZXJzZVs5XSA9IHswLCAwLCAxLCAwLCAxLCAwLCAxLCAwLCAwfTsKK3N0YXRp YyBjb25zdCBmbG9hdCBjdG1fbmVnYXRpdmVbOV0gPSB7LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMX07CitzdGF0aWMgY29uc3QgZmxvYXQgY3RtX2ZyYWN0aW9uWzldID0gezEyMzQ1 NjcuNzY1MiwgMC4xMjMzNCwgMC45ODk4OTg5LCAwLjQ1NDU0NTQ1LCAwLjEyMTIxMjEyLCAwLjIz MjMyMywgMy45ODc2OCwgMC4wMDAwMCwgMS4yMjM0NX07CisKKworc3RydWN0IGZyYW1lYnVmZmVy X2NvbG9yIHsKKwlpbnQgcmVkOworCWludCBncmVlbjsKKwlpbnQgYmx1ZTsKK307CitzdHJ1Y3Qg ZnJhbWVidWZmZXJfY29sb3IgZmJfY29sb3IgPSB7IDAsIDAsIDB9OworCisKK3N0cnVjdCBkYXRh X3QgeworCWludCBmYl9pbml0aWFsOworCWludCBkcm1fZmQ7CisJaW50IGdlbjsKKwlpbnQgdywg aDsKKwlpZ3RfZGlzcGxheV90IGRpc3BsYXk7CisJc3RydWN0IGlndF9mYiBmYl9wcmVwOworCXN0 cnVjdCBpZ3RfZmIgZmIsIGZiMTsKKwlpZ3RfcGlwZV9jcmNfdCAqcGlwZV9jcmM7CisJZW51bSBw aXBlIHBpcGU7CisKK307CisKKworc3RhdGljIGludCBjcmVhdGVfYmxvYihpbnQgZmQsIHVpbnQ2 NF90ICpkYXRhLCBpbnQgbGVuZ3RoKQoreworCXN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfYmxvYiBi bG9iOworCWludCByZXQgPSAtMTsKKworCWJsb2IuZGF0YSA9ICh1aW50NjRfdClkYXRhOworCWJs b2IubGVuZ3RoID0gbGVuZ3RoOworCWJsb2IuYmxvYl9pZCA9IC0xOworCXJldCA9IGlvY3RsKGZk LCBEUk1fSU9DVExfTU9ERV9DUkVBVEVQUk9QQkxPQiwgJmJsb2IpOworCWlmICghcmV0KQorCQly ZXR1cm4gYmxvYi5ibG9iX2lkOworCWlndF9mYWlsKElHVF9FWElUX0ZBSUxVUkUpOworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfY3J0YyhzdHJ1Y3QgZGF0YV90ICpkYXRh LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKKwkJCSBlbnVtIHBpcGUgcGlwZTEsIGlndF9wbGFuZV90 ICpwbGFuZSwgZHJtTW9kZU1vZGVJbmZvICptb2RlLAorCQkJIGVudW0gaWd0X2NvbW1pdF9zdHls ZSBzKQoreworCWlndF9kaXNwbGF5X3QgKmRpc3BsYXkgPSAmZGF0YS0+ZGlzcGxheTsKKworCWln dF9vdXRwdXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlMSk7CisJaWd0X3BpcGVfY3JjX2ZyZWUoZGF0 YS0+cGlwZV9jcmMpOworCWRhdGEtPnBpcGVfY3JjID0gaWd0X3BpcGVfY3JjX25ldyhwaXBlMSwg SU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8pOworCS8qIGJlZm9yZSBhbGxvY2F0aW5nLCBmcmVl IGlmIGFueSBvbGRlciBmYiAqLworCWlmIChkYXRhLT5mYl9pbml0aWFsKSB7CisJCWlndF9yZW1v dmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZGF0YS0+ZmJfcHJlcCk7CisJCWRhdGEtPmZiX2luaXRpYWwg PSAwOworCX0KKworCS8qIGFsbG9jYXRlIGZiIGZvciBwbGFuZSAxICovCisJZGF0YS0+ZmJfaW5p dGlhbCA9IGlndF9jcmVhdGVfY29sb3JfZmIoZGF0YS0+ZHJtX2ZkLAorCQkJCQkgICAgICAgbW9k ZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAorCQkJCQkgICAgICAgRFJNX0ZPUk1BVF9YUkdC ODg4OCwKKwkJCQkJICAgICAgIExPQ0FMX0k5MTVfRk9STUFUX01PRF9YX1RJTEVELCAvKiB0aWxl ZCAqLworCQkJCQkgICAgICAgZmJfY29sb3IucmVkLCBmYl9jb2xvci5ncmVlbiwgZmJfY29sb3Iu Ymx1ZSwKKwkJCQkJICAgICAgICZkYXRhLT5mYl9wcmVwKTsKKwlpZ3RfYXNzZXJ0KGRhdGEtPmZi X2luaXRpYWwpOworCisJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEtPmZiX3ByZXApOwor CisJaWd0X2Rpc3BsYXlfY29tbWl0MihkaXNwbGF5LCBzKTsKK30KKworc3RhdGljIHZvaWQgY2xl YW51cF9mYihzdHJ1Y3QgZGF0YV90ICpkYXRhKQoreworCisJaWYgKGRhdGEtPmZiX2luaXRpYWwp IHsKKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZkYXRhLT5mYl9wcmVwKTsKKwkJZGF0 YS0+ZmJfaW5pdGlhbCA9IDA7CisJfQorCWlmIChkYXRhLT5mYi5mYl9pZCkKKwkJaWd0X3JlbW92 ZV9mYihkYXRhLT5kcm1fZmQsICZkYXRhLT5mYik7CisKK30KKworc3RhdGljIHZvaWQgY2xlYW51 cF9jcnRjKHN0cnVjdCBkYXRhX3QgKmRhdGEsIGlndF9vdXRwdXRfdCAqb3V0cHV0LAorCQkJIGln dF9wbGFuZV90ICpwbGFuZSkKK3sKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRp c3BsYXk7CisKKwlpZiAoIXBsYW5lLT5pc19wcmltYXJ5KSB7CisJCWlndF9wbGFuZV90ICpwcmlt YXJ5OworCisJCXByaW1hcnkgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZShvdXRwdXQsIElHVF9QTEFO RV9QUklNQVJZKTsKKwkJaWd0X3BsYW5lX3NldF9mYihwcmltYXJ5LCBOVUxMKTsKKwl9CisJaWd0 X3BsYW5lX3NldF9mYihwbGFuZSwgTlVMTCk7CisJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQs IFBJUEVfQU5ZKTsKKwlpZ3RfZGlzcGxheV9jb21taXQyKGRpc3BsYXksIENPTU1JVF9VTklWRVJT QUwpOworCit9CisKK3N0YXRpYyBpbnQgZ2V0X2NvbG9yX3Byb3BlcnR5KGludCBkcm1fZmQsIGlu dCBpZCwgaW50IG9iamVjdCwgY29uc3QgY2hhciAqcHJvcF9uYW1lKQorCit7CisJaW50IGkgPSAw LCByZXQgPSAwOworCWludCBibG9iX2lkID0gLTE7CisJZHJtTW9kZU9iamVjdFByb3BlcnRpZXNQ dHIgcHJvcHMgPSBOVUxMOworCWlndF9mYWlsX29uX2YoaWQgPCAwIHx8ICgob2JqZWN0ICE9IERS TV9NT0RFX09CSkVDVF9DUlRDKSAmJgorCQkgICAgICAob2JqZWN0ICE9IERSTV9NT0RFX09CSkVD VF9QTEFORSkpLCAiSW52YWxpZCBpbnB1dCB0byBnZXQgY29sb3IgcHJvcGVydHkgJWQiLCBpZCk7 CisKKwlwcm9wcyA9IGRybU1vZGVPYmplY3RHZXRQcm9wZXJ0aWVzKGRybV9mZCwgaWQsIG9iamVj dCk7CisJaWd0X2ZhaWxfb25fZighcHJvcHMsICJcbk5vIHByb3BlcnR5IGZvciBvYmplY3QgaWQ9 JWRcbiIsIGlkKTsKKwlmb3IgKGkgPSAwOyBpIDwgcHJvcHMtPmNvdW50X3Byb3BzOyBpKyspIHsK KwkJZHJtTW9kZVByb3BlcnR5UHRyIHByb3AgPSBkcm1Nb2RlR2V0UHJvcGVydHkoZHJtX2ZkLAor CQkJCQkJCSAgICAgcHJvcHMtPnByb3BzW2ldKTsKKwkJaWYgKHN0cmNtcChwcm9wLT5uYW1lLCBw cm9wX25hbWUpID09IDApIHsKKwkJCWJsb2JfaWQgPSBwcm9wcy0+cHJvcF92YWx1ZXNbaV07CisK KwkJCWJyZWFrOworCQl9CisJCWRybU1vZGVGcmVlUHJvcGVydHkocHJvcCk7CisJfQorCXJldCA9 IGJsb2JfaWQ7CisJZHJtTW9kZUZyZWVPYmplY3RQcm9wZXJ0aWVzKHByb3BzKTsKKwlpZ3RfZmFp bF9vbl9mKGkgPT0gcHJvcHMtPmNvdW50X3Byb3BzLCAiJXMgTm8gc3VjaCBwcm9wZXJ0eVxuIiwg cHJvcF9uYW1lKTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgc2V0X2NvbG9yX3By b3BlcnR5KGludCBkcm1fZmQsIGludCBpZCwgaW50IG9iamVjdCwgY29uc3QgY2hhciAqcHJvcF9u YW1lLCBpbnQgYmxvYl9pZCkKK3sKKwlpbnQgaSA9IDAsIHJlcyA9IC0xOworCisJZHJtTW9kZU9i amVjdFByb3BlcnRpZXNQdHIgcHJvcHMgPSBOVUxMOworCWlndF9mYWlsX29uX2YoaWQgPCAwIHx8 ICgob2JqZWN0ICE9IERSTV9NT0RFX09CSkVDVF9DUlRDKSAmJgorCQkJKG9iamVjdCAhPSBEUk1f TU9ERV9PQkpFQ1RfUExBTkUpKSwgIkludmFsaWQgaW5wdXQgdG8gZ2V0IGNvbG9yIHByb3BlcnR5 ICVkIiwgaWQpOworCisKKwlwcm9wcyA9IGRybU1vZGVPYmplY3RHZXRQcm9wZXJ0aWVzKGRybV9m ZCwgaWQsIG9iamVjdCk7CisJaWd0X2ZhaWxfb25fZighcHJvcHMsICJcbk5vIHByb3BlcnR5IGZv ciBvYmplY3QgaWQ9JWRcbiIsIGlkKTsKKwlmb3IgKGkgPSAwOyBpIDwgcHJvcHMtPmNvdW50X3By b3BzOyBpKyspIHsKKwkJZHJtTW9kZVByb3BlcnR5UHRyIHByb3AgPSBkcm1Nb2RlR2V0UHJvcGVy dHkoZHJtX2ZkLAorCQkJCQkJCSAgICAgcHJvcHMtPnByb3BzW2ldKTsKKwkJaWYgKHN0cmNtcChw cm9wLT5uYW1lLCBwcm9wX25hbWUpID09IDApIHsKKwkJCXJlcyA9IGRybU1vZGVPYmplY3RTZXRQ cm9wZXJ0eShkcm1fZmQsIGlkLCBvYmplY3QsCisJCQkJCQkgICAgICAgKHVpbnQzMl90KXByb3At PnByb3BfaWQsIGJsb2JfaWQpOworCisJCQlpZiAocmVzKSB7CisJCQkJZHJtTW9kZUZyZWVQcm9w ZXJ0eShwcm9wKTsKKwkJCX0gZWxzZSB7CisJCQkJZHJtTW9kZUZyZWVQcm9wZXJ0eShwcm9wKTsK KwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJfQorCWRybU1vZGVGcmVlT2JqZWN0UHJvcGVydGll cyhwcm9wcyk7CisJaWd0X2ZhaWxfb25fZihpID09IHByb3BzLT5jb3VudF9wcm9wcywgIiVzIE5v IHN1Y2ggcHJvcGVydHlcbiIsIHByb3BfbmFtZSk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGlj IGludDY0X3QgIGNvbnZlcnRGbG9hdFRvQmluYXJ5KGRvdWJsZSBpbnB1dCkKK3sKKworCWludCBp bnRlZ2VyX3BhcnQsIGNvdW50ID0gMDsKKwl1aW50MzJfdCB0ZW1wX2lwLCBmcmFjX3ZhbCA9IDB4 MDAwMDAwMDA7CisJdWludDY0X3QgaW50ZWdlcl92YWwgPSAweDAwMDAwMDAwOworCWludDY0X3Qg IHZhbHVlID0gMHgwMDAwMDAwMDAwMDAwMDAwOworCWZsb2F0IGZyYWN0aW9uYWxfcGFydCwgaXA7 CisJaW50ZWdlcl9wYXJ0ID0gKGludClpbnB1dDsKKwlmcmFjdGlvbmFsX3BhcnQgPSBpbnB1dCAt IGludGVnZXJfcGFydDsKKwl3aGlsZSAoZnJhY3Rpb25hbF9wYXJ0ICE9IDAuMDAwMDAwKSB7CisJ CWlwID0gZnJhY3Rpb25hbF9wYXJ0ICogMTY7CisJCXRlbXBfaXAgPSAoaW50KShmcmFjdGlvbmFs X3BhcnQgKiAxNik7CisJCWZyYWNfdmFsID0gZnJhY192YWwgfCAodGVtcF9pcCA8PCAoMjggLSBj b3VudCAqIDQpKTsKKwkJY291bnQrKzsKKwkJZnJhY3Rpb25hbF9wYXJ0ID0gaXAgLSB0ZW1wX2lw OworCX0KKwlpbnRlZ2VyX3ZhbCA9IGludGVnZXJfcGFydDsKKwl2YWx1ZSA9IHZhbHVlIHwgKChp bnRlZ2VyX3ZhbCkgKiAoKGludDY0X3QpMUwgPDwgMzIpKTsKKwl2YWx1ZSA9IHZhbHVlIHwgZnJh Y192YWw7CisJcmV0dXJuIHZhbHVlOworCisKK30KKworc3RhdGljIHZvaWQgd3JpdGVfZ2FtbWFf bHV0KHVpbnQzMl90IG51bV9zYW1wbGVzLCBzdHJ1Y3QgZHJtX3IzMmczMmIzMiAqZ2FtbWFfcHRy LCBpbnQgdW5pdF9nYW1tYSkKK3sKKwl1bnNpZ25lZCBzaG9ydCBSZWQsIEdyZWVuLCBCbHVlOwor CXVpbnQzMl90IHIzMiwgYjMyLCBnMzI7CisJdWludDY0X3QgaTsKKworCWZvciAoaSA9IDA7IGkg PCBudW1fc2FtcGxlczsgaSsrKSB7CisJCWlmICh1bml0X2dhbW1hID09IDApIHsKKwkJCUJsdWUg PSBCRFdfTUFYX0dBTU1BOworCQkJR3JlZW4gPSBCRFdfTUFYX0dBTU1BOworCQkJUmVkID0gQkRX X01BWF9HQU1NQTsKKwkJfSBlbHNlIHsKKwkJCUJsdWUgPSBCRFdfTUlOX0dBTU1BOworCQkJR3Jl ZW4gPSBCRFdfTUlOX0dBTU1BOworCQkJUmVkID0gQkRXX01JTl9HQU1NQTsKKwkJfQorCQlyMzIg PSBSZWQ7CisJCWczMiA9IEdyZWVuOworCQliMzIgPSBCbHVlOworCQlyMzIgPDw9IDg7CisJCWcz MiA8PD0gODsKKwkJYjMyIDw8PSA4OworCQlnYW1tYV9wdHJbaV0ucjMyID0gcjMyOworCQlnYW1t YV9wdHJbaV0uZzMyID0gZzMyOworCQlnYW1tYV9wdHJbaV0uYjMyID0gYjMyOworCX0KK30KKwor c3RhdGljIHVpbnQ2NF90IGdldF9ibG9iKGludCBmZCwgaW50IGJsb2JfaWQsIGludCBsZW5ndGgp Cit7CisJc3RydWN0IGRybV9tb2RlX2dldF9ibG9iIGJsb2I7CisJaW50IHJldCA9IDA7CisKKwli bG9iLmJsb2JfaWQgPSBibG9iX2lkOworCWJsb2IubGVuZ3RoID0gbGVuZ3RoOworCWJsb2IuZGF0 YSA9ICAodWludDY0X3QpbWFsbG9jKGJsb2IubGVuZ3RoKTsKKwlyZXQgPSBpb2N0bChmZCwgRFJN X0lPQ1RMX01PREVfR0VUUFJPUEJMT0IsICZibG9iKTsKKworCWlmIChyZXQpCisJCWlndF9pbmZv KCJHRVQgQkxPQiBGYWlsZWRcbiIpOworCisJcmV0dXJuIGJsb2IuZGF0YTsKK30KKworc3RhdGlj IHZvaWQgZW5hYmxlX3BsYW5lKHN0cnVjdCBkYXRhX3QgKmRhdGEsIGlndF9kaXNwbGF5X3QgKmRp c3BsYXksIGlndF9vdXRwdXRfdCAqb3V0cHV0LCBpbnQgcGlwZTEpCit7CisJZW51bSBpZ3RfY29t bWl0X3N0eWxlIGNvbW1pdDsKKwllbnVtIHBpcGUgcGlwZTI7CisJaW50IHdpZHRoLCBoZWlnaHQ7 CisJdWludDMyX3QgcGl4ZWxmb3JtYXQgPSBEUk1fRk9STUFUX1hSR0I4ODg4OworCisJY29tbWl0 ID0gQ09NTUlUX1VOSVZFUlNBTDsKKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KGRpc3BsYXks IG91dHB1dCkgeworCQlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7CisJCWlndF9wbGFuZV90ICpwbGFu ZTsKKwkJcGlwZTIgPSBvdXRwdXQtPmNvbmZpZy5waXBlOworCisJCWlmIChwaXBlMiAhPSBwaXBl MSkKKwkJCWJyZWFrOworCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZTIpOworCQlt b2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOworCQkvKkRyYXcgdGhlIGluaXRpYWwg cHJpbWFyeSBwbGFuZSovCisJCXBsYW5lID0gaWd0X291dHB1dF9nZXRfcGxhbmUob3V0cHV0LCBJ R1RfUExBTkVfUFJJTUFSWSk7CisKKwkJcHJlcGFyZV9jcnRjKGRhdGEsIG91dHB1dCwgcGlwZTIs IHBsYW5lLCBtb2RlLCBjb21taXQpOworCQkvKlJhbmRvbSBTaXplICBCdWZmZXIgQ3JlYXRpb24g Ki8KKwkJd2lkdGggPSA2MDA7CisJCWhlaWdodCA9IDYwMDsKKworCQlwbGFuZSA9IGlndF9vdXRw dXRfZ2V0X3BsYW5lKG91dHB1dCwgSUdUX1BMQU5FXzIpOworCQlpZ3RfY3JlYXRlX2NvbG9yX2Zi KGRhdGEtPmRybV9mZCwKKwkJCQkJICAgIHdpZHRoLCBoZWlnaHQsCisJCQkJCSAgICBwaXhlbGZv cm1hdCwKKwkJCQkJICAgIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCisJCQkJCSAgICBmYl9j b2xvci5yZWQsIGZiX2NvbG9yLmdyZWVuLCBmYl9jb2xvci5ibHVlLAorCQkJCQkgICAgJmRhdGEt PmZiKTsKKwkJaWd0X3BsYW5lX3NldF9wb3NpdGlvbihwbGFuZSwgMTAwLCAxMDApOworCisJCWln dF9wbGFuZV9zZXRfZmIocGxhbmUsICZkYXRhLT5mYik7CisJCWlndF9kaXNwbGF5X2NvbW1pdDIo ZGlzcGxheSwgY29tbWl0KTsKKwl9CisKK30KKworc3RhdGljIHZvaWQgYXBwbHlfY3RtKGlndF9k aXNwbGF5X3QgKmRpc3BsYXksIGlndF9vdXRwdXRfdCAqb3V0cHV0LCBjb25zdCBmbG9hdCAqY3Rt KQoreworCWludCByZXMsIGksIGJsb2JfaWQ7CisJdWludDY0X3QgYmxvYl9hZGRyZXNzOworCXN0 cnVjdCBkcm1fY3RtICpjdG1fZGF0YSA9IE5VTEw7CisJY3RtX2RhdGEgPSAoc3RydWN0IGRybV9j dG0gKikKKwkJbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX2N0bSkpOworCisJZm9yIChpID0gMDsg aSA8IENTQ19NQVhfVkFMUzsgaSsrKSB7CisJCWN0bV9kYXRhLT5jdG1fY29lZmZbaV0gPSBjb252 ZXJ0RmxvYXRUb0JpbmFyeSgqKGN0bSArIGkpKTsKKwl9CisKKwlibG9iX2lkID0gY3JlYXRlX2Js b2IoZGlzcGxheS0+ZHJtX2ZkLAorCQkJCShpbnQgKikoY3RtX2RhdGEpLCBzaXplb2Yoc3RydWN0 IGRybV9jdG0pKTsKKwlpZ3RfZmFpbF9vbl9mIChibG9iX2lkIDwgMCwgIkNUTTpCTE9CIElPQ1RM IEZhaWxcbiIpOworCXJlcyA9IHNldF9jb2xvcl9wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIG91 dHB1dC0+Y29uZmlnLmNydGMtPmNydGNfaWQsCisJCQkJRFJNX01PREVfT0JKRUNUX0NSVEMsICJD VE0iLCBibG9iX2lkKTsKKwlpZ3RfZmFpbF9vbl9mIChyZXMgPCAwLCAiQ1RNOlNldCBQcm9wZXJ0 eSBGYWlsZWRcbiIpOworCXJlcyA9IGdldF9jb2xvcl9wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQs IG91dHB1dC0+Y29uZmlnLmNydGMtPmNydGNfaWQsIERSTV9NT0RFX09CSkVDVF9DUlRDLCAiQ1RN Iik7CisJaWd0X2ZhaWxfb25fZiAocmVzIDwgMCwgIkNUTTpHZXQgUHJvcGVydHkgRmFpbGVkXG4i KTsKKwlibG9iX2FkZHJlc3MgPSBnZXRfYmxvYihkaXNwbGF5LT5kcm1fZmQsIHJlcywgc2l6ZW9m KHN0cnVjdCBkcm1fY3RtKSk7CisJY3RtX2RhdGEgPSAoc3RydWN0IGRybV9jdG0gKikgKGludHB0 cl90KSBibG9iX2FkZHJlc3M7CisKK30KKworc3RhdGljIHZvaWQgdGVzdF9waXBlX2N0bV9pbnZh bGlkX3Rlc3RzKHN0cnVjdCBkYXRhX3QgKmRhdGEsIGVudW0gYmxvYiBvcCkKK3sKKworCWludCBy ZXMsIGksIGxlbmd0aDsKKwlzdHJ1Y3QgZHJtX2N0bSAqY3RtX2RhdGEgPSBOVUxMOworCXN0cnVj dCBkcm1fbW9kZV9jcmVhdGVfYmxvYiBibG9iOworCXN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfYmxv YiBlbXB0eV9ibG9iOworCWVudW0gcGlwZSBwaXBlMTsKKwlpbnQgcmV0ID0gLTE7CisJc3RydWN0 IGRybV9jdG0gKmludmFsaWRfY3RtX2RhdGEgPSBOVUxMOworCWlndF9kaXNwbGF5X3QgKmRpc3Bs YXkgPSAmZGF0YS0+ZGlzcGxheTsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKworCWN0bV9kYXRh ID0gKHN0cnVjdCBkcm1fY3RtICopbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX2N0bSkpOworCWZv ciAoaSA9IDA7IGkgPCBDU0NfTUFYX1ZBTFM7IGkrKykgeworCQljdG1fZGF0YS0+Y3RtX2NvZWZm W2ldID0gMUw7CisJfQorCisJbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBkcm1fY3RtKTsKKwlibG9i LmRhdGEgPSAodWludDY0X3QpY3RtX2RhdGE7CisJYmxvYi5sZW5ndGggPSBsZW5ndGg7CisJYmxv Yi5ibG9iX2lkID0gLTE7CisKKwlpZiAob3AgPT0gSU5WQUxJRF9CTE9CX0xFTkdUSCkKKwkJYmxv Yi5sZW5ndGggPSAxMDsKKwlyZXQgPSBpb2N0bChkaXNwbGF5LT5kcm1fZmQsIERSTV9JT0NUTF9N T0RFX0NSRUFURVBST1BCTE9CLCAmYmxvYik7CisJaWd0X2ZhaWxfb25fZiAocmV0IDwgMCwgIkdB TU1BOkJMT0IgSU9DVEwgRmFpbFxuIik7CisKKwlpZiAob3AgPT0gSU5WQUxJRF9CTE9CX0lEKQor CQlibG9iLmJsb2JfaWQgPSA0MDk2KjQwOTY7CisJaWYgKG9wID09IElOVkFMSURfQkxPQl9OVUxM KQorCQlibG9iID0gZW1wdHlfYmxvYjsKKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0cHV0KGRpc3Bs YXksIG91dHB1dCkgeworCQlwaXBlMSA9IG91dHB1dC0+Y29uZmlnLnBpcGU7CisJCWlndF9vdXRw dXRfc2V0X3BpcGUob3V0cHV0LCBwaXBlMSk7CisKKwlyZXMgPSBzZXRfY29sb3JfcHJvcGVydHko ZGlzcGxheS0+ZHJtX2ZkLCBvdXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLAorCQkJCURSTV9N T0RFX09CSkVDVF9DUlRDLCAiQ1RNIiwgYmxvYi5ibG9iX2lkKTsKKwlmcmVlKGN0bV9kYXRhKTsK KwlmcmVlKGludmFsaWRfY3RtX2RhdGEpOworCWlndF9mYWlsX29uX2YgKHJlcyA+PSAwLCAiQ1RN OkludmFsaWQgVGVzdHMgRmFpbGVkICVkXG4iLCByZXMpOworCX0KKworfQorc3RhdGljIHZvaWQg dGVzdF9waXBlX2N0bV9mcmFjdGlvbihzdHJ1Y3QgZGF0YV90ICpkYXRhLCBpZ3RfZGlzcGxheV90 ICpkaXNwbGF5LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKKwkJCQllbnVtIGN0bV9jb2xvciB2YWx1 ZSwgaW50IHBpcGUxKQoreworCisJLypFbmFibGUgcmVkIHBsYW5lcyAqLworCWZiX2NvbG9yLnJl ZCAgPSAxOworCWZiX2NvbG9yLmdyZWVuID0gMDsKKwlmYl9jb2xvci5ibHVlID0gMDsKKwllbmFi bGVfcGxhbmUoZGF0YSwgZGlzcGxheSwgb3V0cHV0LCBwaXBlMSk7CisKKwkvKkFwcGx5IGZyYWN0 aW9uYWwgY3RtKi8KKwlhcHBseV9jdG0oZGlzcGxheSwgb3V0cHV0LCBjdG1fZnJhY3Rpb24pOwor CWVuYWJsZV9wbGFuZShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBpcGUxKTsKKwkvKlJlc3RvcmUg SWRlbnRpdHkgTWF0cml4Ki8KKwlhcHBseV9jdG0oZGlzcGxheSwgb3V0cHV0LCBjdG1faWRlbnRp dHkpOworCWVuYWJsZV9wbGFuZShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBpcGUxKTsKKworCit9 CisKK3N0YXRpYyB2b2lkIHRlc3RfcGlwZV9jdG1fbmVnYXRpdmUoc3RydWN0IGRhdGFfdCAqZGF0 YSwgaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgaWd0X291dHB1dF90ICpvdXRwdXQsCisJCQkJCWVu dW0gY3RtX2NvbG9yIHZhbHVlLCBpbnQgcGlwZTEpCit7CisJaWd0X2NyY190IGNyY19ibGFjaywg Y3JjX3JlZmVyZW5jZV9ibGFjazsKKworCS8qRW5hYmxlIGJsYWNrIHBsYW5lcyBhbmQgY2FwdHVy ZSAgcmVmZXJlbmNlIGNyYyovCisJZmJfY29sb3IucmVkICA9IDA7CisJZmJfY29sb3IuZ3JlZW4g PSAwOworCWZiX2NvbG9yLmJsdWUgPSAwOworCWVuYWJsZV9wbGFuZShkYXRhLCBkaXNwbGF5LCBv dXRwdXQsIHBpcGUxKTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMs ICZjcmNfcmVmZXJlbmNlX2JsYWNrKTsKKworCS8qRW5hYmxlIHJlZCBwbGFuZXMgKi8KKwlmYl9j b2xvci5yZWQgID0gMTsKKwlmYl9jb2xvci5ncmVlbiA9IDA7CisJZmJfY29sb3IuYmx1ZSA9IDA7 CisJZW5hYmxlX3BsYW5lKGRhdGEsIGRpc3BsYXksIG91dHB1dCwgcGlwZTEpOworCisJLypBcHBs eSBuZWdhdGl2ZSBjdG0qLworCWFwcGx5X2N0bShkaXNwbGF5LCBvdXRwdXQsIGN0bV9uZWdhdGl2 ZSk7CisJZW5hYmxlX3BsYW5lKGRhdGEsIGRpc3BsYXksIG91dHB1dCwgcGlwZTEpOworCWlndF9w aXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywgJmNyY19ibGFjayk7CisKKwkvKkNv bXBhcmUgQ1JDUyovCisJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJmNyY19yZWZlcmVuY2VfYmxhY2ss ICZjcmNfYmxhY2spOworCisJLypSZXN0b3JpbmcgSWRlbnRpdHkgbWF0cml4Ki8KKwlhcHBseV9j dG0oZGlzcGxheSwgb3V0cHV0LCBjdG1faWRlbnRpdHkpOworCWVuYWJsZV9wbGFuZShkYXRhLCBk aXNwbGF5LCBvdXRwdXQsIHBpcGUxKTsKKworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3BpcGVfY3Rt X3JldmVyc2Uoc3RydWN0IGRhdGFfdCAqZGF0YSwgaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgaWd0 X291dHB1dF90ICpvdXRwdXQsCisJCQkJCWVudW0gY3RtX2NvbG9yIHZhbHVlLCBpbnQgcGlwZTEp Cit7CisJaWd0X2NyY190IGNyY19yZWZlcmVuY2VfcmVkLCBjcmNfcmVmZXJlbmNlX2JsdWU7CisJ aWd0X2NyY190IGNyY19yZXZlcnNlX3JlZCwgY3JjX3JldmVyc2VfYmx1ZSwgY3JjX2lkZW50aXR5 X3JlZCwgY3JjX2lkZW50aXR5X2JsdWU7CisKKwkvKkVuYWJsZSByZWQgcGxhbmVzIGFuZCBjYXB0 dXJlICByZWZlcmVuY2UgY3JjKi8KKwlmYl9jb2xvci5yZWQgID0gMTsKKwlmYl9jb2xvci5ncmVl biA9IDA7CisJZmJfY29sb3IuYmx1ZSA9IDA7CisJZW5hYmxlX3BsYW5lKGRhdGEsIGRpc3BsYXks IG91dHB1dCwgcGlwZTEpOworCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2Ny YywgJmNyY19yZWZlcmVuY2VfcmVkKTsKKwkvKkFwcGx5IHJldmVyc2UgY3RtIG1hdHJpeCBvbiBy ZWQgcGxhbmUqLworCWFwcGx5X2N0bShkaXNwbGF5LCBvdXRwdXQsIGN0bV9yZXZlcnNlKTsKKwll bmFibGVfcGxhbmUoZGF0YSwgZGlzcGxheSwgb3V0cHV0LCBwaXBlMSk7CisJaWd0X3BpcGVfY3Jj X2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY3JjX3JldmVyc2VfcmVkKTsKKworCS8qQXBw bHkgaWRlbnRpdHkgY3RtIG1hdHJpeCBvbiByZWQgcGxhbmUqLworCWFwcGx5X2N0bShkaXNwbGF5 LCBvdXRwdXQsIGN0bV9pZGVudGl0eSk7CisJZW5hYmxlX3BsYW5lKGRhdGEsIGRpc3BsYXksIG91 dHB1dCwgcGlwZTEpOworCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyYywg JmNyY19pZGVudGl0eV9yZWQpOworCisJLypFbmFibGUgIGJsdWUgcGxhbmVzIGFuZCBjYXB0dXJl IHJlZmVyZW5jZSBjcmMqLworCWZiX2NvbG9yLnJlZCAgPSAwOworCWZiX2NvbG9yLmdyZWVuID0g MDsKKwlmYl9jb2xvci5ibHVlID0gMTsKKworCWVuYWJsZV9wbGFuZShkYXRhLCBkaXNwbGF5LCBv dXRwdXQsIHBpcGUxKTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMs ICZjcmNfcmVmZXJlbmNlX2JsdWUpOworCisJLypBcHBseSByZXZlcnNlIGN0bSBtYXRyaXggb24g Ymx1ZSBwbGFuZSovCisJYXBwbHlfY3RtKGRpc3BsYXksIG91dHB1dCwgY3RtX3JldmVyc2UpOwor CWVuYWJsZV9wbGFuZShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBpcGUxKTsKKwlpZ3RfcGlwZV9j cmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZjcmNfcmV2ZXJzZV9ibHVlKTsKKworCS8q QXBwbHkgaWRlbnRpdHkgY3RtIG1hdHJpeCBvbiBibHVlIHBsYW5lKi8KKwlhcHBseV9jdG0oZGlz cGxheSwgb3V0cHV0LCBjdG1faWRlbnRpdHkpOworCWVuYWJsZV9wbGFuZShkYXRhLCBkaXNwbGF5 LCBvdXRwdXQsIHBpcGUxKTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9j cmMsICZjcmNfaWRlbnRpdHlfYmx1ZSk7CisKKwkvKkNvbXBhcmUgY3JjKi8KKworCWlndF9hc3Nl cnRfY3JjX2VxdWFsKCZjcmNfcmVmZXJlbmNlX3JlZCwgJmNyY19pZGVudGl0eV9yZWQpOworCWln dF9hc3NlcnRfY3JjX2VxdWFsKCZjcmNfcmVmZXJlbmNlX2JsdWUsICZjcmNfaWRlbnRpdHlfYmx1 ZSk7CisJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJmNyY19yZXZlcnNlX2JsdWUsICZjcmNfaWRlbnRp dHlfcmVkKTsKKwlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgmY3JjX3JldmVyc2VfcmVkLCAmY3JjX2lk ZW50aXR5X2JsdWUpOworCS8qUmVzdG9yaW5nIElkZW50aXR5IE1hdHJpeCovCisJYXBwbHlfY3Rt KGRpc3BsYXksIG91dHB1dCwgY3RtX2lkZW50aXR5KTsKKwllbmFibGVfcGxhbmUoZGF0YSwgZGlz cGxheSwgb3V0cHV0LCBwaXBlMSk7Cit9CisKKy8qCitUaGlzIGZ1bmN0aW9uIHZlcmlmeSBjdG0g ZmVhdHVyZSB1c2luZyBib3RoIENSQyBjaGVjay4KK1N0ZXBzIGZvbGxvd2VkIGFyZToKKzEuRW5h YmxlIHBsYW5lIGZvciBjYXB0dXJpbmcgcmVmZXJlbmNlIENSQworMi5DYXB0dXJlIFJlZmVyZW5j ZSBDUkMKKzMuQXBwbHkgQ1NDIG9uIFBpcGUKKzQuRW5hYmxlIFBsYW5lIC5DU0Mgd2lsbCBiZSBh cHBsaWVkIG9uIHRoaXMgcGxhbmVzLgorNS5DYXB0dXJlIENSQyBhbmQgY29tcGFyZSB3aXRoIHJl ZmVyZW5jZSBDUkMKKzYuIFJlZ2lzdGVyIFZhbGlkYXRpb24gZm9yIENSQworKi8KKworc3RhdGlj IHZvaWQgdGVzdF9waXBlX2N0bShzdHJ1Y3QgZGF0YV90ICpkYXRhLCBpZ3RfZGlzcGxheV90ICpk aXNwbGF5LCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwKKwkJCSAgZW51bSBjdG1fY29sb3IgdmFsdWUs IGludCBwaXBlMSkKK3sKKworCWNvbnN0IGZsb2F0ICpjdG07CisJaWd0X2NyY190ICBjcmNfY3Vy cmVudCwgY3JjX3JlZmVyZW5jZSwgY3JjX3JlZmVyZW5jZV93aGl0ZTsKKwlmYl9jb2xvci5yZWQg ID0gMTsKKwlmYl9jb2xvci5ncmVlbiA9IDE7CisJZmJfY29sb3IuYmx1ZSA9IDE7CisKKwlzd2l0 Y2ggKHZhbHVlKSB7CisJY2FzZSBSRUQ6CisJCWN0bSA9IGN0bV9yZWQ7CisJCWZiX2NvbG9yLnJl ZCAgPSAxOworCQlmYl9jb2xvci5ncmVlbiA9IDA7CisJCWZiX2NvbG9yLmJsdWUgPSAwOworCQli cmVhazsKKwljYXNlIEdSRUVOOgorCQljdG0gPSBjdG1fZ3JlZW47CisJCWZiX2NvbG9yLnJlZCAg PSAwOworCQlmYl9jb2xvci5ncmVlbiA9IDE7CisJCWZiX2NvbG9yLmJsdWUgPSAwOworCQlicmVh azsKKwljYXNlIEJMVUU6CisJCWN0bSA9IGN0bV9ibHVlOworCQlmYl9jb2xvci5yZWQgID0gMDsK KwkJZmJfY29sb3IuZ3JlZW4gPSAwOworCQlmYl9jb2xvci5ibHVlID0gMTsKKworCQlicmVhazsK KwlkZWZhdWx0OgorCQljdG0gPSBjdG1faWRlbnRpdHk7CisJCWJyZWFrOworCX0KKworCS8qRW5h YmxlIHBsYW5lcyBhbmQgY2FwdHVyZSByZWZlcmVuY2UgY3JjKi8KKwllbmFibGVfcGxhbmUoZGF0 YSwgZGlzcGxheSwgb3V0cHV0LCBwaXBlMSk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRh dGEtPnBpcGVfY3JjLCAmY3JjX3JlZmVyZW5jZSk7CisKKwkvKldoaXRlIFBsYW5lIEVuYWJsaW5n Ki8KKwlmYl9jb2xvci5yZWQgID0gMTsKKwlmYl9jb2xvci5ncmVlbiA9IDE7CisJZmJfY29sb3Iu Ymx1ZSA9IDE7CisKKwllbmFibGVfcGxhbmUoZGF0YSwgZGlzcGxheSwgb3V0cHV0LCBwaXBlMSk7 CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY3JjX3JlZmVyZW5j ZV93aGl0ZSk7CisKKwkvKkFwcGx5IENTQyovCisJYXBwbHlfY3RtKGRpc3BsYXksIG91dHB1dCwg Y3RtKTsKKwllbmFibGVfcGxhbmUoZGF0YSwgZGlzcGxheSwgb3V0cHV0LCBwaXBlMSk7CisJaWd0 X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY3JjX2N1cnJlbnQpOworCWln dF9hc3NlcnRfY3JjX2VxdWFsKCZjcmNfcmVmZXJlbmNlLCAmY3JjX2N1cnJlbnQpOworCisJLypS ZXN0b3JpbmcgdGhlIFVuaXQgQ1NDKi8KKwlhcHBseV9jdG0oZGlzcGxheSwgb3V0cHV0LCBjdG1f aWRlbnRpdHkpOworCWVuYWJsZV9wbGFuZShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBpcGUxKTsK KwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+cGlwZV9jcmMsICZjcmNfY3VycmVudCk7 CisJaWd0X2Fzc2VydF9jcmNfZXF1YWwoJmNyY19yZWZlcmVuY2Vfd2hpdGUsICZjcmNfY3VycmVu dCk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGx5X2dhbW1hKHN0cnVjdCBkYXRhX3QgKmRhdGEsIGln dF9kaXNwbGF5X3QgKmRpc3BsYXksIGlndF9vdXRwdXRfdCAqb3V0cHV0LCB1aW50MzJfdCBudW1f c2FtcGxlcywgaW50IHVuaXRfZ2FtbWEpCit7CisJc3RydWN0IGRybV9wYWxldHRlICpnYW1tYV9k YXRhID0gIE5VTEw7CisJc3RydWN0IGRybV9wYWxldHRlICpkZWdhbW1hX2RhdGEgPSAgTlVMTDsK KwlpbnQgIHJldCwgcmVzLCBibG9iX2lkX2dhbW1hLCAgYmxvYl9sZW5ndGhfZ2FtbWE7CisJaW50 ICBibG9iX2lkX2RlZ2FtbWEsICBibG9iX2xlbmd0aF9kZWdhbW1hOworCXVpbnQ2NF90IG51bV9z YW1wbGVzX2dhbW1hLCBudW1fc2FtcGxlc19kZWdhbW1hOworCW51bV9zYW1wbGVzX2dhbW1hID0g bnVtX3NhbXBsZXM7CisKKwlpZiAobnVtX3NhbXBsZXMgPT0gQkRXX1NQTElUR0FNTUFfTUFYX1ZB TFMpIHsKKworCQlrbXN0ZXN0X2dldF9wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsICBvdXRwdXQt PmNvbmZpZy5jcnRjLT5jcnRjX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQ1JUQywgIkNPRUZGSUNJRU5U U19CRUZPUkVfQ1RNIiwgTlVMTCwgJm51bV9zYW1wbGVzX2RlZ2FtbWEsIE5VTEwpOworCQlrbXN0 ZXN0X2dldF9wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsICBvdXRwdXQtPmNvbmZpZy5jcnRjLT5j cnRjX2lkLCBEUk1fTU9ERV9PQkpFQ1RfQ1JUQywgIkNPRUZGSUNJRU5UU19BRlRFUl9DVE0iLCBO VUxMLCAmbnVtX3NhbXBsZXNfZ2FtbWEsIE5VTEwpOworCisJCWJsb2JfbGVuZ3RoX2RlZ2FtbWEg PSAoc2l6ZW9mKHN0cnVjdCBkcm1fcGFsZXR0ZSkgKyAobnVtX3NhbXBsZXNfZGVnYW1tYSAqIHNp emVvZihzdHJ1Y3QgZHJtX3IzMmczMmIzMikpKTsKKwkJZGVnYW1tYV9kYXRhID0gbWFsbG9jKGJs b2JfbGVuZ3RoX2RlZ2FtbWEpOworCQl3cml0ZV9nYW1tYV9sdXQobnVtX3NhbXBsZXNfZGVnYW1t YSwgZGVnYW1tYV9kYXRhLT5sdXQsIHVuaXRfZ2FtbWEpOworCQlibG9iX2lkX2RlZ2FtbWEgPSBj cmVhdGVfYmxvYihkaXNwbGF5LT5kcm1fZmQsICh1aW50NjRfdCAqKShkZWdhbW1hX2RhdGEpLCBi bG9iX2xlbmd0aF9kZWdhbW1hKTsKKwkJaWYgKGJsb2JfaWRfZGVnYW1tYSA8IDApCisJCQlmcmVl KGRlZ2FtbWFfZGF0YSk7CisJCWlndF9mYWlsX29uX2YgKGJsb2JfaWRfZGVnYW1tYSA8IDAsICJE ZUdBTU1BOkJMT0IgSU9DVEwgRmFpbFxuIik7CisKKwl9CisKKwlpZiAobnVtX3NhbXBsZXMgPT0g MCkKKwkJYmxvYl9sZW5ndGhfZ2FtbWEgPSAxOworCWVsc2UKKwkJYmxvYl9sZW5ndGhfZ2FtbWEg PSAoc2l6ZW9mKHN0cnVjdCBkcm1fcGFsZXR0ZSkgKyAobnVtX3NhbXBsZXNfZ2FtbWEgKiBzaXpl b2Yoc3RydWN0IGRybV9yMzJnMzJiMzIpKSk7CisKKwlnYW1tYV9kYXRhID0gbWFsbG9jKGJsb2Jf bGVuZ3RoX2dhbW1hKTsKKwlpZiAobnVtX3NhbXBsZXMgPT0gMCkKKwkJd3JpdGVfZ2FtbWFfbHV0 KDAsIGdhbW1hX2RhdGEtPmx1dCwgdW5pdF9nYW1tYSk7CisJZWxzZQorCQl3cml0ZV9nYW1tYV9s dXQobnVtX3NhbXBsZXNfZ2FtbWEsIGdhbW1hX2RhdGEtPmx1dCwgdW5pdF9nYW1tYSk7CisKKwli bG9iX2lkX2dhbW1hID0gY3JlYXRlX2Jsb2IoZGlzcGxheS0+ZHJtX2ZkLCAodWludDY0X3QgKiko Z2FtbWFfZGF0YSksIGJsb2JfbGVuZ3RoX2dhbW1hKTsKKwlpZiAoYmxvYl9pZF9nYW1tYSA8IDAp CisJCWZyZWUoZ2FtbWFfZGF0YSk7CisJaWd0X2ZhaWxfb25fZiAoYmxvYl9pZF9nYW1tYSA8IDAs ICJHQU1NQTpCTE9CIElPQ1RMIEZhaWxcbiIpOworCisJLypEaXNhYmxpbmcgZGVnYW1tYSovCisJ aWYgKHVuaXRfZ2FtbWEgPT0gMikgeworCQlibG9iX2xlbmd0aF9kZWdhbW1hID0gMTsKKwkJZGVn YW1tYV9kYXRhID0gbWFsbG9jKGJsb2JfbGVuZ3RoX2RlZ2FtbWEpOworCQl3cml0ZV9nYW1tYV9s dXQoMCwgZGVnYW1tYV9kYXRhLT5sdXQsIHVuaXRfZ2FtbWEpOworCQlibG9iX2lkX2RlZ2FtbWEg PSBjcmVhdGVfYmxvYihkaXNwbGF5LT5kcm1fZmQsICh1aW50NjRfdCAqKShkZWdhbW1hX2RhdGEp LCBibG9iX2xlbmd0aF9kZWdhbW1hKTsKKwkJaWYgKGJsb2JfaWRfZGVnYW1tYSA8IDApCisJCQlm cmVlKGRlZ2FtbWFfZGF0YSk7CisJCWlndF9mYWlsX29uX2YgKGJsb2JfaWRfZGVnYW1tYSA8IDAs ICJEZUdBTU1BOkJMT0IgSU9DVEwgRmFpbFxuIik7CisKKwkJcmVzID0gc2V0X2NvbG9yX3Byb3Bl cnR5KGRpc3BsYXktPmRybV9mZCwgb3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0Y19pZCwKKwkJCQlE Uk1fTU9ERV9PQkpFQ1RfQ1JUQywgIlBBTEVUVEVfQkVGT1JFX0NUTSIsIGJsb2JfaWRfZGVnYW1t YSk7CisJCXJldCA9IGdldF9jb2xvcl9wcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIG91dHB1dC0+ Y29uZmlnLmNydGMtPmNydGNfaWQsCisJCQkJRFJNX01PREVfT0JKRUNUX0NSVEMsICJQQUxFVFRF X0JFRk9SRV9DVE0iKTsKKwkJaWYgKHJlcyA8IDApCisJCQlmcmVlKGRlZ2FtbWFfZGF0YSk7CisJ CWlndF9mYWlsX29uX2YgKHJlcyA8IDAsICJQQUxFVFRFX0JFRk9SRV9DVE06U2V0IFByb3BlcnR5 IEZhaWxlZFxuIik7CisJCWlndF9mYWlsX29uX2YgKHJldCA8IDAsICJQQUxFVFRFX0JFRk9SRV9D VE06U2V0IFByb3BlcnR5IEZhaWxlZFxuIik7CisKKwl9CisKKwlpZiAobnVtX3NhbXBsZXMgPT0g QkRXX1NQTElUR0FNTUFfTUFYX1ZBTFMpIHsKKworCQlyZXMgPSBzZXRfY29sb3JfcHJvcGVydHko ZGlzcGxheS0+ZHJtX2ZkLCBvdXRwdXQtPmNvbmZpZy5jcnRjLT5jcnRjX2lkLAorCQkJCURSTV9N T0RFX09CSkVDVF9DUlRDLCAiUEFMRVRURV9CRUZPUkVfQ1RNIiwgYmxvYl9pZF9kZWdhbW1hKTsK KwkJcmV0ID0gZ2V0X2NvbG9yX3Byb3BlcnR5KGRpc3BsYXktPmRybV9mZCwgb3V0cHV0LT5jb25m aWcuY3J0Yy0+Y3J0Y19pZCwKKwkJCQlEUk1fTU9ERV9PQkpFQ1RfQ1JUQywgIlBBTEVUVEVfQkVG T1JFX0NUTSIpOworCQlpZiAocmVzIDwgMCkKKwkJCWZyZWUoZGVnYW1tYV9kYXRhKTsKKwkJaWd0 X2ZhaWxfb25fZiAocmVzIDwgMCwgIlBBTEVUVEVfQkVGT1JFX0NUTTpTZXQgUHJvcGVydHkgRmFp bGVkXG4iKTsKKwkJaWd0X2ZhaWxfb25fZiAocmV0IDwgMCwgIlBBTEVUVEVfQkVGT1JFX0NUTTpT ZXQgUHJvcGVydHkgRmFpbGVkXG4iKTsKKwkJZnJlZShkZWdhbW1hX2RhdGEpOworCX0KKwlyZXMg PSBzZXRfY29sb3JfcHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCBvdXRwdXQtPmNvbmZpZy5jcnRj LT5jcnRjX2lkLAorCQkJRFJNX01PREVfT0JKRUNUX0NSVEMsICJQQUxFVFRFX0FGVEVSX0NUTSIs IGJsb2JfaWRfZ2FtbWEpOworCisJaWYgKHJlcyA8IDApCisJCWZyZWUoZ2FtbWFfZGF0YSk7CisJ aWd0X2ZhaWxfb25fZiAocmVzIDwgMCwgIlBBTEVUVEVfQUZURVJfQ1RNOlNldCBQcm9wZXJ0eSBG YWlsZWRcbiIpOworCisJcmV0ID0gZ2V0X2NvbG9yX3Byb3BlcnR5KGRpc3BsYXktPmRybV9mZCwg b3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0Y19pZCwKKwkJCURSTV9NT0RFX09CSkVDVF9DUlRDLCAi UEFMRVRURV9BRlRFUl9DVE0iKTsKKworCWZyZWUoZ2FtbWFfZGF0YSk7CisJaWd0X2ZhaWxfb25f ZiAocmV0IDwgMCwgIlBBTEVUVEVfQkVGT1JFX0NUTTpTZXQgUHJvcGVydHkgRmFpbGVkXG4iKTsK K30KKworc3RhdGljIHZvaWQgdGVzdF9waXBlX2dhbW1hX2ludmFsaWRfdGVzdHMoc3RydWN0IGRh dGFfdCAqZGF0YSwgdWludDMyX3QgbnVtX3NhbXBsZXMsIGVudW0gYmxvYiBvcCkKK3sKKwlpbnQg cmVzLCBibG9iX2xlbmd0aDsKKwlzdHJ1Y3QgZHJtX3BhbGV0dGUgKmdhbW1hX2RhdGEgPSAgTlVM TDsKKwlzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2Jsb2IgYmxvYjsKKwlzdHJ1Y3QgZHJtX21vZGVf Y3JlYXRlX2Jsb2IgZW1wdHlfYmxvYjsKKwllbnVtIHBpcGUgcGlwZTE7CisJaW50IHJldCA9IC0x OworCisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OworCWlndF9vdXRw dXRfdCAqb3V0cHV0OworCWlmIChudW1fc2FtcGxlcyA9PSAwKQorCQlibG9iX2xlbmd0aCA9IDE7 CisJZWxzZQorCQlibG9iX2xlbmd0aCA9IChzaXplb2Yoc3RydWN0IGRybV9wYWxldHRlKSArIChu dW1fc2FtcGxlcyAqIHNpemVvZihzdHJ1Y3QgZHJtX3IzMmczMmIzMikpKTsKKworCWdhbW1hX2Rh dGEgPSBtYWxsb2MoYmxvYl9sZW5ndGgpOworCWlmIChvcCA9PSBJTlZBTElEX0JMT0JfREFUQSkK KwkJd3JpdGVfZ2FtbWFfbHV0KDAsIGdhbW1hX2RhdGEtPmx1dCwgMSk7CisJZWxzZQorCQl3cml0 ZV9nYW1tYV9sdXQobnVtX3NhbXBsZXMsIGdhbW1hX2RhdGEtPmx1dCwgMSk7CisJYmxvYi5kYXRh ID0gKHVpbnQ2NF90KWdhbW1hX2RhdGE7CisJYmxvYi5sZW5ndGggPSBibG9iX2xlbmd0aDsKKwli bG9iLmJsb2JfaWQgPSAtMTsKKworCWlmIChvcCA9PSBJTlZBTElEX0JMT0JfTEVOR1RIKQorCQli bG9iLmxlbmd0aCA9IDEwOworCisJcmV0ID0gaW9jdGwoZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9D VExfTU9ERV9DUkVBVEVQUk9QQkxPQiwgJmJsb2IpOworCWlndF9mYWlsX29uX2YgKHJldCA8IDAs ICJHQU1NQTpCTE9CIElPQ1RMIEZhaWxcbiIpOworCisJaWYgKG9wID09IElOVkFMSURfQkxPQl9J RCkKKwkJYmxvYi5ibG9iX2lkID0gNDA5Nio0MDk2OworCWlmIChvcCA9PSBJTlZBTElEX0JMT0Jf TlVMTCkKKwkJYmxvYiA9IGVtcHR5X2Jsb2I7CisJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dChk aXNwbGF5LCBvdXRwdXQpIHsKKwkJcGlwZTEgPSBvdXRwdXQtPmNvbmZpZy5waXBlOworCQlpZ3Rf b3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZTEpOworCisJcmVzID0gc2V0X2NvbG9yX3Byb3Bl cnR5KGRpc3BsYXktPmRybV9mZCwgb3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0Y19pZCwKKwkJCQlE Uk1fTU9ERV9PQkpFQ1RfQ1JUQywgIlBBTEVUVEVfQUZURVJfQ1RNIiwgYmxvYi5ibG9iX2lkKTsK KwlmcmVlKGdhbW1hX2RhdGEpOworCWlmIChvcCA9PSBJTlZBTElEX0JMT0JfREFUQSkKKwkJaWd0 X2ZhaWxfb25fZiAocmVzIDwgMCwgIkdBTU1BOkludmFsaWQgRGF0YSBUZXN0cyBGYWlsZWQgJWRc biIsIHJlcyk7CisJZWxzZQorCQlpZ3RfZmFpbF9vbl9mIChyZXMgPj0gMCwgIkdBTU1BOkludmFs aWQgVGVzdHMgRmFpbGVkICVkXG4iLCByZXMpOworCWFwcGx5X2dhbW1hKGRhdGEsIGRpc3BsYXks IG91dHB1dCwgMCwgMSk7CisJfQorfQorCitzdGF0aWMgdm9pZCB0ZXN0X3BpcGVfZGVnYW1tYV9p bnZhbGlkX3Rlc3RzKHN0cnVjdCBkYXRhX3QgKmRhdGEsIHVpbnQzMl90IG51bV9zYW1wbGVzLCBl bnVtIGJsb2Igb3ApCit7CisKKwlpbnQgcmVzLCBibG9iX2xlbmd0aDsKKwlzdHJ1Y3QgZHJtX3Bh bGV0dGUgKmRlZ2FtbWFfZGF0YSA9ICBOVUxMOworCXN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfYmxv YiBibG9iOworCXN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfYmxvYiBlbXB0eV9ibG9iOworCWVudW0g cGlwZSBwaXBlMTsKKwlpbnQgcmV0ID0gLTE7CisKKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0g JmRhdGEtPmRpc3BsYXk7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisKKwlpZiAobnVtX3NhbXBs ZXMgPT0gMCkKKwkJYmxvYl9sZW5ndGggPSAxOworCWVsc2UKKwkJYmxvYl9sZW5ndGggPSAoc2l6 ZW9mKHN0cnVjdCBkcm1fcGFsZXR0ZSkgKyAobnVtX3NhbXBsZXMgKiBzaXplb2Yoc3RydWN0IGRy bV9yMzJnMzJiMzIpKSk7CisJZGVnYW1tYV9kYXRhID0gbWFsbG9jKGJsb2JfbGVuZ3RoKTsKKwlp ZiAob3AgPT0gSU5WQUxJRF9CTE9CX0RBVEEpCisJCXdyaXRlX2dhbW1hX2x1dCgwLCBkZWdhbW1h X2RhdGEtPmx1dCwgMSk7CisJZWxzZQorCQl3cml0ZV9nYW1tYV9sdXQobnVtX3NhbXBsZXMsIGRl Z2FtbWFfZGF0YS0+bHV0LCAxKTsKKworCWJsb2IuZGF0YSA9ICh1aW50NjRfdClkZWdhbW1hX2Rh dGE7CisJYmxvYi5sZW5ndGggPSBibG9iX2xlbmd0aDsKKwlibG9iLmJsb2JfaWQgPSAtMTsKKwor CWlmIChvcCA9PSBJTlZBTElEX0JMT0JfTEVOR1RIKQorCQlibG9iLmxlbmd0aCA9IDEwOworCisJ cmV0ID0gaW9jdGwoZGlzcGxheS0+ZHJtX2ZkLCBEUk1fSU9DVExfTU9ERV9DUkVBVEVQUk9QQkxP QiwgJmJsb2IpOworCWlndF9mYWlsX29uX2YgKHJldCA8IDAsICJHQU1NQTpCTE9CIElPQ1RMIEZh aWxcbiIpOworCisJaWYgKG9wID09IElOVkFMSURfQkxPQl9JRCkKKwkJYmxvYi5ibG9iX2lkID0g NDA5Nio0MDk2OworCWlmIChvcCA9PSBJTlZBTElEX0JMT0JfTlVMTCkKKwkJYmxvYiA9IGVtcHR5 X2Jsb2I7CisJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dChkaXNwbGF5LCBvdXRwdXQpIHsKKwkJ cGlwZTEgPSBvdXRwdXQtPmNvbmZpZy5waXBlOworCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1 dCwgcGlwZTEpOworCisJcmVzID0gc2V0X2NvbG9yX3Byb3BlcnR5KGRpc3BsYXktPmRybV9mZCwg b3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0Y19pZCwKKwkJCQlEUk1fTU9ERV9PQkpFQ1RfQ1JUQywg IlBBTEVUVEVfQkVGT1JFX0NUTSIsIGJsb2IuYmxvYl9pZCk7CisJZnJlZShkZWdhbW1hX2RhdGEp OworCWlmIChvcCA9PSBJTlZBTElEX0JMT0JfREFUQSkKKwkJaWd0X2ZhaWxfb25fZiAocmVzIDwg MCwgIkRFR0FNTUE6SW52YWxpZCBEYXRhIFRlc3RzIEZhaWxlZCAlZFxuIiwgcmVzKTsKKwllbHNl CisJCWlndF9mYWlsX29uX2YgKHJlcyA+PSAwLCAiREVHQU1NQTpJbnZhbGlkIFRlc3RzIEZhaWxl ZCAlZFxuIiwgcmVzKTsKKwlhcHBseV9nYW1tYShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIDAsIDEp OworCX0KKworCit9CisvKgorVGhpcyBmdW5jdGlvbiB2ZXJpZnkgY3RtIGZlYXR1cmUgdXNpbmcg Ym90aCBDUkMgY2hlY2suCitTdGVwcyBmb2xsb3dlZCBhcmU6CisJMS5FbmFibGUgQmxhY2sgcGxh bmUgYW5kIGNhcHR1cmUgQ1JDX1JFRkVSRU5DRV9CTEFDSy4KKwkyLkVuYWJsZSBXaGl0ZSBwbGFu ZSBhbmQgY2FwdHVyZSBDUlNfUkVGRVJFTkNFX1dISVRFCisJMy5FbmFibGUgUmVkIHBsYW5lLgor CTQuQXBwbHkgTE9XIEdhbW1hLgorCTUuQ2FwdHVyZSBDUkNfQmxhY2suCisJNi5BcHBseSBIaWdo IEdhbW1hIGFuZCBjYXB0dXJlIENSQ19XaGl0ZS4KKwk3LkNSQ19CbGFjayBzaG91bGQgYmUgZXF1 aXZhbGVudCB0byBDUkNfUkVGRVJFTkNFX0JMQUNLCisJOC5DUkNfV2hpdGUgc2hvdWxkIGJlIGVx dWl2YWxlbnQgdG8gQ1JDX1JFRkVSRU5DRV9XSGl0ZS4KKworCisqLworc3RhdGljIHZvaWQgdGVz dF9waXBlX2dhbW1hKHN0cnVjdCBkYXRhX3QgKmRhdGEsIGlndF9kaXNwbGF5X3QgKmRpc3BsYXks IGlndF9vdXRwdXRfdCAqb3V0cHV0LAorCQkJCXVpbnQzMl90IG51bV9zYW1wbGVzLCBpbnQgdmFs dWVzLCBpbnQgcGlwZTEpCit7CisJaW50IHVuaXRfZ2FtbWEsIGRpc2FibGVfZ2FtbWE7CisJaWd0 X2NyY190IGNyY19ibGFjaywgY3JjX3doaXRlLCBjcmNfcmVmZXJlbmNlX3doaXRlLCBjcmNfcmVm ZXJlbmNlX2JsYWNrOworCisKKwkvKkVuYWJsZSBibGFjayBwbGFuZXMgYW5kIGNhcHR1cmUgcmVm ZXJlbmNlIGNyYyovCisKKwlmYl9jb2xvci5yZWQgPSAwOworCWZiX2NvbG9yLmdyZWVuID0gMDsK KwlmYl9jb2xvci5ibHVlID0gMDsKKwllbmFibGVfcGxhbmUoZGF0YSwgZGlzcGxheSwgb3V0cHV0 LCBwaXBlMSk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY3Jj X3JlZmVyZW5jZV9ibGFjayk7CisJLypFbmFibGUgd2hpdGUgcGxhbmUgYW5kIGNhcHR1cmUgcmVm ZXJuY2UgY3JjKi8KKwlmYl9jb2xvci5yZWQgPSAxOworCWZiX2NvbG9yLmdyZWVuID0gMTsKKwlm Yl9jb2xvci5ibHVlID0gMTsKKwllbmFibGVfcGxhbmUoZGF0YSwgZGlzcGxheSwgb3V0cHV0LCBw aXBlMSk7CisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY3JjX3Jl ZmVyZW5jZV93aGl0ZSk7CisKKwkvKkVuYWJsZSByZWQgcGxhbmVzIGFuZCBhcHBseSB1bml0IGdh bW1hKi8KKwlmYl9jb2xvci5yZWQgPSAxOworCWZiX2NvbG9yLmdyZWVuID0gMDsKKwlmYl9jb2xv ci5ibHVlID0gMDsKKwl1bml0X2dhbW1hID0gMDsgLyowIC0+IHdoaXRlIDEtPmJsYWNrKi8KKwlh cHBseV9nYW1tYShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIG51bV9zYW1wbGVzLCB1bml0X2dhbW1h KTsKKwllbmFibGVfcGxhbmUoZGF0YSwgZGlzcGxheSwgb3V0cHV0LCBwaXBlMSk7CisJaWd0X3Bp cGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjLCAmY3JjX3doaXRlKTsKKworCS8qIEFw cGx5IDB4MCBnYW1tYSAqLworCXVuaXRfZ2FtbWEgPSAgMTsKKworCWFwcGx5X2dhbW1hKGRhdGEs IGRpc3BsYXksIG91dHB1dCwgbnVtX3NhbXBsZXMsIHVuaXRfZ2FtbWEpOworCWVuYWJsZV9wbGFu ZShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHBpcGUxKTsKKwlpZ3RfcGlwZV9jcmNfY29sbGVjdF9j cmMoZGF0YS0+cGlwZV9jcmMsICZjcmNfYmxhY2spOworCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZj cmNfcmVmZXJlbmNlX2JsYWNrLCAmY3JjX2JsYWNrKTsKKwlpZ3RfYXNzZXJ0X2NyY19lcXVhbCgm Y3JjX3JlZmVyZW5jZV93aGl0ZSwgJmNyY193aGl0ZSk7CisKKwkvKkRpc2FibGluZyBnYW1tYSov CisJaWYgKG51bV9zYW1wbGVzID09IEJEV19TUExJVEdBTU1BX01BWF9WQUxTKSB7CisJCWRpc2Fi bGVfZ2FtbWEgPSAyOworCQlhcHBseV9nYW1tYShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIDAsIGRp c2FibGVfZ2FtbWEpOworCX0gZWxzZSB7CisJCWFwcGx5X2dhbW1hKGRhdGEsIGRpc3BsYXksIG91 dHB1dCwgMCwgdW5pdF9nYW1tYSk7CisJfQorCit9CisKK3N0YXRpYyB2b2lkIHRlc3RfbGVnYWN5 X2dhbW1hIChzdHJ1Y3QgZGF0YV90ICpkYXRhLCBpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpZ3Rf b3V0cHV0X3QgKm91dHB1dCwgaW50IHBpcGUxKQoreworCWludCByZXQsIGk7CisJdWludDE2X3Qg KnZhbCA9IG1hbGxvYyhzaXplb2YodWludDE2X3QpICogMjU2KTsKKwlmbG9hdCBnYW1tYTEgPSAx LjA7CisJZmJfY29sb3IucmVkID0gMTsKKwlmYl9jb2xvci5ncmVlbiA9IDE7CisJZmJfY29sb3Iu Ymx1ZSA9IDE7CisJZW5hYmxlX3BsYW5lKGRhdGEsIGRpc3BsYXksIG91dHB1dCwgcGlwZTEpOwor CWZvciAoaSA9IDA7IGkgPCAyNTYgOyBpKyspIHsKKwkJdmFsW2ldID0gMHhmZmZmICogcG93KChp LzI1NSksIGdhbW1hMSk7CisKKwl9CisJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dCAoZGlzcGxh eSwgb3V0cHV0KSB7CisJCXJldCA9IGRybU1vZGVDcnRjU2V0R2FtbWEgKGRpc3BsYXktPmRybV9m ZCwgb3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0Y19pZCwgMjU2LCB2YWwsIHZhbCwgdmFsKTsKKwkJ aWd0X2Fzc2VydF9sdGUoMCwgcmV0KTsKKworCX0KK30KKworc3RhdGljIHZvaWQgdGVzdF9waXBl X2NvbG9yKHN0cnVjdCBkYXRhX3QgKmRhdGEsIGVudW0gY29sb3JfcHJvcGVydHkgcHJvcF9uYW1l LCBpbnQgdmFsdWUpCit7CisJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5 OworCWlndF9vdXRwdXRfdCAqb3V0cHV0OworCWlndF9wbGFuZV90ICpwbGFuZTsKKwllbnVtIHBp cGUgcGlwZTE7CisJaW50IHJlczsKKworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoZGlzcGxh eSwgb3V0cHV0KSB7CisJCXBpcGUxID0gb3V0cHV0LT5jb25maWcucGlwZTsKKwkJaWd0X291dHB1 dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUxKTsKKwkJcmVzID0gZ2V0X2NvbG9yX3Byb3BlcnR5KGRp c3BsYXktPmRybV9mZCwgb3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0Y19pZCwgRFJNX01PREVfT0JK RUNUX0NSVEMsICJDVE0iKTsKKwkJaWd0X3JlcXVpcmUgKHJlcyA+PSAwKTsKKwkJcmVzID0gZ2V0 X2NvbG9yX3Byb3BlcnR5KGRpc3BsYXktPmRybV9mZCwgb3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0 Y19pZCwgRFJNX01PREVfT0JKRUNUX0NSVEMsICJQQUxFVFRFX0JFRk9SRV9DVE0iKTsKKwkJaWd0 X3JlcXVpcmUgKHJlcyA+PSAwKTsKKwkJcmVzID0gZ2V0X2NvbG9yX3Byb3BlcnR5KGRpc3BsYXkt PmRybV9mZCwgb3V0cHV0LT5jb25maWcuY3J0Yy0+Y3J0Y19pZCwgRFJNX01PREVfT0JKRUNUX0NS VEMsICJQQUxFVFRFX0FGVEVSX0NUTSIpOworCQlpZ3RfcmVxdWlyZSAocmVzID49IDApOworCisJ CXN3aXRjaCAocHJvcF9uYW1lKSB7CisJCWNhc2UgZ2FtbWFfcHJvcGVydHlfOGJpdDoKKwkJCXRl c3RfcGlwZV9nYW1tYShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsCisJCQkJCUJEV184QklUX0dBTU1B X01BWF9WQUxTLCB2YWx1ZSwgcGlwZTEpOworCQkJYnJlYWs7CisJCWNhc2UgbGVnYWN5X2dhbW1h OgorCQkJdGVzdF9sZWdhY3lfZ2FtbWEoZGF0YSwgZGlzcGxheSwgb3V0cHV0LCBwaXBlMSk7CisJ CQlicmVhazsKKwkJY2FzZSBnYW1tYV9wcm9wZXJ0eV8xMGJpdDoKKwkJCXRlc3RfcGlwZV9nYW1t YShkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIEJEV18xMEJJVF9HQU1NQV9NQVhfVkFMUywgdmFsdWUs IHBpcGUxKTsKKwkJCWJyZWFrOworCQljYXNlIGN0bV9wcm9wZXJ0eToKKwkJCXN3aXRjaCAodmFs dWUpIHsKKwkJCWNhc2UgUkVWRVJTRToKKwkJCQl0ZXN0X3BpcGVfY3RtX3JldmVyc2UoZGF0YSwg ZGlzcGxheSwgb3V0cHV0LCB2YWx1ZSwgcGlwZTEpOworCQkJCWJyZWFrOworCQkJY2FzZSBORUdB VElWRToKKwkJCQl0ZXN0X3BpcGVfY3RtX25lZ2F0aXZlKGRhdGEsIGRpc3BsYXksIG91dHB1dCwg dmFsdWUsIHBpcGUxKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRlJBQ1RJT046CisJCQkJdGVzdF9w aXBlX2N0bV9mcmFjdGlvbihkYXRhLCBkaXNwbGF5LCBvdXRwdXQsIHZhbHVlLCBwaXBlMSk7CisJ CQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXRlc3RfcGlwZV9jdG0oZGF0YSwgZGlzcGxheSwg b3V0cHV0LCB2YWx1ZSwgcGlwZTEpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNh c2UgZ2FtbWFfcHJvcGVydHlfc3BsaXQ6CisJCQl0ZXN0X3BpcGVfZ2FtbWEoZGF0YSwgZGlzcGxh eSwgb3V0cHV0LAorCQkJCQlCRFdfU1BMSVRHQU1NQV9NQVhfVkFMUywgdmFsdWUsIHBpcGUxKTsK KwkJCWJyZWFrOworCQljYXNlIGdhbW1hX3Byb3BlcnR5XzEyYml0OgorCQkJdGVzdF9waXBlX2dh bW1hKGRhdGEsIGRpc3BsYXksIG91dHB1dCwKKwkJCQkJQkRXXzEyQklUX0dBTU1BX01BWF9WQUxT LCB2YWx1ZSwgcGlwZTEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpZ3RfaW5mbygiSW52 YWxpZCBUZXN0XG4iKTsKKwkJCWJyZWFrOworCQl9CisJCWNsZWFudXBfZmIoZGF0YSk7CisJCXBs YW5lID0gaWd0X291dHB1dF9nZXRfcGxhbmUob3V0cHV0LCBJR1RfUExBTkVfMik7CisJCWNsZWFu dXBfY3J0YyhkYXRhLCBvdXRwdXQsIHBsYW5lKTsKKwl9Cit9CisKKworaWd0X21haW4KK3sKKwlz dHJ1Y3QgZGF0YV90IGRhdGEgPSB7fTsKKwlpbnQgdmFsdWVzID0gMTsKKwlpZ3Rfc2tpcF9vbl9z aW11bGF0aW9uKCk7CisJaWd0X2ZpeHR1cmV7CisJCWRhdGEuZHJtX2ZkID0gZHJtX29wZW5fZHJp dmVyX21hc3RlcihEUklWRVJfSU5URUwpOworCQlrbXN0ZXN0X3NldF92dF9ncmFwaGljc19tb2Rl KCk7CisJCWlndF9kaXNwbGF5X2luaXQoJmRhdGEuZGlzcGxheSwgZGF0YS5kcm1fZmQpOworCQlp Z3RfcmVxdWlyZV9waXBlX2NyYygpOworCX0KKworCWlndF9zdWJ0ZXN0KCJjdG0tcmVkIikKKwkJ dGVzdF9waXBlX2NvbG9yKCZkYXRhLCBjdG1fcHJvcGVydHksIFJFRCk7CisJaWd0X3N1YnRlc3Qo ImN0bS1ncmVlbiIpCisJCXRlc3RfcGlwZV9jb2xvcigmZGF0YSwgY3RtX3Byb3BlcnR5LCBHUkVF Tik7CisJaWd0X3N1YnRlc3QoImN0bS1ibHVlIikKKwkJdGVzdF9waXBlX2NvbG9yKCZkYXRhLCBj dG1fcHJvcGVydHksIEJMVUUpOworCWlndF9zdWJ0ZXN0KCJjdG0tcmV2ZXJzZSIpCisJCXRlc3Rf cGlwZV9jb2xvcigmZGF0YSwgY3RtX3Byb3BlcnR5LCBSRVZFUlNFKTsKKwlpZ3Rfc3VidGVzdCgi Y3RtLW5lZ2F0aXZlIikKKwkJdGVzdF9waXBlX2NvbG9yKCZkYXRhLCBjdG1fcHJvcGVydHksIE5F R0FUSVZFKTsKKwlpZ3Rfc3VidGVzdCgiY3RtLWZyYWN0aW9uIikKKwkJdGVzdF9waXBlX2NvbG9y KCZkYXRhLCBjdG1fcHJvcGVydHksIEZSQUNUSU9OKTsKKwlpZ3Rfc3VidGVzdCgiY3RtLWludmFs aWQtYmxvYi1pZCIpCisJCXRlc3RfcGlwZV9jdG1faW52YWxpZF90ZXN0cygmZGF0YSwgSU5WQUxJ RF9CTE9CX0lEKTsKKwlpZ3Rfc3VidGVzdCgiY3RtLWludmFsaWQtYmxvYi1udWxsIikKKwkJdGVz dF9waXBlX2N0bV9pbnZhbGlkX3Rlc3RzKCZkYXRhLCBJTlZBTElEX0JMT0JfTlVMTCk7CisJaWd0 X3N1YnRlc3QoImN0bS1pbnZhbGlkLWJsb2ItbGVuZ3RoIikKKwkJdGVzdF9waXBlX2N0bV9pbnZh bGlkX3Rlc3RzKCZkYXRhLCBJTlZBTElEX0JMT0JfTEVOR1RIKTsKKwlpZ3Rfc3VidGVzdCgiZ2Ft bWEtbGVnYWN5IikKKwkJdGVzdF9waXBlX2NvbG9yKCZkYXRhLCBsZWdhY3lfZ2FtbWEsIHZhbHVl cyk7CisJaWd0X3N1YnRlc3QoImdhbW1hLThiaXQiKQorCQl0ZXN0X3BpcGVfY29sb3IoJmRhdGEs IGdhbW1hX3Byb3BlcnR5XzhiaXQsIHZhbHVlcyk7CisJaWd0X3N1YnRlc3QoImdhbW1hLTEwYml0 IikKKwkJdGVzdF9waXBlX2NvbG9yKCZkYXRhLCBnYW1tYV9wcm9wZXJ0eV8xMGJpdCwgdmFsdWVz KTsKKwlpZ3Rfc3VidGVzdCgiZ2FtbWEtMTJiaXQiKQorCQl0ZXN0X3BpcGVfY29sb3IoJmRhdGEs IGdhbW1hX3Byb3BlcnR5XzEyYml0LCB2YWx1ZXMpOworCWlndF9zdWJ0ZXN0KCJnYW1tYS1zcGxp dCIpCisJCXRlc3RfcGlwZV9jb2xvcigmZGF0YSwgZ2FtbWFfcHJvcGVydHlfc3BsaXQsIHZhbHVl cyk7CisJaWd0X3N1YnRlc3QoImdhbW1hLWludmFsaWQtYmxvYi1pZCIpCisJCXRlc3RfcGlwZV9n YW1tYV9pbnZhbGlkX3Rlc3RzKCZkYXRhLCBCRFdfMTJCSVRfR0FNTUFfTUFYX1ZBTFMsIElOVkFM SURfQkxPQl9JRCk7CisJaWd0X3N1YnRlc3QoImdhbW1hLWludmFsaWQtYmxvYi1udWxsIikKKwkJ dGVzdF9waXBlX2dhbW1hX2ludmFsaWRfdGVzdHMoJmRhdGEsIEJEV18xMkJJVF9HQU1NQV9NQVhf VkFMUywgSU5WQUxJRF9CTE9CX05VTEwpOworCWlndF9zdWJ0ZXN0KCJnYW1tYS1pbnZhbGlkLWJs b2ItbGVuZ3RoIikKKwkJdGVzdF9waXBlX2dhbW1hX2ludmFsaWRfdGVzdHMoJmRhdGEsIEJEV18x MkJJVF9HQU1NQV9NQVhfVkFMUywgSU5WQUxJRF9CTE9CX0xFTkdUSCk7CisJaWd0X3N1YnRlc3Qo ImdhbW1hLThiaXQtaW52YWxpZC1ibG9iLWRhdGEiKQorCQl0ZXN0X3BpcGVfZ2FtbWFfaW52YWxp ZF90ZXN0cygmZGF0YSwgQkRXXzhCSVRfR0FNTUFfTUFYX1ZBTFMsIElOVkFMSURfQkxPQl9EQVRB KTsKKwlpZ3Rfc3VidGVzdCgiZ2FtbWEtMTBiaXQtaW52YWxpZC1ibG9iLWRhdGEiKQorCQl0ZXN0 X3BpcGVfZ2FtbWFfaW52YWxpZF90ZXN0cygmZGF0YSwgQkRXXzEwQklUX0dBTU1BX01BWF9WQUxT LCBJTlZBTElEX0JMT0JfREFUQSk7CisJaWd0X3N1YnRlc3QoImdhbW1hLTEyYml0LWludmFsaWQt YmxvYi1kYXRhIikKKwkJdGVzdF9waXBlX2dhbW1hX2ludmFsaWRfdGVzdHMoJmRhdGEsIEJEV18x MkJJVF9HQU1NQV9NQVhfVkFMUywgSU5WQUxJRF9CTE9CX0RBVEEpOworCWlndF9zdWJ0ZXN0KCJk ZWdhbW1hLWludmFsaWQtYmxvYi1pZCIpCisJCXRlc3RfcGlwZV9kZWdhbW1hX2ludmFsaWRfdGVz dHMoJmRhdGEsIEJEV18xMkJJVF9HQU1NQV9NQVhfVkFMUywgSU5WQUxJRF9CTE9CX0lEKTsKKwlp Z3Rfc3VidGVzdCgiZGVnYW1tYS1pbnZhbGlkLWJsb2ItbnVsbCIpCisJCXRlc3RfcGlwZV9kZWdh bW1hX2ludmFsaWRfdGVzdHMoJmRhdGEsIEJEV18xMkJJVF9HQU1NQV9NQVhfVkFMUywgSU5WQUxJ RF9CTE9CX05VTEwpOworCWlndF9zdWJ0ZXN0KCJkZWdhbW1hLWludmFsaWQtYmxvYi1sZW5ndGgi KQorCQl0ZXN0X3BpcGVfZGVnYW1tYV9pbnZhbGlkX3Rlc3RzKCZkYXRhLCBCRFdfMTJCSVRfR0FN TUFfTUFYX1ZBTFMsIElOVkFMSURfQkxPQl9MRU5HVEgpOworCWlndF9zdWJ0ZXN0KCJkZWdhbW1h LThiaXQtaW52YWxpZC1ibG9iLWRhdGEiKQorCQl0ZXN0X3BpcGVfZGVnYW1tYV9pbnZhbGlkX3Rl c3RzKCZkYXRhLCBCRFdfOEJJVF9HQU1NQV9NQVhfVkFMUywgSU5WQUxJRF9CTE9CX0RBVEEpOwor CWlndF9zdWJ0ZXN0KCJkZWdhbW1hLTEwYml0LWludmFsaWQtYmxvYi1kYXRhIikKKwkJdGVzdF9w aXBlX2RlZ2FtbWFfaW52YWxpZF90ZXN0cygmZGF0YSwgQkRXXzEwQklUX0dBTU1BX01BWF9WQUxT LCBJTlZBTElEX0JMT0JfREFUQSk7CisJaWd0X3N1YnRlc3QoImRlZ2FtbWEtMTJiaXQtaW52YWxp ZC1ibG9iLWRhdGEiKQorCQl0ZXN0X3BpcGVfZGVnYW1tYV9pbnZhbGlkX3Rlc3RzKCZkYXRhLCBC RFdfMTJCSVRfR0FNTUFfTUFYX1ZBTFMsIElOVkFMSURfQkxPQl9EQVRBKTsKKworCWlndF9maXh0 dXJleworCQlpZ3RfZGlzcGxheV9maW5pKCZkYXRhLmRpc3BsYXkpOworCX0KK30KKwotLSAKMS45 LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVs LWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==