From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 47A9F897D7 for ; Fri, 5 Apr 2019 12:15:02 +0000 (UTC) From: Simon Ser Date: Fri, 5 Apr 2019 15:15:07 +0300 Message-Id: <20190405121507.14237-1-simon.ser@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t] tests/kms_chamelium: add dp-audio 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 List-ID: VGhpcyBuZXcgdGVzdCBlbnN1cmVzIERpc3BsYXlQb3J0IGF1ZGlvIHdvcmtzIGJ5IHVzaW5nIHRo ZSBDaGFtZWxpdW0uCgpJdCBlbmFibGVzIHRoZSBEaXNwbGF5UG9ydCBvdXRwdXQgYW5kIHNlbmRz IGFuIGF1ZGlvIHNpZ25hbCBjb250YWluaW5nIGEgc2V0IG9mCmZyZXF1ZW5jaWVzIHdlIGNob29z ZSB0byBhbGwgSERNSS9EaXNwbGF5UG9ydCBhdWRpbyBkZXZpY2VzLiBJdCBzdGFydHMKcmVjb3Jk aW5nIGF1ZGlvIG9uIHRoZSBDaGFtZWxpdW0gZGV2aWNlIGFuZCB1c2VzIHRoZSBzdHJlYW0gc2Vy dmVyIHRvIHJldHJpZXZlCmNhcHR1cmVkIGF1ZGlvIHBhZ2VzLiBJdCB0aGVuIGNoZWNrcyB0aGF0 IHRoZSBjYXB0dXJlIGF1ZGlvIHNpZ25hbCBjb250YWlucyB0aGUKZnJlcXVlbmNpZXMgd2Ugc2Vu dCwgYW5kIG9ubHkgdGhvc2UsIGJ5IGNvbXB1dGluZyBhIEZGVC4KCkEgbmV3IGxpYnJhcnkgaGFz IGJlZW4gYWRkZWQgdG8gbGliaWd0IHRvIGNvbW11bmljYXRlIHdpdGggdGhlIHN0cmVhbSBzZXJ2 ZXIuCkl0IGltcGxlbWVudHMgYSBzaW1wbGUgY3VzdG9tIFRDUCBwcm90b2NvbC4KCkluIGNhc2Ug dGhlIHRlc3QgZmFpbHMsIGEgV0FWIGZpbGUgd2l0aCB0aGUgY2FwdHVyZWQgZGF0YSBpcyBzYXZl ZCBvbiBkaXNrLgoKUmlnaHQgbm93IHRoZSB0ZXN0IGhhcyBhIGZldyBsaW1pdGF0aW9uczoKCi0g T25seSB0aGUgZmlyc3QgY2hhbm5lbCBpcyBjaGVja2VkCi0gSUdUIG9ubHkgZ2VuZXJhdGVzIGF1 ZGlvIHdpdGggYSBzaW5nbGUgc2FtcGxpbmcgcmF0ZSAoNDggS0h6KQotIEF1ZGlvIGRhdGEgaXMg bm90IGNhcHR1cmVkIGluIHJlYWwtdGltZQoKVGhlc2UgbGltaXRhdGlvbnMgd2lsbCBiZSBsaWZ0 ZWQgaW4gZnV0dXJlIHBhdGNoZXMuCgpQdWxzZUF1ZGlvIG11c3Qgbm90IHJ1biBkdXJpbmcgdGhl IHRlc3RzIHNpbmNlIEFMU0EgaXMgdXNlZCBkaXJlY3RseS4gVG8gZW5zdXJlCnRoaXMsIGVkaXQg L2V0Yy9wdWxzZS9jbGllbnQuY29uZiBhbmQgYWRkIGBhdXRvc3Bhd249bm9gLiBUaGVuIHJ1bgpg cHVsc2VhdWRpbyAtLWtpbGxgLgoKVGhpcyBjb21taXQgZGVsZXRlcyB0aGUgZXhpc3RpbmcgYXVk aW8gdGVzdHMuIFRoZXkgd2VyZW4ndCBydW4gYW5kIHJlcXVpcmVkIGFuCmV4b3RpYyBjb25maWd1 cmF0aW9uIChIRE1JIGF1ZGlvIHNwbGl0dGVyLCBkdW1teSBIRE1JIHNpbmsgYW5kIGEgbGluZS1p biBwb3J0Cm9uIHRoZSBEVVQpLgoKU2lnbmVkLW9mZi1ieTogU2ltb24gU2VyIDxzaW1vbi5zZXJA aW50ZWwuY29tPgotLS0KIGxpYi9pZ3QuaCAgICAgICAgICAgICAgICAgIHwgICAxICsKIGxpYi9p Z3RfYWxzYS5jICAgICAgICAgICAgIHwgIDE2ICstCiBsaWIvaWd0X2F1ZGlvLmMgICAgICAgICAg ICB8IDI4NSArKysrKysrKysrKysrLS0tLS0tCiBsaWIvaWd0X2F1ZGlvLmggICAgICAgICAgICB8 ICAxMiArLQogbGliL2lndF9jaGFtZWxpdW0uYyAgICAgICAgfCAxMDEgKysrKysrKwogbGliL2ln dF9jaGFtZWxpdW0uaCAgICAgICAgfCAgMTEgKwogbGliL2lndF9jaGFtZWxpdW1fc3RyZWFtLmMg fCA1NDkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliL2lndF9jaGFt ZWxpdW1fc3RyZWFtLmggfCAgNjkgKysrKysKIGxpYi9tZXNvbi5idWlsZCAgICAgICAgICAgIHwg ICAxICsKIG1lc29uLmJ1aWxkICAgICAgICAgICAgICAgIHwgIDUwICsrLS0KIG1lc29uX29wdGlv bnMudHh0ICAgICAgICAgIHwgICA2IC0KIHRlc3RzL2F1ZGlvLmMgICAgICAgICAgICAgIHwgMTkz IC0tLS0tLS0tLS0tLS0KIHRlc3RzL2ttc19jaGFtZWxpdW0uYyAgICAgIHwgMjgwICsrKysrKysr KysrKysrKysrKy0KIHRlc3RzL21lc29uLmJ1aWxkICAgICAgICAgIHwgICA3IC0KIDE0IGZpbGVz IGNoYW5nZWQsIDEyNDYgaW5zZXJ0aW9ucygrKSwgMzM1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYi9pZ3RfY2hhbWVsaXVtX3N0cmVhbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliL2lndF9jaGFtZWxpdW1fc3RyZWFtLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9hdWRp by5jCgpkaWZmIC0tZ2l0IGEvbGliL2lndC5oIGIvbGliL2lndC5oCmluZGV4IDY2NTRhNjU5Li41 ODUyZDU1NyAxMDA2NDQKLS0tIGEvbGliL2lndC5oCisrKyBiL2xpYi9pZ3QuaApAQCAtNDMsNiAr NDMsNyBAQAogI2luY2x1ZGUgImlndF9zdGF0cy5oIgogI2lmZGVmIEhBVkVfQ0hBTUVMSVVNCiAj aW5jbHVkZSAiaWd0X2NoYW1lbGl1bS5oIgorI2luY2x1ZGUgImlndF9jaGFtZWxpdW1fc3RyZWFt LmgiCiAjZW5kaWYKICNpbmNsdWRlICJpbnN0ZG9uZS5oIgogI2luY2x1ZGUgImludGVsX2JhdGNo YnVmZmVyLmgiCmRpZmYgLS1naXQgYS9saWIvaWd0X2Fsc2EuYyBiL2xpYi9pZ3RfYWxzYS5jCmlu ZGV4IGJiNjY4MmNjLi40NDI3ODExZiAxMDA2NDQKLS0tIGEvbGliL2lndF9hbHNhLmMKKysrIGIv bGliL2lndF9hbHNhLmMKQEAgLTU1MywxNiArNTUzLDIwIEBAIGludCBhbHNhX3J1bihzdHJ1Y3Qg YWxzYSAqYWxzYSwgaW50IGR1cmF0aW9uX21zKQogCQkJCQlpZiAocmV0IDwgMCkgewogCQkJCQkJ cmV0ID0gc25kX3BjbV9yZWNvdmVyKGhhbmRsZSwKIAkJCQkJCQkJICAgICAgcmV0LCAwKTsKLQkJ CQkJCWlmIChyZXQgPCAwKQorCQkJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJCQlpZ3RfZGVidWco InNuZF9wY21fcmVjb3ZlciBhZnRlciBzbmRfcGNtX3dyaXRlaSBmYWlsZWQiKTsKIAkJCQkJCQln b3RvIGNvbXBsZXRlOworCQkJCQkJfQogCQkJCQl9CiAKIAkJCQkJb3V0cHV0X2NvdW50c1tpXSAr PSByZXQ7CiAJCQkJfSBlbHNlIGlmIChvdXRwdXRfY291bnRzW2ldIDwgb3V0cHV0X3RyaWdnZXIg JiYKIAkJCQkJICAgcmV0IDwgMCkgewogCQkJCQlyZXQgPSBzbmRfcGNtX3JlY292ZXIoaGFuZGxl LCByZXQsIDApOwotCQkJCQlpZiAocmV0IDwgMCkKKwkJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJ CWlndF9kZWJ1Zygic25kX3BjbV9yZWNvdmVyIGZhaWxlZCIpOwogCQkJCQkJZ290byBjb21wbGV0 ZTsKKwkJCQkJfQogCQkJCX0KIAkJCX0KIApAQCAtNjA5LDE2ICs2MTMsMjAgQEAgaW50IGFsc2Ff cnVuKHN0cnVjdCBhbHNhICphbHNhLCBpbnQgZHVyYXRpb25fbXMpCiAJCQkJCXJldCA9IDA7CiAJ CQkJfSBlbHNlIGlmIChyZXQgPCAwKSB7CiAJCQkJCXJldCA9IHNuZF9wY21fcmVjb3ZlcihoYW5k bGUsIHJldCwgMCk7Ci0JCQkJCWlmIChyZXQgPCAwKQorCQkJCQlpZiAocmV0IDwgMCkgeworCQkJ CQkJaWd0X2RlYnVnKCJzbmRfcGNtX3JlY292ZXIgYWZ0ZXIgc25kX3BjbV9yZWFkaSBmYWlsZWQi KTsKIAkJCQkJCWdvdG8gY29tcGxldGU7CisJCQkJCX0KIAkJCQl9CiAKIAkJCQlpbnB1dF9jb3Vu dCArPSByZXQ7CiAJCQkJaW5wdXRfdG90YWwgKz0gcmV0OwogCQkJfSBlbHNlIGlmIChpbnB1dF9j b3VudCA8IGlucHV0X3RyaWdnZXIgJiYgcmV0IDwgMCkgewogCQkJCXJldCA9IHNuZF9wY21fcmVj b3ZlcihoYW5kbGUsIHJldCwgMCk7Ci0JCQkJaWYgKHJldCA8IDApCisJCQkJaWYgKHJldCA8IDAp IHsKKwkJCQkJaWd0X2RlYnVnKCJzbmRfcGNtX3JlY292ZXIgZmFpbGVkIik7CiAJCQkJCWdvdG8g Y29tcGxldGU7CisJCQkJfQogCQkJfQogCQl9CiAJfSB3aGlsZSAoIXJlYWNoZWQpOwpkaWZmIC0t Z2l0IGEvbGliL2lndF9hdWRpby5jIGIvbGliL2lndF9hdWRpby5jCmluZGV4IGEwNTkyZDUzLi40 Y2M5YmRmMCAxMDA2NDQKLS0tIGEvbGliL2lndF9hdWRpby5jCisrKyBiL2xpYi9pZ3RfYXVkaW8u YwpAQCAtMjYsOCArMjYsMTEgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCi0jaW5jbHVkZSA8 bWF0aC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRl IDxnc2wvZ3NsX2ZmdF9yZWFsLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHVuaXN0 ZC5oPgogCiAjaW5jbHVkZSAiaWd0X2F1ZGlvLmgiCiAjaW5jbHVkZSAiaWd0X2NvcmUuaCIKQEAg LTEyOCw3ICsxMzEsNyBAQCBpbnQgYXVkaW9fc2lnbmFsX2FkZF9mcmVxdWVuY3koc3RydWN0IGF1 ZGlvX3NpZ25hbCAqc2lnbmFsLCBpbnQgZnJlcXVlbmN5KQogICovCiB2b2lkIGF1ZGlvX3NpZ25h bF9zeW50aGVzaXplKHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbCkKIHsKLQlzaG9ydCAqcGVy aW9kOworCWludDE2X3QgKnBlcmlvZDsKIAlkb3VibGUgdmFsdWU7CiAJaW50IGZyYW1lczsKIAlp bnQgZnJlcTsKQEAgLTE0NSw5ICsxNDgsOSBAQCB2b2lkIGF1ZGlvX3NpZ25hbF9zeW50aGVzaXpl KHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbCkKIAogCQlmb3IgKGogPSAwOyBqIDwgZnJhbWVz OyBqKyspIHsKIAkJCXZhbHVlID0gMi4wICogTV9QSSAqIGZyZXEgLyBzaWduYWwtPnNhbXBsaW5n X3JhdGUgKiBqOwotCQkJdmFsdWUgPSBzaW4odmFsdWUpICogU0hSVF9NQVggLyBzaWduYWwtPmZy ZXFzX2NvdW50OworCQkJdmFsdWUgPSBzaW4odmFsdWUpICogSU5UMTZfTUFYIC8gc2lnbmFsLT5m cmVxc19jb3VudDsKIAotCQkJcGVyaW9kW2pdID0gKHNob3J0KSB2YWx1ZTsKKwkJCXBlcmlvZFtq XSA9IChpbnQxNl90KSB2YWx1ZTsKIAkJfQogCiAJCXNpZ25hbC0+ZnJlcXNbaV0ucGVyaW9kID0g cGVyaW9kOwpAQCAtMTg2LDE3ICsxODksMTYgQEAgdm9pZCBhdWRpb19zaWduYWxfY2xlYW4oc3Ry dWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsKQogICogc2lnbmFsIGRhdGEgKGluIGludGVybGVhdmVk IFMxNl9MRSBmb3JtYXQpLCBhdCB0aGUgcmVxdWVzdGVkIHNhbXBsaW5nIHJhdGUKICAqIGFuZCBu dW1iZXIgb2YgY2hhbm5lbHMuCiAgKi8KLXZvaWQgYXVkaW9fc2lnbmFsX2ZpbGwoc3RydWN0IGF1 ZGlvX3NpZ25hbCAqc2lnbmFsLCBzaG9ydCAqYnVmZmVyLCBpbnQgZnJhbWVzKQordm9pZCBhdWRp b19zaWduYWxfZmlsbChzdHJ1Y3QgYXVkaW9fc2lnbmFsICpzaWduYWwsIGludDE2X3QgKmJ1ZmZl ciwgaW50IGZyYW1lcykKIHsKLQlzaG9ydCAqZGVzdGluYXRpb247Ci0Jc2hvcnQgKnNvdXJjZTsK KwlpbnQxNl90ICpkZXN0aW5hdGlvbiwgKnNvdXJjZTsKIAlpbnQgdG90YWw7CiAJaW50IGZyZXFf ZnJhbWVzOwogCWludCBmcmVxX29mZnNldDsKIAlpbnQgY291bnQ7CiAJaW50IGksIGosIGs7CiAK LQltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2Yoc2hvcnQpICogc2lnbmFsLT5jaGFubmVscyAqIGZy YW1lcyk7CisJbWVtc2V0KGJ1ZmZlciwgMCwgc2l6ZW9mKGludDE2X3QpICogc2lnbmFsLT5jaGFu bmVscyAqIGZyYW1lcyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2lnbmFsLT5mcmVxc19jb3VudDsg aSsrKSB7CiAJCXRvdGFsID0gMDsKQEAgLTIyOSw5NyArMjMxLDIxNCBAQCB2b2lkIGF1ZGlvX3Np Z25hbF9maWxsKHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbCwgc2hvcnQgKmJ1ZmZlciwgaW50 IGZyYW1lcykKIH0KIAogLyoqCi0gKiBhdWRpb19zaWduYWxfZGV0ZWN0OgotICogQHNpZ25hbDog VGhlIHRhcmdldCBzaWduYWwgc3RydWN0dXJlCi0gKiBAY2hhbm5lbHM6IFRoZSBpbnB1dCBkYXRh J3MgbnVtYmVyIG9mIGNoYW5uZWxzCi0gKiBAc2FtcGxpbmdfcmF0ZTogVGhlIGlucHV0IGRhdGEn cyBzYW1wbGluZyByYXRlCi0gKiBAYnVmZmVyOiBUaGUgaW5wdXQgZGF0YSdzIGJ1ZmZlcgotICog QGZyYW1lczogVGhlIGlucHV0IGRhdGEncyBudW1iZXIgb2YgZnJhbWVzCi0gKgotICogRGV0ZWN0 IHRoYXQgdGhlIGZyZXF1ZW5jaWVzIHNwZWNpZmllZCBpbiBAc2lnbmFsLCBhbmQgb25seSB0aG9z ZSwgYXJlCi0gKiBwcmVzZW50IGluIHRoZSBpbnB1dCBkYXRhLiBUaGUgaW5wdXQgZGF0YSdzIGZv cm1hdCBpcyByZXF1aXJlZCB0byBiZSBTMTZfTEUuCisgKiBDaGVja3MgdGhhdCBmcmVxdWVuY2ll cyBzcGVjaWZpZWQgaW4gc2lnbmFsLCBhbmQgb25seSB0aG9zZSwgYXJlIGluY2x1ZGVkCisgKiBp biB0aGUgaW5wdXQgZGF0YS4KICAqCi0gKiBSZXR1cm5zOiBBIGJvb2xlYW4gaW5kaWNhdGluZyB3 aGV0aGVyIHRoZSBkZXRlY3Rpb24gd2FzIHN1Y2Nlc3NmdWwKKyAqIHNhbXBsaW5nX3JhdGUgaXMg Z2l2ZW4gaW4gSHouIGRhdGFfbGVuIGlzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gZGF0YS4K ICAqLwotYm9vbCBhdWRpb19zaWduYWxfZGV0ZWN0KHN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25h bCwgaW50IGNoYW5uZWxzLAotCQkJIGludCBzYW1wbGluZ19yYXRlLCBzaG9ydCAqYnVmZmVyLCBp bnQgZnJhbWVzKQorYm9vbCBhdWRpb19zaWduYWxfZGV0ZWN0KHN0cnVjdCBhdWRpb19zaWduYWwg KnNpZ25hbCwgaW50IHNhbXBsaW5nX3JhdGUsCisJCQkgZG91YmxlICpkYXRhLCBzaXplX3QgZGF0 YV9sZW4pCiB7Ci0JZG91YmxlIGRhdGFbZnJhbWVzXTsKLQlpbnQgYW1wbGl0dWRlW2ZyYW1lcyAv IDJdOworCXNpemVfdCBhbXBsaXR1ZGVfbGVuID0gZGF0YV9sZW4gLyAyICsgMTsKKwlkb3VibGUg YW1wbGl0dWRlW2FtcGxpdHVkZV9sZW5dOwogCWJvb2wgZGV0ZWN0ZWRbc2lnbmFsLT5mcmVxc19j b3VudF07Ci0JaW50IHRocmVzaG9sZDsKLQlib29sIGFib3ZlOwotCWludCBlcnJvcjsKLQlpbnQg ZnJlcSA9IDA7Ci0JaW50IG1heDsKLQlpbnQgYywgaSwgajsKLQotCS8qIEFsbG93ZWQgZXJyb3Ig aW4gSHogZHVlIHRvIEZGVCBzdGVwLiAqLwotCWVycm9yID0gc2FtcGxpbmdfcmF0ZSAvIGZyYW1l czsKKwlpbnQgcmV0LCBlcHNpbG9uLCBmcmVxLCBtYXhfZnJlcTsKKwlkb3VibGUgbWF4LCB0aHJl c2hvbGQ7CisJc2l6ZV90IGksIGo7CisJYm9vbCBhYm92ZSwgc3VjY2VzczsKKworCS8qIEFsbG93 ZWQgZXJyb3IgaW4gSHogZHVlIHRvIEZGVCBzdGVwICovCisJZXBzaWxvbiA9IHNhbXBsaW5nX3Jh dGUgLyBkYXRhX2xlbjsKKwlpZ3RfZGVidWcoImFsbG93ZWQgZnJlcS4gZXJyb3I6ICVkIEh6XG4i LCBlcHNpbG9uKTsKKworCXJldCA9IGdzbF9mZnRfcmVhbF9yYWRpeDJfdHJhbnNmb3JtKGRhdGEs IDEsIGRhdGFfbGVuKTsKKwlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKKworCS8qIEZvciBpIDwgZGF0 YV9sZW4gLyAyLCB0aGUgcmVhbCBwYXJ0IG9mIHRoZSBpLXRoIHRlcm0gaXMgc3RvcmVkIGF0CisJ ICogZGF0YVtpXSBhbmQgaXRzIGltYWdpbmFyeSBwYXJ0IGlzIHN0b3JlZCBhdCBkYXRhW2RhdGFf bGVuIC0gaV0uCisJICogaSA9IDAgYW5kIGkgPSBkYXRhX2xlbiAvIDIgYXJlIHNwZWNpYWwgY2Fz ZXMsIHRoZXkgYXJlIHB1cmVseSByZWFsCisJICogc28gdGhlaXIgaW1hZ2luYXJ5IHBhcnQgaXNu J3Qgc3RvcmVkLgorCSAqCisJICogVGhlIGFtcGxpdHVkZSBpcyBlbmNvZGVkIGFzIHRoZSBtYWdu aXR1ZGUgb2YgdGhlIGNvbXBsZXggbnVtYmVyIGFuZAorCSAqIHRoZSBwaGFzZSBpcyBlbmNvZGVk IGFzIGl0cyBhbmdsZS4KKwkgKi8KKwltYXggPSAwOworCWFtcGxpdHVkZVswXSA9IGRhdGFbMF07 CisJZm9yIChpID0gMTsgaSA8IGFtcGxpdHVkZV9sZW4gLSAxOyBpKyspIHsKKwkJYW1wbGl0dWRl W2ldID0gaHlwb3QoZGF0YVtpXSwgZGF0YVtkYXRhX2xlbiAtIGldKTsKKwkJaWYgKGFtcGxpdHVk ZVtpXSA+IG1heCkKKwkJCW1heCA9IGFtcGxpdHVkZVtpXTsKKwl9CisJYW1wbGl0dWRlW2FtcGxp dHVkZV9sZW4gLSAxXSA9IGRhdGFbZGF0YV9sZW4gLyAyXTsKIAotCWZvciAoYyA9IDA7IGMgPCBj aGFubmVsczsgYysrKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBmcmFtZXM7IGkrKykKLQkJCWRhdGFb aV0gPSAoZG91YmxlKSBidWZmZXJbaSAqIGNoYW5uZWxzICsgY107CisJZm9yIChpID0gMDsgaSA8 IHNpZ25hbC0+ZnJlcXNfY291bnQ7IGkrKykKKwkJZGV0ZWN0ZWRbaV0gPSBmYWxzZTsKIAotCQln c2xfZmZ0X3JlYWxfcmFkaXgyX3RyYW5zZm9ybShkYXRhLCAxLCBmcmFtZXMpOworCS8qIFdlIHdh bnQgdG8gZGV0ZWN0IHBlYWtzIGFib3ZlIGEgZ2l2ZW4gdGhyZXNob2xkLiAqLworCXRocmVzaG9s ZCA9IG1heCAvIDI7CisJc3VjY2VzcyA9IHRydWU7CisJYWJvdmUgPSBmYWxzZTsKKwltYXggPSAw OworCW1heF9mcmVxID0gLTE7CisJZm9yIChpID0gMDsgaSA8IGFtcGxpdHVkZV9sZW47IGkrKykg eworCQlmcmVxID0gc2FtcGxpbmdfcmF0ZSAqIGkgLyBkYXRhX2xlbjsKIAotCQltYXggPSAwOwor CQlpZiAoYW1wbGl0dWRlW2ldID4gdGhyZXNob2xkKQorCQkJYWJvdmUgPSB0cnVlOwogCi0JCWZv ciAoaSA9IDA7IGkgPCBmcmFtZXMgLyAyOyBpKyspIHsKLQkJCWFtcGxpdHVkZVtpXSA9IGh5cG90 KGRhdGFbaV0sIGRhdGFbZnJhbWVzIC0gaV0pOwotCQkJaWYgKGFtcGxpdHVkZVtpXSA+IG1heCkK LQkJCQltYXggPSBhbXBsaXR1ZGVbaV07CisJCWlmICghYWJvdmUpIHsKKwkJCWNvbnRpbnVlOwog CQl9CiAKLQkJZm9yIChpID0gMDsgaSA8IHNpZ25hbC0+ZnJlcXNfY291bnQ7IGkrKykKLQkJCWRl dGVjdGVkW2ldID0gZmFsc2U7Ci0KLQkJdGhyZXNob2xkID0gbWF4IC8gMjsKLQkJYWJvdmUgPSBm YWxzZTsKLQkJbWF4ID0gMDsKLQotCQlmb3IgKGkgPSAwOyBpIDwgZnJhbWVzIC8gMjsgaSsrKSB7 Ci0JCQlpZiAoYW1wbGl0dWRlW2ldID4gdGhyZXNob2xkKQotCQkJCWFib3ZlID0gdHJ1ZTsKLQot CQkJaWYgKGFib3ZlKSB7Ci0JCQkJaWYgKGFtcGxpdHVkZVtpXSA8IHRocmVzaG9sZCkgewotCQkJ CQlhYm92ZSA9IGZhbHNlOwotCQkJCQltYXggPSAwOwotCi0JCQkJCWZvciAoaiA9IDA7IGogPCBz aWduYWwtPmZyZXFzX2NvdW50OyBqKyspIHsKLQkJCQkJCWlmIChzaWduYWwtPmZyZXFzW2pdLmZy ZXEgPgotCQkJCQkJICAgIGZyZXEgLSBlcnJvciAmJgotCQkJCQkJICAgIHNpZ25hbC0+ZnJlcXNb al0uZnJlcSA8Ci0JCQkJCQkgICAgZnJlcSArIGVycm9yKSB7Ci0JCQkJCQkJZGV0ZWN0ZWRbal0g PSB0cnVlOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfQotCQkJCQl9Ci0KLQkJCQkJLyogRGV0ZWN0 ZWQgZnJlcXVlbmN5IHdhcyBub3QgZ2VuZXJhdGVkLiAqLwotCQkJCQlpZiAoaiA9PSBzaWduYWwt PmZyZXFzX2NvdW50KSB7Ci0JCQkJCQlpZ3RfZGVidWcoIkRldGVjdGVkIGFkZGl0aW9uYWwgZnJl cXVlbmN5OiAlZFxuIiwKLQkJCQkJCQkgIGZyZXEpOwotCQkJCQkJcmV0dXJuIGZhbHNlOwotCQkJ CQl9CisJCS8qIElmIHdlIHdlcmUgYWJvdmUgdGhlIHRocmVzaG9sZCBhbmQgd2UncmUgbm90IGFu eW1vcmUsIGl0J3MKKwkJICogdGltZSB0byBkZWNpZGUgd2hldGhlciB0aGUgcGVhayBmcmVxdWVu Y3kgaXMgY29ycmVjdCBvcgorCQkgKiBpbnZhbGlkLiAqLworCQlpZiAoYW1wbGl0dWRlW2ldIDwg dGhyZXNob2xkKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgc2lnbmFsLT5mcmVxc19jb3VudDsgaisr KSB7CisJCQkJaWYgKHNpZ25hbC0+ZnJlcXNbal0uZnJlcSA+CisJCQkJICAgIG1heF9mcmVxIC0g ZXBzaWxvbiAmJgorCQkJCSAgICBzaWduYWwtPmZyZXFzW2pdLmZyZXEgPAorCQkJCSAgICBtYXhf ZnJlcSArIGVwc2lsb24pIHsKKwkJCQkJZGV0ZWN0ZWRbal0gPSB0cnVlOworCQkJCQlpZ3RfZGVi dWcoIkZyZXF1ZW5jeSAlZCBkZXRlY3RlZFxuIiwKKwkJCQkJCSAgbWF4X2ZyZXEpOworCQkJCQli cmVhazsKIAkJCQl9CisJCQl9CiAKLQkJCQlpZiAoYW1wbGl0dWRlW2ldID4gbWF4KSB7Ci0JCQkJ CW1heCA9IGFtcGxpdHVkZVtpXTsKLQkJCQkJZnJlcSA9IHNhbXBsaW5nX3JhdGUgKiBpIC8gZnJh bWVzOwotCQkJCX0KKwkJCS8qIFdlIGhhdmVuJ3QgZ2VuZXJhdGVkIHRoaXMgZnJlcXVlbmN5LCBi dXQgd2UgZGV0ZWN0ZWQKKwkJCSAqIGl0LiAqLworCQkJaWYgKGogPT0gc2lnbmFsLT5mcmVxc19j b3VudCkgeworCQkJCWlndF9kZWJ1ZygiRGV0ZWN0ZWQgYWRkaXRpb25hbCBmcmVxdWVuY3k6ICVk XG4iLAorCQkJCQkgIG1heF9mcmVxKTsKKwkJCQlzdWNjZXNzID0gZmFsc2U7CiAJCQl9CisKKwkJ CWFib3ZlID0gZmFsc2U7CisJCQltYXggPSAwOworCQkJbWF4X2ZyZXEgPSAtMTsKIAkJfQogCi0J CWZvciAoaSA9IDA7IGkgPCBzaWduYWwtPmZyZXFzX2NvdW50OyBpKyspIHsKLQkJCWlmICghZGV0 ZWN0ZWRbaV0pIHsKLQkJCQlpZ3RfZGVidWcoIk1pc3NpbmcgZnJlcXVlbmN5OiAlZFxuIiwKLQkJ CQkJICBzaWduYWwtPmZyZXFzW2ldLmZyZXEpOwotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KKwkJ aWYgKGFtcGxpdHVkZVtpXSA+IG1heCkgeworCQkJbWF4ID0gYW1wbGl0dWRlW2ldOworCQkJbWF4 X2ZyZXEgPSBmcmVxOworCQl9CisJfQorCisJLyogQ2hlY2sgdGhhdCBhbGwgZnJlcXVlbmNpZXMg d2UgZ2VuZXJhdGVkIGhhdmUgYmVlbiBkZXRlY3RlZC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2ln bmFsLT5mcmVxc19jb3VudDsgaSsrKSB7CisJCWlmICghZGV0ZWN0ZWRbaV0pIHsKKwkJCWlndF9k ZWJ1ZygiTWlzc2luZyBmcmVxdWVuY3k6ICVkXG4iLAorCQkJCSAgc2lnbmFsLT5mcmVxc1tpXS5m cmVxKTsKKwkJCXN1Y2Nlc3MgPSBmYWxzZTsKIAkJfQogCX0KIAotCXJldHVybiB0cnVlOworCXJl dHVybiBzdWNjZXNzOworfQorCisvKioKKyAqIEV4dHJhY3RzIGEgc2luZ2xlIGNoYW5uZWwgZnJv bSBhIG11bHRpLWNoYW5uZWwgUzMyX0xFIGlucHV0IGJ1ZmZlci4KKyAqLworc2l6ZV90IGF1ZGlv X2V4dHJhY3RfY2hhbm5lbF9zMzJfbGUoZG91YmxlICpkc3QsIHNpemVfdCBkc3RfY2FwLAorCQkJ CSAgICBpbnQzMl90ICpzcmMsIHNpemVfdCBzcmNfbGVuLAorCQkJCSAgICBpbnQgbl9jaGFubmVs cywgaW50IGNoYW5uZWwpCit7CisJc2l6ZV90IGRzdF9sZW4sIGk7CisKKwlpZ3RfYXNzZXJ0KGNo YW5uZWwgPCBuX2NoYW5uZWxzKTsKKwlpZ3RfYXNzZXJ0KHNyY19sZW4gJSBuX2NoYW5uZWxzID09 IDApOworCWRzdF9sZW4gPSBzcmNfbGVuIC8gbl9jaGFubmVsczsKKwlpZ3RfYXNzZXJ0KGRzdF9s ZW4gPD0gZHN0X2NhcCk7CisJZm9yIChpID0gMDsgaSA8IGRzdF9sZW47IGkrKykKKwkJZHN0W2ld ID0gKGRvdWJsZSkgc3JjW2kgKiBuX2NoYW5uZWxzICsgY2hhbm5lbF07CisKKwlyZXR1cm4gZHN0 X2xlbjsKK30KKworI2RlZmluZSBSSUZGX1RBRyAiUklGRiIKKyNkZWZpbmUgV0FWRV9UQUcgIldB VkUiCisjZGVmaW5lIEZNVF9UQUcgImZtdCAiCisjZGVmaW5lIERBVEFfVEFHICJkYXRhIgorCitz dGF0aWMgdm9pZAorYXBwZW5kX3RvX2J1ZmZlcihjaGFyICpkc3QsIHNpemVfdCAqaSwgY29uc3Qg dm9pZCAqc3JjLCBzaXplX3Qgc3JjX3NpemUpCit7CisJbWVtY3B5KCZkc3RbKmldLCBzcmMsIHNy Y19zaXplKTsKKwkqaSArPSBzcmNfc2l6ZTsKK30KKworLyoqCisgKiBDcmVhdGVzIGEgbmV3IFdB ViBmaWxlLiBzYW1wbGVfcmF0ZSBpcyBpbiBIei4gSWYgcGF0aCBpcyBub3QgTlVMTCwgaXQgd2ls bAorICogYmUgc2V0IHRvIHRoZSBuZXcgZmlsZSBwYXRoICh0aGUgY2FsbGVyIGlzIHJlc3BvbnNp YmxlIGZvciBmcmVlLWluZyBpdCkuCisgKgorICogQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9u LCB0aGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIHdyaXRlIFMzMl9MRSBQQ00gZGF0YQorICogdG8g dGhlIHJldHVybmVkIGZpbGUgZGVzY3JpcHRvci4KKyAqCisgKiBTZWUgaHR0cDovL3d3dy1tbXNw LmVjZS5tY2dpbGwuY2EvRG9jdW1lbnRzL0F1ZGlvRm9ybWF0cy9XQVZFL1dBVkUuaHRtbCBmb3IK KyAqIGEgV0FWIGZpbGUgZm9ybWF0IHNwZWNpZmljYXRpb24uCisgKi8KK2ludCBhdWRpb19jcmVh dGVfd2F2X2ZpbGVfczMyX2xlKGNvbnN0IGNoYXIgKnF1YWxpZmllciwgdWludDMyX3Qgc2FtcGxl X3JhdGUsCisJCQkJIHVpbnQxNl90IGNoYW5uZWxzLCBjaGFyICoqcGF0aCkKK3sKKwljaGFyIF9w YXRoW1BBVEhfTUFYXTsKKwljb25zdCBjaGFyICp0ZXN0X25hbWUsICpzdWJ0ZXN0X25hbWU7CisJ aW50IGZkOworCWNoYXIgaGVhZGVyWzQ0XTsKKwlzaXplX3QgaSA9IDA7CisJdWludDMyX3QgZmls ZV9zaXplLCBjaHVua19zaXplLCBieXRlX3JhdGU7CisJdWludDE2X3QgZm9ybWF0LCBibG9ja19h bGlnbiwgYml0c19wZXJfc2FtcGxlOworCisJdGVzdF9uYW1lID0gaWd0X3Rlc3RfbmFtZSgpOwor CXN1YnRlc3RfbmFtZSA9IGlndF9zdWJ0ZXN0X25hbWUoKTsKKworCWlndF9hc3NlcnQoaWd0X2Zy YW1lX2R1bXBfcGF0aCk7CisJc25wcmludGYoX3BhdGgsIHNpemVvZihfcGF0aCksICIlcy9hdWRp by0lcy0lcy0lcy53YXYiLAorCQkgaWd0X2ZyYW1lX2R1bXBfcGF0aCwgdGVzdF9uYW1lLCBzdWJ0 ZXN0X25hbWUsIHF1YWxpZmllcik7CisKKwlpZiAocGF0aCkKKwkJKnBhdGggPSBzdHJkdXAoX3Bh dGgpOworCisJaWd0X2RlYnVnKCJEdW1waW5nICVzIGF1ZGlvIHRvICVzXG4iLCBxdWFsaWZpZXIs IF9wYXRoKTsKKwlmZCA9IG9wZW4oX3BhdGgsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMp OworCWlmIChmZCA8IDApIHsKKwkJaWd0X3dhcm4oIm9wZW4gZmFpbGVkOiAlc1xuIiwgc3RyZXJy b3IoZXJybm8pKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIEZpbGUgaGVhZGVyICovCisJZmls ZV9zaXplID0gVUlOVDMyX01BWDsgLyogdW5rbm93biBmaWxlIHNpemUgKi8KKwlhcHBlbmRfdG9f YnVmZmVyKGhlYWRlciwgJmksIFJJRkZfVEFHLCBzdHJsZW4oUklGRl9UQUcpKTsKKwlhcHBlbmRf dG9fYnVmZmVyKGhlYWRlciwgJmksICZmaWxlX3NpemUsIHNpemVvZihmaWxlX3NpemUpKTsKKwlh cHBlbmRfdG9fYnVmZmVyKGhlYWRlciwgJmksIFdBVkVfVEFHLCBzdHJsZW4oV0FWRV9UQUcpKTsK KworCS8qIEZvcm1hdCBjaHVuayAqLworCWNodW5rX3NpemUgPSAxNjsKKwlmb3JtYXQgPSAxOyAv KiBQQ00gKi8KKwliaXRzX3Blcl9zYW1wbGUgPSAzMjsgLyogUzMyX0xFICovCisJYnl0ZV9yYXRl ID0gc2FtcGxlX3JhdGUgKiBjaGFubmVscyAqIGJpdHNfcGVyX3NhbXBsZSAvIDg7CisJYmxvY2tf YWxpZ24gPSBjaGFubmVscyAqIGJpdHNfcGVyX3NhbXBsZSAvIDg7CisJYXBwZW5kX3RvX2J1ZmZl cihoZWFkZXIsICZpLCBGTVRfVEFHLCBzdHJsZW4oRk1UX1RBRykpOworCWFwcGVuZF90b19idWZm ZXIoaGVhZGVyLCAmaSwgJmNodW5rX3NpemUsIHNpemVvZihjaHVua19zaXplKSk7CisJYXBwZW5k X3RvX2J1ZmZlcihoZWFkZXIsICZpLCAmZm9ybWF0LCBzaXplb2YoZm9ybWF0KSk7CisJYXBwZW5k X3RvX2J1ZmZlcihoZWFkZXIsICZpLCAmY2hhbm5lbHMsIHNpemVvZihjaGFubmVscykpOworCWFw cGVuZF90b19idWZmZXIoaGVhZGVyLCAmaSwgJnNhbXBsZV9yYXRlLCBzaXplb2Yoc2FtcGxlX3Jh dGUpKTsKKwlhcHBlbmRfdG9fYnVmZmVyKGhlYWRlciwgJmksICZieXRlX3JhdGUsIHNpemVvZihi eXRlX3JhdGUpKTsKKwlhcHBlbmRfdG9fYnVmZmVyKGhlYWRlciwgJmksICZibG9ja19hbGlnbiwg c2l6ZW9mKGJsb2NrX2FsaWduKSk7CisJYXBwZW5kX3RvX2J1ZmZlcihoZWFkZXIsICZpLCAmYml0 c19wZXJfc2FtcGxlLCBzaXplb2YoYml0c19wZXJfc2FtcGxlKSk7CisKKwkvKiBEYXRhIGNodW5r ICovCisJY2h1bmtfc2l6ZSA9IFVJTlQzMl9NQVg7IC8qIHVua25vd24gY2h1bmsgc2l6ZSAqLwor CWFwcGVuZF90b19idWZmZXIoaGVhZGVyLCAmaSwgREFUQV9UQUcsIHN0cmxlbihEQVRBX1RBRykp OworCWFwcGVuZF90b19idWZmZXIoaGVhZGVyLCAmaSwgJmNodW5rX3NpemUsIHNpemVvZihjaHVu a19zaXplKSk7CisKKwlpZ3RfYXNzZXJ0KGkgPT0gc2l6ZW9mKGhlYWRlcikpOworCisJaWYgKHdy aXRlKGZkLCBoZWFkZXIsIHNpemVvZihoZWFkZXIpKSAhPSBzaXplb2YoaGVhZGVyKSkgeworCQlp Z3Rfd2Fybigid3JpdGUgZmFpbGVkOiAlcyduIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJY2xvc2Uo ZmQpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIGZkOwogfQpkaWZmIC0tZ2l0IGEvbGli L2lndF9hdWRpby5oIGIvbGliL2lndF9hdWRpby5oCmluZGV4IGIzYjY1OGE0Li40YWE0M2U2OSAx MDA2NDQKLS0tIGEvbGliL2lndF9hdWRpby5oCisrKyBiL2xpYi9pZ3RfYXVkaW8uaApAQCAtMzAs NiArMzAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSA8c3RkYm9vbC5oPgor I2luY2x1ZGUgPHN0ZGludC5oPgogCiBzdHJ1Y3QgYXVkaW9fc2lnbmFsOwogCkBAIC0zNyw4ICsz OCwxMyBAQCBzdHJ1Y3QgYXVkaW9fc2lnbmFsICphdWRpb19zaWduYWxfaW5pdChpbnQgY2hhbm5l bHMsIGludCBzYW1wbGluZ19yYXRlKTsKIGludCBhdWRpb19zaWduYWxfYWRkX2ZyZXF1ZW5jeShz dHJ1Y3QgYXVkaW9fc2lnbmFsICpzaWduYWwsIGludCBmcmVxdWVuY3kpOwogdm9pZCBhdWRpb19z aWduYWxfc3ludGhlc2l6ZShzdHJ1Y3QgYXVkaW9fc2lnbmFsICpzaWduYWwpOwogdm9pZCBhdWRp b19zaWduYWxfY2xlYW4oc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsKTsKLXZvaWQgYXVkaW9f c2lnbmFsX2ZpbGwoc3RydWN0IGF1ZGlvX3NpZ25hbCAqc2lnbmFsLCBzaG9ydCAqYnVmZmVyLCBp bnQgZnJhbWVzKTsKLWJvb2wgYXVkaW9fc2lnbmFsX2RldGVjdChzdHJ1Y3QgYXVkaW9fc2lnbmFs ICpzaWduYWwsIGludCBjaGFubmVscywKLQkJCSBpbnQgc2FtcGxpbmdfcmF0ZSwgc2hvcnQgKmJ1 ZmZlciwgaW50IGZyYW1lcyk7Cit2b2lkIGF1ZGlvX3NpZ25hbF9maWxsKHN0cnVjdCBhdWRpb19z aWduYWwgKnNpZ25hbCwgaW50MTZfdCAqYnVmZmVyLCBpbnQgZnJhbWVzKTsKK2Jvb2wgYXVkaW9f c2lnbmFsX2RldGVjdChzdHJ1Y3QgYXVkaW9fc2lnbmFsICpzaWduYWwsIGludCBzYW1wbGluZ19y YXRlLAorCQkJIGRvdWJsZSAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuKTsKK3NpemVfdCBhdWRpb19l eHRyYWN0X2NoYW5uZWxfczMyX2xlKGRvdWJsZSAqZHN0LCBzaXplX3QgZHN0X2NhcCwKKwkJCQkg ICAgaW50MzJfdCAqc3JjLCBzaXplX3Qgc3JjX2xlbiwKKwkJCQkgICAgaW50IG5fY2hhbm5lbHMs IGludCBjaGFubmVsKTsKK2ludCBhdWRpb19jcmVhdGVfd2F2X2ZpbGVfczMyX2xlKGNvbnN0IGNo YXIgKnF1YWxpZmllciwgdWludDMyX3Qgc2FtcGxlX3JhdGUsCisJCQkJIHVpbnQxNl90IGNoYW5u ZWxzLCBjaGFyICoqcGF0aCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL2lndF9jaGFtZWxp dW0uYyBiL2xpYi9pZ3RfY2hhbWVsaXVtLmMKaW5kZXggMDJjYzliMmMuLjdjOTAzMGQxIDEwMDY0 NAotLS0gYS9saWIvaWd0X2NoYW1lbGl1bS5jCisrKyBiL2xpYi9pZ3RfY2hhbWVsaXVtLmMKQEAg LTIxOCw2ICsyMTgsMTIgQEAgdm9pZCBjaGFtZWxpdW1fZGVzdHJveV9mcmFtZV9kdW1wKHN0cnVj dCBjaGFtZWxpdW1fZnJhbWVfZHVtcCAqZHVtcCkKIAlmcmVlKGR1bXApOwogfQogCit2b2lkIGNo YW1lbGl1bV9kZXN0cm95X2F1ZGlvX2ZpbGUoc3RydWN0IGNoYW1lbGl1bV9hdWRpb19maWxlICph dWRpb19maWxlKQoreworCWZyZWUoYXVkaW9fZmlsZS0+cGF0aCk7CisJZnJlZShhdWRpb19maWxl KTsKK30KKwogc3RydWN0IGZzbV9tb25pdG9yX2FyZ3MgewogCXN0cnVjdCBjaGFtZWxpdW0gKmNo YW1lbGl1bTsKIAlzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQ7CkBAIC05MjQsNiArOTMwLDEw MSBAQCBpbnQgY2hhbWVsaXVtX2dldF9jYXB0dXJlZF9mcmFtZV9jb3VudChzdHJ1Y3QgY2hhbWVs aXVtICpjaGFtZWxpdW0pCiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiBjaGFtZWxpdW1fc3Rh cnRfY2FwdHVyaW5nX2F1ZGlvOgorICogQGNoYW1lbGl1bTogdGhlIENoYW1lbGl1bSBpbnN0YW5j ZQorICogQHBvcnQ6IHRoZSBwb3J0IHRvIGNhcHR1cmUgYXVkaW8gZnJvbSAoaXQgbXVzdCBzdXBw b3J0IGF1ZGlvKQorICogQHNhdmVfdG9fZmlsZTogd2hldGhlciB0aGUgY2FwdHVyZWQgYXVkaW8g ZGF0YSBzaG91bGQgYmUgc2F2ZWQgdG8gYSBmaWxlIG9uCisgKiB0aGUgQ2hhbWVsaXVtIGRldmlj ZQorICoKKyAqIFN0YXJ0cyBjYXB0dXJpbmcgYXVkaW8gZnJvbSBhIENoYW1lbGl1bSBwb3J0LiBU byBzdG9wIHRoZSBjYXB0dXJlLCB1c2UKKyAqICNjaGFtZWxpdW1fc3RvcF9jYXB0dXJpbmdfYXVk aW8uIFRvIHJldHJpZXZlIHRoZSBhdWRpbyBkYXRhLCBlaXRoZXIgdXNlIHRoZQorICogc3RyZWFt IHNlcnZlciBvciBlbmFibGUgQHNhdmVfdG9fZmlsZSAodGhlIGxhdHRlciBpcyBtYWlubHkgdXNl ZnVsIGZvcgorICogZGVidWdnaW5nIHB1cnBvc2VzKS4KKyAqCisgKiBJdCBpc24ndCBwb3NzaWJs ZSB0byBjYXB0dXJlIGF1ZGlvIGZyb20gbXVsdGlwbGUgcG9ydHMgYXQgdGhlIHNhbWUgdGltZS4K KyAqLwordm9pZCBjaGFtZWxpdW1fc3RhcnRfY2FwdHVyaW5nX2F1ZGlvKHN0cnVjdCBjaGFtZWxp dW0gKmNoYW1lbGl1bSwKKwkJCQkgICAgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0LAorCQkJ CSAgICBib29sIHNhdmVfdG9fZmlsZSkKK3sKKwl4bWxycGNfdmFsdWUgKnJlczsKKworCXJlcyA9 IGNoYW1lbGl1bV9ycGMoY2hhbWVsaXVtLCBwb3J0LCAiU3RhcnRDYXB0dXJpbmdBdWRpbyIsICIo aWIpIiwKKwkJCSAgICBwb3J0LT5pZCwgc2F2ZV90b19maWxlKTsKKwl4bWxycGNfREVDUkVGKHJl cyk7Cit9CisKK3N0YXRpYyB2b2lkIGF1ZGlvX2Zvcm1hdF9mcm9tX3htbChzdHJ1Y3QgY2hhbWVs aXVtICpjaGFtZWxpdW0sCisJCQkJICB4bWxycGNfdmFsdWUgKnJlcywgaW50ICpyYXRlLCBpbnQg KmNoYW5uZWxzKQoreworCXhtbHJwY192YWx1ZSAqcmVzX3R5cGUsICpyZXNfcmF0ZSwgKnJlc19z YW1wbGVfZm9ybWF0LCAqcmVzX2NoYW5uZWw7CisJY2hhciAqdHlwZSwgKnNhbXBsZV9mb3JtYXQ7 CisKKwl4bWxycGNfc3RydWN0X2ZpbmRfdmFsdWUoJmNoYW1lbGl1bS0+ZW52LCByZXMsICJmaWxl X3R5cGUiLCAmcmVzX3R5cGUpOworCXhtbHJwY19zdHJ1Y3RfZmluZF92YWx1ZSgmY2hhbWVsaXVt LT5lbnYsIHJlcywgInJhdGUiLCAmcmVzX3JhdGUpOworCXhtbHJwY19zdHJ1Y3RfZmluZF92YWx1 ZSgmY2hhbWVsaXVtLT5lbnYsIHJlcywgInNhbXBsZV9mb3JtYXQiLCAmcmVzX3NhbXBsZV9mb3Jt YXQpOworCXhtbHJwY19zdHJ1Y3RfZmluZF92YWx1ZSgmY2hhbWVsaXVtLT5lbnYsIHJlcywgImNo YW5uZWwiLCAmcmVzX2NoYW5uZWwpOworCisJeG1scnBjX3JlYWRfc3RyaW5nKCZjaGFtZWxpdW0t PmVudiwgcmVzX3R5cGUsIChjb25zdCBjaGFyICoqKSAmdHlwZSk7CisJaWd0X2Fzc2VydChzdHJj bXAodHlwZSwgInJhdyIpID09IDApOworCWZyZWUodHlwZSk7CisKKwl4bWxycGNfcmVhZF9zdHJp bmcoJmNoYW1lbGl1bS0+ZW52LCByZXNfc2FtcGxlX2Zvcm1hdCwgKGNvbnN0IGNoYXIgKiopICZz YW1wbGVfZm9ybWF0KTsKKwlpZ3RfYXNzZXJ0KHN0cmNtcChzYW1wbGVfZm9ybWF0LCAiUzMyX0xF IikgPT0gMCk7CisJZnJlZShzYW1wbGVfZm9ybWF0KTsKKworCXhtbHJwY19yZWFkX2ludCgmY2hh bWVsaXVtLT5lbnYsIHJlc19yYXRlLCByYXRlKTsKKwl4bWxycGNfcmVhZF9pbnQoJmNoYW1lbGl1 bS0+ZW52LCByZXNfY2hhbm5lbCwgY2hhbm5lbHMpOworCisJeG1scnBjX0RFQ1JFRihyZXNfY2hh bm5lbCk7CisJeG1scnBjX0RFQ1JFRihyZXNfc2FtcGxlX2Zvcm1hdCk7CisJeG1scnBjX0RFQ1JF RihyZXNfcmF0ZSk7CisJeG1scnBjX0RFQ1JFRihyZXNfdHlwZSk7Cit9CisKKy8qKgorICogY2hh bWVsaXVtX3N0b3BfY2FwdHVyaW5nX2F1ZGlvOgorICogQGNoYW1lbGl1bTogdGhlIENoYW1lbGl1 bSBpbnN0YW5jZQorICogQHBvcnQ6IHRoZSBwb3J0IGZyb20gd2hpY2ggYXVkaW8gaXMgYmVpbmcg Y2FwdHVyZWQKKyAqCisgKiBTdG9wcyBjYXB0dXJpbmcgYXVkaW8gZnJvbSBhIENoYW1lbGl1bSBw b3J0LiBJZgorICogI2NoYW1lbGl1bV9zdGFydF9jYXB0dXJpbmdfYXVkaW8gaGFzIGJlZW4gY2Fs bGVkIHdpdGggQHNhdmVfdG9fZmlsZSBlbmFibGVkLAorICogdGhpcyBmdW5jdGlvbiB3aWxsIHJl dHVybiBhICNjaGFtZWxpdW1fYXVkaW9fZmlsZSBzdHJ1Y3QgY29udGFpbmluZyBkZXRhaWxzCisg KiBhYm91dCB0aGUgYXVkaW8gZmlsZS4gT25jZSB0aGUgY2FsbGVyIGlzIGRvbmUgd2l0aCB0aGUg c3RydWN0LCB0aGV5IHNob3VsZAorICogcmVsZWFzZSBpdCB3aXRoICNjaGFtZWxpdW1fZGVzdHJv eV9hdWRpb19maWxlLgorICovCitzdHJ1Y3QgY2hhbWVsaXVtX2F1ZGlvX2ZpbGUgKmNoYW1lbGl1 bV9zdG9wX2NhcHR1cmluZ19hdWRpbyhzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW0sCisJCQkJ CQkJICAgIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCkKK3sKKwl4bWxycGNfdmFsdWUgKnJl cywgKnJlc19wYXRoLCAqcmVzX3Byb3BzOworCXN0cnVjdCBjaGFtZWxpdW1fYXVkaW9fZmlsZSAq ZmlsZSA9IE5VTEw7CisJY2hhciAqcGF0aDsKKworCXJlcyA9IGNoYW1lbGl1bV9ycGMoY2hhbWVs aXVtLCBOVUxMLCAiU3RvcENhcHR1cmluZ0F1ZGlvIiwgIihpKSIsCisJCQkgICAgcG9ydC0+aWQp OworCXhtbHJwY19hcnJheV9yZWFkX2l0ZW0oJmNoYW1lbGl1bS0+ZW52LCByZXMsIDAsICZyZXNf cGF0aCk7CisJeG1scnBjX2FycmF5X3JlYWRfaXRlbSgmY2hhbWVsaXVtLT5lbnYsIHJlcywgMSwg JnJlc19wcm9wcyk7CisKKwl4bWxycGNfcmVhZF9zdHJpbmcoJmNoYW1lbGl1bS0+ZW52LCByZXNf cGF0aCwgKGNvbnN0IGNoYXIgKiopICZwYXRoKTsKKworCWlmIChzdHJsZW4ocGF0aCkgPiAwKSB7 CisJCWZpbGUgPSBjYWxsb2MoMSwgc2l6ZW9mKCpmaWxlKSk7CisJCWZpbGUtPnBhdGggPSBwYXRo OworCisJCWF1ZGlvX2Zvcm1hdF9mcm9tX3htbChjaGFtZWxpdW0sIHJlc19wcm9wcywKKwkJCQkg ICAgICAmZmlsZS0+cmF0ZSwgJmZpbGUtPmNoYW5uZWxzKTsKKwl9IGVsc2UgeworCQlmcmVlKHBh dGgpOworCX0KKworCXhtbHJwY19ERUNSRUYocmVzX3Byb3BzKTsKKwl4bWxycGNfREVDUkVGKHJl c19wYXRoKTsKKwl4bWxycGNfREVDUkVGKHJlcyk7CisKKwlyZXR1cm4gZmlsZTsKK30KKwogc3Rh dGljIHBpeG1hbl9pbWFnZV90ICpjb252ZXJ0X2ZyYW1lX2Zvcm1hdChwaXhtYW5faW1hZ2VfdCAq c3JjLAogCQkJCQkgICAgaW50IGZvcm1hdCkKIHsKZGlmZiAtLWdpdCBhL2xpYi9pZ3RfY2hhbWVs aXVtLmggYi9saWIvaWd0X2NoYW1lbGl1bS5oCmluZGV4IDIzM2VhZDg1Li4wNDdmOGM1ZCAxMDA2 NDQKLS0tIGEvbGliL2lndF9jaGFtZWxpdW0uaAorKysgYi9saWIvaWd0X2NoYW1lbGl1bS5oCkBA IC01Myw2ICs1MywxMiBAQCBlbnVtIGNoYW1lbGl1bV9jaGVjayB7CiAJQ0hBTUVMSVVNX0NIRUNL X0NSQywKIH07CiAKK3N0cnVjdCBjaGFtZWxpdW1fYXVkaW9fZmlsZSB7CisJY2hhciAqcGF0aDsK KwlpbnQgcmF0ZTsgLyogSHogKi8KKwlpbnQgY2hhbm5lbHM7Cit9OworCiBzdHJ1Y3QgY2hhbWVs aXVtICpjaGFtZWxpdW1faW5pdChpbnQgZHJtX2ZkKTsKIHZvaWQgY2hhbWVsaXVtX2RlaW5pdChz dHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW0pOwogdm9pZCBjaGFtZWxpdW1fcmVzZXQoc3RydWN0 IGNoYW1lbGl1bSAqY2hhbWVsaXVtKTsKQEAgLTEwMCw2ICsxMDYsMTAgQEAgdm9pZCBjaGFtZWxp dW1fc3RhcnRfY2FwdHVyZShzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxpdW0sCiB2b2lkIGNoYW1l bGl1bV9zdG9wX2NhcHR1cmUoc3RydWN0IGNoYW1lbGl1bSAqY2hhbWVsaXVtLCBpbnQgZnJhbWVf Y291bnQpOwogdm9pZCBjaGFtZWxpdW1fY2FwdHVyZShzdHJ1Y3QgY2hhbWVsaXVtICpjaGFtZWxp dW0sIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCwKIAkJICAgICAgIGludCB4LCBpbnQgeSwg aW50IHcsIGludCBoLCBpbnQgZnJhbWVfY291bnQpOwordm9pZCBjaGFtZWxpdW1fc3RhcnRfY2Fw dHVyaW5nX2F1ZGlvKHN0cnVjdCBjaGFtZWxpdW0gKmNoYW1lbGl1bSwKKwkJCQkgICAgc3RydWN0 IGNoYW1lbGl1bV9wb3J0ICpwb3J0LCBib29sIHNhdmVfdG9fZmlsZSk7CitzdHJ1Y3QgY2hhbWVs aXVtX2F1ZGlvX2ZpbGUgKmNoYW1lbGl1bV9zdG9wX2NhcHR1cmluZ19hdWRpbyhzdHJ1Y3QgY2hh bWVsaXVtICpjaGFtZWxpdW0sCisJCQkJCQkJICAgIHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9y dCk7CiBpZ3RfY3JjX3QgKmNoYW1lbGl1bV9yZWFkX2NhcHR1cmVkX2NyY3Moc3RydWN0IGNoYW1l bGl1bSAqY2hhbWVsaXVtLAogCQkJCQlpbnQgKmZyYW1lX2NvdW50KTsKIHN0cnVjdCBjaGFtZWxp dW1fZnJhbWVfZHVtcCAqY2hhbWVsaXVtX3JlYWRfY2FwdHVyZWRfZnJhbWUoc3RydWN0IGNoYW1l bGl1bSAqY2hhbWVsaXVtLApAQCAtMTMxLDUgKzE0MSw2IEBAIHZvaWQgY2hhbWVsaXVtX2Fzc2Vy dF9mcmFtZV9tYXRjaF9vcl9kdW1wKHN0cnVjdCBjaGFtZWxpdW0gKmNoYW1lbGl1bSwKIHZvaWQg Y2hhbWVsaXVtX2Nyb3BfYW5hbG9nX2ZyYW1lKHN0cnVjdCBjaGFtZWxpdW1fZnJhbWVfZHVtcCAq ZHVtcCwgaW50IHdpZHRoLAogCQkJCSBpbnQgaGVpZ2h0KTsKIHZvaWQgY2hhbWVsaXVtX2Rlc3Ry b3lfZnJhbWVfZHVtcChzdHJ1Y3QgY2hhbWVsaXVtX2ZyYW1lX2R1bXAgKmR1bXApOwordm9pZCBj aGFtZWxpdW1fZGVzdHJveV9hdWRpb19maWxlKHN0cnVjdCBjaGFtZWxpdW1fYXVkaW9fZmlsZSAq YXVkaW9fZmlsZSk7CiAKICNlbmRpZiAvKiBJR1RfQ0hBTUVMSVVNX0ggKi8KZGlmZiAtLWdpdCBh L2xpYi9pZ3RfY2hhbWVsaXVtX3N0cmVhbS5jIGIvbGliL2lndF9jaGFtZWxpdW1fc3RyZWFtLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjc2YmRlZWJjCi0tLSAvZGV2L251 bGwKKysrIGIvbGliL2lndF9jaGFtZWxpdW1fc3RyZWFtLmMKQEAgLTAsMCArMSw1NDkgQEAKKy8q CisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM CisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg REVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBTaW1vbiBTZXIg PHNpbW9uLnNlckBpbnRlbC5jb20+CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j bHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxuZXRkYi5o PgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxz eXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKKyNpbmNsdWRlICJpZ3RfY2hh bWVsaXVtX3N0cmVhbS5oIgorI2luY2x1ZGUgImlndF9jb3JlLmgiCisjaW5jbHVkZSAiaWd0X3Jj LmgiCisKKyNkZWZpbmUgU1RSRUFNX1BPUlQgOTk5NAorI2RlZmluZSBTVFJFQU1fVkVSU0lPTl9N QUpPUiAxCisjZGVmaW5lIFNUUkVBTV9WRVJTSU9OX01JTk9SIDAKKworZW51bSBzdHJlYW1fZXJy b3IgeworCVNUUkVBTV9FUlJPUl9OT05FID0gMCwKKwlTVFJFQU1fRVJST1JfQ09NTUFORCA9IDEs CisJU1RSRUFNX0VSUk9SX0FSR1VNRU5UID0gMiwKKwlTVFJFQU1fRVJST1JfRVhJU1RTID0gMywK KwlTVFJFQU1fRVJST1JfVklERU9fTUVNX09WRVJGTE9XX1NUT1AgPSA0LAorCVNUUkVBTV9FUlJP Ul9WSURFT19NRU1fT1ZFUkZMT1dfRFJPUCA9IDUsCisJU1RSRUFNX0VSUk9SX0FVRElPX01FTV9P VkVSRkxPV19TVE9QID0gNiwKKwlTVFJFQU1fRVJST1JfQVVESU9fTUVNX09WRVJGTE9XX0RST1Ag PSA3LAorCVNUUkVBTV9FUlJPUl9OT19NRU0gPSA4LAorfTsKKworZW51bSBzdHJlYW1fbWVzc2Fn ZV9raW5kIHsKKwlTVFJFQU1fTUVTU0FHRV9SRVFVRVNUID0gMCwKKwlTVFJFQU1fTUVTU0FHRV9S RVNQT05TRSA9IDEsCisJU1RSRUFNX01FU1NBR0VfREFUQSA9IDIsCit9OworCitlbnVtIHN0cmVh bV9tZXNzYWdlX3R5cGUgeworCVNUUkVBTV9NRVNTQUdFX1JFU0VUID0gMCwKKwlTVFJFQU1fTUVT U0FHRV9HRVRfVkVSU0lPTiA9IDEsCisJU1RSRUFNX01FU1NBR0VfVklERU9fU1RSRUFNID0gMiwK KwlTVFJFQU1fTUVTU0FHRV9TSFJJTktfVklERU8gPSAzLAorCVNUUkVBTV9NRVNTQUdFX1ZJREVP X0ZSQU1FID0gNCwKKwlTVFJFQU1fTUVTU0FHRV9EVU1QX1JFQUxUSU1FX1ZJREVPID0gNSwKKwlT VFJFQU1fTUVTU0FHRV9TVE9QX0RVTVBfVklERU8gPSA2LAorCVNUUkVBTV9NRVNTQUdFX0RVTVBf UkVBTFRJTUVfQVVESU8gPSA3LAorCVNUUkVBTV9NRVNTQUdFX1NUT1BfRFVNUF9BVURJTyA9IDgs Cit9OworCitzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSB7CisJY2hhciAqaG9zdDsKKwl1bnNpZ25l ZCBpbnQgcG9ydDsKKworCWludCBmZDsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpzdHJlYW1f ZXJyb3Jfc3RyKGVudW0gc3RyZWFtX2Vycm9yIGVycikKK3sKKwlzd2l0Y2ggKGVycikgeworCWNh c2UgU1RSRUFNX0VSUk9SX05PTkU6CisJCXJldHVybiAibm8gZXJyb3IiOworCWNhc2UgU1RSRUFN X0VSUk9SX0NPTU1BTkQ6CisJCXJldHVybiAiaW52YWxpZCBjb21tYW5kIjsKKwljYXNlIFNUUkVB TV9FUlJPUl9BUkdVTUVOVDoKKwkJcmV0dXJuICJpbnZhbGlkIGFyZ3VtZW50cyI7CisJY2FzZSBT VFJFQU1fRVJST1JfRVhJU1RTOgorCQlyZXR1cm4gImR1bXAgYWxyZWFkeSBzdGFydGVkIjsKKwlj YXNlIFNUUkVBTV9FUlJPUl9WSURFT19NRU1fT1ZFUkZMT1dfU1RPUDoKKwkJcmV0dXJuICJ2aWRl byBkdW1wIHN0b3BwZWQgYWZ0ZXIgb3ZlcmZsb3ciOworCWNhc2UgU1RSRUFNX0VSUk9SX1ZJREVP X01FTV9PVkVSRkxPV19EUk9QOgorCQlyZXR1cm4gInZpZGVvIGZyYW1lIGRyb3BwZWQgYWZ0ZXIg b3ZlcmZsb3ciOworCWNhc2UgU1RSRUFNX0VSUk9SX0FVRElPX01FTV9PVkVSRkxPV19TVE9QOgor CQlyZXR1cm4gImF1ZGlvIGR1bXAgc3RvcHByZWQgYWZ0ZXIgb3ZlcmZsb3ciOworCWNhc2UgU1RS RUFNX0VSUk9SX0FVRElPX01FTV9PVkVSRkxPV19EUk9QOgorCQlyZXR1cm4gImF1ZGlvIHBhZ2Ug ZHJvcHBlZCBhZnRlciBvdmVyZmxvdyI7CisJY2FzZSBTVFJFQU1fRVJST1JfTk9fTUVNOgorCQly ZXR1cm4gIm91dCBvZiBtZW1vcnkiOworCX0KKwlyZXR1cm4gInVua25vd24gZXJyb3IiOworfQor CisvKioKKyAqIFRoZSBDaGFtZWxpdW0gVVJMIGlzIHNwZWNpZmllZCBpbiB0aGUgY29uZmlndXJh dGlvbiBmaWxlLiBXZSBuZWVkIHRvIGV4dHJhY3QKKyAqIHRoZSBob3N0IHRvIGNvbm5lY3QgdG8g dGhlIHN0cmVhbSBzZXJ2ZXIuCisgKi8KK3N0YXRpYyBjaGFyICpwYXJzZV91cmxfaG9zdChjb25z dCBjaGFyICp1cmwpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgcHJlZml4W10gPSAiaHR0cDovLyI7 CisJY2hhciAqY29sb247CisKKwlpZiAoc3Ryc3RyKHVybCwgcHJlZml4KSAhPSB1cmwpCisJCXJl dHVybiBOVUxMOworCXVybCArPSBzdHJsZW4ocHJlZml4KTsKKworCWNvbG9uID0gc3RyY2hyKHVy bCwgJzonKTsKKwlpZiAoIWNvbG9uKQorCQlyZXR1cm4gTlVMTDsKKwkKKwlyZXR1cm4gc3RybmR1 cCh1cmwsIGNvbG9uIC0gdXJsKTsKK30KKworc3RhdGljIGJvb2wgY2hhbWVsaXVtX3N0cmVhbV9y ZWFkX2NvbmZpZyhzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqY2xpZW50KQoreworCUdFcnJvciAq ZXJyb3IgPSBOVUxMOworCWdjaGFyICpjaGFtZWxpdW1fdXJsOworCisJaWYgKCFpZ3Rfa2V5X2Zp bGUpIHsKKwkJaWd0X3dhcm4oIk5vIGNvbmZpZ3VyYXRpb24gZmlsZSBhdmFpbGFibGUgZm9yIGNo YW1lbGl1bVxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwljaGFtZWxpdW1fdXJsID0gZ19r ZXlfZmlsZV9nZXRfc3RyaW5nKGlndF9rZXlfZmlsZSwgIkNoYW1lbGl1bSIsICJVUkwiLAorCQkJ CQkgICAgICAmZXJyb3IpOworCWlmICghY2hhbWVsaXVtX3VybCkgeworCQlpZ3Rfd2FybigiQ291 bGRuJ3QgcmVhZCBDaGFtZWxpdW0gVVJMIGZyb20gY29uZmlnIGZpbGU6ICVzXG4iLAorCQkJIGVy cm9yLT5tZXNzYWdlKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWNsaWVudC0+aG9zdCA9IHBh cnNlX3VybF9ob3N0KGNoYW1lbGl1bV91cmwpOworCWlmICghY2xpZW50LT5ob3N0KSB7CisJCWln dF93YXJuKCJJbnZhbGlkIENoYW1lbGl1bSBVUkwgaW4gY29uZmlnIGZpbGU6ICVzXG4iLAorCQkJ IGNoYW1lbGl1bV91cmwpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCWNsaWVudC0+cG9ydCA9IFNU UkVBTV9QT1JUOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNoYW1lbGl1bV9z dHJlYW1fY29ubmVjdChzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqY2xpZW50KQoreworCWludCBy ZXQ7CisJY2hhciBwb3J0X3N0clsxNl07CisJc3RydWN0IGFkZHJpbmZvIGhpbnRzID0ge307CisJ c3RydWN0IGFkZHJpbmZvICpyZXN1bHRzLCAqYWk7CisJc3RydWN0IHRpbWV2YWwgdHYgPSB7fTsK KworCXNucHJpbnRmKHBvcnRfc3RyLCBzaXplb2YocG9ydF9zdHIpLCAiJXUiLCBjbGllbnQtPnBv cnQpOworCisJaGludHMuYWlfZmFtaWx5ID0gQUZfVU5TUEVDOworCWhpbnRzLmFpX3NvY2t0eXBl ID0gU09DS19TVFJFQU07CisJcmV0ID0gZ2V0YWRkcmluZm8oY2xpZW50LT5ob3N0LCBwb3J0X3N0 ciwgJmhpbnRzLCAmcmVzdWx0cyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWlndF93YXJuKCJnZXRh ZGRyaW5mbyBmYWlsZWQ6ICVzXG4iLCBnYWlfc3RyZXJyb3IocmV0KSk7CisJCXJldHVybiBmYWxz ZTsKKwl9CisKKwljbGllbnQtPmZkID0gLTE7CisJZm9yIChhaSA9IHJlc3VsdHM7IGFpICE9IE5V TEw7IGFpID0gYWktPmFpX25leHQpIHsKKwkJY2xpZW50LT5mZCA9IHNvY2tldChhaS0+YWlfZmFt aWx5LCBhaS0+YWlfc29ja3R5cGUsCisJCQkJICAgIGFpLT5haV9wcm90b2NvbCk7CisJCWlmIChj bGllbnQtPmZkID09IC0xKQorCQkJY29udGludWU7CisKKwkJaWYgKGNvbm5lY3QoY2xpZW50LT5m ZCwgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKSA9PSAtMSkgeworCQkJY2xvc2UoY2xpZW50 LT5mZCk7CisJCQljbGllbnQtPmZkID0gLTE7CisJCQljb250aW51ZTsKKwkJfQorCisJCWJyZWFr OworCX0KKworCWZyZWVhZGRyaW5mbyhyZXN1bHRzKTsKKworCWlmIChjbGllbnQtPmZkIDwgMCkg eworCQlpZ3Rfd2FybigiRmFpbGVkIHRvIGNvbm5lY3QgdG8gQ2hhbWVsaXVtIHN0cmVhbSBzZXJ2 ZXJcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogU2V0IGEgcmVhZCBhbmQgd3JpdGUg dGltZW91dCBvZiA1IHNlY29uZHMuICovCisJdHYudHZfc2VjID0gNTsKKwlzZXRzb2Nrb3B0KGNs aWVudC0+ZmQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCAmdHYsIHNpemVvZih0dikpOworCXNl dHNvY2tvcHQoY2xpZW50LT5mZCwgU09MX1NPQ0tFVCwgU09fU05EVElNRU8sICZ0diwgc2l6ZW9m KHR2KSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgcmVhZF93aG9sZShpbnQg ZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pCit7CisJc3NpemVfdCByZXQ7CisJc2l6ZV90 IG4gPSAwOworCWNoYXIgKnB0cjsKKworCXdoaWxlIChuIDwgYnVmX2xlbikgeworCQlwdHIgPSAo Y2hhciAqKSBidWYgKyBuOworCQlyZXQgPSByZWFkKGZkLCBwdHIsIGJ1Zl9sZW4gLSBuKTsKKwkJ aWYgKHJldCA8IDApIHsKKwkJCWlndF93YXJuKCJyZWFkIGZhaWxlZDogJXNcbiIsIHN0cmVycm9y KGVycm5vKSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0gZWxzZSBpZiAocmV0ID09IDApIHsKKwkJ CWlndF93YXJuKCJzaG9ydCByZWFkXG4iKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQluICs9 IHJldDsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgd3JpdGVfd2hvbGUo aW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBidWZfbGVuKQoreworCXNzaXplX3QgcmV0OworCXNp emVfdCBuID0gMDsKKwljaGFyICpwdHI7CisKKwl3aGlsZSAobiA8IGJ1Zl9sZW4pIHsKKwkJcHRy ID0gKGNoYXIgKikgYnVmICsgbjsKKwkJcmV0ID0gd3JpdGUoZmQsIHB0ciwgYnVmX2xlbiAtIG4p OworCQlpZiAocmV0IDwgMCkgeworCQkJaWd0X3dhcm4oIndyaXRlIGZhaWxlZDogJXNcbiIsIHN0 cmVycm9yKGVycm5vKSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0gZWxzZSBpZiAocmV0ID09IDAp IHsKKwkJCWlndF93YXJuKCJzaG9ydCB3cml0ZVxuIik7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0K KwkJbiArPSByZXQ7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHJlYWRf YW5kX2Rpc2NhcmQoaW50IGZkLCBzaXplX3QgbGVuKQoreworCWNoYXIgYnVmWzEwMjRdOworCXNp emVfdCBuOworCisJd2hpbGUgKGxlbiA+IDApIHsKKwkJbiA9IGxlbjsKKwkJaWYgKG4gPiBzaXpl b2YoYnVmKSkKKwkJCW4gPSBzaXplb2YoYnVmKTsKKworCQlpZiAoIXJlYWRfd2hvbGUoZmQsIGJ1 ZiwgbikpCisJCQlyZXR1cm4gZmFsc2U7CisKKwkJbGVuIC09IG47CisJfQorCisJcmV0dXJuIHRy dWU7Cit9CisKKy8qKiBSZWFkIGEgbWVzc2FnZSBoZWFkZXIgZnJvbSB0aGUgc29ja2V0LgorICoK KyAqIFRoZSBoZWFkZXIgaXMgbGFpZCBvdXQgYXMgZm9sbG93czoKKyAqIC0gdTE2OiBtZXNzYWdl IHR5cGUKKyAqIC0gdTE2OiBlcnJvciBjb2RlCisgKiAtIHUzMjogbWVzc2FnZSBsZW5ndGgKKyAq Lworc3RhdGljIGJvb2wgY2hhbWVsaXVtX3N0cmVhbV9yZWFkX2hlYWRlcihzdHJ1Y3QgY2hhbWVs aXVtX3N0cmVhbSAqY2xpZW50LAorCQkJCQkgZW51bSBzdHJlYW1fbWVzc2FnZV9raW5kICpraW5k LAorCQkJCQkgZW51bSBzdHJlYW1fbWVzc2FnZV90eXBlICp0eXBlLAorCQkJCQkgZW51bSBzdHJl YW1fZXJyb3IgKmVyciwKKwkJCQkJIHNpemVfdCAqbGVuKQoreworCXVpbnQxNl90IF90eXBlOwor CWNoYXIgYnVmWzhdOworCisJaWYgKCFyZWFkX3dob2xlKGNsaWVudC0+ZmQsIGJ1Ziwgc2l6ZW9m KGJ1ZikpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlfdHlwZSA9IG50b2hzKCoodWludDE2X3QgKikg JmJ1ZlswXSk7CisJKnR5cGUgPSBfdHlwZSAmIDB4RkY7CisJKmtpbmQgPSBfdHlwZSA+PiA4Owor CSplcnIgPSBudG9ocygqKHVpbnQxNl90ICopICZidWZbMl0pOworCSpsZW4gPSBudG9obCgqKHVp bnQzMl90ICopICZidWZbNF0pOworCisJLy9pZ3RfZGVidWcoInJlY2VpdmVkIG1lc3NhZ2U6IGtp bmQ9JWQgdHlwZT0lZCBlcnI9JWQgbGVuPSV6dVxuIiwKKwkvLwkgICpraW5kLCAqdHlwZSwgKmVy ciwgKmxlbik7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgY2hhbWVsaXVtX3N0 cmVhbV93cml0ZV9oZWFkZXIoc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCwKKwkJCQkJ ICBlbnVtIHN0cmVhbV9tZXNzYWdlX3R5cGUgdHlwZSwKKwkJCQkJICBlbnVtIHN0cmVhbV9lcnJv ciBlcnIsCisJCQkJCSAgc2l6ZV90IGxlbikKK3sKKwljaGFyIGJ1Zls4XTsKKwl1aW50MTZfdCBf dHlwZTsKKworCV90eXBlID0gdHlwZSB8IChTVFJFQU1fTUVTU0FHRV9SRVFVRVNUIDw8IDgpOwor CisJKih1aW50MTZfdCAqKSAmYnVmWzBdID0gaHRvbnMoX3R5cGUpOworCSoodWludDE2X3QgKikg JmJ1ZlsyXSA9IGh0b25zKGVycik7CisJKih1aW50MzJfdCAqKSAmYnVmWzRdID0gaHRvbmwobGVu KTsKKworCXJldHVybiB3cml0ZV93aG9sZShjbGllbnQtPmZkLCBidWYsIHNpemVvZihidWYpKTsK K30KKworc3RhdGljIGJvb2wgY2hhbWVsaXVtX3N0cmVhbV9yZWFkX3Jlc3BvbnNlKHN0cnVjdCBj aGFtZWxpdW1fc3RyZWFtICpjbGllbnQsCisJCQkJCSAgIGVudW0gc3RyZWFtX21lc3NhZ2VfdHlw ZSB0eXBlLAorCQkJCQkgICB2b2lkICpidWYsIHNpemVfdCBidWZfbGVuKQoreworCWVudW0gc3Ry ZWFtX21lc3NhZ2Vfa2luZCByZWFkX2tpbmQ7CisJZW51bSBzdHJlYW1fbWVzc2FnZV90eXBlIHJl YWRfdHlwZTsKKwllbnVtIHN0cmVhbV9lcnJvciByZWFkX2VycjsKKwlzaXplX3QgcmVhZF9sZW47 CisKKwlpZiAoIWNoYW1lbGl1bV9zdHJlYW1fcmVhZF9oZWFkZXIoY2xpZW50LCAmcmVhZF9raW5k LCAmcmVhZF90eXBlLAorCQkJCQkgICZyZWFkX2VyciwgJnJlYWRfbGVuKSkKKwkJcmV0dXJuIGZh bHNlOworCisJaWYgKHJlYWRfa2luZCAhPSBTVFJFQU1fTUVTU0FHRV9SRVNQT05TRSkgeworCQlp Z3Rfd2FybigiRXhwZWN0ZWQgYSByZXNwb25zZSwgZ290IGtpbmQgJWRcbiIsIHJlYWRfa2luZCk7 CisJCXJldHVybiBmYWxzZTsKKwl9CisJaWYgKHJlYWRfdHlwZSAhPSB0eXBlKSB7CisJCWlndF93 YXJuKCJFeHBlY3RlZCBtZXNzYWdlIHR5cGUgJWQsIGdvdCAlZFxuIiwKKwkJCSB0eXBlLCByZWFk X3R5cGUpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCWlmIChyZWFkX2VyciAhPSBTVFJFQU1fRVJS T1JfTk9ORSkgeworCQlpZ3Rfd2FybigiUmVjZWl2ZWQgZXJyb3I6ICVzICglZClcbiIsCisJCQkg c3RyZWFtX2Vycm9yX3N0cihyZWFkX2VyciksIHJlYWRfZXJyKTsKKwkJcmV0dXJuIGZhbHNlOwor CX0KKwlpZiAoYnVmX2xlbiAhPSByZWFkX2xlbikgeworCQlpZ3Rfd2FybigiUmVjZWl2ZWQgaW52 YWxpZCBtZXNzYWdlIGJvZHkgc2l6ZSAiCisJCQkgIihnb3QgJXp1IGJ5dGVzLCB3YW50ICV6dSBi eXRlcylcbiIsCisJCQkgcmVhZF9sZW4sIGJ1Zl9sZW4pOworCQlyZXR1cm4gZmFsc2U7CisJfQor CisJcmV0dXJuIHJlYWRfd2hvbGUoY2xpZW50LT5mZCwgYnVmLCBidWZfbGVuKTsKK30KKworc3Rh dGljIGJvb2wgY2hhbWVsaXVtX3N0cmVhbV93cml0ZV9yZXF1ZXN0KHN0cnVjdCBjaGFtZWxpdW1f c3RyZWFtICpjbGllbnQsCisJCQkJCSAgIGVudW0gc3RyZWFtX21lc3NhZ2VfdHlwZSB0eXBlLAor CQkJCQkgICB2b2lkICpidWYsIHNpemVfdCBidWZfbGVuKQoreworCWlmICghY2hhbWVsaXVtX3N0 cmVhbV93cml0ZV9oZWFkZXIoY2xpZW50LCB0eXBlLCBTVFJFQU1fRVJST1JfTk9ORSwKKwkJCQkJ ICAgYnVmX2xlbikpCisJCXJldHVybiBmYWxzZTsKKwkKKwlpZiAoYnVmX2xlbiA9PSAwKQorCQly ZXR1cm4gdHJ1ZTsKKworCXJldHVybiB3cml0ZV93aG9sZShjbGllbnQtPmZkLCBidWYsIGJ1Zl9s ZW4pOworfQorCitzdGF0aWMgYm9vbCBjaGFtZWxpdW1fc3RyZWFtX2NhbGwoc3RydWN0IGNoYW1l bGl1bV9zdHJlYW0gKmNsaWVudCwKKwkJCQkgIGVudW0gc3RyZWFtX21lc3NhZ2VfdHlwZSB0eXBl LAorCQkJCSAgdm9pZCAqcmVxX2J1Ziwgc2l6ZV90IHJlcV9sZW4sCisJCQkJICB2b2lkICpyZXNw X2J1Ziwgc2l6ZV90IHJlc3BfbGVuKQoreworCWlmICghY2hhbWVsaXVtX3N0cmVhbV93cml0ZV9y ZXF1ZXN0KGNsaWVudCwgdHlwZSwgcmVxX2J1ZiwgcmVxX2xlbikpCisJCXJldHVybiBmYWxzZTsK KworCXJldHVybiBjaGFtZWxpdW1fc3RyZWFtX3JlYWRfcmVzcG9uc2UoY2xpZW50LCB0eXBlLCBy ZXNwX2J1ZiwgcmVzcF9sZW4pOworfQorCitzdGF0aWMgYm9vbCBjaGFtZWxpdW1fc3RyZWFtX2No ZWNrX3ZlcnNpb24oc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCkKK3sKKwljaGFyIHJl c3BbMl07CisJdWludDhfdCBtYWpvciwgbWlub3I7CisKKwlpZiAoIWNoYW1lbGl1bV9zdHJlYW1f Y2FsbChjbGllbnQsIFNUUkVBTV9NRVNTQUdFX0dFVF9WRVJTSU9OLAorCQkJCSAgIE5VTEwsIDAs IHJlc3AsIHNpemVvZihyZXNwKSkpCisJCXJldHVybiBmYWxzZTsKKworCW1ham9yID0gcmVzcFsw XTsKKwltaW5vciA9IHJlc3BbMV07CisJaWYgKG1ham9yICE9IFNUUkVBTV9WRVJTSU9OX01BSk9S IHx8IG1pbm9yIDwgU1RSRUFNX1ZFUlNJT05fTUlOT1IpIHsKKwkJaWd0X3dhcm4oIlZlcnNpb24g bWlzbWF0Y2ggKHdhbnQgJWQuJWQsIGdvdCAlZC4lZClcbiIsCisJCQkgU1RSRUFNX1ZFUlNJT05f TUFKT1IsIFNUUkVBTV9WRVJTSU9OX01JTk9SLAorCQkJIG1ham9yLCBtaW5vcik7CisJCXJldHVy biBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBjaGFtZWxpdW1fc3RyZWFt X2R1bXBfcmVhbHRpbWVfYXVkaW8oc3RydWN0IGNoYW1lbGl1bV9zdHJlYW0gKmNsaWVudCwKKwkJ CQkJICBlbnVtIGNoYW1lbGl1bV9zdHJlYW1fcmVhbHRpbWVfbW9kZSBtb2RlKQoreworCWNoYXIg cmVxWzFdOworCisJaWd0X2RlYnVnKCJTdGFydGluZyByZWFsLXRpbWUgYXVkaW8gY2FwdHVyZVxu Iik7CisKKwlyZXFbMF0gPSBtb2RlOworCXJldHVybiBjaGFtZWxpdW1fc3RyZWFtX2NhbGwoY2xp ZW50LCBTVFJFQU1fTUVTU0FHRV9EVU1QX1JFQUxUSU1FX0FVRElPLAorCQkJCSAgICAgcmVxLCBz aXplb2YocmVxKSwgTlVMTCwgMCk7Cit9CisKK2Jvb2wgY2hhbWVsaXVtX3N0cmVhbV9yZWNlaXZl X3JlYWx0aW1lX2F1ZGlvKHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQsCisJCQkJCSAg ICAgc2l6ZV90ICpwYWdlX2NvdW50LAorCQkJCQkgICAgIGludDMyX3QgKipidWYsIHNpemVfdCAq YnVmX2xlbikKK3sKKwllbnVtIHN0cmVhbV9tZXNzYWdlX2tpbmQga2luZDsKKwllbnVtIHN0cmVh bV9tZXNzYWdlX3R5cGUgdHlwZTsKKwllbnVtIHN0cmVhbV9lcnJvciBlcnI7CisJc2l6ZV90IGJv ZHlfbGVuOworCWNoYXIgcGFnZV9jb3VudF9idWZbNF07CisJaW50MzJfdCAqcHRyOworCisJd2hp bGUgKHRydWUpIHsKKwkJaWYgKCFjaGFtZWxpdW1fc3RyZWFtX3JlYWRfaGVhZGVyKGNsaWVudCwg JmtpbmQsICZ0eXBlLAorCQkJCQkJICAmZXJyLCAmYm9keV9sZW4pKQorCQkJcmV0dXJuIGZhbHNl OworCisJCWlmIChraW5kICE9IFNUUkVBTV9NRVNTQUdFX0RBVEEpIHsKKwkJCWlndF93YXJuKCJF eHBlY3RlZCBhIGRhdGEgbWVzc2FnZSwgZ290IGtpbmQgJWRcbiIsIGtpbmQpOworCQkJcmV0dXJu IGZhbHNlOworCQl9CisJCWlmICh0eXBlICE9IFNUUkVBTV9NRVNTQUdFX0RVTVBfUkVBTFRJTUVf QVVESU8pIHsKKwkJCWlndF93YXJuKCJFeHBlY3RlZCByZWFsLXRpbWUgYXVkaW8gZHVtcCBtZXNz YWdlLCAiCisJCQkJICJnb3QgdHlwZSAlZFxuIiwgdHlwZSk7CisJCQlyZXR1cm4gZmFsc2U7CisJ CX0KKworCQlpZiAoZXJyID09IFNUUkVBTV9FUlJPUl9OT05FKQorCQkJYnJlYWs7CisJCWVsc2Ug aWYgKGVyciAhPSBTVFJFQU1fRVJST1JfQVVESU9fTUVNX09WRVJGTE9XX0RST1ApIHsKKwkJCWln dF93YXJuKCJSZWNlaXZlZCBlcnJvcjogJXMgKCVkKVxuIiwKKwkJCQkgc3RyZWFtX2Vycm9yX3N0 cihlcnIpLCBlcnIpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJaWd0X2RlYnVnKCJEcm9w cGVkIGFuIGF1ZGlvIHBhZ2UgYmVjYXVzZSBvZiBhbiBvdmVyZmxvd1xuIik7CisJCWlndF9hc3Nl cnQoYm9keV9sZW4gPT0gMCk7CisJfQorCisJaWd0X2Fzc2VydChib2R5X2xlbiA+PSBzaXplb2Yo cGFnZV9jb3VudF9idWYpKTsKKworCWlmICghcmVhZF93aG9sZShjbGllbnQtPmZkLCBwYWdlX2Nv dW50X2J1Ziwgc2l6ZW9mKHBhZ2VfY291bnRfYnVmKSkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAo cGFnZV9jb3VudCkKKwkJKnBhZ2VfY291bnQgPSBudG9obCgqKHVpbnQzMl90ICopICZwYWdlX2Nv dW50X2J1ZlswXSk7CisJYm9keV9sZW4gLT0gc2l6ZW9mKHBhZ2VfY291bnRfYnVmKTsKKworCWln dF9hc3NlcnQoYm9keV9sZW4gJSBzaXplb2YoaW50MzJfdCkgPT0gMCk7CisJaWYgKCpidWZfbGVu ICogc2l6ZW9mKGludDMyX3QpICE9IGJvZHlfbGVuKSB7CisJCXB0ciA9IHJlYWxsb2MoKmJ1Ziwg Ym9keV9sZW4pOworCQlpZiAoIXB0cikgeworCQkJaWd0X3dhcm4oInJlYWxsb2MgZmFpbGVkOiAl c1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQkqYnVmID0g cHRyOworCQkqYnVmX2xlbiA9IGJvZHlfbGVuIC8gc2l6ZW9mKGludDMyX3QpOworCX0KKworCXJl dHVybiByZWFkX3dob2xlKGNsaWVudC0+ZmQsICpidWYsIGJvZHlfbGVuKTsKK30KKworYm9vbCBj aGFtZWxpdW1fc3RyZWFtX3N0b3BfcmVhbHRpbWVfYXVkaW8oc3RydWN0IGNoYW1lbGl1bV9zdHJl YW0gKmNsaWVudCkKK3sKKwllbnVtIHN0cmVhbV9tZXNzYWdlX2tpbmQga2luZDsKKwllbnVtIHN0 cmVhbV9tZXNzYWdlX3R5cGUgdHlwZTsKKwllbnVtIHN0cmVhbV9lcnJvciBlcnI7CisJc2l6ZV90 IGxlbjsKKworCWlndF9kZWJ1ZygiU3RvcHBpbmcgcmVhbC10aW1lIGF1ZGlvIGNhcHR1cmVcbiIp OworCisJaWYgKCFjaGFtZWxpdW1fc3RyZWFtX3dyaXRlX3JlcXVlc3QoY2xpZW50LAorCQkJCQkg ICAgU1RSRUFNX01FU1NBR0VfU1RPUF9EVU1QX0FVRElPLAorCQkJCQkgICAgTlVMTCwgMCkpCisJ CXJldHVybiBmYWxzZTsKKwkKKwl3aGlsZSAodHJ1ZSkgeworCQlpZiAoIWNoYW1lbGl1bV9zdHJl YW1fcmVhZF9oZWFkZXIoY2xpZW50LCAma2luZCwgJnR5cGUsCisJCQkJCQkgICZlcnIsICZsZW4p KQorCQkJcmV0dXJuIGZhbHNlOworCisJCWlmIChraW5kID09IFNUUkVBTV9NRVNTQUdFX1JFU1BP TlNFKQorCQkJYnJlYWs7CisKKwkJaWYgKCFyZWFkX2FuZF9kaXNjYXJkKGNsaWVudC0+ZmQsIGxl bikpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKHR5cGUgIT0gU1RSRUFNX01FU1NBR0Vf U1RPUF9EVU1QX0FVRElPKSB7CisJCWlndF93YXJuKCJVbmV4cGVjdGVkIHJlc3BvbnNlIHR5cGUg JWRcbiIsIHR5cGUpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCWlmIChlcnIgIT0gU1RSRUFNX0VS Uk9SX05PTkUpIHsKKwkJaWd0X3dhcm4oIlJlY2VpdmVkIGVycm9yOiAlcyAoJWQpXG4iLAorCQkJ IHN0cmVhbV9lcnJvcl9zdHIoZXJyKSwgZXJyKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlpZiAo bGVuICE9IDApIHsKKwkJaWd0X3dhcm4oIkV4cGVjdGVkIGFuIGVtcHR5IHJlc3BvbnNlLCBnb3Qg JXp1IGJ5dGVzXG4iLCBsZW4pOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7 Cit9CisKK3ZvaWQgY2hhbWVsaXVtX3N0cmVhbV9hdWRpb19mb3JtYXQoc3RydWN0IGNoYW1lbGl1 bV9zdHJlYW0gKnN0cmVhbSwKKwkJCQkgICBpbnQgKnJhdGUsIGludCAqY2hhbm5lbHMpCit7CisJ LyogVE9ETzogdGhlIENoYW1lbGl1bSBzdHJlYW1pbmcgc2VydmVyIGRvZXNuJ3QgZXhwb3NlIHRo b3NlIHlldC4KKwkgKiBKdXN0IGhhcmRjb2RlIHRoZSB2YWx1ZXMgZm9yIG5vdy4gKi8KKwkqcmF0 ZSA9IDQ4MDAwOworCSpjaGFubmVscyA9IDg7Cit9CisKK3N0cnVjdCBjaGFtZWxpdW1fc3RyZWFt ICpjaGFtZWxpdW1fc3RyZWFtX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVh bSAqY2xpZW50OworCisJY2xpZW50ID0gY2FsbG9jKDEsIHNpemVvZigqY2xpZW50KSk7CisKKwlp ZiAoIWNoYW1lbGl1bV9zdHJlYW1fcmVhZF9jb25maWcoY2xpZW50KSkKKwkJZ290byBlcnJvcl9j bGllbnQ7CisJaWYgKCFjaGFtZWxpdW1fc3RyZWFtX2Nvbm5lY3QoY2xpZW50KSkKKwkJZ290byBl cnJvcl9jbGllbnQ7CisJaWYgKCFjaGFtZWxpdW1fc3RyZWFtX2NoZWNrX3ZlcnNpb24oY2xpZW50 KSkKKwkJZ290byBlcnJvcl9mZDsKKworCXJldHVybiBjbGllbnQ7CisKK2Vycm9yX2ZkOgorCWNs b3NlKGNsaWVudC0+ZmQpOworZXJyb3JfY2xpZW50OgorCWZyZWUoY2xpZW50KTsKKwlyZXR1cm4g TlVMTDsKK30KKwordm9pZCBjaGFtZWxpdW1fc3RyZWFtX2RlaW5pdChzdHJ1Y3QgY2hhbWVsaXVt X3N0cmVhbSAqY2xpZW50KQoreworCWlmIChjbG9zZShjbGllbnQtPmZkKSAhPSAwKQorCQlpZ3Rf d2FybigiY2xvc2UgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKwlmcmVlKGNsaWVu dCk7Cit9CmRpZmYgLS1naXQgYS9saWIvaWd0X2NoYW1lbGl1bV9zdHJlYW0uaCBiL2xpYi9pZ3Rf Y2hhbWVsaXVtX3N0cmVhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi45 MTI4NGE0NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pZ3RfY2hhbWVsaXVtX3N0cmVhbS5oCkBA IC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbAorICoKKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgor ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5p c2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgor ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug KGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisg KgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg T0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5U IFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00s IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1Ig T1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBTaW1v biBTZXIgPHNpbW9uLnNlckBpbnRlbC5jb20+CisgKi8KKworI2lmbmRlZiBJR1RfQ0hBTUVMSVVN X1NUUkVBTV9ICisjZGVmaW5lIElHVF9DSEFNRUxJVU1fU1RSRUFNX0gKKworI2luY2x1ZGUgImNv bmZpZy5oIgorCitlbnVtIGNoYW1lbGl1bV9zdHJlYW1fcmVhbHRpbWVfbW9kZSB7CisJQ0hBTUVM SVVNX1NUUkVBTV9SRUFMVElNRV9OT05FID0gMCwKKwkvKiBzdG9wIGR1bXBpbmcgd2hlbiBvdmVy ZmxvdyAqLworCUNIQU1FTElVTV9TVFJFQU1fUkVBTFRJTUVfU1RPUF9XSEVOX09WRVJGTE9XID0g MSwKKwkvKiBkcm9wIGRhdGEgb24gb3ZlcmZsb3cgKi8KKwlDSEFNRUxJVU1fU1RSRUFNX1JFQUxU SU1FX0JFU1RfRUZGT1JUID0gMiwKK307CisKK3N0cnVjdCBjaGFtZWxpdW1fc3RyZWFtOworCitz dHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqY2hhbWVsaXVtX3N0cmVhbV9pbml0KHZvaWQpOwordm9p ZCBjaGFtZWxpdW1fc3RyZWFtX2RlaW5pdChzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqY2xpZW50 KTsKK2Jvb2wgY2hhbWVsaXVtX3N0cmVhbV9kdW1wX3JlYWx0aW1lX2F1ZGlvKHN0cnVjdCBjaGFt ZWxpdW1fc3RyZWFtICpjbGllbnQsCisJCQkJCSAgZW51bSBjaGFtZWxpdW1fc3RyZWFtX3JlYWx0 aW1lX21vZGUgbW9kZSk7CisvKiogR2V0cyB0aGUgZm9ybWF0IHVzZWQgZm9yIGF1ZGlvIHBhZ2Vz LgorICoKKyAqIERhdGEgd2lsbCBhbHdheXMgYmUgY2FwdHVyZWQgaW4gcmF3IHBhZ2VzIG9mIFMz Ml9MRSBlbGVtZW50cy4gVGhpcyBmdW5jdGlvbgorICogZXhwb3NlcyB0aGUgc2FtcGxpbmcgcmF0 ZSBhbmQgdGhlIG51bWJlciBvZiBjaGFubmVscy4KKyAqLwordm9pZCBjaGFtZWxpdW1fc3RyZWFt X2F1ZGlvX2Zvcm1hdChzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVhbSAqc3RyZWFtLAorCQkJCSAgIGlu dCAqcmF0ZSwgaW50ICpjaGFubmVscyk7CisvKiogUmVjZWl2ZXMgb25lIGF1ZGlvIHBhZ2UgZnJv bSB0aGUgc3RyZWFtaW5nIHNlcnZlci4KKyAqCisgKiBJZiBub24tTlVMTCwgcGFnZV9jb3VudCB3 aWxsIGJlIHNldCB0byB0aGUgZHVtcGVkIHBhZ2UgbnVtYmVyLgorICoKKyAqIEluICJiZXN0IGVm Zm9ydCIgbW9kZSwgc29tZSBwYWdlcyBjYW4gYmUgZHJvcHBlZC4gVGhpcyBjYW4gYmUgZGV0ZWN0 ZWQgdmlhCisgKiB0aGUgcGFnZSBjb3VudC4KKyAqCisgKiBidWYgbXVzdCBlaXRoZXIgcG9pbnQg dG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbWVtb3J5IHJlZ2lvbiBvciBOVUxMLgorICogYnVm X2xlbiBtdXN0IGJlIHRoZSBsZW5ndGggb2YgdGhlIHJlZ2lvbiwgb3IgMCBpZiBOVUxMLiBidWZf bGVuIHdpbGwgYmUgc2V0CisgKiB0byB0aGUgc2l6ZSBvZiB0aGUgcGFnZS4gVGhlIGNsbGVyIGlz IHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGZyZWUoMykgb24KKyAqIGJ1Zi4KKyAqLworYm9vbCBj aGFtZWxpdW1fc3RyZWFtX3JlY2VpdmVfcmVhbHRpbWVfYXVkaW8oc3RydWN0IGNoYW1lbGl1bV9z dHJlYW0gKmNsaWVudCwKKwkJCQkJICAgICBzaXplX3QgKnBhZ2VfY291bnQsCisJCQkJCSAgICAg aW50MzJfdCAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuKTsKK2Jvb2wgY2hhbWVsaXVtX3N0cmVhbV9z dG9wX3JlYWx0aW1lX2F1ZGlvKHN0cnVjdCBjaGFtZWxpdW1fc3RyZWFtICpjbGllbnQpOworCisj ZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9tZXNvbi5idWlsZCBiL2xpYi9tZXNvbi5idWlsZAppbmRl eCA4OWRlMDZlNi4uZTgwOGRmZTUgMTAwNjQ0Ci0tLSBhL2xpYi9tZXNvbi5idWlsZAorKysgYi9s aWIvbWVzb24uYnVpbGQKQEAgLTEwMyw2ICsxMDMsNyBAQCBlbmRpZgogaWYgY2hhbWVsaXVtLmZv dW5kKCkKIAlsaWJfZGVwcyArPSBjaGFtZWxpdW0KIAlsaWJfc291cmNlcyArPSAnaWd0X2NoYW1l bGl1bS5jJworCWxpYl9zb3VyY2VzICs9ICdpZ3RfY2hhbWVsaXVtX3N0cmVhbS5jJwogZW5kaWYK IAogc3JjZGlyID0gam9pbl9wYXRocyhtZXNvbi5zb3VyY2Vfcm9vdCgpLCAndGVzdHMnKQpkaWZm IC0tZ2l0IGEvbWVzb24uYnVpbGQgYi9tZXNvbi5idWlsZAppbmRleCA1NTc0MDBhNS4uNWUwMjAz NzAgMTAwNjQ0Ci0tLSBhL21lc29uLmJ1aWxkCisrKyBiL21lc29uLmJ1aWxkCkBAIC02NCw4ICs2 NCw2IEBAIF9idWlsZF9vdmVybGF5ID0gZmFsc2UKIF9vdmVybGF5X3JlcXVpcmVkID0gZmFsc2UK IF9idWlsZF9tYW4gPSBmYWxzZQogX21hbl9yZXF1aXJlZCA9IGZhbHNlCi1fYnVpbGRfYXVkaW8g PSBmYWxzZQotX2F1ZGlvX3JlcXVpcmVkID0gZmFsc2UKIF9idWlsZF9jaGFtZWxpdW0gPSBmYWxz ZQogX2NoYW1lbGl1bV9yZXF1aXJlZCA9IGZhbHNlCiBfYnVpbGRfZG9jcyA9IGZhbHNlCkBAIC03 OSw3ICs3Nyw2IEBAIGJ1aWxkX292ZXJsYXkgPSBnZXRfb3B0aW9uKCdidWlsZF9vdmVybGF5JykK IG92ZXJsYXlfYmFja2VuZHMgPSBnZXRfb3B0aW9uKCdvdmVybGF5X2JhY2tlbmRzJykKIGJ1aWxk X21hbiA9IGdldF9vcHRpb24oJ2J1aWxkX21hbicpCiB3aXRoX3ZhbGdyaW5kID0gZ2V0X29wdGlv bignd2l0aF92YWxncmluZCcpCi1idWlsZF9hdWRpbyA9IGdldF9vcHRpb24oJ2J1aWxkX2F1ZGlv JykKIGJ1aWxkX2NoYW1lbGl1bSA9IGdldF9vcHRpb24oJ2J1aWxkX2NoYW1lbGl1bScpCiBidWls ZF9kb2NzID0gZ2V0X29wdGlvbignYnVpbGRfZG9jcycpCiBidWlsZF90ZXN0cyA9IGdldF9vcHRp b24oJ2J1aWxkX3Rlc3RzJykKQEAgLTkxLDggKzg4LDYgQEAgX2J1aWxkX292ZXJsYXkgPSBidWls ZF9vdmVybGF5ICE9ICdmYWxzZScKIF9vdmVybGF5X3JlcXVpcmVkID0gYnVpbGRfb3ZlcmxheSA9 PSAndHJ1ZScKIF9idWlsZF9tYW4gPSBidWlsZF9tYW4gIT0gJ2ZhbHNlJwogX21hbl9yZXF1aXJl ZCA9IGJ1aWxkX21hbiA9PSAndHJ1ZScKLV9idWlsZF9hdWRpbyA9IGJ1aWxkX2F1ZGlvICE9ICdm YWxzZScKLV9hdWRpb19yZXF1aXJlZCA9IGJ1aWxkX2F1ZGlvID09ICd0cnVlJwogX2J1aWxkX2No YW1lbGl1bSA9IGJ1aWxkX2NoYW1lbGl1bSAhPSAnZmFsc2UnCiBfY2hhbWVsaXVtX3JlcXVpcmVk ID0gYnVpbGRfY2hhbWVsaXVtID09ICd0cnVlJwogX2J1aWxkX2RvY3MgPSBidWlsZF9kb2NzICE9 ICdmYWxzZScKQEAgLTE2NiwyNiArMTYxLDYgQEAgY2Fpcm8gPSBkZXBlbmRlbmN5KCdjYWlybycs IHZlcnNpb24gOiAnPjEuMTIuMCcsIHJlcXVpcmVkIDogdHJ1ZSkKIGxpYnVkZXYgPSBkZXBlbmRl bmN5KCdsaWJ1ZGV2JywgcmVxdWlyZWQgOiB0cnVlKQogZ2xpYiA9IGRlcGVuZGVuY3koJ2dsaWIt Mi4wJywgcmVxdWlyZWQgOiB0cnVlKQogCi1nc2wgPSBudWxsX2RlcAotYWxzYSA9IG51bGxfZGVw Ci1pZiBfYnVpbGRfYXVkaW8gb3IgX2J1aWxkX2NoYW1lbGl1bQotCWdzbCA9IGRlcGVuZGVuY3ko J2dzbCcsIHJlcXVpcmVkIDogX2F1ZGlvX3JlcXVpcmVkIG9yIF9jaGFtZWxpdW1fcmVxdWlyZWQp Ci1lbmRpZgotaWYgX2J1aWxkX2F1ZGlvCi0JYWxzYSA9IGRlcGVuZGVuY3koJ2Fsc2EnLCByZXF1 aXJlZCA6IF9hdWRpb19yZXF1aXJlZCkKLWVuZGlmCi0KLWF1ZGlvaW5mbyA9ICdObycKLWlmIF9i dWlsZF9hdWRpbyBhbmQgYWxzYS5mb3VuZCgpIGFuZCBnc2wuZm91bmQoKQotCWF1ZGlvaW5mbyA9 ICdZZXMnCi1lbHNlCi0JaWYgX2F1ZGlvX3JlcXVpcmVkCi0JCWVycm9yKCdDYW5ub3QgYnVpbGQg YXVkaW8gdGVzdCBkdWUgdG8gbWlzc2luZyBkZXBlbmRlbmNpZXMnKQotCWVuZGlmCi0JX2J1aWxk X2F1ZGlvID0gZmFsc2UKLWVuZGlmCi1idWlsZF9pbmZvICs9ICdCdWlsZCBhdWRpbyB0ZXN0OiAn ICsgYXVkaW9pbmZvCi0KIHhtbHJwYyA9IGRlcGVuZGVuY3koJ3htbHJwYycsIHJlcXVpcmVkIDog ZmFsc2UpCiB4bWxycGNfdXRpbCA9IGRlcGVuZGVuY3koJ3htbHJwY191dGlsJywgcmVxdWlyZWQg OiBmYWxzZSkKIHhtbHJwY19jbGllbnQgPSBkZXBlbmRlbmN5KCd4bWxycGNfY2xpZW50JywgcmVx dWlyZWQgOiBmYWxzZSkKQEAgLTE5NywyMSArMTcyLDMwIEBAIGlmIG5vdCB4bWxycGMuZm91bmQo KSBhbmQgeG1scnBjX2NtZC5mb3VuZCgpCiAKIAlpZiBsaWJzX2NtZC5yZXR1cm5jb2RlKCkgPT0g MCBhbmQgY2ZsYWdzX2NtZC5yZXR1cm5jb2RlKCkgPT0gMAogCQl4bWxycGMgPSBkZWNsYXJlX2Rl cGVuZGVuY3koY29tcGlsZV9hcmdzOiBjZmxhZ3NfY21kLnN0ZG91dCgpLnN0cmlwKCkuc3BsaXQo KSwKLQkJCQkJICAgbGlua19hcmdzIDogbGlic19jbWQuc3Rkb3V0KCkuc3RyaXAoKS5zcGxpdCgp KQorCQkJCQkgICAgbGlua19hcmdzIDogbGlic19jbWQuc3Rkb3V0KCkuc3RyaXAoKS5zcGxpdCgp KQogCQl4bWxycGNfdXRpbCA9IGRlY2xhcmVfZGVwZW5kZW5jeSgpCiAJCXhtbHJwY19jbGllbnQg PSBkZWNsYXJlX2RlcGVuZGVuY3koKQogCWVuZGlmCiBlbmRpZgogCitnc2wgPSBudWxsX2RlcAor YWxzYSA9IG51bGxfZGVwCiBjaGFtZWxpdW0gPSBudWxsX2RlcAogY2hhbWVsaXVtaW5mbyA9ICdO bycKLWlmIF9idWlsZF9jaGFtZWxpdW0gYW5kIGdzbC5mb3VuZCgpIGFuZCB4bWxycGMuZm91bmQo KSBhbmQgeG1scnBjX3V0aWwuZm91bmQoKSBhbmQgeG1scnBjX2NsaWVudC5mb3VuZCgpCi0JY2hh bWVsaXVtID0gZGVjbGFyZV9kZXBlbmRlbmN5KGRlcGVuZGVuY2llcyA6IFsgeG1scnBjLAotCQkJ CQkJCXhtbHJwY191dGlsLCB4bWxycGNfY2xpZW50XSkKLQljb25maWcuc2V0KCdIQVZFX0NIQU1F TElVTScsIDEpCi0JY2hhbWVsaXVtaW5mbyA9ICdZZXMnCi1lbGlmIF9jaGFtZWxpdW1fcmVxdWly ZWQKLQllcnJvcignQ2Fubm90IGJ1aWxkIGNoYW1lbGl1bSB0ZXN0IGR1ZSB0byBtaXNzaW5nIGRl cGVuZGVuY2llcycpCitpZiBfYnVpbGRfY2hhbWVsaXVtCisJZ3NsID0gZGVwZW5kZW5jeSgnZ3Ns JywgcmVxdWlyZWQgOiBfY2hhbWVsaXVtX3JlcXVpcmVkKQorCWFsc2EgPSBkZXBlbmRlbmN5KCdh bHNhJywgcmVxdWlyZWQgOiBfY2hhbWVsaXVtX3JlcXVpcmVkKQorCWNoYW1lbGl1bSA9IGRlY2xh cmVfZGVwZW5kZW5jeShkZXBlbmRlbmNpZXMgOiBbCisJCXhtbHJwYywKKwkJeG1scnBjX3V0aWws CisJCXhtbHJwY19jbGllbnQsCisJCWdzbCwKKwkJYWxzYSwKKwldLCByZXF1aXJlZCA6IF9jaGFt ZWxpdW1fcmVxdWlyZWQpCisJaWYgY2hhbWVsaXVtLmZvdW5kKCkKKwkJY29uZmlnLnNldCgnSEFW RV9DSEFNRUxJVU0nLCAxKQorCQljaGFtZWxpdW1pbmZvID0gJ1llcycKKwllbmRpZgogZW5kaWYK IGJ1aWxkX2luZm8gKz0gJ0J1aWxkIENoYW1lbGl1bSB0ZXN0OiAnICsgY2hhbWVsaXVtaW5mbwog CmRpZmYgLS1naXQgYS9tZXNvbl9vcHRpb25zLnR4dCBiL21lc29uX29wdGlvbnMudHh0CmluZGV4 IDBjZDNiMzUwLi44ODhlZmU1NiAxMDA2NDQKLS0tIGEvbWVzb25fb3B0aW9ucy50eHQKKysrIGIv bWVzb25fb3B0aW9ucy50eHQKQEAgLTEwLDEyICsxMCw2IEBAIG9wdGlvbignb3ZlcmxheV9iYWNr ZW5kcycsCiAgICAgICAgY2hvaWNlcyA6IFsgJ2F1dG8nLCAneCcsICd4dicgXSwKICAgICAgICBk ZXNjcmlwdGlvbiA6ICdPdmVybGF5IGJhY2tlbmRzIHRvIGVuYWJsZScpCiAKLW9wdGlvbignYnVp bGRfYXVkaW8nLAotICAgICAgIHR5cGUgOiAnY29tYm8nLAotICAgICAgIHZhbHVlIDogJ2F1dG8n LAotICAgICAgIGNob2ljZXMgOiBbJ2F1dG8nLCAndHJ1ZScsICdmYWxzZSddLAotICAgICAgIGRl c2NyaXB0aW9uIDogJ0J1aWxkIGF1ZGlvIHRlc3QnKQotCiBvcHRpb24oJ2J1aWxkX2NoYW1lbGl1 bScsCiAgICAgICAgdHlwZSA6ICdjb21ibycsCiAgICAgICAgdmFsdWUgOiAnYXV0bycsCmRpZmYg LS1naXQgYS90ZXN0cy9hdWRpby5jIGIvdGVzdHMvYXVkaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggNTYwODc2YTMuLjAwMDAwMDAwCi0tLSBhL3Rlc3RzL2F1ZGlvLmMKKysrIC9k ZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCDCqSAyMDE3IEludGVs IENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks Ci0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJhZ3JhcGgp IHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdI VCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwotICogSU4gVEhFIFNPRlRXQVJF LgotICoKLSAqIEF1dGhvcnM6Ci0gKiAgUGF1bCBLb2NpYWxrb3dza2kgPHBhdWwua29jaWFsa293 c2tpQGxpbnV4LmludGVsLmNvbT4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk ZSAiaWd0LmgiCi0KLSNkZWZpbmUgUExBWUJBQ0tfQ0hBTk5FTFMJMgotI2RlZmluZSBQTEFZQkFD S19GUkFNRVMJCTEwMjQKLQotI2RlZmluZSBDQVBUVVJFX1NBTVBMRV9SQVRFCTQ4MDAwCi0jZGVm aW5lIENBUFRVUkVfQ0hBTk5FTFMJMgotI2RlZmluZSBDQVBUVVJFX0RFVklDRV9OQU1FCSJkZWZh dWx0IgotI2RlZmluZSBDQVBUVVJFX0ZSQU1FUwkJMjA0OAotCi0jZGVmaW5lIFJVTl9USU1FT1VU CQkyMDAwCi0KLXN0cnVjdCB0ZXN0X2RhdGEgewotCXN0cnVjdCBhbHNhICphbHNhOwotCXN0cnVj dCBhdWRpb19zaWduYWwgKnNpZ25hbDsKLQotCWludCBzdHJlYWs7Ci19OwotCi1zdGF0aWMgaW50 IHNhbXBsaW5nX3JhdGVzW10gPSB7Ci0JMzIwMDAsCi0JNDQxMDAsCi0JNDgwMDAsCi0JODgyMDAs Ci0JOTYwMDAsCi0JMTc2NDAwLAotCTE5MjAwMCwKLX07Ci0KLXN0YXRpYyBpbnQgc2FtcGxpbmdf cmF0ZXNfY291bnQgPSBzaXplb2Yoc2FtcGxpbmdfcmF0ZXMpIC8gc2l6ZW9mKGludCk7Ci0KLXN0 YXRpYyBpbnQgdGVzdF9mcmVxdWVuY2llc1tdID0gewotCTMwMCwKLQk2MDAsCi0JMTIwMCwKLQk4 MDAwMCwKLQkxMDAwMCwKLX07Ci0KLXN0YXRpYyBpbnQgdGVzdF9mcmVxdWVuY2llc19jb3VudCA9 IHNpemVvZih0ZXN0X2ZyZXF1ZW5jaWVzKSAvIHNpemVvZihpbnQpOwotCi1zdGF0aWMgaW50IG91 dHB1dF9jYWxsYmFjayh2b2lkICpkYXRhLCBzaG9ydCAqYnVmZmVyLCBpbnQgZnJhbWVzKQotewot CXN0cnVjdCB0ZXN0X2RhdGEgKnRlc3RfZGF0YSA9IChzdHJ1Y3QgdGVzdF9kYXRhICopIGRhdGE7 Ci0KLQlhdWRpb19zaWduYWxfZmlsbCh0ZXN0X2RhdGEtPnNpZ25hbCwgYnVmZmVyLCBmcmFtZXMp OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW5wdXRfY2FsbGJhY2sodm9pZCAqZGF0 YSwgc2hvcnQgKmJ1ZmZlciwgaW50IGZyYW1lcykKLXsKLQlzdHJ1Y3QgdGVzdF9kYXRhICp0ZXN0 X2RhdGEgPSAoc3RydWN0IHRlc3RfZGF0YSAqKSBkYXRhOwotCWJvb2wgZGV0ZWN0OwotCi0JZGV0 ZWN0ID0gYXVkaW9fc2lnbmFsX2RldGVjdCh0ZXN0X2RhdGEtPnNpZ25hbCwgQ0FQVFVSRV9DSEFO TkVMUywKLQkJCQkgICAgIENBUFRVUkVfU0FNUExFX1JBVEUsIGJ1ZmZlciwgZnJhbWVzKTsKLQlp ZiAoZGV0ZWN0KQotCQl0ZXN0X2RhdGEtPnN0cmVhaysrOwotCWVsc2UKLQkJdGVzdF9kYXRhLT5z dHJlYWsgPSAwOwotCi0JLyogQSBzdHJlYWsgb2YgMyBnaXZlcyBjb25maWRlbmNlIHRoYXQgdGhl IHNpZ25hbCBpcyBnb29kLiAqLwotCWlmICh0ZXN0X2RhdGEtPnN0cmVhayA9PSAzKQotCQlyZXR1 cm4gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB0ZXN0X2ludGVncml0eShjb25z dCBjaGFyICpkZXZpY2VfbmFtZSkKLXsKLQlzdHJ1Y3QgdGVzdF9kYXRhIGRhdGE7Ci0JaW50IHNh bXBsaW5nX3JhdGU7Ci0JYm9vbCBydW4gPSBmYWxzZTsKLQlib29sIHRlc3Q7Ci0JaW50IGksIGo7 Ci0JaW50IHJldDsKLQotCWRhdGEuYWxzYSA9IGFsc2FfaW5pdCgpOwotCWlndF9hc3NlcnQoZGF0 YS5hbHNhKTsKLQotCXJldCA9IGFsc2Ffb3Blbl9pbnB1dChkYXRhLmFsc2EsIENBUFRVUkVfREVW SUNFX05BTUUpOwotCWlndF9hc3NlcnQocmV0ID49IDApOwotCi0JYWxzYV9jb25maWd1cmVfaW5w dXQoZGF0YS5hbHNhLCBDQVBUVVJFX0NIQU5ORUxTLAotCQkJICAgICBDQVBUVVJFX1NBTVBMRV9S QVRFKTsKLQotCWFsc2FfcmVnaXN0ZXJfaW5wdXRfY2FsbGJhY2soZGF0YS5hbHNhLCBpbnB1dF9j YWxsYmFjaywgJmRhdGEsCi0JCQkJICAgICBDQVBUVVJFX0ZSQU1FUyk7Ci0KLQlmb3IgKGkgPSAw OyBpIDwgc2FtcGxpbmdfcmF0ZXNfY291bnQ7IGkrKykgewotCQlyZXQgPSBhbHNhX29wZW5fb3V0 cHV0KGRhdGEuYWxzYSwgZGV2aWNlX25hbWUpOwotCQlpZ3RfYXNzZXJ0KHJldCA+PSAwKTsKLQot CQlzYW1wbGluZ19yYXRlID0gc2FtcGxpbmdfcmF0ZXNbaV07Ci0KLQkJdGVzdCA9IGFsc2FfdGVz dF9vdXRwdXRfY29uZmlndXJhdGlvbihkYXRhLmFsc2EsCi0JCQkJCQkgICAgICBQTEFZQkFDS19D SEFOTkVMUywKLQkJCQkJCSAgICAgIHNhbXBsaW5nX3JhdGUpOwotCQlpZiAoIXRlc3QpIHsKLQkJ CWFsc2FfY2xvc2Vfb3V0cHV0KGRhdGEuYWxzYSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWln dF9kZWJ1ZygiVGVzdGluZyB3aXRoIHNhbXBsaW5nIHJhdGUgJWRcbiIsIHNhbXBsaW5nX3JhdGUp OwotCi0JCWFsc2FfY29uZmlndXJlX291dHB1dChkYXRhLmFsc2EsIFBMQVlCQUNLX0NIQU5ORUxT LAotCQkJCSAgICAgICBzYW1wbGluZ19yYXRlKTsKLQotCQlkYXRhLnNpZ25hbCA9IGF1ZGlvX3Np Z25hbF9pbml0KFBMQVlCQUNLX0NIQU5ORUxTLAotCQkJCQkJc2FtcGxpbmdfcmF0ZSk7Ci0JCWln dF9hc3NlcnQoZGF0YS5zaWduYWwpOwotCi0JCWZvciAoaiA9IDA7IGogPCB0ZXN0X2ZyZXF1ZW5j aWVzX2NvdW50OyBqKyspCi0JCQlhdWRpb19zaWduYWxfYWRkX2ZyZXF1ZW5jeShkYXRhLnNpZ25h bCwKLQkJCQkJCSAgIHRlc3RfZnJlcXVlbmNpZXNbal0pOwotCi0JCWF1ZGlvX3NpZ25hbF9zeW50 aGVzaXplKGRhdGEuc2lnbmFsKTsKLQotCQlhbHNhX3JlZ2lzdGVyX291dHB1dF9jYWxsYmFjayhk YXRhLmFsc2EsIG91dHB1dF9jYWxsYmFjaywKLQkJCQkJICAgICAgJmRhdGEsIFBMQVlCQUNLX0ZS QU1FUyk7Ci0KLQkJZGF0YS5zdHJlYWsgPSAwOwotCi0JCXJldCA9IGFsc2FfcnVuKGRhdGEuYWxz YSwgUlVOX1RJTUVPVVQpOwotCQlpZ3RfYXNzZXJ0KHJldCA+IDApOwotCi0JCWF1ZGlvX3NpZ25h bF9jbGVhbihkYXRhLnNpZ25hbCk7Ci0JCWZyZWUoZGF0YS5zaWduYWwpOwotCi0JCWFsc2FfY2xv c2Vfb3V0cHV0KGRhdGEuYWxzYSk7Ci0KLQkJcnVuID0gdHJ1ZTsKLQl9Ci0KLQkvKiBNYWtlIHN1 cmUgd2UgdGVzdGVkIGF0IGxlYXN0IG9uZSBmcmVxdWVuY3kgKi8KLQlpZ3RfYXNzZXJ0KHJ1bik7 Ci0KLQlhbHNhX2Nsb3NlX2lucHV0KGRhdGEuYWxzYSk7Ci0JZnJlZShkYXRhLmFsc2EpOwotfQot Ci1zdGF0aWMgdm9pZCB0ZXN0X3N1c3BlbmRfcmVzdW1lX2ludGVncml0eShjb25zdCBjaGFyICpk ZXZpY2VfbmFtZSwKLQkJCQkJICBlbnVtIGlndF9zdXNwZW5kX3N0YXRlIHN0YXRlLAotCQkJCQkg IGVudW0gaWd0X3N1c3BlbmRfdGVzdCB0ZXN0KQotewotCXRlc3RfaW50ZWdyaXR5KGRldmljZV9u YW1lKTsKLQotCWlndF9zeXN0ZW1fc3VzcGVuZF9hdXRvcmVzdW1lKHN0YXRlLCB0ZXN0KTsKLQot CXRlc3RfaW50ZWdyaXR5KGRldmljZV9uYW1lKTsKLX0KLQotaWd0X21haW4KLXsKLQlpZ3Rfc3Vi dGVzdCgiaGRtaS1pbnRlZ3JpdHkiKQotCQl0ZXN0X2ludGVncml0eSgiSERNSSIpOwotCi0JaWd0 X3N1YnRlc3QoImhkbWktaW50ZWdyaXR5LWFmdGVyLXN1c3BlbmQiKQotCQl0ZXN0X3N1c3BlbmRf cmVzdW1lX2ludGVncml0eSgiSERNSSIsIFNVU1BFTkRfU1RBVEVfTUVNLAotCQkJCQkgICAgICBT VVNQRU5EX1RFU1RfTk9ORSk7Ci0KLQlpZ3Rfc3VidGVzdCgiaGRtaS1pbnRlZ3JpdHktYWZ0ZXIt aGliZXJuYXRlIikKLQkJdGVzdF9zdXNwZW5kX3Jlc3VtZV9pbnRlZ3JpdHkoIkhETUkiLCBTVVNQ RU5EX1NUQVRFX0RJU0ssCi0JCQkJCSAgICAgIFNVU1BFTkRfVEVTVF9ERVZJQ0VTKTsKLX0KZGlm ZiAtLWdpdCBhL3Rlc3RzL2ttc19jaGFtZWxpdW0uYyBiL3Rlc3RzL2ttc19jaGFtZWxpdW0uYwpp bmRleCAyZGMxMDQ5ZC4uOWRmYjJiZDcgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2ttc19jaGFtZWxpdW0u YworKysgYi90ZXN0cy9rbXNfY2hhbWVsaXVtLmMKQEAgLTQxMyw3ICs0MTMsNyBAQCB0ZXN0X3N1 c3BlbmRfcmVzdW1lX2VkaWRfY2hhbmdlKGRhdGFfdCAqZGF0YSwgc3RydWN0IGNoYW1lbGl1bV9w b3J0ICpwb3J0LAogCiBzdGF0aWMgaWd0X291dHB1dF90ICoKIHByZXBhcmVfb3V0cHV0KGRhdGFf dCAqZGF0YSwKLQkgICAgICAgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0KQorCSAgICAgICBz dHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQsIGJvb2wgc2V0X2VkaWQpCiB7CiAJaWd0X2Rpc3Bs YXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5OwogCWlndF9vdXRwdXRfdCAqb3V0cHV0OwpA QCAtNDI4LDcgKzQyOCw4IEBAIHByZXBhcmVfb3V0cHV0KGRhdGFfdCAqZGF0YSwKIAkvKiBUaGUg Y2hhbWVsaXVtJ3MgZGVmYXVsdCBFRElEIGhhcyBhIGxvdCBvZiByZXNvbHV0aW9ucywgd2F5IG1v cmUgdGhlbgogCSAqIHdlIG5lZWQgdG8gdGVzdAogCSAqLwotCWNoYW1lbGl1bV9wb3J0X3NldF9l ZGlkKGRhdGEtPmNoYW1lbGl1bSwgcG9ydCwgZGF0YS0+ZWRpZF9pZCk7CisJaWYgKHNldF9lZGlk KQorCQljaGFtZWxpdW1fcG9ydF9zZXRfZWRpZChkYXRhLT5jaGFtZWxpdW0sIHBvcnQsIGRhdGEt PmVkaWRfaWQpOwogCiAJY2hhbWVsaXVtX3BsdWcoZGF0YS0+Y2hhbWVsaXVtLCBwb3J0KTsKIAl3 YWl0X2Zvcl9jb25uZWN0b3IoZGF0YSwgcG9ydCwgRFJNX01PREVfQ09OTkVDVEVEKTsKQEAgLTYx Myw3ICs2MTQsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2Rpc3BsYXlfb25lX21vZGUoZGF0YV90ICpk YXRhLCBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQsCiAKIAlyZXNldF9zdGF0ZShkYXRhLCBw b3J0KTsKIAotCW91dHB1dCA9IHByZXBhcmVfb3V0cHV0KGRhdGEsIHBvcnQpOworCW91dHB1dCA9 IHByZXBhcmVfb3V0cHV0KGRhdGEsIHBvcnQsIHRydWUpOwogCWNvbm5lY3RvciA9IGNoYW1lbGl1 bV9wb3J0X2dldF9jb25uZWN0b3IoZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LCBmYWxzZSk7CiAJcHJp bWFyeSA9IGlndF9vdXRwdXRfZ2V0X3BsYW5lX3R5cGUob3V0cHV0LCBEUk1fUExBTkVfVFlQRV9Q UklNQVJZKTsKIAlpZ3RfYXNzZXJ0KHByaW1hcnkpOwpAQCAtNjQ0LDcgKzY0NSw3IEBAIHN0YXRp YyB2b2lkIHRlc3RfZGlzcGxheV9hbGxfbW9kZXMoZGF0YV90ICpkYXRhLCBzdHJ1Y3QgY2hhbWVs aXVtX3BvcnQgKnBvcnQsCiAKIAlyZXNldF9zdGF0ZShkYXRhLCBwb3J0KTsKIAotCW91dHB1dCA9 IHByZXBhcmVfb3V0cHV0KGRhdGEsIHBvcnQpOworCW91dHB1dCA9IHByZXBhcmVfb3V0cHV0KGRh dGEsIHBvcnQsIHRydWUpOwogCWNvbm5lY3RvciA9IGNoYW1lbGl1bV9wb3J0X2dldF9jb25uZWN0 b3IoZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LCBmYWxzZSk7CiAJcHJpbWFyeSA9IGlndF9vdXRwdXRf Z2V0X3BsYW5lX3R5cGUob3V0cHV0LCBEUk1fUExBTkVfVFlQRV9QUklNQVJZKTsKIAlpZ3RfYXNz ZXJ0KHByaW1hcnkpOwpAQCAtNjc5LDcgKzY4MCw3IEBAIHRlc3RfZGlzcGxheV9mcmFtZV9kdW1w KGRhdGFfdCAqZGF0YSwgc3RydWN0IGNoYW1lbGl1bV9wb3J0ICpwb3J0KQogCiAJcmVzZXRfc3Rh dGUoZGF0YSwgcG9ydCk7CiAKLQlvdXRwdXQgPSBwcmVwYXJlX291dHB1dChkYXRhLCBwb3J0KTsK KwlvdXRwdXQgPSBwcmVwYXJlX291dHB1dChkYXRhLCBwb3J0LCB0cnVlKTsKIAljb25uZWN0b3Ig PSBjaGFtZWxpdW1fcG9ydF9nZXRfY29ubmVjdG9yKGRhdGEtPmNoYW1lbGl1bSwgcG9ydCwgZmFs c2UpOwogCXByaW1hcnkgPSBpZ3Rfb3V0cHV0X2dldF9wbGFuZV90eXBlKG91dHB1dCwgRFJNX1BM QU5FX1RZUEVfUFJJTUFSWSk7CiAJaWd0X2Fzc2VydChwcmltYXJ5KTsKQEAgLTcxMCw2ICs3MTEs MjcwIEBAIHRlc3RfZGlzcGxheV9mcmFtZV9kdW1wKGRhdGFfdCAqZGF0YSwgc3RydWN0IGNoYW1l bGl1bV9wb3J0ICpwb3J0KQogCWRybU1vZGVGcmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7CiB9CiAK KworLyogUGxheWJhY2sgcGFyYW1ldGVycyBjb250cm9sIHRoZSBhdWRpbyBzaWduYWwgd2Ugc3lu dGhlc2l6ZSBhbmQgc2VuZCAqLworI2RlZmluZSBQTEFZQkFDS19DSEFOTkVMUyAyCisjZGVmaW5l IFBMQVlCQUNLX1NBTVBMRVMgMTAyNAorCisvKiBDYXB0dXJlIHBhcmVtZXRlcnMgY29udHJvbCB0 aGUgYXVkaW8gc2lnbmFsIHdlIHJlY2VpdmUgKi8KKyNkZWZpbmUgQ0FQVFVSRV9TQU1QTEVTIDIw NDgKKworI2RlZmluZSBBVURJT19EVVJBVElPTiAyMDAwIC8qIG1zICovCisvKiBBIHN0cmVhayBv ZiAzIGdpdmVzIGNvbmZpZGVuY2UgdGhhdCB0aGUgc2lnbmFsIGlzIGdvb2QuICovCisjZGVmaW5l IE1JTl9TVFJFQUsgMworCisvKiBUT0RPOiBDaGFtZWxpdW0gb25seSBzdXBwb3J0cyA0OEtIeiBm b3Igbm93ICovCitzdGF0aWMgaW50IHNhbXBsaW5nX3JhdGVzW10gPSB7CisvKgkzMjAwMCwgKi8K Ky8qCTQ0MTAwLCAqLworCTQ4MDAwLAorLyoJODgyMDAsICovCisvKgk5NjAwMCwgKi8KKy8qCTE3 NjQwMCwgKi8KKy8qCTE5MjAwMCwgKi8KK307CisKK3N0YXRpYyBpbnQgc2FtcGxpbmdfcmF0ZXNf Y291bnQgPSBzaXplb2Yoc2FtcGxpbmdfcmF0ZXMpIC8gc2l6ZW9mKGludCk7CisKK3N0YXRpYyBp bnQgdGVzdF9mcmVxdWVuY2llc1tdID0geworCTMwMCwKKwk2MDAsCisJMTIwMCwKKwk4MDAwMCwK KwkxMDAwMCwKK307CisKK3N0YXRpYyBpbnQgdGVzdF9mcmVxdWVuY2llc19jb3VudCA9IHNpemVv Zih0ZXN0X2ZyZXF1ZW5jaWVzKSAvIHNpemVvZihpbnQpOworCitzdGF0aWMgaW50CitvdXRwdXRf Y2FsbGJhY2sodm9pZCAqZGF0YSwgc2hvcnQgKmJ1ZmZlciwgaW50IGZyYW1lcykKK3sKKwlzdHJ1 Y3QgYXVkaW9fc2lnbmFsICpzaWduYWwgPSAoc3RydWN0IGF1ZGlvX3NpZ25hbCAqKSBkYXRhOwor CisJYXVkaW9fc2lnbmFsX2ZpbGwoc2lnbmFsLCBidWZmZXIsIGZyYW1lcyk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGJvb2wKK2RvX3Rlc3RfZGlzcGxheV9hdWRpbyhkYXRhX3QgKmRhdGEs IHN0cnVjdCBjaGFtZWxpdW1fcG9ydCAqcG9ydCwKKwkJICAgICAgc3RydWN0IGFsc2EgKmFsc2Es IGludCBwbGF5YmFja19jaGFubmVscywKKwkJICAgICAgaW50IHBsYXliYWNrX3JhdGUpCit7CisJ aW50IHJldCwgY2FwdHVyZV9yYXRlLCBjYXB0dXJlX2NoYW5uZWxzLCBtc2VjOworCXN0cnVjdCBj aGFtZWxpdW1fYXVkaW9fZmlsZSAqYXVkaW9fZmlsZTsKKwlzdHJ1Y3QgY2hhbWVsaXVtX3N0cmVh bSAqc3RyZWFtOworCWVudW0gY2hhbWVsaXVtX3N0cmVhbV9yZWFsdGltZV9tb2RlIHN0cmVhbV9t b2RlOworCXN0cnVjdCBhdWRpb19zaWduYWwgKnNpZ25hbDsKKwlpbnQzMl90ICpyZWN2LCAqYnVm OworCWRvdWJsZSAqY2hhbm5lbDsKKwlzaXplX3QgaSwgc3RyZWFrLCBwYWdlX2NvdW50OworCXNp emVfdCByZWN2X2xlbiwgYnVmX2xlbiwgYnVmX2NhcCwgYnVmX3NpemUsIGNoYW5uZWxfbGVuOwor CWJvb2wgb2s7CisJY2hhciBkdW1wX3N1ZmZpeFs2NF07CisJY2hhciAqZHVtcF9wYXRoID0gTlVM TDsKKwlpbnQgZHVtcF9mZCA9IC0xOworCisJaWYgKCFhbHNhX3Rlc3Rfb3V0cHV0X2NvbmZpZ3Vy YXRpb24oYWxzYSwgcGxheWJhY2tfY2hhbm5lbHMsCisJCQkJCSAgICBwbGF5YmFja19yYXRlKSkK KwkJcmV0dXJuIGZhbHNlOworCisJaWd0X2RlYnVnKCJUZXN0aW5nIHdpdGggcGxheWJhY2sgc2Ft cGxpbmcgcmF0ZSAlZFxuIiwgcGxheWJhY2tfcmF0ZSk7CisJYWxzYV9jb25maWd1cmVfb3V0cHV0 KGFsc2EsIHBsYXliYWNrX2NoYW5uZWxzLCBwbGF5YmFja19yYXRlKTsKKworCWNoYW1lbGl1bV9z dGFydF9jYXB0dXJpbmdfYXVkaW8oZGF0YS0+Y2hhbWVsaXVtLCBwb3J0LCBmYWxzZSk7CisKKwlz dHJlYW0gPSBjaGFtZWxpdW1fc3RyZWFtX2luaXQoKTsKKwlpZ3RfYXNzZXJ0KHN0cmVhbSk7CisK KwlzdHJlYW1fbW9kZSA9IENIQU1FTElVTV9TVFJFQU1fUkVBTFRJTUVfU1RPUF9XSEVOX09WRVJG TE9XOworCW9rID0gY2hhbWVsaXVtX3N0cmVhbV9kdW1wX3JlYWx0aW1lX2F1ZGlvKHN0cmVhbSwg c3RyZWFtX21vZGUpOworCWlndF9hc3NlcnQob2spOworCisJY2hhbWVsaXVtX3N0cmVhbV9hdWRp b19mb3JtYXQoc3RyZWFtLCAmY2FwdHVyZV9yYXRlLCAmY2FwdHVyZV9jaGFubmVscyk7CisKKwlp ZiAoaWd0X2ZyYW1lX2R1bXBfaXNfZW5hYmxlZCgpKSB7CisJCXNucHJpbnRmKGR1bXBfc3VmZml4 LCBzaXplb2YoZHVtcF9zdWZmaXgpLCAiY2FwdHVyZS0lZGNoLSVkIiwKKwkJCSBwbGF5YmFja19j aGFubmVscywgcGxheWJhY2tfcmF0ZSk7CisKKwkJZHVtcF9mZCA9IGF1ZGlvX2NyZWF0ZV93YXZf ZmlsZV9zMzJfbGUoZHVtcF9zdWZmaXgsCisJCQkJCQkgICAgICAgY2FwdHVyZV9yYXRlLAorCQkJ CQkJICAgICAgIGNhcHR1cmVfY2hhbm5lbHMsCisJCQkJCQkgICAgICAgJmR1bXBfcGF0aCk7CisJ CWlndF9hc3NlcnQoZHVtcF9mZCA+PSAwKTsKKwl9CisKKwlzaWduYWwgPSBhdWRpb19zaWduYWxf aW5pdChwbGF5YmFja19jaGFubmVscywgcGxheWJhY2tfcmF0ZSk7CisJaWd0X2Fzc2VydChzaWdu YWwpOworCisJZm9yIChpID0gMDsgaSA8IHRlc3RfZnJlcXVlbmNpZXNfY291bnQ7IGkrKykKKwkJ YXVkaW9fc2lnbmFsX2FkZF9mcmVxdWVuY3koc2lnbmFsLCB0ZXN0X2ZyZXF1ZW5jaWVzW2ldKTsK KwlhdWRpb19zaWduYWxfc3ludGhlc2l6ZShzaWduYWwpOworCisJYWxzYV9yZWdpc3Rlcl9vdXRw dXRfY2FsbGJhY2soYWxzYSwgb3V0cHV0X2NhbGxiYWNrLCBzaWduYWwsCisJCQkJICAgICAgUExB WUJBQ0tfU0FNUExFUyk7CisKKwkvKiBUT0RPOiBkZXRlY3Qgc2lnbmFsIGluIHJlYWwtdGltZSAq LworCXJldCA9IGFsc2FfcnVuKGFsc2EsIEFVRElPX0RVUkFUSU9OKTsKKwlpZ3RfYXNzZXJ0KHJl dCA9PSAwKTsKKworCWFsc2FfY2xvc2Vfb3V0cHV0KGFsc2EpOworCisJLyogTmVlZHMgdG8gYmUg YSBtdWx0aXBsZSBvZiAxMjgsIGJlY2F1c2UgdGhhdCdzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcwor CSAqIHdlIGdldCBwZXIgY2hhbm5lbCBlYWNoIHRpbWUgd2UgcmVjZWl2ZSBhbiBhdWRpbyBwYWdl IGZyb20gdGhlCisJICogQ2hhbWVsaXVtIGRldmljZS4gKi8KKwljaGFubmVsX2xlbiA9IENBUFRV UkVfU0FNUExFUzsKKwljaGFubmVsID0gbWFsbG9jKHNpemVvZihkb3VibGUpICogY2hhbm5lbF9s ZW4pOworCQorCWJ1Zl9jYXAgPSBjYXB0dXJlX2NoYW5uZWxzICogY2hhbm5lbF9sZW47CisJYnVm ID0gbWFsbG9jKHNpemVvZihpbnQzMl90KSAqIGJ1Zl9jYXApOworCWJ1Zl9sZW4gPSAwOworCisJ cmVjdiA9IE5VTEw7CisJcmVjdl9sZW4gPSAwOworCisJc3RyZWFrID0gMDsKKwltc2VjID0gMDsK KwlpID0gMDsKKwl3aGlsZSAoc3RyZWFrIDwgTUlOX1NUUkVBSyAmJiBtc2VjIDwgQVVESU9fRFVS QVRJT04pIHsKKwkJb2sgPSBjaGFtZWxpdW1fc3RyZWFtX3JlY2VpdmVfcmVhbHRpbWVfYXVkaW8o c3RyZWFtLAorCQkJCQkJCSAgICAgJnBhZ2VfY291bnQsCisJCQkJCQkJICAgICAmcmVjdiwgJnJl Y3ZfbGVuKTsKKwkJaWd0X2Fzc2VydChvayk7CisKKwkJbWVtY3B5KCZidWZbYnVmX2xlbl0sIHJl Y3YsIHJlY3ZfbGVuICogc2l6ZW9mKGludDMyX3QpKTsKKwkJYnVmX2xlbiArPSByZWN2X2xlbjsK KworCQlpZiAoYnVmX2xlbiA8IGJ1Zl9jYXApCisJCQljb250aW51ZTsKKwkJaWd0X2Fzc2VydChi dWZfbGVuID09IGJ1Zl9jYXApOworCQkKKwkJaWYgKGR1bXBfZmQgPj0gMCkgeworCQkJYnVmX3Np emUgPSBidWZfbGVuICogc2l6ZW9mKGludDMyX3QpOworCQkJaWd0X2Fzc2VydCh3cml0ZShkdW1w X2ZkLCBidWYsIGJ1Zl9zaXplKSA9PSBidWZfc2l6ZSk7CisJCX0KKworCQkvKiBUT0RPOiBjaGVj ayBvdGhlciBjaGFubmVscyB0b28sIG5vdCBqdXN0IHRoZSBmaXJzdCBvbmUgKi8KKwkJYXVkaW9f ZXh0cmFjdF9jaGFubmVsX3MzMl9sZShjaGFubmVsLCBjaGFubmVsX2xlbiwgYnVmLCBidWZfbGVu LAorCQkJCQkgICAgIGNhcHR1cmVfY2hhbm5lbHMsIDApOworCisJCW1zZWMgPSBpICogY2hhbm5l bF9sZW4gLyAoZG91YmxlKSBjYXB0dXJlX3JhdGUgKiAxMDAwOworCQlpZ3RfZGVidWcoIkRldGVj dGluZyBhdWRpbyBzaWduYWwsIHQ9JWQgbXNlY1xuIiwgbXNlYyk7CisKKwkJaWYgKGF1ZGlvX3Np Z25hbF9kZXRlY3Qoc2lnbmFsLCBjYXB0dXJlX3JhdGUsIGNoYW5uZWwsCisJCQkJCWNoYW5uZWxf bGVuKSkKKwkJCXN0cmVhaysrOworCQllbHNlCisJCQlzdHJlYWsgPSAwOworCisJCWJ1Zl9sZW4g PSAwOworCQlpKys7CisJfQorCisJaWYgKGR1bXBfZmQgPj0gMCkgeworCQljbG9zZShkdW1wX2Zk KTsKKwkJaWYgKHN0cmVhayA9PSBNSU5fU1RSRUFLKSB7CisJCQkvKiBUZXN0IHN1Y2NlZWRlZCwg bm8gbmVlZCB0byBrZWVwIHRoZSBjYXB0dXJlZCBkYXRhICovCisJCQl1bmxpbmsoZHVtcF9wYXRo KTsKKwkJfSBlbHNlCisJCQlpZ3RfZGVidWcoIlNhdmVkIGNhcHR1cmVkIGF1ZGlvIGRhdGEgdG8g JXNcbiIsIGR1bXBfcGF0aCk7CisJCWZyZWUoZHVtcF9wYXRoKTsKKwl9CisKKwlmcmVlKHJlY3Yp OworCWZyZWUoYnVmKTsKKwlmcmVlKGNoYW5uZWwpOworCisJb2sgPSBjaGFtZWxpdW1fc3RyZWFt X3N0b3BfcmVhbHRpbWVfYXVkaW8oc3RyZWFtKTsKKwlpZ3RfYXNzZXJ0KG9rKTsKKworCWF1ZGlv X2ZpbGUgPSBjaGFtZWxpdW1fc3RvcF9jYXB0dXJpbmdfYXVkaW8oZGF0YS0+Y2hhbWVsaXVtLAor CQkJCQkJICAgIHBvcnQpOworCWlmIChhdWRpb19maWxlKSB7CisJCWlndF9kZWJ1ZygiQXVkaW8g ZmlsZSBzYXZlZCBvbiB0aGUgQ2hhbWVsaXVtIGluICVzXG4iLAorCQkJICBhdWRpb19maWxlLT5w YXRoKTsKKwkJY2hhbWVsaXVtX2Rlc3Ryb3lfYXVkaW9fZmlsZShhdWRpb19maWxlKTsKKwl9CisK KwlhdWRpb19zaWduYWxfY2xlYW4oc2lnbmFsKTsKKwlmcmVlKHNpZ25hbCk7CisKKwljaGFtZWxp dW1fc3RyZWFtX2RlaW5pdChzdHJlYW0pOworCisJaWd0X2Fzc2VydChzdHJlYWsgPT0gTUlOX1NU UkVBSyk7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X2Rpc3BsYXlfYXVk aW8oZGF0YV90ICpkYXRhLCBzdHJ1Y3QgY2hhbWVsaXVtX3BvcnQgKnBvcnQsCisJCSAgIGNvbnN0 IGNoYXIgKmF1ZGlvX2RldmljZSkKK3sKKwlib29sIHJ1biA9IGZhbHNlOworCXN0cnVjdCBhbHNh ICphbHNhOworCWludCByZXQ7CisJaWd0X291dHB1dF90ICpvdXRwdXQ7CisJaWd0X3BsYW5lX3Qg KnByaW1hcnk7CisJc3RydWN0IGlndF9mYiBmYjsKKwlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7CisJ ZHJtTW9kZUNvbm5lY3RvciAqY29ubmVjdG9yOworCWludCBmYl9pZCwgaTsKKwlzdHJ1Y3QgY2hh bWVsaXVtX3N0cmVhbSAqc3RyZWFtOworCisJYWxzYSA9IGFsc2FfaW5pdCgpOworCWlndF9hc3Nl cnQoYWxzYSk7CisKKwlyZXNldF9zdGF0ZShkYXRhLCBwb3J0KTsKKworCS8qIFVzZSB0aGUgZGVm YXVsdCBDaGFtZWxpdW0gRURJRCBmb3IgdGhpcyB0ZXN0LCBhcyB0aGUgYmFzZSBJR1QgRURJRAor CSAqIGRvZXNuJ3QgYWR2ZXJ0aXNlIGF1ZGlvIHN1cHBvcnQgKHNlZSBkcm1fZGV0ZWN0X21vbml0 b3JfYXVkaW8gaW4KKwkgKiB0aGUga2VybmVsIHRyZWUpLiAqLworCW91dHB1dCA9IHByZXBhcmVf b3V0cHV0KGRhdGEsIHBvcnQsIGZhbHNlKTsKKwljb25uZWN0b3IgPSBjaGFtZWxpdW1fcG9ydF9n ZXRfY29ubmVjdG9yKGRhdGEtPmNoYW1lbGl1bSwgcG9ydCwgZmFsc2UpOworCXByaW1hcnkgPSBp Z3Rfb3V0cHV0X2dldF9wbGFuZV90eXBlKG91dHB1dCwgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7 CisJaWd0X2Fzc2VydChwcmltYXJ5KTsKKworCWlndF9hc3NlcnQoY29ubmVjdG9yLT5jb3VudF9t b2RlcyA+IDApOworCW1vZGUgPSAmY29ubmVjdG9yLT5tb2Rlc1swXTsKKworCWZiX2lkID0gaWd0 X2NyZWF0ZV9jb2xvcl9wYXR0ZXJuX2ZiKGRhdGEtPmRybV9mZCwKKwkJCQkJICAgIG1vZGUtPmhk aXNwbGF5LCBtb2RlLT52ZGlzcGxheSwKKwkJCQkJICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsCisJ CQkJCSAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAorCQkJCQkgICAgMCwgMCwgMCwgJmZi KTsKKwlpZ3RfYXNzZXJ0KGZiX2lkID4gMCk7CisKKwkvKiBFbmFibGUgdGhlIG91dHB1dCBiZWNh dXNlIHRoZSByZWNlaXZlciB3b24ndCB0cnkgdG8gcmVjZWl2ZSBhdWRpbyBpZgorCSAqIGl0IGRv ZXNuJ3QgcmVjZWl2ZSB2aWRlby4gKi8KKwllbmFibGVfb3V0cHV0KGRhdGEsIHBvcnQsIG91dHB1 dCwgbW9kZSwgJmZiKTsKKworCXN0cmVhbSA9IGNoYW1lbGl1bV9zdHJlYW1faW5pdCgpOworCWln dF9hc3NlcnQoc3RyZWFtKTsKKworCWZvciAoaSA9IDA7IGkgPCBzYW1wbGluZ19yYXRlc19jb3Vu dDsgaSsrKSB7CisJCXJldCA9IGFsc2Ffb3Blbl9vdXRwdXQoYWxzYSwgYXVkaW9fZGV2aWNlKTsK KwkJaWd0X2Fzc2VydChyZXQgPj0gMCk7CisKKwkJLyogVE9ETzogcGxheWJhY2sgb24gYWxsIDgg YXZhaWxhYmxlIGNoYW5uZWxzICovCisJCXJ1biB8PSBkb190ZXN0X2Rpc3BsYXlfYXVkaW8oZGF0 YSwgcG9ydCwgYWxzYSwKKwkJCQkJICAgICBQTEFZQkFDS19DSEFOTkVMUywKKwkJCQkJICAgICBz YW1wbGluZ19yYXRlc1tpXSk7CisKKwkJYWxzYV9jbG9zZV9vdXRwdXQoYWxzYSk7CisJfQorCisJ LyogTWFrZSBzdXJlIHdlIHRlc3RlZCBhdCBsZWFzdCBvbmUgZnJlcXVlbmN5LiAqLworCWlndF9h c3NlcnQocnVuKTsKKworCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmZmIpOworCisJZHJt TW9kZUZyZWVDb25uZWN0b3IoY29ubmVjdG9yKTsKKworCWNoYW1lbGl1bV9zdHJlYW1fZGVpbml0 KHN0cmVhbSk7CisKKwlmcmVlKGFsc2EpOworfQorCisKIHN0YXRpYyB2b2lkIHNlbGVjdF90aWxl ZF9tb2RpZmllcihpZ3RfcGxhbmVfdCAqcGxhbmUsIHVpbnQzMl90IHdpZHRoLAogCQkJCSAgdWlu dDMyX3QgaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQsCiAJCQkJICB1aW50NjRfdCAqbW9kaWZpZXIp CkBAIC0xMDM3LDcgKzEzMDIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X2Rpc3BsYXlfcGxhbmVzX3Jh bmRvbShkYXRhX3QgKmRhdGEsCiAJcmVzZXRfc3RhdGUoZGF0YSwgcG9ydCk7CiAKIAkvKiBGaW5k IHRoZSBjb25uZWN0b3IgYW5kIHBpcGUuICovCi0Jb3V0cHV0ID0gcHJlcGFyZV9vdXRwdXQoZGF0 YSwgcG9ydCk7CisJb3V0cHV0ID0gcHJlcGFyZV9vdXRwdXQoZGF0YSwgcG9ydCwgdHJ1ZSk7CiAK IAltb2RlID0gaWd0X291dHB1dF9nZXRfbW9kZShvdXRwdXQpOwogCkBAIC0xMzA4LDYgKzE1NzMs OSBAQCBpZ3RfbWFpbgogCiAJCWNvbm5lY3Rvcl9zdWJ0ZXN0KCJkcC1mcmFtZS1kdW1wIiwgRGlz cGxheVBvcnQpCiAJCQl0ZXN0X2Rpc3BsYXlfZnJhbWVfZHVtcCgmZGF0YSwgcG9ydCk7CisKKwkJ Y29ubmVjdG9yX3N1YnRlc3QoImRwLWF1ZGlvIiwgRGlzcGxheVBvcnQpCisJCQl0ZXN0X2Rpc3Bs YXlfYXVkaW8oJmRhdGEsIHBvcnQsICJIRE1JIik7CiAJfQogCiAJaWd0X3N1YnRlc3RfZ3JvdXAg ewpkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0cy9tZXNvbi5idWlsZAppbmRl eCA1MTY3YTZjYy4uMTU4YWQzOTUgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21lc29uLmJ1aWxkCisrKyBi L3Rlc3RzL21lc29uLmJ1aWxkCkBAIC0yNDUsMTMgKzI0NSw2IEBAIGlmIF9idWlsZF9jaGFtZWxp dW0gYW5kIGNoYW1lbGl1bS5mb3VuZCgpCiAJdGVzdF9kZXBzICs9IGNoYW1lbGl1bQogZW5kaWYK IAotaWYgX2J1aWxkX2F1ZGlvIGFuZCBhbHNhLmZvdW5kKCkgYW5kIGdzbC5mb3VuZCgpCi0JdGVz dF9wcm9ncyArPSBbCi0JCSdhdWRpbycsCi0JXQotCXRlc3RfZGVwcyArPSBhbHNhCi1lbmRpZgot CiB0ZXN0X2V4ZWN1dGFibGVzID0gW10KIHRlc3RfbGlzdCA9IFtdCiAKLS0gCjIuMjEuMAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWls aW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2